BASCOM AVR в вопросах и ответах
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
В Баскоме есть команда initlcd, она заставляет контроллер инициализировать дисплей.
Где, или как баском хранит эти строки инициализации для дисплея, или как их редактировать.
Суть вопроса такова - к МК был подключен дисплей на контроллере hd44780, потом заменен на winstar oled в которого немного другая инициализация и дополнительные функции. Он то работает, но хочется задействовать как надо и штатными средствами баскома.
Где, или как баском хранит эти строки инициализации для дисплея, или как их редактировать.
Суть вопроса такова - к МК был подключен дисплей на контроллере hd44780, потом заменен на winstar oled в которого немного другая инициализация и дополнительные функции. Он то работает, но хочется задействовать как надо и штатными средствами баскома.
- Реклама
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Вообще все библиотеки в папке LIB программы.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Обьясните мне пожалуйста, что происходит при вызове команды initlcd
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Очевидно, что инициализация дисплея. Например, в файле lcd4.lib:
Код: Выделить всё
_Init_LCD:
*BASIC: waitms 10
Ldi R24, &B11111111 ; all outputs
Out LCDDDR,R24 ; write to Data direction
Ldi R24, &B00110000 ; set logic level
Out LCDPORT,R24 ; write to output pins
Ldi r16,3 ; repeat 3 times
_Init_LCD1:
SBi LCDPORT, 2 ; E high
Cbi LCDPORT, 2 ; E low
*BASIC: waitms 1
Dec R16
Brne _Init_LCD1 ; until we are ready
Cbi LCDPORT, 4 ; DB4 must be set low now
SBi LCDPORT, 2 ; E high
Cbi LCDPORT, 2 ; E low
*BASIC: waitms 1
Ldi R24, 40 ; 4 bit mode
Rcall _Lcd_control
Ldi _temp1,14 ; Display on, Cursor on, Noblink
Rcall _Lcd_control
Ldi _temp1,6 ; Cursor moves right, text doesn't move
RJmp _Lcd_control ; return will come from _lcd_control
[END]
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
dimon-ru-80
- Встал на лапы
- Сообщения: 86
- Зарегистрирован: Ср ноя 19, 2014 17:13:21
- Откуда: Украина, Никополь
Re: BASCOM AVR в вопросах и ответах
Добрый день, уважаемые коты. Смастерил себе часы на ИВ-18 и мега 32. (Переделал немного схему польских часов под мегу 32). Код перелопатил под себя. Добавил, работу трех кнопок "+" "-" "setup"; индикацию при обрыве датчиков температуры; индикацию дня недели; корректировку на +1сек в сутки (без нее отстают), регулировку яркости. Прошу вашей помощи впилить в программу будильник простой и надежный
. Не могу понять как на всяких там ice tube clock реализована одновременная работа будильника и обновление даты времени для динамической индикации во время проигрывания мелодии например(если поставить ее в основном цикле). Код и проект в протеусе во вложении, помогите впилить будильник или поделитесь куском кода в котором реализован будильник с индикацией времени при проигрывании мелодии например командой sound.
- Вложения
-
- 222.ZIP
- (27.27 КБ) 208 скачиваний
- Реклама
Re: BASCOM AVR в вопросах и ответах
Помогите с вопросом,
Есть код, который обрабатывает нажатие кнопки. при нажатии кнопки начинает работать программа, точнее сказать, нажал кнопку и пока ее держишь в цикле работает программа, отпускаешь кнопку погромамма работать перестает.
Так вопрос, мне нужно чтобы пока кнопка нажата, программа сработала лишь один раз, а она работает до тех пор пока кнопка нажата.... Тоесть бегает в цикле.
Если ее убрать из цикла то программа не работает.
Как при нажатии кнопки заставить программу работать лишь один раз,
Мне нужно: нажал держишь кнопку, программа проработала и встала. Чтобы перезапустить программу, отпускаем кнопку и нажимаем снова.
Есть код, который обрабатывает нажатие кнопки. при нажатии кнопки начинает работать программа, точнее сказать, нажал кнопку и пока ее держишь в цикле работает программа, отпускаешь кнопку погромамма работать перестает.
Так вопрос, мне нужно чтобы пока кнопка нажата, программа сработала лишь один раз, а она работает до тех пор пока кнопка нажата.... Тоесть бегает в цикле.
Если ее убрать из цикла то программа не работает.
Как при нажатии кнопки заставить программу работать лишь один раз,
Мне нужно: нажал держишь кнопку, программа проработала и встала. Чтобы перезапустить программу, отпускаем кнопку и нажимаем снова.
Re: BASCOM AVR в вопросах и ответах
Можно конечно в конце цикла выполняемой программы написать end но тогда программа встает полностью
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
можно ставить флаг
когда кнопка не нажата-флаг=0
когда нажимаем кнопку флаг=1,потом-если флаг=1 срабатывает программа,в ее конце прописываем флаг=2
кнопка нажата,но программа сработала один раз,так как флаг=2
отпускаем кнопку-флаг=0,ждем нажатия кнопки
а можно в той программе сделать чтоб она сработала и стояла на месте пока не отпустим кнопку
label1:
waitms 10
if button=0 then goto label1 'если кнопка еще нажата идет на метку
когда кнопка не нажата-флаг=0
когда нажимаем кнопку флаг=1,потом-если флаг=1 срабатывает программа,в ее конце прописываем флаг=2
кнопка нажата,но программа сработала один раз,так как флаг=2
отпускаем кнопку-флаг=0,ждем нажатия кнопки
а можно в той программе сделать чтоб она сработала и стояла на месте пока не отпустим кнопку
label1:
waitms 10
if button=0 then goto label1 'если кнопка еще нажата идет на метку
Re: BASCOM AVR в вопросах и ответах
Спасибо за наводку, попробую
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
можно так
dim flag as bit
flag=0
..........
if button=0 then если кнопка нажата
if flag=0 then gosub prog и флаг=0 то идем на программу
else
flag=0 если кнопка не нажата флаг=0
end if
...........
prog:
наша программа
flag=1
return
dim flag as bit
flag=0
..........
if button=0 then если кнопка нажата
if flag=0 then gosub prog и флаг=0 то идем на программу
else
flag=0 если кнопка не нажата флаг=0
end if
...........
prog:
наша программа
flag=1
return
Re: BASCOM AVR в вопросах и ответах
доброго времени подскажите пожалуйста есть жки wh2004a YGH-CT при подключении к атмеге 16 (внутр генератор 4мгц )тупо показывает 1 и 3 строку прямоугольники. я так понимаю что инициализация дисплея не прошла вот код посмотрите может что подскажете (если нужно могу в протеусе 8 скинутьсхему) в протеусе все работает ,
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32
Open "comd.0:9600,8,n,1" For Output As #1
Open "comd.1:9600,8,n,1" For Input As #2
' ------------------------
' 1 Vss
' 2 Vdd
' 3 V0
' 4 RS PA5
' 5 R/W gnd
' 6 E PA7
' 7 DB0 PD0
' 8 DB1 PD1
' 9 DB2 PD2
' 10 DB3 PD3
' 11 DB4 PD4
' 12 DB5 PD5
' 13 DB6 PD6
' 14 DB7 PD7
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Porta.7 , Rs = Porta.5
Config Lcd = 20 * 4
INITLCD
Cls
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Pina.0 = Input
Start Adc
Config 1wire = Portd.2 ' íà ýòó íîæêó ïîäêëþ÷èì DS18B20 è ïîäòÿãèâàþùèé ðåçèñòîð íà 4,7 êîì ê + ïèòàíèÿ
Config Portb.0 = Output
Config Portb.1 = Output
Config Porta.2 = Output
'****************************?????? ?????????***********************************
Dim Signtemperatura As String * 1 , Celsium As String * 5
Dim Byte0 As Byte , Byte1 As Byte , T As Byte
Dim Dsid1(8) As Byte , Dsid2(8) As Byte
Dim Temp As Byte , X As Byte
Dim W As Word
Dim M As Word
W = 1wirecount()
Dsid1(1) = 1wsearchfirst()
Do
Dsid2(1) = 1wsearchnext()
Loop Until Err = 1
'*******************************************************************************
Do
Set Porta.2
Gosub Convallt
M = Getadc(0) : Gosub Shtory 'ñ÷èòûâàåì ðåçóëüòàò ñ ïèíà 0 ïîðòà À.
Locate 4 , 4 ' ïîçèöèÿ êóðñîðà
Lcd "ADC(0):" ; M ; " " 'âûâîäèì ðåçóëüòàò ïðåîáðàçîâàíèÿ íà ÆÊ
Waitms 100 ' çåäåðæêà 0,1 ñåêóíäû
1wverify Dsid1(1) : X = 1 : Gosub Temperature '1 ds18b20
1wverify Dsid2(1) : X = 2 : Gosub Temperature '2 ds18b20
Loop
End
'*******************************************************************************
Convallt:
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
Return
'*******************************************************************************
Temperature:
If Err = 0 Then
1wwrite &HBE
Byte0 = 1wread()
Byte1 = 1wread()
Reset Porta.2
Waitms 750
If Byte1 >= 248 Then
Byte0 = &HFF - Byte0
Byte1 = &HFF - Byte1
Signtemperatura = "-"
Reset Porta.2
Waitms 750
Else
Reset Porta.2
Waitms 750
Set Porta.2
Waitms 750
Reset Porta.2
Signtemperatura = "+"
End If
Temp = Byte0 / 16
T = Byte1 * 16
Temp = Temp + T
Celsium = Signtemperatura + Str(temp) +
Locate X , 1
Lcd Celsium
Locate 1 , 5
Lcd "C Dom"
Locate 2 , 5
Lcd "C Ulica"
Print #1 , Celsium ; " " ; M
End If
Return
Shtory:
If M < 300 Then
Portb.0 = 1
Portb.1 = 0
Else
Portb.1 = 1
Portb.0 = 0
End If
Return
'***************************************************************************
Спойлер
$regfile = "m16def.dat"$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32
Open "comd.0:9600,8,n,1" For Output As #1
Open "comd.1:9600,8,n,1" For Input As #2
' ------------------------
' 1 Vss
' 2 Vdd
' 3 V0
' 4 RS PA5
' 5 R/W gnd
' 6 E PA7
' 7 DB0 PD0
' 8 DB1 PD1
' 9 DB2 PD2
' 10 DB3 PD3
' 11 DB4 PD4
' 12 DB5 PD5
' 13 DB6 PD6
' 14 DB7 PD7
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Porta.7 , Rs = Porta.5
Config Lcd = 20 * 4
INITLCD
Cls
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Pina.0 = Input
Start Adc
Config 1wire = Portd.2 ' íà ýòó íîæêó ïîäêëþ÷èì DS18B20 è ïîäòÿãèâàþùèé ðåçèñòîð íà 4,7 êîì ê + ïèòàíèÿ
Config Portb.0 = Output
Config Portb.1 = Output
Config Porta.2 = Output
'****************************?????? ?????????***********************************
Dim Signtemperatura As String * 1 , Celsium As String * 5
Dim Byte0 As Byte , Byte1 As Byte , T As Byte
Dim Dsid1(8) As Byte , Dsid2(8) As Byte
Dim Temp As Byte , X As Byte
Dim W As Word
Dim M As Word
W = 1wirecount()
Dsid1(1) = 1wsearchfirst()
Do
Dsid2(1) = 1wsearchnext()
Loop Until Err = 1
'*******************************************************************************
Do
Set Porta.2
Gosub Convallt
M = Getadc(0) : Gosub Shtory 'ñ÷èòûâàåì ðåçóëüòàò ñ ïèíà 0 ïîðòà À.
Locate 4 , 4 ' ïîçèöèÿ êóðñîðà
Lcd "ADC(0):" ; M ; " " 'âûâîäèì ðåçóëüòàò ïðåîáðàçîâàíèÿ íà ÆÊ
Waitms 100 ' çåäåðæêà 0,1 ñåêóíäû
1wverify Dsid1(1) : X = 1 : Gosub Temperature '1 ds18b20
1wverify Dsid2(1) : X = 2 : Gosub Temperature '2 ds18b20
Loop
End
'*******************************************************************************
Convallt:
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
Return
'*******************************************************************************
Temperature:
If Err = 0 Then
1wwrite &HBE
Byte0 = 1wread()
Byte1 = 1wread()
Reset Porta.2
Waitms 750
If Byte1 >= 248 Then
Byte0 = &HFF - Byte0
Byte1 = &HFF - Byte1
Signtemperatura = "-"
Reset Porta.2
Waitms 750
Else
Reset Porta.2
Waitms 750
Set Porta.2
Waitms 750
Reset Porta.2
Signtemperatura = "+"
End If
Temp = Byte0 / 16
T = Byte1 * 16
Temp = Temp + T
Celsium = Signtemperatura + Str(temp) +
Locate X , 1
Lcd Celsium
Locate 1 , 5
Lcd "C Dom"
Locate 2 , 5
Lcd "C Ulica"
Print #1 , Celsium ; " " ; M
End If
Return
Shtory:
If M < 300 Then
Portb.0 = 1
Portb.1 = 0
Else
Portb.1 = 1
Portb.0 = 0
End If
Return
'***************************************************************************
Re: BASCOM AVR в вопросах и ответах
Скорее всего не правильно подключил дисплей, или не подтянул некоторые ноги дисплея к земле.
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
у меня в протеусе работает,выв RW(жки,выв 5) к минусу подключили?
Re: BASCOM AVR в вопросах и ответах
да все подключено в протеусе у меня у самого все работает а в железе ступор
мне кажется с инициализацией косяк потому что счас добавил initlcd 2 раза с по подряд и появилась верхняя часть 3 и 4 строчки
мне кажется с инициализацией косяк потому что счас добавил initlcd 2 раза с по подряд и появилась верхняя часть 3 и 4 строчки
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
не знаю,гдето косяк скорее всего,может попробовать временно впаять 1602 и проверить-работает ли программа?ее придется подправить...
вопрос на засыпку-можно ли к одной меге16 подключить два индикатора нокиа1110 и как это примерно будет выглядеть?показывать будут разную информацию(не одно и то же на обоих жк)
вопрос на засыпку-можно ли к одной меге16 подключить два индикатора нокиа1110 и как это примерно будет выглядеть?показывать будут разную информацию(не одно и то же на обоих жк)
Re: BASCOM AVR в вопросах и ответах
Мне кажется что не получится, будут дублированные настройки выводов для дисплея (rs,cls)
Хотя, если настроить каждый дисплей отлично друг от друга то должно работать , если такое возможно...
Хотя, если настроить каждый дисплей отлично друг от друга то должно работать , если такое возможно...
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
А если в программе переназначать порты?например так
Config Graphlcd = 128 * 64eadogm , Cs1 = Portd.0 , A0 = Portd.7 , Si = Portd.6 , Sclk = Portd.5 , Rst = Portd.1 -работает один жк,выводим то что надо,перекл порты
Config Graphlcd = 128 * 64eadogm , Cs1 = Portc.0 , A0 = Portc.7 , Si = Portc.6 , Sclk = Portc.5 , Rst = Portc.1 -теперь другой жк,выводим то что надо-будет работать?
вообще-в теле программы можно переназначать порты?
Config Graphlcd = 128 * 64eadogm , Cs1 = Portd.0 , A0 = Portd.7 , Si = Portd.6 , Sclk = Portd.5 , Rst = Portd.1 -работает один жк,выводим то что надо,перекл порты
Config Graphlcd = 128 * 64eadogm , Cs1 = Portc.0 , A0 = Portc.7 , Si = Portc.6 , Sclk = Portc.5 , Rst = Portc.1 -теперь другой жк,выводим то что надо-будет работать?
вообще-в теле программы можно переназначать порты?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Дисплеи, имеющие вывод CS (Chip Select) можно подключить параллельно. Управляя этими выводами мы и выбираем, для кого предназначена та или иная информация. А инициализировать их можно разом, выбрав сразу оба дисплея.
Разумеется. Но в Вашем случае нужно просто настроить выводы CS для двух дисплеев, и дергать ими когда нужно.pavel1979 писал(а):вообще-в теле программы можно переназначать порты?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
rojnov
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Вс мар 27, 2011 07:48:48
- Откуда: г. Екатеринбург
Re: BASCOM AVR в вопросах и ответах
Для pavel1979.
Отправил письмо с вопросами в личку.
Отправил письмо с вопросами в личку.
Re: BASCOM AVR в вопросах и ответах
Подскажите а для BASCOM есть готовые библиотеки для работы с USB? Есть задача - принять с USB байт и выдать его на один из портов. Может кто подскажет примеры?


