BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Re: BASCOM AVR в вопросах и ответах

Сообщение _Vasilij_ »

глюков нету
смотрим эту строчку

Код: Выделить всё

Fpch1 = Frcvwork + Rcvpch1 'Частота = частота + промежуточная


теперь смотрим

Код: Выделить всё

Dim Fpch1 As Word
Dim Frcvwork As Long


long в word не лезет по определению - места малова-то

я бы предложил еще одну промежуточную переменную Long ввести и в ней производить операции, а потом уже после всех арифметических действий, присваивать Fpch1 значние этой промежуточной, когда она уже действительно соответствует размеру Word (т.е. до 65536).
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

Re: BASCOM AVR в вопросах и ответах

Сообщение осторожно! леоныч!!! »

Да уж :) Действительно взрыв мозга :)) Ладно попробую конечно еще что нибудь прикрутить в прогу :write: Правда пока не придумал что и как :dont_know:
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Re: BASCOM AVR в вопросах и ответах

Сообщение _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
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

Re: BASCOM AVR в вопросах и ответах

Сообщение осторожно! леоныч!!! »

Спасибо но я уже сам разобрался) Теперь над другой бедой бьюсь. Вывод на дисплей значения не проблема, но вот когда надо воткнуть запятую, это ппц... Не знаю пока что делать... Думаю...
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Re: BASCOM AVR в вопросах и ответах

Сообщение _Vasilij_ »

осторожно! леоныч!!! писал(а):но вот когда надо воткнуть запятую, это ппц...
а так не ?

Код: Выделить всё

Lcd Var1; ","; var2;"    "

Где Var1 и Var2 переменные соответственно до и после запятой
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

Re: BASCOM AVR в вопросах и ответах

Сообщение осторожно! леоныч!!! »

Неее... Проблема в том что переменная одна... К примеру в ней число 433000. Надо вывести его на дисплей так 433 запятая или точка и 000.
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Re: BASCOM AVR в вопросах и ответах

Сообщение _Vasilij_ »

осторожно! леоныч!!! писал(а):Неее... Проблема в том что переменная одна... К примеру в ней число 433000. Надо вывести его на дисплей так 433 запятая или точка и 000.

я не знаю как конкретно называются переменные, но допустим
temp = 433573
Var1 = temp/1000 ' всё после запятой откинется само .т.е будет 433
Temp2 = var1 *1000 ' какая-то очередная промежуточная переменная - возвращаем обратно, будет 433000
var2 = temp-temp2 ' вторая переменная после запятой


ps сейчас подумал и кажется вторую часть придется поразрядно выводить, как для семисгментника, иначе для 433005 будет скорей всего выводиться 433.5 а для 433500 - 433.500
Последний раз редактировалось _Vasilij_ Пт фев 01, 2013 13:25:33, всего редактировалось 1 раз.
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

Re: BASCOM AVR в вопросах и ответах

Сообщение осторожно! леоныч!!! »

Надо попробовать. Таких вариантов я не видел. Главное чтоб переменная не поделилась иначе у меня проблемы с ней будут. Переменная эта у меня Long.
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

Re: BASCOM AVR в вопросах и ответах

Сообщение осторожно! леоныч!!! »

Да! Получилось. Но с последними разрядами веселость.

Пример 107.700 норм
Если у нас 107.000 то на экране 107.0
Если у нас 107.050 то на экране 107.50

Будем думать...
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Re: BASCOM AVR в вопросах и ответах

Сообщение _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
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

Re: BASCOM AVR в вопросах и ответах

Сообщение осторожно! леоныч!!! »

Все бы хорошо но у меня видимо остаток мешается. Ерунда отображается. Вначале вместо 107700 у меня 107188... Дальше до 000 полный бред, потом до 250 все норм и снова бред... Я совсем запутался...
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Re: BASCOM AVR в вопросах и ответах

Сообщение _Vasilij_ »

давай снова код, а именно куски где объявляется тип переменных и кусок с действиями над ними.
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

Re: BASCOM AVR в вопросах и ответах

Сообщение осторожно! леоныч!!! »

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
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Re: BASCOM AVR в вопросах и ответах

Сообщение _Vasilij_ »

не вижу как объявлены Dig1-3/ должны быть Byte
И еще место всетаки стоит экономить, не надо переменным Var1 и 2 столько места выделять, они всеравно меньше тысячи, им хватит Word
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

Re: BASCOM AVR в вопросах и ответах

Сообщение осторожно! леоныч!!! »

Dim Dig1 As Byte , Dig2 As Byte , Dig3 As Byte как раз есть. Забыл про них. Извиняюсь.
Переменные war1 , 2 поправлю)))
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Re: BASCOM AVR в вопросах и ответах

Сообщение _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 - всетаки величины при делении должны быть соразмерными, т.е. как минимум одного класса, странно что при вычитании до этого прокатила "разноклассовость".
Последний раз редактировалось _Vasilij_ Пт фев 01, 2013 16:03:14, всего редактировалось 1 раз.
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

Re: BASCOM AVR в вопросах и ответах

Сообщение осторожно! леоныч!!! »

Нет. Бесполезно. Блин такая мелочь а столько с ней проблем. Ппц......
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Re: BASCOM AVR в вопросах и ответах

Сообщение _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 ; "   "
Последний раз редактировалось _Vasilij_ Пт фев 01, 2013 16:13:40, всего редактировалось 1 раз.
Аватара пользователя
Moto_v3x
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

Re: BASCOM AVR в вопросах и ответах

Сообщение Moto_v3x »

осторожно! леоныч!!!
а через формат не пробовали:

Код: Выделить всё

S = "12345"
S = Format(s , "000.000")
Print S
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Re: BASCOM AVR в вопросах и ответах

Сообщение _Vasilij_ »

Moto_v3x писал(а):осторожно! леоныч!!!
а через формат не пробовали:

воо, точно, для LCD самое оно
только немножко подправлю

Код: Выделить всё

Dim Strochka As String * 7       'переменная строчка из 7-ми символов
..........................................
Strochka = str (Frcvwork)  ' это команда перевода числа в строчное значение
Strochka = Format(stroch , "000.000")  ' а это уже форматируем наше строчное выражение
Locate 2 , 1 'ну и наконец выводим его на экран
Lcd Strochka
Ответить

Вернуться в «AVR»