Страница 163 из 304
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт янв 31, 2013 20:15:04
_Vasilij_
глюков нету
смотрим эту строчку
Код: Выделить всё
Fpch1 = Frcvwork + Rcvpch1 'Частота = частота + промежуточная
теперь смотрим
long в word не лезет по определению - места малова-то
я бы предложил еще одну промежуточную переменную Long ввести и в ней производить операции, а потом уже после всех арифметических действий, присваивать Fpch1 значние этой промежуточной, когда она уже действительно соответствует размеру Word (т.е. до 65536).
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 03:37:04
осторожно! леоныч!!!
Да уж

Действительно взрыв мозга

Ладно попробую конечно еще что нибудь прикрутить в прогу

Правда пока не придумал что и как

Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 12:15:52
_Vasilij_
осторожно! леоныч!!! писал(а):Действительно взрыв мозга
ничего сложного, просто нужно понимать, что такое Byte, Word, Long, Integer - в родном хэлпе есть всё это. В начале программы объявляют переменные как Byte или Word - и под них в памяти устройства отводится место, фиксированное количество памяти, Байт это FF (255), ворд уже займет в два раза больше FFFF (65535) и так далее, т.е. определенное количество ячеек и больше не влезет - старшие байты просто потеряются.
в твоем случае вводим доп.переменную Temp и над ней проводим вычисления
Код: Выделить всё
dim Temp as Long
.........
Temp = Frcvwork + Rcvpch1 'Частота = частота + промежуточная
Temp = Temp / 50 'Сумма частоты и промежуточной деленная на 50
Fpch1 = Temp
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 12:50:10
осторожно! леоныч!!!
Спасибо но я уже сам разобрался) Теперь над другой бедой бьюсь. Вывод на дисплей значения не проблема, но вот когда надо воткнуть запятую, это ппц... Не знаю пока что делать... Думаю...
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 12:58:02
_Vasilij_
осторожно! леоныч!!! писал(а):но вот когда надо воткнуть запятую, это ппц...
а так не ?
Где Var1 и Var2 переменные соответственно до и после запятой
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 13:06:29
осторожно! леоныч!!!
Неее... Проблема в том что переменная одна... К примеру в ней число 433000. Надо вывести его на дисплей так 433 запятая или точка и 000.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 13:12:19
_Vasilij_
осторожно! леоныч!!! писал(а):Неее... Проблема в том что переменная одна... К примеру в ней число 433000. Надо вывести его на дисплей так 433 запятая или точка и 000.
я не знаю как конкретно называются переменные, но допустим
temp = 433573
Var1 = temp/1000 ' всё после запятой откинется само .т.е будет 433
Temp2 = var1 *1000 ' какая-то очередная промежуточная переменная - возвращаем обратно, будет 433000
var2 = temp-temp2 ' вторая переменная после запятой
ps сейчас подумал и кажется вторую часть придется поразрядно выводить, как для семисгментника, иначе для 433005 будет скорей всего выводиться 433.5 а для 433500 - 433.500
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 13:23:39
осторожно! леоныч!!!
Надо попробовать. Таких вариантов я не видел. Главное чтоб переменная не поделилась иначе у меня проблемы с ней будут. Переменная эта у меня Long.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 14:13:09
осторожно! леоныч!!!
Да! Получилось. Но с последними разрядами веселость.
Пример 107.700 норм
Если у нас 107.000 то на экране 107.0
Если у нас 107.050 то на экране 107.50
Будем думать...
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 14:57:17
_Vasilij_
осторожно! леоныч!!! писал(а):Будем думать...
с семисегментниками когда-нибудь работал ? тут как вариант то же самое. Берем var2 (то что после запятой) и раскладываем на 3 цифры.
Допустим Var2 = 743. Нам нужно получить как 3 цифры 7,4 и 3. Дадим этим цифрам имена dig1, dig2 и dig3.
Код: Выделить всё
Dim dig1 as byte, dig2 as byte, dig3 as byte
а дальше раскидываем на цифери
dig1 = var2 / 100 ' т.е. 743/100 даст 7
dig2 = var2 mod 100 ' это остаток от деления на 100, т.е. 43 промежуточный этап исчесления
dig2 = dig2/10 ' это оконечная 4 , т.е. 43/10 , после запятой само откинется
dig3 = var2 mod 10 ' остаток от 743/10 будет искомая 3
'теперь вывод на дисплей выглядеть так будет
LCD var1; ","; dig1; dig2; dig3
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 15:16:52
осторожно! леоныч!!!
Все бы хорошо но у меня видимо остаток мешается. Ерунда отображается. Вначале вместо 107700 у меня 107188... Дальше до 000 полный бред, потом до 250 все норм и снова бред... Я совсем запутался...
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 15:23:12
_Vasilij_
давай снова код, а именно куски где объявляется тип переменных и кусок с действиями над ними.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 15:30:06
осторожно! леоныч!!!
Dim Var1 As Long 'Переменные для отображения с запятой
Dim Var2 As Long '
Dim Temp2 As Long
Var1 = Frcvwork / 1000 ' всё после запятой откинется само .т.е будет 433
Temp2 = Var1 * 1000 ' какая-то очередная промежуточная переменная - возвращаем обратно, будет 433000
Var2 = Frcvwork - Temp2 ' вторая переменная после запятой
Dig1 = Var2 / 100 ' т.е. 743/100 даст 7
Dig2 = Var2 Mod 100 ' это остаток от деления на 100, т.е. 43 промежуточный этап исчесления
Dig2 = Dig2 / 10 ' это оконечная 4 , т.е. 43/10 , после запятой само откинется
Dig3 = Var2 Mod 10 ' остаток от 743/10 будет искомая 3
Locate 2 , 1 'теперь вывод на дисплей выглядеть так будет
Lcd Var1 ; "," ; Dig1 ; Dig2 ; Dig3
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 15:35:02
_Vasilij_
не вижу как объявлены Dig1-3/ должны быть Byte
И еще место всетаки стоит экономить, не надо переменным Var1 и 2 столько места выделять, они всеравно меньше тысячи, им хватит Word
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 15:37:03
осторожно! леоныч!!!
Dim Dig1 As Byte , Dig2 As Byte , Dig3 As Byte как раз есть. Забыл про них. Извиняюсь.
Переменные war1 , 2 поправлю)))
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 15:55:52
_Vasilij_
осторожно! леоныч!!! писал(а):Dim Dig1 As Byte , Dig2 As Byte , Dig3 As Byte как раз есть. Забыл про них. Извиняюсь.
извините, обшибся -
var1 as long,
var2 as word и все dig тоже как word
попробуйте
а чтобы понять чего это было, то ошибка
dig1 = var2/100 - потому что dig1 это была переменная типа byte, а var2 было long - всетаки величины при делении должны быть соразмерными, т.е. как минимум одного класса, странно что при вычитании до этого прокатила "разноклассовость".
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 16:02:04
осторожно! леоныч!!!
Нет. Бесполезно. Блин такая мелочь а столько с ней проблем. Ппц......
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 16:06:58
_Vasilij_
осторожно! леоныч!!! писал(а):Нет. Бесполезно. Блин такая мелочь а столько с ней проблем. Ппц......
все тогда Long попробуйте
хотя так вроде работает в проеусе
Код: Выделить всё
Dim Frcvwork As Long
Dim Var1 As Long
Dim Var2 As Word '
Dim Temp2 As Long
Dim Dig1 As Word , Dig2 As Word , Dig3 As Word
.............
Var1 = Frcvwork / 1000
Temp2 = Var1 * 1000 '
Var2 = Frcvwork - Temp2
Dig1 = Var2 / 100
Dig2 = Var2 Mod 100
Dig2 = Dig2 / 10
Dig3 = Var2 Mod 10
Locate 2 , 1
Lcd Var1 ; "," ; Var2 ; " " ; Dig1 ; Dig2 ; Dig3 ; " "
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 16:12:33
Moto_v3x
осторожно! леоныч!!!
а через формат не пробовали:
Код: Выделить всё
S = "12345"
S = Format(s , "000.000")
Print S
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 01, 2013 16:50:44
_Vasilij_
Moto_v3x писал(а):осторожно! леоныч!!!
а через формат не пробовали:
воо, точно, для LCD самое оно
только немножко подправлю
Код: Выделить всё
Dim Strochka As String * 7 'переменная строчка из 7-ми символов
......
Strochka = str (Frcvwork) ' это команда перевода числа в строчное значение
Strochka = Format(stroch , "000.000") ' а это уже форматируем наше строчное выражение
Locate 2 , 1 'ну и наконец выводим его на экран
Lcd Strochka