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

Обсуждаем контроллеры компании Atmel.
Ответить
Держит паяльник хвостом
Аватара пользователя
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры

Сообщение mr4ester »

все же вопрос по поводу регистрации максимальных и минимальных температур остается открытым, как положить в строковую переменную число? может это поможет?
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

После того как отработали If Prin = 1 Then, сбрасывайте этот флаг. Иначе так и будете пулять без перерыва.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры

Сообщение mr4ester »

как раз проверил и это произошло как вы сказали, уже исправил :))
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Контактная информация:
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Вот тоже решил что надо в спальне отображать температуру мин и макс. Взялся за это дело, посмотрю и тут делают!
сделал вот так -

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

Dim Byte0 As Byte
Dim Byte1 As Byte
Dim Sign As String * 1
Dim T As Byte
Dim T1 As Byte
Dim T2 As Byte
Dim Count As Word
Dim Tmax As Byte
Dim Tmin As Byte
Erled = 0
Tmin = 99
Cursor Off
Cls

Do
Locate 1 , 1
Lcd "temp " ; Sign ; T1
Locate 2 , 1
Lcd "min " ; Tmin
Locate 2 , 8
Lcd "max " ; Tmax
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
Erled = 1
1wreset
1wwrite &HCC
1wwrite &HBE
Erled = 0
Byte0 = 1wread()
Byte1 = 1wread()
If Byte1 >= 248 Then
Byte0 = &HFF - Byte0
Byte1 = &HFF - Byte1
Sign = "-"
Else
Sign = "+"
End If
T1 = Byte0 / 16
T2 = Byte1 * 16
T1 = T1 + T2
If T1 > Tmax Then
Tmax = T1
End If
If T1 < Tmin Then
Tmin = T1
End If
Loop
End
это так, чтобы отладить, а потом буду лепить к коду часов.
Все думал как это сделать, и решил поставить минимальную температуру 100 и максимальную 0 и по мере измерений убавлять до нужного минимальную и прибавлять максимальную.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

vanyap1:

1. Предположим что температура была +1. Затем она упала и стала равна 0. При этом условие If T1 < Tmin выполнится (так как 0 действительно меньше 1), и будет зафиксирована минимальная температура 0 градусов. Температура продолжает падать и становится равна -1. Проверяем условие If T1 < Tmin. 1 < 0 ? Нет конечно. А просто 1 потому как переменная-то беззнаковая. Значит так и оставим минимальную 0 градусов. И так же будет и при -2 и при -3... Меньше 0 ну никак не получится зафиксировать. :)

2. Температура была +10 градусов. А потом стала +9. А так как дисплей не очищался, то от прежнего значения останется ноль. И будет на индикаторе +90.

3. Вы забыли в максимальных и минимальных значениях про знак температуры.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Реклама
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Да, все понятно, ... но у меня в спальне не бывает минусовой температуры, затем и не пудрил себе моск этим. И второе - 90 не будет ибо заполнил пространство после знака пробелами, т.е. если 10 то так и будет 10, а если 9 то место ноля запишется пробел. Значит все нормально!

Вот проблема новая:
Решил ознакомится с rc5, так вот ничего не работает!

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

Dim Address As Long
Dim Command As Long


Config Pind.3 = Input
Config Rc5 = Pind.3
Enable Interrupts 

Do
Set Erled
Getrc5(address , Command)
Locate 1 , 1
Lcd Address
Locate 2 , 1
Lcd Command
Reset Erled
Waitms 150
Loop


Что я мог упустить!

Порт сконфигурирован на ввод, и подключен ИК приемник!
Но вот что заметил, если нажать кнопку на пульте, то светодиод на макетке начинаем медленнее мигать, но адрес на ЖКИ не выводит, в чем может быть трабл?
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

vanyap1 писал(а):И второе - 90 не будет
В том коде который Вы предоставили, запросто будет и +90 и +80 и даже +70. :wink:
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Ага, в новом уже исправил, тут просто забыл поменять!

Вот с пультом проблема, возможно из за отсутствия кварца неправильно считает импульсы с ИК приемника? Потому и отображает команду и адрес постоянно 255?
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

А пульт точно RC5?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Уверен, ибо делал контроллер rgb светодиода с управлением пультом, так этот пульт работал.
МК реагирует на пульт, ибо светодиод замедляет мигание когда нажата кнопка! Светодиод в программе настроен включатся только во время считывания команды и отключаться.
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

Куда Вам такие огромные переменные-то? Адрес занимает 5 бит а команда - 6. Вполне достаточно и типа Byte. Это весь код? Вообще с RC5 проблем небыло никогда. Если все верно подключено и подтянуто то работает стабильно.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Поменял приемник, 2 раза засветило адрес и команду и больше не хочет. Что то не так в коде, потому как в другом устройстве все подключено точно так же и работает.
Отключил внутренний генератор МК и поставил кварц на 12 мгц, припаял конденсатор у приемника.
Переменные мне показались странными, он мне отображает оба числа - 255, т.е. максимальное значение переменной типа байт, от и поставил побольше и что странно - те же 255.

Если я правильно понял, то пуль посылает команду, у МК срабатывает прерывание по которому принятая команда записывается в переменную и ожидает там чтения программой.

Программа по коду -

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

Getrc5(address , Command)  
читает эти данные и НЕ СБРАСЫВАЕТ? Или сбрасывает?
потом выводит на дисплей!

Все как бы понятно, но почему оно не работает? Может задержку из кода убрать к че.. ой бабушке!
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры

Сообщение mr4ester »

вопрос остался открытым, помогите как положить в переменную типа String число?
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Контактная информация:
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Них...ра не работает пульт, все остальное - прерывания, таймеры, порт 232 ... все работает а пульт нет!
Все время 255...
Гдето чтото опустил! А что????

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

Config Pind.3 = Input
Config Rc5 = Pind.3
Config Int0 = Falling
On Int0 Encod
Enable Interrupts
Enable Int0
Cursor Off
Cls

...........
..............

5:
Cls
Do
Getrc5(address , Command)
Locate 1 , 1
Lcd Address ; "     "
Locate 2 , 1
Lcd Command ; "     "
If W = 5 Then
Else
Goto 0
End If
Loop
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры

Сообщение mr4ester »

просто ради интереса открыл хелп там написано что этот протокол работает с таймером у вас я этого не увидел, может в этом собака зарыта?

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

'The GETRC5 function uses TIMER0 and the TIMER0 interrupt.
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

С таймером, да. Это просто значит что его нельзя использовать в своих корыстных целях, но специально настраивать его не нужно.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры

Сообщение mr4ester »

возможно, я не вникал просто нелп открыл в хэлпе его настраивали вот и сказал.

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

'This example shows how to decode RC5 remote control signals
'with a SFH506-35 IR receiver.

'Connect to input to PIND.2 for this example
'The GETRC5 function uses TIMER0 and the TIMER0 interrupt.
'The TIMER0 settings are restored however so only the interrupt can not
'be used anymore for other tasks


'tell the compiler which pin we want to use for the receiver input

Config Rc5 = Pind.2 , Wait = 2000
Config Timer1 = Timer , Prescale = 1

'the interrupt routine is inserted automatic but we need to make it occur
'so enable the interrupts
Enable Interrupts

'reserve space for variables
Dim Address As Byte , Command As Byte
Print "Waiting for RC5..."
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры

Сообщение mr4ester »

как можно вывести в терминал знак градуса? как его нарисовать?
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Контактная информация:
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Все у меня как у хелпе.... кроме, нет резистора у входа на приемник и подтяжки 10 кОм на плюс питания. Но там же написано - "Опционально", уже сегодня не буду паять, завтра попробую.
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры

Сообщение mr4ester »

разобрался я таки со строковыми переменными если кому интересно то для того чтоб положить число в строковую переменную его нужно взять в кавычки пример ниже

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

Dim Dm As String * 3
Dm = "150"
Tmin1 = Dm
Tmin2 = Dm
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Контактная информация:
Ответить

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