Блин еще часы ds1307 идти не хотели заразы
BASCOM AVR в вопросах и ответах
-
осторожно! леоныч!!!
- Сверлит текстолит когтями
- Сообщения: 1156
- Зарегистрирован: Вт дек 09, 2008 20:31:56
Re: BASCOM AVR в вопросах и ответах
Да,пишу на баском. Буду пробовать. Просто не дошел еще до этого интерфейса. I2c только вчера освоил. Сегодня вот меню доделаю если,буду пробовать.
Блин еще часы ds1307 идти не хотели заразы
Если значение секунд не изменить - там 80 остается и они стоят 
Блин еще часы ds1307 идти не хотели заразы
Re: BASCOM AVR в вопросах и ответах
здравствуйте, работаю в баскоме с attiny2313, к которой подключены семисегментный индикатор и "виновник" моего вопроса датчик температуры ds18b20.
Вся проблема в том, что захотелось регулировать яркость индикатора - устройство планируется в машине эксплуатировать, поэтому без регулировки яркости никак.
Индикация выводится в динамическом режиме по переполнению timer0, а сброс индикации по сравнению со счетчиком oc0a. чем больше его значение, тем дольше горят индикаторы и соответственно ярче, т.е. кнопками увеличиваем-уменьшаем значение и регулируем яркость.
Но при работе с чтением 18b20 возникли проблемы - он вообще не переносит, когда его прерывают в моменты связи - не знаю уж как, но не просто ошибку показаний дает, а "вешает" тиньку, что в железе, что в протеусе.
Применил отмену прерываний на время общения с датчиком, но появляется мерцание индикатора
, как раз с частотой обращения к датчику...может кто посоветует как обойти данный конфликт ? т.е. прерывание отменить нельзя - мерцать будет, а если не прерывать, то датчик не то шлет....
Попробовал засунуть работу с датчиком в прерывание, почему-то не идет, на команде 1wread() виснет, в цикле она работает, а в прерывании никак.
весь код не буду захломлять, интересующие куски работы с датчиком
вот так вот оно сейчас работает нормально, но всю "малину" портит кусок disable-enable interrupts - из-за него мерцает, все что мог засунул в прерывание, чтоб синхронно с зажиганием-гашением влазило, а вот команда 1wread() прерывании почему-то вызывает ошибку, не в компиляции, а в симуляции и железе...
что можно с этим кодом сделать или как еще можно регулировать яркость индикатора ?
Вся проблема в том, что захотелось регулировать яркость индикатора - устройство планируется в машине эксплуатировать, поэтому без регулировки яркости никак.
Индикация выводится в динамическом режиме по переполнению timer0, а сброс индикации по сравнению со счетчиком oc0a. чем больше его значение, тем дольше горят индикаторы и соответственно ярче, т.е. кнопками увеличиваем-уменьшаем значение и регулируем яркость.
Но при работе с чтением 18b20 возникли проблемы - он вообще не переносит, когда его прерывают в моменты связи - не знаю уж как, но не просто ошибку показаний дает, а "вешает" тиньку, что в железе, что в протеусе.
Применил отмену прерываний на время общения с датчиком, но появляется мерцание индикатора
Попробовал засунуть работу с датчиком в прерывание, почему-то не идет, на команде 1wread() виснет, в цикле она работает, а в прерывании никак.
весь код не буду захломлять, интересующие куски работы с датчиком
Код: Выделить всё
Flag_init = 1 ' выставляем флаг означающий подготовку датчика к работе, флаг обработается в прерывании
Waitms 700 ' ждем время пока датчик там у себя подготовит данные
Flag_read = 1 'готовим датчик для отправки
Waitms 50
Disable Interrupts ' ...и собственно считываем данные причем с отключенными прерываниями - иначе никак
T1 = 1wread()
T2 = 1wread()
Enable Interrupts
..........................................
' это обработка флагов в прерывании
Reset Portd.4 : Reset Portd.5 гашу цифры индикатора, и пока не горит работаю с датчиком.
If Flag_init = 1 Then 'обработка флага инициализации
1wreset
1wwrite &HCC
1wwrite &H44
Flag_init = 0
End If
If Flag_read = 1 Then 'оюработка флага на чтение
1wreset
1wwrite &HCC
1wwrite &HBE
Flag_read = 0
End If
вот так вот оно сейчас работает нормально, но всю "малину" портит кусок disable-enable interrupts - из-за него мерцает, все что мог засунул в прерывание, чтоб синхронно с зажиганием-гашением влазило, а вот команда 1wread() прерывании почему-то вызывает ошибку, не в компиляции, а в симуляции и железе...
что можно с этим кодом сделать или как еще можно регулировать яркость индикатора ?
-
осторожно! леоныч!!!
- Сверлит текстолит когтями
- Сообщения: 1156
- Зарегистрирован: Вт дек 09, 2008 20:31:56
Re: BASCOM AVR в вопросах и ответах
Я вообще не понимаю зачем датчик постоянно опрашивать. Можно принимать данные раз в минуту...
Re: BASCOM AVR в вопросах и ответах
можно, но будет и подмигивать раз в минуту, всеравно же проблема не уйдет? только период растянется. Пока мне непонятен один момент, почему 1wread() помещенный в прерывание выдает ошибкуосторожно! леоныч!!! писал(а):Можно принимать данные раз в минуту...
. А так бы все было хорошо, если яркость меньше 50%, т.е. в основном потушено - то делаю опрос датчика в погашеном, если яркость большая и горит долго, то делаю опрос в момент горения. Вообщем лишь бы не пересекался опрос с моментом включения или выключения.Как вобще найти-почитать, что и каким образом делает эта команда , чтоб понять что её не устраивает.
скрин протеуса, в железе просто все гаснет и отваливается

-
осторожно! леоныч!!!
- Сверлит текстолит когтями
- Сообщения: 1156
- Зарегистрирован: Вт дек 09, 2008 20:31:56
Re: BASCOM AVR в вопросах и ответах
Было у меня такое подвешивание. Обычно если я с портами что нибудь косячил....
Что то мне не понятно зачем прерывание включать-выключать. Что то тут не так... Я так никогда не делаю...
Что то мне не понятно зачем прерывание включать-выключать. Что то тут не так... Я так никогда не делаю...
Re: BASCOM AVR в вопросах и ответах
если хоть что-то прервет общение контроллера и этого датчика 18b20(т.е. не отключать прерывания), то периодически проскакивает какая-то ересь и в конце концов повисает, не сразу, просто включа, минут через 10-15 смотрю - потухло всё (повис). В поиске уже встречал подобную проблему с этим датчиком, но там на Си, и просто рекомендовали все общение убрать внутрь прерываний...Си толком не понимаю, пишу только в басике, а тут этот 1wread в прерывание не лезет.
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
Так почитайте про 1wread вообще и датчик в частности, и поймёте. в 1wread 1 от 0 отличается именно длиной. Вот когда общается датчик с контроллером, происходит прерывание на индикацию, и в посылке датчика 0, вдруг, превращается в 1. Вот и вся ерунда от сюда.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Re: BASCOM AVR в вопросах и ответах
Назрел вопрос: нужно включить нагрузку в определенное время, а потом выключить в другое время. (что то типа программируемого таймера).
С этим в принципе проблем нет. Но если, допустим, устройство не будет запитано в момент совпадения реального времени и времени срабатывания, а потом питание появиться то устройство не сработает.
Как сделать так чтобы можно было отследить это время и включить или отключить нагрузку? Может кто встречал готовый фрагмент кода (можно и на Си).
С этим в принципе проблем нет. Но если, допустим, устройство не будет запитано в момент совпадения реального времени и времени срабатывания, а потом питание появиться то устройство не сработает.
Как сделать так чтобы можно было отследить это время и включить или отключить нагрузку? Может кто встречал готовый фрагмент кода (можно и на Си).
- Вложения
-
- Пример.GIF
- Диаграмма пример роботы
- (10.22 КБ) 366 скачиваний
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
Vet-RX писал(а):Как сделать так чтобы можно было отследить это время и включить или отключить нагрузку?
Вам надо отслеживать есть ли напряжение в какой то момент или нет?
Если да, тогда я думаю можно с помощью делителя понизить сетевое напряжение до 5 вольт и отслеживать, на какой нибудь ноге, наличие 0 или 1.
Re: BASCOM AVR в вопросах и ответах
Vet-RX, а как организовано питание управляющей схемы ? Если от той же линии, что и коммутирует, то может ввести счетчик времени работы. т.е. как включили нагрузку одновременно запускаем счетчик, который считает время работы...ну а дальше сравнивать с длительностью выставленной по таймеру, м.б. еще в епром периодически записывать эту длительность коммутации - на случай, если питание пропадет прямо во время работы, потом как питание появится - доберет нужную работу, правда конец тогда сместится....А если этого не нужно, то просто "для запуска условие не четко в 8.25, а по условию - если наст.время больше начала, но меньше конца - тогда старт.
Re: BASCOM AVR в вопросах и ответах
В схеме стоит RTC со своей батарейкой. То есть если нет питания то мк просто не работает.
Идея была проста если время совпало то флаг переводим в 1, потом когда пришло время выключения то флаг сбрасываем в 0. Но вот как отследить если не было питания?
По условию немного много гемороя, и не всегда условие будет правильное.
Идея была проста если время совпало то флаг переводим в 1, потом когда пришло время выключения то флаг сбрасываем в 0. Но вот как отследить если не было питания?
По условию немного много гемороя, и не всегда условие будет правильное.
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
Как-то так:
Код: Выделить всё
Dim Ma As Byte ‘Переменная минут включения будильника
Dim Ha As Byte ‘Переменная часов включения будильника
Dim Ma2 As Byte ‘Переменная минут выключения будильника
Dim Ha2 As Byte ‘Переменная часов выключения будильника
Dim alarm_set As Byte ‘Переменная для будильника
Dim alarm_on_off As Byte ‘Переменная статуса будильника
READEEPROM alarm_on_off, 0
If alarm_on_off=1 Then Set Portd.1 ‘включили будильник если в переменная alarm_on_off=1
READEEPROM Ha, 2
READEEPROM Ha2, 3
READEEPROM Ma, 4
READEEPROM Ma2, 5
'alarm_set = 0 ‘будильник выкл.
alarm_set = 1 ‘будильник вкл.
If Ha >= _hour And Ma >= _min And Portd.1=0 And alarm_set = 1 Then
Set Portd.1 ‘включили будильник
alarm_on_off=1
Writeeeprom alarm_on_off, 0 ‘запомнили будильник включен
end If
If Ha2 = _hour And Ma2 = _min And Portd.1=1 And alarm_set = 1 Then
Reset Portd.1 ‘выключили будильник
alarm_on_off=0
Writeeeprom alarm_on_off, 0 ‘запомнили будильник выключен
end If
Do
Loop
EndТого, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
Re: BASCOM AVR в вопросах и ответах
не очень понятно для чего отслеживать, что вы дальше мечтаете сделать с эти событием/несобытием. Пусть будет введена переменная Счет_Стартов , которая будет увеличиваться при каждой коммутации нагрузки и сохраняться в энергонезависимой памяти, тогда даже спустя месяц можно будет прийти и посмотреть сколько раз не было питания в 8.25.Vet-RX писал(а):Но вот как отследить если не было питания?
очень много непонятно, в чем геморрой условия - разъясните подробней.По условию немного много гемороя, и не всегда условие будет правильное.
Если мк от независимого источника, то следить через делитель, если на том же питании, то следить за собственным. Например перед основным циклом считывать и записывать в память время старта и выставлять стартовый флаг флаг_старт = 0 (хотя можно и опустить), затем прям в начале цикла сравнивать "если флаг_старт = 0 >> значит схема ресетилась(питание пропадало), в конце цикла прям где-то перед Loop соответственно этот флаг должен быть заменен на 1 и больше не обрабатываться. Если нужно знать время, тогда еще каждую минуту записывайте текущее время в память епром , а в событии по стартовому флагу читайте его и сравнивайте с текущим - тогда еще будете знать со скольких до скольких МК находился без питания( то бишь сколько не было электричества).
Re: BASCOM AVR в вопросах и ответах
Спасибо max50 за код попробую разобраться 

-
осторожно! леоныч!!!
- Сверлит текстолит когтями
- Сообщения: 1156
- Зарегистрирован: Вт дек 09, 2008 20:31:56
Re: BASCOM AVR в вопросах и ответах
Все привет. Помогите разобраться в коде. Это код опроса клавиатуры.
Config Kbd = Portd , Debounce = 20 , Delay = 100
'конфигурация дисплея
Config Lcdpin=Pin,Rs=Portc.0,E=Portc.1,Db4=Portc.2,Db5=Portc.3,Db6=Portc.4,Db7=Portc.5
Config Lcd = 20 * 4
Cursor Off
Cls
'конфигурация клавиатуры
Config Kbd = Portd , Debounce = 20 , Delay = 100
'переменные
Dim Key_char As Byte 'номер нажатой клавиши
Dim Key_str As String * 1 'символ нажатой клавиши на клавиатуре
Dim Result As String * 20 'результат нажатий на клавиатуру
Result = ""
'Главный цикл программы
Do
Key_char = Getkbd() 'клавиша не нажата и функция возвращает переменной значение 16
If Key_char <> 16 Then 'если переменная не равна 16, значит была нажата кнопка
Key_str = Lookupstr(key_char , Keyboard_data) 'вытаскиваем символ нажатой клавиши
Result = Result + Key_str
End If
Locate 1 , 1
Lcd Result 'выводим на дисплей результат нажатий
Waitms 100
Loop
End
Keyboard_data:
Data "1" , "4" , "7" , "*" , "2" , "5" , "8" , "0"
Data "3" , "6" , "9" , "#" , "A" , "B" , "C" , "D"
Мне на экран не надо ничего выводить. Во всяком случае пока. Это не проблема по этому Lcd result можно оставить в покое. Проблема в том что просматривая константы при нажатии клавиш заметил что при нажатии на 4 значение Key_char остается равным 16... Мне не понятно как организовать реакцию на нажатие цифры 4. Точнее как сделать то понятно,но не понятно как правильно снять значение нажатой клавиши для реакции программы. К примеру If "какая то кнопка" = "определенному значению" Then Call "Определенная подпрограмма. Мне не понятно где брать значение чтоб вставить в строку. Я с клавиатурой впервые работаю так что просьба не кидаться керпичами.
Config Kbd = Portd , Debounce = 20 , Delay = 100
'конфигурация дисплея
Config Lcdpin=Pin,Rs=Portc.0,E=Portc.1,Db4=Portc.2,Db5=Portc.3,Db6=Portc.4,Db7=Portc.5
Config Lcd = 20 * 4
Cursor Off
Cls
'конфигурация клавиатуры
Config Kbd = Portd , Debounce = 20 , Delay = 100
'переменные
Dim Key_char As Byte 'номер нажатой клавиши
Dim Key_str As String * 1 'символ нажатой клавиши на клавиатуре
Dim Result As String * 20 'результат нажатий на клавиатуру
Result = ""
'Главный цикл программы
Do
Key_char = Getkbd() 'клавиша не нажата и функция возвращает переменной значение 16
If Key_char <> 16 Then 'если переменная не равна 16, значит была нажата кнопка
Key_str = Lookupstr(key_char , Keyboard_data) 'вытаскиваем символ нажатой клавиши
Result = Result + Key_str
End If
Locate 1 , 1
Lcd Result 'выводим на дисплей результат нажатий
Waitms 100
Loop
End
Keyboard_data:
Data "1" , "4" , "7" , "*" , "2" , "5" , "8" , "0"
Data "3" , "6" , "9" , "#" , "A" , "B" , "C" , "D"
Мне на экран не надо ничего выводить. Во всяком случае пока. Это не проблема по этому Lcd result можно оставить в покое. Проблема в том что просматривая константы при нажатии клавиш заметил что при нажатии на 4 значение Key_char остается равным 16... Мне не понятно как организовать реакцию на нажатие цифры 4. Точнее как сделать то понятно,но не понятно как правильно снять значение нажатой клавиши для реакции программы. К примеру If "какая то кнопка" = "определенному значению" Then Call "Определенная подпрограмма. Мне не понятно где брать значение чтоб вставить в строку. Я с клавиатурой впервые работаю так что просьба не кидаться керпичами.
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
Если я ни чего не путаю, то значения будут в пределах значений 0 - 15(кнопка нажата) и 16(не нажата). То есть:
Код: Выделить всё
Keyboard_data:
Data "1" , "4" , "7" , "*" , "2" , "5" , "8" , "0"
' 0 1 2 3 4 5 6 7
Data "3" , "6" , "9" , "#" , "A" , "B" , "C" , "D"
' 8 9 10 11 12 13 14 15 Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
-
осторожно! леоныч!!!
- Сверлит текстолит когтями
- Сообщения: 1156
- Зарегистрирован: Вт дек 09, 2008 20:31:56
Re: BASCOM AVR в вопросах и ответах
Ой блиииин.... Приношу свои извинения! Добавил функцию очистки дисплея перед командой индикации и всё увидел. Дисплей,если его не очистить,запоминает символы которые на него были выведены. Это необходимо учитывать чтоб потом не мучиться как я сегодня...
-
осторожно! леоныч!!!
- Сверлит текстолит когтями
- Сообщения: 1156
- Зарегистрирован: Вт дек 09, 2008 20:31:56
Re: BASCOM AVR в вопросах и ответах
Очередная проблема. Не могу наладить управление тюнером.
Мне тут в этой ветке давали этот код.
' /////////////////////////
'// for KS-H-146, KS-H-148
Const__gainoff Alias &B10001000
Const__gainon Alias &B10001001 ' Weak Signal Booster On
Const__loband Alias &B00000001
Const__miband Alias &B00000010
Const__hiband Alias &B00001100
Dim Frcvwork As Long
Dim Rcvpch1 As Word
Declare Sub Ksh14xpll
'////////////////////
Frcvwork = 145500
Sub Ksh14xpll
Dim Fpch1 As Word
Dim Band As Byte
Dim Temp As Byte
Band = Const__loband
If Frcvwork > 155000 Then
Band = Const__miband
End If
If Frcvwork > 440000 Then
Band = Const__hiband
End If
Fpch1 = Frcvwork + Rcvpch1
Fpch1 = Fpch1 / 50
I2cstart
I2cwbyte &B11000000 'Tuner Address
Temp = High(fpch1)
I2cwbyte Temp
Temp= low(fpch1)
I2cwbyte Temp
I2cwbyte Const__gainon ' Const__gainon : Const__gainoff);
I2cwbyte Band
I2cstop
End Sub
Но не могу в нем разобраться.
Я и индикацию вывел значения частоты, частота меняется только на дисплее.
У меня на шине тюнера еще и часы на ds1307 и они прекрасно работают.
Помогите разобраться почему частота не переключается?
В тюнере вот эта микросхема http://p-45.narod.ru/files/TDA6508_6508 ... 509A_1.pdf
Мне тут в этой ветке давали этот код.
' /////////////////////////
'// for KS-H-146, KS-H-148
Const__gainoff Alias &B10001000
Const__gainon Alias &B10001001 ' Weak Signal Booster On
Const__loband Alias &B00000001
Const__miband Alias &B00000010
Const__hiband Alias &B00001100
Dim Frcvwork As Long
Dim Rcvpch1 As Word
Declare Sub Ksh14xpll
'////////////////////
Frcvwork = 145500
Sub Ksh14xpll
Dim Fpch1 As Word
Dim Band As Byte
Dim Temp As Byte
Band = Const__loband
If Frcvwork > 155000 Then
Band = Const__miband
End If
If Frcvwork > 440000 Then
Band = Const__hiband
End If
Fpch1 = Frcvwork + Rcvpch1
Fpch1 = Fpch1 / 50
I2cstart
I2cwbyte &B11000000 'Tuner Address
Temp = High(fpch1)
I2cwbyte Temp
Temp= low(fpch1)
I2cwbyte Temp
I2cwbyte Const__gainon ' Const__gainon : Const__gainoff);
I2cwbyte Band
I2cstop
End Sub
Но не могу в нем разобраться.
Я и индикацию вывел значения частоты, частота меняется только на дисплее.
У меня на шине тюнера еще и часы на ds1307 и они прекрасно работают.
Помогите разобраться почему частота не переключается?
В тюнере вот эта микросхема http://p-45.narod.ru/files/TDA6508_6508 ... 509A_1.pdf
-
осторожно! леоныч!!!
- Сверлит текстолит когтями
- Сообщения: 1156
- Зарегистрирован: Вт дек 09, 2008 20:31:56
Re: BASCOM AVR в вопросах и ответах
Продолжая монолог... Разобрался вроде какие команды за что отвечают. Теперь не понятно как изменять частоту настройки тюнера. Ведь есть два бита отвечающие за шаг настройки. Я их установил в нули чтоб получить шаг равный 50кгц. Блин не вьеду ни как чего крутить теперь? Какую переменную чтоб шарить по диапазону....
Frcvwork = 107700 Вначале выставляю такую частоту , прибавляю к ней промежуточную Rcvpch1 = 38900, делю на 50 (это по формуле,мне непонятно нафига еще делить то???)
Это формула, вроде все правильно. Значит если я прибавлю или убавлю 50 от значения Frcvwork то по идее должна происходить перестройка по частотам? Но у меня тишина. В чем ошибка???
По нажатии кнопки ухожу в подпрограмму где 50 прибавляется к Frcvwork а далее все так ---
Waitms 10
Frcvwork = Frcvwork + 50
'Если частота выше 155мгц вкл следующий диапазон
If Frcvwork > 155000 Then
Band = Const__miband
End If
If Frcvwork > 440000 Then 'Если частота выше 440мгц вкл следующий диапазон
Band = Const__hiband
End If
Fpch1 = Frcvwork + Rcvpch1 'Частота = частота + промежуточная
Fpch1 = Fpch1 / 50 'Сумма частоты и промежуточной деленная на 50
I2cstart 'передача в тюнер
I2cwbyte &B11000000 'Адрес тюнера
Temp = High(fpch1) 'Старший байт частоты
I2cwbyte Temp
Temp = Low(fpch1) 'Младший байт частоты
I2cwbyte Temp
I2cwbyte Const__gainon 'Включить усиление
I2cwbyte Band 'Диапазон
I2cstop
Return
Решил посмотреть что идет в тюнер выводя на дисплей значение Темр , при частоте 10750 старший байт почему то равен 1 а младший 55. Старший до 108 с лишним мегагерц не менялся, менялся младший... Что тут не так? Может частоту надо в двоичном коде? Так это дофига цифр....
Frcvwork = 107700 Вначале выставляю такую частоту , прибавляю к ней промежуточную Rcvpch1 = 38900, делю на 50 (это по формуле,мне непонятно нафига еще делить то???)
Это формула, вроде все правильно. Значит если я прибавлю или убавлю 50 от значения Frcvwork то по идее должна происходить перестройка по частотам? Но у меня тишина. В чем ошибка???
По нажатии кнопки ухожу в подпрограмму где 50 прибавляется к Frcvwork а далее все так ---
Waitms 10
Frcvwork = Frcvwork + 50
'Если частота выше 155мгц вкл следующий диапазон
If Frcvwork > 155000 Then
Band = Const__miband
End If
If Frcvwork > 440000 Then 'Если частота выше 440мгц вкл следующий диапазон
Band = Const__hiband
End If
Fpch1 = Frcvwork + Rcvpch1 'Частота = частота + промежуточная
Fpch1 = Fpch1 / 50 'Сумма частоты и промежуточной деленная на 50
I2cstart 'передача в тюнер
I2cwbyte &B11000000 'Адрес тюнера
Temp = High(fpch1) 'Старший байт частоты
I2cwbyte Temp
Temp = Low(fpch1) 'Младший байт частоты
I2cwbyte Temp
I2cwbyte Const__gainon 'Включить усиление
I2cwbyte Band 'Диапазон
I2cstop
Return
Решил посмотреть что идет в тюнер выводя на дисплей значение Темр , при частоте 10750 старший байт почему то равен 1 а младший 55. Старший до 108 с лишним мегагерц не менялся, менялся младший... Что тут не так? Может частоту надо в двоичном коде? Так это дофига цифр....
-
осторожно! леоныч!!!
- Сверлит текстолит когтями
- Сообщения: 1156
- Зарегистрирован: Вт дек 09, 2008 20:31:56
Re: BASCOM AVR в вопросах и ответах
Продолжая блог
Это уже так можно называть
Долго рылся в коде и симуляторе. Вот что обнаружил. При операции сложения Fpch1 = Frcvwork + Rcvpch1 результат полная ерунда. К примеру если частота равна 107750 то значение получится 15578!
Соответственно после деления 311.... Дурдом...
Эти переменные указаны так
Dim Frcvwork As Long Это частота
Dim Rcvpch1 As Word Это промежуточная
Этот бред вместо того что я считал - 107700 + 38900 делим на 50 и получаем 2932
То есть старш байт 00001011 --- это 11
Ну а младш байт 01110100 ---- это 116
Простейшая операция сложения и такой глюк.... Ума не приложу как бороться с этим...
Долго рылся в коде и симуляторе. Вот что обнаружил. При операции сложения Fpch1 = Frcvwork + Rcvpch1 результат полная ерунда. К примеру если частота равна 107750 то значение получится 15578!
Соответственно после деления 311.... Дурдом...
Эти переменные указаны так
Dim Frcvwork As Long Это частота
Dim Rcvpch1 As Word Это промежуточная
Этот бред вместо того что я считал - 107700 + 38900 делим на 50 и получаем 2932
То есть старш байт 00001011 --- это 11
Ну а младш байт 01110100 ---- это 116
Простейшая операция сложения и такой глюк.... Ума не приложу как бороться с этим...