Спасибо! Вставил в середине текста (по хелпу), а $regfile = "2313def.dat" стал пролетать мгновенно- непонятно...dimon-790 писал(а):например вставить оператор $sim , только не забудь заремить (перед тем как в контроллер заливать).svs39 писал(а):при запуске симулятора задержка на строке $regfile = "2313def.dat" минут 20. $crystal = 20000000. Версия 1.11.9.5, мой комп целерон 2.4 МГц. ОС ХР СП2. Потом скорость симулятора приемлема, но вывод на индикатор тоже тормоз- каждый символ строки секунд через 30-50, причем русские не по-русски. Что делать?
BASCOM AVR в вопросах и ответах
Re: BASCOM AVR в вопросах и ответах
- Реклама
Re: BASCOM AVR в вопросах и ответах
Собственно проблема у меня такая когда на LCD отображаю 2 штуки ds18B20 , 2 штуки ds18S20 + PCF8538 (время формата ##:##:##) секунды как бы подтормаживают ,
а если менять задержку Waitms 750 на 250 (150) тормоза исчезают но 1 из 4 температурников пропадает .
Как я понял всё это как раз из за этой задержки так вот как побороть тормоза секунд и проблему с датчиком.
а если менять задержку Waitms 750 на 250 (150) тормоза исчезают но 1 из 4 температурников пропадает .
Как я понял всё это как раз из за этой задержки так вот как побороть тормоза секунд и проблему с датчиком.
Код: Выделить всё
Do
1wreset
1wwrite &HCC
1wwrite &H44
[color=red]Waitms 750[/color]
Call Gettime
Text = Bcd(h) + ":" + Bcd(m) + ":" + Bcd(s)
Locate 1 , 1
Lcd Text
1wverify Dsid1(1)
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
If Dsid1(1) = 16 Then
Dg = Decigrades(sc(9))
End If
If Dsid1(1) = 40 Then
Dg = Decigrades2(sc(9))
End If
Ss = Str(dg)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd "1 - " ; Ss ; Chr(0) ;
End If
1wverify Dsid2(1)
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
If Dsid2(1) = 16 Then
Dg = Decigrades(sc(9))
End If
If Dsid2(1) = 40 Then
Dg = Decigrades2(sc(9))
End If
Ss = Str(dg)
Ss = Format(ss , " 0.0")
Locate 2 , 12
Lcd "2 - " ; Ss ; Chr(0) ;
End If
1wverify Dsid3(1)
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
If Dsid3(1) = 16 Then
Dg = Decigrades(sc(9))
End If
If Dsid3(1) = 40 Then
Dg = Decigrades2(sc(9))
End If
Ss = Str(dg)
Ss = Format(ss , " 0.0")
Locate 3 , 1
Lcd "3 - " ; Ss ; Chr(0) ;
End If
1wverify Dsid4(1)
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
If Dsid4(1) = 16 Then
Dg = Decigrades(sc(9))
End If
If Dsid4(1) = 40 Then
Dg = Decigrades2(sc(9))
End If
Ss = Str(dg)
Ss = Format(ss , " 0.0")
Locate 3 , 12
Lcd "4 - " ; Ss ; Chr(0) ;
End If
Loop
'get time
Sub Gettime
Dim Dum As Byte
I2cstart 'generate start
I2cwbyte 160 'write addres of PCF8583
I2cwbyte 2 'select second register
I2cstart 'generate repeated start
I2cwbyte 161 'write address for reading info
I2crbyte S , Ack 'read seconds
I2crbyte M , Ack 'read minuts
I2crbyte H , Ack 'read hours
I2crbyte Yd , Ack 'read year and days
I2crbyte Wm , Nack 'read weekday and month
I2cstop 'generate stop
End Sub
Sub Settime(s As Byte , M As Byte , H As Byte , D As Byte , Month As Byte)
'values are stored as BCD values so convert the values first
S = Makebcd(s) 'seconds
M = Makebcd(m) 'minuts
H = Makebcd(h) 'hours
D = Makebcd(d) 'days
Month = Makebcd(month) 'months
I2cstart 'generate start
I2cwbyte 160 'write address
I2cwbyte 0 'select control register
I2cwbyte 8 'set year and day bit for masking
I2cstop 'generate stop
I2cstart 'generate start
I2cwbyte 160 'write mode
I2cwbyte 2 'select seconds Register
I2cwbyte S 'write seconds
I2cwbyte M 'write minuts
I2cwbyte H 'write hours
I2cwbyte D 'write days
I2cwbyte Month 'write months
I2cstop
End Sub
'DS18b20
Function Decigrades2(byval Sc(9) As Byte)
Decigrades2 = 0
Decigrades2 = Makeint(sc(1) , Sc(2))
Decigrades2 = Decigrades2 * 10
Decigrades2 = Decigrades2 / 16
End Function
'DS18s20
Function Decigrades(byval Sc(9) As Byte)
Dim Tmp As Byte , T As Integer , T1 As Integer
Tmp = Sc(1) And 1 ' 0.1C precision
If Tmp = 1 Then Decr Sc(1)
T = Makeint(sc(1) , Sc(2))
'Print Hex(t)
'Print T
T = T * 50 'here we calculate the 1/10 precision like
T = T - 25 'DS18S20 data sheet
T1 = Sc(8) - Sc(7)
T1 = T1 * 100
T1 = T1 / Sc(8)
T = T + T1
Decigrades = T / 10
'As integer, this routine gives T*10, with 1/10 degree precision
End Function
- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 2106
- Зарегистрирован: Ср сен 17, 2008 14:32:15
- Откуда: Старые Васюки
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Дык минимальное время преобразования температуры никто не отменял.Bpyh писал(а):а если менять задержку Waitms 750 на 250 (150) тормоза исчезают но 1 из 4 температурников пропадает .
Даже остановленные часы два раза в сутки показывают правильное время.
- pavel123
- Грызет канифоль
- Сообщения: 268
- Зарегистрирован: Чт май 17, 2007 09:44:13
- Откуда: Украина, г. Кривой Рог
Re: BASCOM AVR в вопросах и ответах
Я так понял, что проблема в том что секунды отображаются неправильно?
Мне кажется, что это связано с общим (сумарным) временем выполнения опроса всех датчиков, получения результатов от всех датчиков, вывода результатов на ЛСД. Т.е. все эти действия занимают больше 1 секунды.
Может быть отказаться от отображения секунд, либо за 1 секундный цикл опрашивать 1 датчик. Тогда секунды пойдут в нормальном режиме, а информация по датчикам будет выводится с некоторым опозданием. Если это не критично...
Мне кажется, что это связано с общим (сумарным) временем выполнения опроса всех датчиков, получения результатов от всех датчиков, вывода результатов на ЛСД. Т.е. все эти действия занимают больше 1 секунды.
Может быть отказаться от отображения секунд, либо за 1 секундный цикл опрашивать 1 датчик. Тогда секунды пойдут в нормальном режиме, а информация по датчикам будет выводится с некоторым опозданием. Если это не критично...
- Alex_Megavolt_79
- Грызет канифоль
- Сообщения: 262
- Зарегистрирован: Пт окт 30, 2009 22:33:56
- Откуда: Санкт-Петербург
Re: BASCOM AVR в вопросах и ответах
Или как второй вариант решения вопроса-это уменьшение разрешающей способности датчика, например использовать не 12 бит, а 10 бит. При этом время проебразования температуры будет 187,5 мс. А если перейти на 9 бит, то время преобразования ещё меньше будет - 93,75 мс.Bpyh писал(а):Собственно проблема у меня такая когда на LCD отображаю 2 штуки ds18B20 , 2 штуки ds18S20 + PCF8538 (время формата ##:##:##) секунды как бы подтормаживают ,
а если менять задержку Waitms 750 на 250 (150) тормоза исчезают но 1 из 4 температурников пропадает .
Как я понял всё это как раз из за этой задержки так вот как побороть тормоза секунд и проблему с датчиком.
- Реклама
- pavel123
- Грызет канифоль
- Сообщения: 268
- Зарегистрирован: Чт май 17, 2007 09:44:13
- Откуда: Украина, г. Кривой Рог
Re: BASCOM AVR в вопросах и ответах
Или же секунды на ЛСД вводить по прерыванию от таймера, а все остальное делать в цикле как и когда прийдется. Т.е. по мере поступления данных от датчиков.
- Alex_Megavolt_79
- Грызет канифоль
- Сообщения: 262
- Зарегистрирован: Пт окт 30, 2009 22:33:56
- Откуда: Санкт-Петербург
Re: BASCOM AVR в вопросах и ответах
А вот так вряд ли получится, так как если во время когда МК будет обращаться к датчику произойдёт прерывание и если не будет запрещены прерывания как рекомендуется в даташите, то вы можете не получить данных с датчика или получите некоректные данные, так как обмен по интерфейсу 1-Wire подразумевает жёсткую привязку по времени.pavel123 писал(а):Или же секунды на ЛСД вводить по прерыванию от таймера, а все остальное делать в цикле как и когда прийдется. Т.е. по мере поступления данных от датчиков.
Re: BASCOM AVR в вопросах и ответах
Это все относительно.Alex_Megavolt_79 писал(а):А вот так вряд ли получится, так как если во время когда МК будет обращаться к датчику произойдёт прерывание и если не будет запрещены прерывания как рекомендуется в даташите, то вы можете не получить данных с датчика или получите некоректные данные, так как обмен по интерфейсу 1-Wire подразумевает жёсткую привязку по времени.pavel123 писал(а):Или же секунды на ЛСД вводить по прерыванию от таймера, а все остальное делать в цикле как и когда прийдется. Т.е. по мере поступления данных от датчиков.
Как тогда по вашему работает USB термометр? А ведь прерывания от USB происходят довольно часто (каждые 10 мс.)!
И ничего - всё пашет!
- ВНН
- Потрогал лапой паяльник
- Сообщения: 347
- Зарегистрирован: Сб дек 13, 2008 09:03:43
- Откуда: г.Советская Гавань
Re: BASCOM AVR в вопросах и ответах
Bpyh А что Вы хотели считывая 4 датика подряд (грубо 4 сек к PCF8538 нет обращения) разделите обращение к DS18x20 во времени
и проблема исчезнет.
Удачи.
и проблема исчезнет.
Удачи.
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
С уважением ВНН.
- Alex_Megavolt_79
- Грызет канифоль
- Сообщения: 262
- Зарегистрирован: Пт окт 30, 2009 22:33:56
- Откуда: Санкт-Петербург
Re: BASCOM AVR в вопросах и ответах
А у меня вопрос такого плана. Как можно установить или сбросить любой необходимый мне бит в переменной?
Re: BASCOM AVR в вопросах и ответах
Вот такAlex_Megavolt_79 писал(а):А у меня вопрос такого плана. Как можно установить или сбросить любой необходимый мне бит в переменной?
Код: Выделить всё
Peremennaa.0 = 1 ' Установка нулего бита
Peremennaa.7 = 0 ' Сброс седьмого бита- Alex_Megavolt_79
- Грызет канифоль
- Сообщения: 262
- Зарегистрирован: Пт окт 30, 2009 22:33:56
- Откуда: Санкт-Петербург
Re: BASCOM AVR в вопросах и ответах
Спасибо. Очень просто оказывается, а то я уже хотел как в асме накладывать маску.
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
Код: Выделить всё
Dim Swfunc As Byte 'переменная переключения функций TDA8425
If Swfunc.5 = 1 Then 'если бит 5 Swfunc = 1, то
Reset Mute 'выключить режим Mute
Swfunc.5 = Not Swfunc.5 'значение бита 5 Swfunc изменить на противоположноеТого, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
Re: BASCOM AVR в вопросах и ответах
Кто-нибудь встречал (желательно на Ваsсом) проект на музыкальную миди-клавиатуру (многоголосую)? Подобный проект я нашел на PIC-контроллере http://electroavto.narod.ru/midikeyboard.html. Но PIC-ами я не дружу, а с AVR пытаюсь разобраться.
Re: BASCOM AVR в вопросах и ответах
Кстати, нашел еще один проект Midi: http://b612.h16.ru/pianino.htm, но тоже на PIC 
-
Radan
- Мучитель микросхем
- Сообщения: 465
- Зарегистрирован: Ср июн 21, 2006 08:24:32
- Откуда: Лисичанск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
В приложении на Васике. МК правда устарел... Переведёте на новый, делитесь.
- Вложения
-
- MIDI.RAR
- MIDI
- (272.33 КБ) 256 скачиваний
Re: BASCOM AVR в вопросах и ответах
Спасибо, попробую что- то понять...
- Alex_Megavolt_79
- Грызет канифоль
- Сообщения: 262
- Зарегистрирован: Пт окт 30, 2009 22:33:56
- Откуда: Санкт-Петербург
Re: BASCOM AVR в вопросах и ответах
Товарищи усатые и хвостатые. Выручайте, опять нужна помощь. Мне нужно на меге16 реализовать 5-ти, а лучше 6-ти канальный шим. Мега16 допускает только 4 и то при использовании всех трёх таймеров. А они мне нужны для другого дела. Скажу сразу для чего мне нужно, хочу сварганить УМЗЧ для ПК с реобасом. А если есть исходник на васике и его выложите, для обучения, то буду очень признателен. Только сразу не отправляйте к шим по шине I2C, например фирмы maxim, их у нас в продаже нет.
- ВНН
- Потрогал лапой паяльник
- Сообщения: 347
- Зарегистрирован: Сб дек 13, 2008 09:03:43
- Откуда: г.Советская Гавань
Re: BASCOM AVR в вопросах и ответах
Alex_Megavolt_79Посмотри Светодиодный диммер http://bascom.at.ua/publ/1-1-0-9 Реализовоно софтово 8 каналов.
Удачи
Удачи
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
С уважением ВНН.
- Alex_Megavolt_79
- Грызет канифоль
- Сообщения: 262
- Зарегистрирован: Пт окт 30, 2009 22:33:56
- Откуда: Санкт-Петербург
Re: BASCOM AVR в вопросах и ответах
Большое спасибо. Принцип понял буду пробовать.ВНН писал(а):Alex_Megavolt_79Посмотри Светодиодный диммер http://bascom.at.ua/publ/1-1-0-9 Реализовоно софтово 8 каналов.
Удачи


