BASCOM AVR в вопросах и ответах
все же вопрос по поводу регистрации максимальных и минимальных температур остается открытым, как положить в строковую переменную число? может это поможет?
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
- Реклама
После того как отработали If Prin = 1 Then, сбрасывайте этот флаг. Иначе так и будете пулять без перерыва.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
как раз проверил и это произошло как вы сказали, уже исправил 
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Вот тоже решил что надо в спальне отображать температуру мин и макс. Взялся за это дело, посмотрю и тут делают!
сделал вот так -
это так, чтобы отладить, а потом буду лепить к коду часов.
Все думал как это сделать, и решил поставить минимальную температуру 100 и максимальную 0 и по мере измерений убавлять до нужного минимальную и прибавлять максимальную.
сделал вот так -
Код: Выделить всё
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 и по мере измерений убавлять до нужного минимальную и прибавлять максимальную.
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. Вы забыли в максимальных и минимальных значениях про знак температуры.
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. Вы забыли в максимальных и минимальных значениях про знак температуры.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Реклама
Да, все понятно, ... но у меня в спальне не бывает минусовой температуры, затем и не пудрил себе моск этим. И второе - 90 не будет ибо заполнил пространство после знака пробелами, т.е. если 10 то так и будет 10, а если 9 то место ноля запишется пробел. Значит все нормально!
Вот проблема новая:
Решил ознакомится с rc5, так вот ничего не работает!
Что я мог упустить!
Порт сконфигурирован на ввод, и подключен ИК приемник!
Но вот что заметил, если нажать кнопку на пульте, то светодиод на макетке начинаем медленнее мигать, но адрес на ЖКИ не выводит, в чем может быть трабл?
Вот проблема новая:
Решил ознакомится с 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
Порт сконфигурирован на ввод, и подключен ИК приемник!
Но вот что заметил, если нажать кнопку на пульте, то светодиод на макетке начинаем медленнее мигать, но адрес на ЖКИ не выводит, в чем может быть трабл?
В том коде который Вы предоставили, запросто будет и +90 и +80 и даже +70.vanyap1 писал(а):И второе - 90 не будет
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Ага, в новом уже исправил, тут просто забыл поменять!
Вот с пультом проблема, возможно из за отсутствия кварца неправильно считает импульсы с ИК приемника? Потому и отображает команду и адрес постоянно 255?
Вот с пультом проблема, возможно из за отсутствия кварца неправильно считает импульсы с ИК приемника? Потому и отображает команду и адрес постоянно 255?
А пульт точно RC5?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Уверен, ибо делал контроллер rgb светодиода с управлением пультом, так этот пульт работал.
МК реагирует на пульт, ибо светодиод замедляет мигание когда нажата кнопка! Светодиод в программе настроен включатся только во время считывания команды и отключаться.
МК реагирует на пульт, ибо светодиод замедляет мигание когда нажата кнопка! Светодиод в программе настроен включатся только во время считывания команды и отключаться.
Куда Вам такие огромные переменные-то? Адрес занимает 5 бит а команда - 6. Вполне достаточно и типа Byte. Это весь код? Вообще с RC5 проблем небыло никогда. Если все верно подключено и подтянуто то работает стабильно.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Поменял приемник, 2 раза засветило адрес и команду и больше не хочет. Что то не так в коде, потому как в другом устройстве все подключено точно так же и работает.
Отключил внутренний генератор МК и поставил кварц на 12 мгц, припаял конденсатор у приемника.
Переменные мне показались странными, он мне отображает оба числа - 255, т.е. максимальное значение переменной типа байт, от и поставил побольше и что странно - те же 255.
Если я правильно понял, то пуль посылает команду, у МК срабатывает прерывание по которому принятая команда записывается в переменную и ожидает там чтения программой.
Программа по коду -
читает эти данные и НЕ СБРАСЫВАЕТ? Или сбрасывает?
потом выводит на дисплей!
Все как бы понятно, но почему оно не работает? Может задержку из кода убрать к че.. ой бабушке!
Отключил внутренний генератор МК и поставил кварц на 12 мгц, припаял конденсатор у приемника.
Переменные мне показались странными, он мне отображает оба числа - 255, т.е. максимальное значение переменной типа байт, от и поставил побольше и что странно - те же 255.
Если я правильно понял, то пуль посылает команду, у МК срабатывает прерывание по которому принятая команда записывается в переменную и ожидает там чтения программой.
Программа по коду -
Код: Выделить всё
Getrc5(address , Command) потом выводит на дисплей!
Все как бы понятно, но почему оно не работает? Может задержку из кода убрать к че.. ой бабушке!
вопрос остался открытым, помогите как положить в переменную типа String число?
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Них...ра не работает пульт, все остальное - прерывания, таймеры, порт 232 ... все работает а пульт нет!
Все время 255...
Гдето чтото опустил! А что????
Все время 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просто ради интереса открыл хелп там написано что этот протокол работает с таймером у вас я этого не увидел, может в этом собака зарыта?
Код: Выделить всё
'The GETRC5 function uses TIMER0 and the TIMER0 interrupt.Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
С таймером, да. Это просто значит что его нельзя использовать в своих корыстных целях, но специально настраивать его не нужно.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
возможно, я не вникал просто нелп открыл в хэлпе его настраивали вот и сказал.
Код: Выделить всё
'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..."Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
как можно вывести в терминал знак градуса? как его нарисовать?
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Все у меня как у хелпе.... кроме, нет резистора у входа на приемник и подтяжки 10 кОм на плюс питания. Но там же написано - "Опционально", уже сегодня не буду паять, завтра попробую.
разобрался я таки со строковыми переменными если кому интересно то для того чтоб положить число в строковую переменную его нужно взять в кавычки пример ниже
Код: Выделить всё
Dim Dm As String * 3
Dm = "150"
Tmin1 = Dm
Tmin2 = DmРабота избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)


