BASCOM AVR в вопросах и ответах
- Сообщения: 139
- Зарегистрирован: Чт фев 11, 2016 18:35:37
Вообще-то, вопрос сформулирован сбивчиво и неточно - возможно двоякое понимание того, что там на самом деле происходит. Надо ждать уточнений от domrustika.
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
- Реклама
Ищу библиотеку Rainbow.Lib для WS2812b.
Есть ссылка http://bascom-forum.de/showthread.php?6 ... w-Lib-1-12. Пробовал тут регистрироваться, не вышло. По-моему еще денег просят для регистрации. Судя по официальному сайту Bascom, данная библиотека входит в версию программы 2079. У меня 2078. Хотел добавить бы. Просто пришли такие светодиоды. Хочется запустить, но пока не идет понимание того, как сделать управление. Погуглил, примеры есть, но во многих используются вставки ассемблера и я пока не разобрался с кодом.
Есть ссылка http://bascom-forum.de/showthread.php?6 ... w-Lib-1-12. Пробовал тут регистрироваться, не вышло. По-моему еще денег просят для регистрации. Судя по официальному сайту Bascom, данная библиотека входит в версию программы 2079. У меня 2078. Хотел добавить бы. Просто пришли такие светодиоды. Хочется запустить, но пока не идет понимание того, как сделать управление. Погуглил, примеры есть, но во многих используются вставки ассемблера и я пока не разобрался с кодом.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Версия 1.21serg_svd писал(а):Ищу библиотеку Rainbow.Lib для WS2812b.
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
max50, Спасибо!
Не пойму почему не работает. Текст программы взял из хелпа на официальном сайте просто, чтобы проверить работу библиотеки.
Подключаю библиотеку:
Полностью текст программы из хелпа
Саму библиотеку скопировал в папку LIB программы.
PS. Смотрю саму библиотеку. Не соображу... Она по названию фирменной похожа? я просто те команды, что описаны в хелпе баскома не вижу в этой библиотеке. Или туплю?
PS2. Точно, библиотека другая. Нашел описание http://bascom-forum.de/mediawiki/index.php/Rainbow_Lib
Не пойму почему не работает. Текст программы взял из хелпа на официальном сайте просто, чтобы проверить работу библиотеки.
Подключаю библиотеку:
Код: Выделить всё
$lib "Rainbow.lib"Спойлер
Код: Выделить всё
'-------------------------------------------------------------------------------
' rainbow_ws2812_Knightrider.bas
' based on sample from Galahat
'-------------------------------------------------------------------------------
$regfile = "m88pdef.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
$lib "Rainbow.lib"
Config Rainbow = 1 , Rb0_len = 8 , Rb0_port = Portb , Rb0_pin = 0
' ^ connected to pin 0
' ^------------ connected to portB
' ^-------------------------- 8 leds on stripe
' ^------------------------------------- 1 channel
'Global Color-variables
Dim Color(3) As Byte
R Alias Color(_base) : G Alias Color(_base + 1) : B Alias Color(_base + 2)
'CONST
Const Numleds = 8
'----[MAIN]---------------------------------------------------------------------
Dim N As Byte
Rb_selectchannel 0 ' select first channel
R = 50 : G = 0 : B = 100 ' define a color
Rb_setcolor 0 , Color(1) ' update leds
Rb_send
Do
For N = 1 To Numleds -1
Rb_shiftright 0 , Numleds 'shift to the right all leds except the last one
Waitms 100
Rb_send
Next
For N = 1 To Numleds -1
Rb_shiftleft 0 , Numleds 'shift to the left all leds except the last one
Waitms 100
Rb_send
Next
Waitms 500 'wait a bit
LoopPS. Смотрю саму библиотеку. Не соображу... Она по названию фирменной похожа? я просто те команды, что описаны в хелпе баскома не вижу в этой библиотеке. Или туплю?
PS2. Точно, библиотека другая. Нашел описание http://bascom-forum.de/mediawiki/index.php/Rainbow_Lib
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
- Реклама
может ли экран hd44780 показывать квадраты в верхнем ряду, вместо того что написано в коде из за несмытого флюса с МК?
Теоретически, если это активный флюс, то может. Но вероятность все же очень мала. Вы уверены что код рабочий? Можете показать? В монтаже точно ошибок нет? Дисплей другим кодом (заведомо рабочим) проверяли?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
монтаж рабочий проверил 2 раза. код самый обычный не пойму что тут может не работать. бред.
но есть нюанс 1. впаян кварц на 16мгц. а фьюзы стоят на 8 мгц.. может ли из за этого не работать экран?
флюс отмыл полностью - ЛТИ 120. не помогло.
Спойлер
Код: Выделить всё
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 8
$framesize = 24
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.7 , Db5 = Portb.0 , Db6 = Portb.1 , Db7 = Portb.2 , E = Portd.6 , Rs = Portd.5
Initlcd
Cls
Cursor Off
Locate 1 , 1
Lcd "Hello,"
Lowerline
Lcd "world!"
Endфлюс отмыл полностью - ЛТИ 120. не помогло.
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Что значит "фузы стоят на 8 МГц"? Внутренний RC-генератор что ли? Можете попробовать в настройках программы уменьшить скорость обмена с дисплеем. Например, поставить $crystal = 1000000.
domrustika, попробуйте добавить строчку
перед инициализацией дисплея
Код: Выделить всё
CONFIG LCDBUS = 4"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Ну с кодом точно все в порядке:

Вывод R/W не забыли на землю подключить? Скрин фьюзов покажите, будьте добры.
P.S. У HD44780 и совместимых с ним контроллеров инициализация отличается, но в библиотеке должно это быть учтено, я думаю...
Вывод R/W не забыли на землю подключить? Скрин фьюзов покажите, будьте добры.
P.S. У HD44780 и совместимых с ним контроллеров инициализация отличается, но в библиотеке должно это быть учтено, я думаю...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
протокол NEC все сделал как апноте 157,порты на жки свои,но опознается только адрес,команда всегда равно 0,где я мог ошибиться,исходник
'*******************************************************************************
'* Filename : IR NEC by http://www.sbprojects.com/knowledge/ir/ir.htm
'* Revision : 1.0
'* Controller : ATMEGA8
'* Compiler : BASCOM-AVR 1.11.8.3 DEMO
'* Author : Rubashka Vasiliy , Ukraine , 2007
'* WWW : http://ledeffects.net
'* Mail : info@ledeffects.net
'* Thank you : Aheir, aheir@radiokot.ru
'*******************************************************************************
$regfile = "m8def.dat"
$crystal = 8000000 '?????????? ?????????
$hwstack = 32
$swstack = 10
$framesize = 40
'$lib "lcd4.lbx"
Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
Config Lcd = 16 * 2
'Config Pind.2 = Input
'Config Portc.2 = Output
Config Lcd = 16 * 2
Config Pind.3 = Input
Portd.3 = 1
'Config Portc.2 = Output
Config Timer0 = Timer , Prescale = 256 '8000000/256=31250 Hz
Config Int1 = Falling 'Прерывание по спаду
Stop Timer0 'останавливаем таймер
Enable Timer0 'разрешаем работу таймера0
Enable Int1 'разрешаем работу прерывания0
Enable Interrupts 'Разрешаем прерывания
On Timer0 Tikers 'работа по таймеру
On Int1 Infrared 'работа по прерыванию
Dim Tik As Word 'счётчик тиков таймера
Dim Byt As Byte 'счётчик принятых бит
Dim Repeat_flag As Bit 'флаг повтора
Dim Start_flag As Bit 'флаг стартового условия
Dim Address As Byte 'байт адреса
Dim Command As Byte 'байт команды
Dim Address_1 As Byte 'прямой байт адреса
Dim Command_1 As Byte 'прямой байт команды
Dim Address_0 As Byte 'инверсный байт адреса
Dim Command_0 As Byte 'инверсный байт команды
Dim Summa As Word
'*******************************************************************************
Cls 'Очистить ЖКИ
Cursor Off 'Выключить курсор
Do 'Основной цикл
Locate 1 , 1
Lcd Address ; " " ; Command_0 ; " " 'Вывести на ЖКИ АДРЕС и КОММАНДУ
'If Command = 8 Then Portc.2 = 1 'Если нажата клавиша "P+" - включить светодиод
'If Command = 240 Then Portc.2 = 0 'Если нажата клавиша "P-" - выключить светодиод
Waitms 10 'Задержка 10 мс
Loop
End 'Конец основного цикла
'*******************************************************************************
Tikers: 'работа по таймеру
Timer0 = 253 '31250/(256-253)=10416,66 Hz (96 мкс)
'254 - TV SAMSUNG, 253 - DVD SAMSUNG и другие NEC
Incr Tik
If Tik >= 1200 Then 'если насчитали 1200 тиков, сбросили всё в исходное состояние
Tik = 0
Repeat_flag = 0
Start_flag = 0
Address_1 = 0
Command_1 = 0
Address_0 = 0
Command_0 = 0
Command = 0
Address = 0
Stop Timer0 'останавливаем таймер
End If
Return
'*******************************************************************************
Infrared: 'работа по прерыванию
Start Timer0 'запускаем таймер
If Tik >= 139 And Tik < 150 Then 'если случилось от 139 до 150 тиков - "СТАРТ"
Address = 1
Repeat_flag = 0
Start_flag = 1
Address_1 = 0
Command_1 = 0
Address_0 = 0
Command_0 = 0
End If
If Tik >= 116 And Tik < 139 Then 'если случилось от 116 до 138 тиков - "ПОВТОР"
Address = 2
Repeat_flag = 1
Start_flag = 0
End If
If Tik >= 22 And Tik < 116 And Start_flag = 1 Then 'если случилось от 22 до 115 тиков - приняли "1"
Incr Byt
If Byt < 9 Then
Shift Address_1 , Left
Address_1 = Address_1 + 1
End If
If Byt >= 9 And Byt < 17 Then
Shift Address_0 , Left
Address_0 = Address_0 + 1
End If
If Byt >= 17 And Byt < 25 Then
Shift Command_1 , Left
Command_1 = Command_1 + 1
End If
If Byt >= 25 Then
Shift Command_0 , Left
Command_0 = Command_0 + 1
End If
End If
If Tik >= 10 And Tik < 22 And Start_flag = 1 Then 'если случилось от 10 до 21 тика - приняли "0"
Incr Byt
If Byt < 9 Then
Shift Address_1 , Left
End If
If Byt >= 9 And Byt < 17 Then
Shift Address_0 , Left
End If
If Byt >= 17 And Byt < 25 Then
Shift Command_1 , Left
End If
If Byt >= 25 Then
Shift Command_0 , Left
End If
End If
Tik = 0
If Byt = 32 Then 'если приняли 4 байта, проверяем правильность приёма команды
'если адрес или команда 16-ричные, проверка не проходит, поэтому закомментировано
'Summa = Address_0 + Address_1
'If Summa = 255 Then
Address = Address_1
'Else
'Address = 0
'End If
'Summa = Command_0 + Command_1
'If Summa = 255 Then
Command = Command_1
'Else
'Command = 0
'End If
Byt = 0
Repeat_flag = 0
Start_flag = 0
Stop Timer0 'останавливаем таймер
End If
Return
кварца нет,фузы заводские,но с внутренним генератором на 8 МГц
Спойлер
'*******************************************************************************'*******************************************************************************
'* Filename : IR NEC by http://www.sbprojects.com/knowledge/ir/ir.htm
'* Revision : 1.0
'* Controller : ATMEGA8
'* Compiler : BASCOM-AVR 1.11.8.3 DEMO
'* Author : Rubashka Vasiliy , Ukraine , 2007
'* WWW : http://ledeffects.net
'* Mail : info@ledeffects.net
'* Thank you : Aheir, aheir@radiokot.ru
'*******************************************************************************
$regfile = "m8def.dat"
$crystal = 8000000 '?????????? ?????????
$hwstack = 32
$swstack = 10
$framesize = 40
'$lib "lcd4.lbx"
Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
Config Lcd = 16 * 2
'Config Pind.2 = Input
'Config Portc.2 = Output
Config Lcd = 16 * 2
Config Pind.3 = Input
Portd.3 = 1
'Config Portc.2 = Output
Config Timer0 = Timer , Prescale = 256 '8000000/256=31250 Hz
Config Int1 = Falling 'Прерывание по спаду
Stop Timer0 'останавливаем таймер
Enable Timer0 'разрешаем работу таймера0
Enable Int1 'разрешаем работу прерывания0
Enable Interrupts 'Разрешаем прерывания
On Timer0 Tikers 'работа по таймеру
On Int1 Infrared 'работа по прерыванию
Dim Tik As Word 'счётчик тиков таймера
Dim Byt As Byte 'счётчик принятых бит
Dim Repeat_flag As Bit 'флаг повтора
Dim Start_flag As Bit 'флаг стартового условия
Dim Address As Byte 'байт адреса
Dim Command As Byte 'байт команды
Dim Address_1 As Byte 'прямой байт адреса
Dim Command_1 As Byte 'прямой байт команды
Dim Address_0 As Byte 'инверсный байт адреса
Dim Command_0 As Byte 'инверсный байт команды
Dim Summa As Word
'*******************************************************************************
Cls 'Очистить ЖКИ
Cursor Off 'Выключить курсор
Do 'Основной цикл
Locate 1 , 1
Lcd Address ; " " ; Command_0 ; " " 'Вывести на ЖКИ АДРЕС и КОММАНДУ
'If Command = 8 Then Portc.2 = 1 'Если нажата клавиша "P+" - включить светодиод
'If Command = 240 Then Portc.2 = 0 'Если нажата клавиша "P-" - выключить светодиод
Waitms 10 'Задержка 10 мс
Loop
End 'Конец основного цикла
'*******************************************************************************
Tikers: 'работа по таймеру
Timer0 = 253 '31250/(256-253)=10416,66 Hz (96 мкс)
'254 - TV SAMSUNG, 253 - DVD SAMSUNG и другие NEC
Incr Tik
If Tik >= 1200 Then 'если насчитали 1200 тиков, сбросили всё в исходное состояние
Tik = 0
Repeat_flag = 0
Start_flag = 0
Address_1 = 0
Command_1 = 0
Address_0 = 0
Command_0 = 0
Command = 0
Address = 0
Stop Timer0 'останавливаем таймер
End If
Return
'*******************************************************************************
Infrared: 'работа по прерыванию
Start Timer0 'запускаем таймер
If Tik >= 139 And Tik < 150 Then 'если случилось от 139 до 150 тиков - "СТАРТ"
Address = 1
Repeat_flag = 0
Start_flag = 1
Address_1 = 0
Command_1 = 0
Address_0 = 0
Command_0 = 0
End If
If Tik >= 116 And Tik < 139 Then 'если случилось от 116 до 138 тиков - "ПОВТОР"
Address = 2
Repeat_flag = 1
Start_flag = 0
End If
If Tik >= 22 And Tik < 116 And Start_flag = 1 Then 'если случилось от 22 до 115 тиков - приняли "1"
Incr Byt
If Byt < 9 Then
Shift Address_1 , Left
Address_1 = Address_1 + 1
End If
If Byt >= 9 And Byt < 17 Then
Shift Address_0 , Left
Address_0 = Address_0 + 1
End If
If Byt >= 17 And Byt < 25 Then
Shift Command_1 , Left
Command_1 = Command_1 + 1
End If
If Byt >= 25 Then
Shift Command_0 , Left
Command_0 = Command_0 + 1
End If
End If
If Tik >= 10 And Tik < 22 And Start_flag = 1 Then 'если случилось от 10 до 21 тика - приняли "0"
Incr Byt
If Byt < 9 Then
Shift Address_1 , Left
End If
If Byt >= 9 And Byt < 17 Then
Shift Address_0 , Left
End If
If Byt >= 17 And Byt < 25 Then
Shift Command_1 , Left
End If
If Byt >= 25 Then
Shift Command_0 , Left
End If
End If
Tik = 0
If Byt = 32 Then 'если приняли 4 байта, проверяем правильность приёма команды
'если адрес или команда 16-ричные, проверка не проходит, поэтому закомментировано
'Summa = Address_0 + Address_1
'If Summa = 255 Then
Address = Address_1
'Else
'Address = 0
'End If
'Summa = Command_0 + Command_1
'If Summa = 255 Then
Command = Command_1
'Else
'Command = 0
'End If
Byt = 0
Repeat_flag = 0
Start_flag = 0
Stop Timer0 'останавливаем таймер
End If
Return
А у 8_меги по умолчанию внутренний генератор не 1 МГц генерит?Novice user писал(а): кварца нет,фузы заводские,но с внутренним генератором на 8 МГц
Я ж написал-все фузы заводские(RSTDISBL,WDTON,SPIEN,CKOPT,EESAVE,BOOTSZ1,BOOTSZ0,BOOTRST,BODLEVEL,BODEN,SUT1,SUT0-все по умолчанию,то есть заводские,а CKSEL на 8 МГц)
Раньше все было норм,а тут,пробовал на другой плате с другими мк и фотоприемниками,ставил кварц на 8 мгц(естественно ставил соотв фузы)-команда=0,адрес=0 либо =2,иногда проскакивает адрес=64,но очень редко,наверно раз в сотню нажатий на пульте,пульт NEC 100 %,пробовал другие пульты того же стандарта-команда=0 и все!
просто у меня есть конструкция часы+2 термометра(дом и улица)+7 будильников+таймер до 99 мин,сейчас хочу добавить программируемый пульт управления для тв,а то на моем телеке нет вкл по времени(типа поставил на 7 утра и в 7,00 он вкл,в телеке и часов нет,только таймер откл),пульт пока собран на другой конструкции,но не могу идентифицировать отправляемые им адрес и команду
Раньше все было норм,а тут,пробовал на другой плате с другими мк и фотоприемниками,ставил кварц на 8 мгц(естественно ставил соотв фузы)-команда=0,адрес=0 либо =2,иногда проскакивает адрес=64,но очень редко,наверно раз в сотню нажатий на пульте,пульт NEC 100 %,пробовал другие пульты того же стандарта-команда=0 и все!
просто у меня есть конструкция часы+2 термометра(дом и улица)+7 будильников+таймер до 99 мин,сейчас хочу добавить программируемый пульт управления для тв,а то на моем телеке нет вкл по времени(типа поставил на 7 утра и в 7,00 он вкл,в телеке и часов нет,только таймер откл),пульт пока собран на другой конструкции,но не могу идентифицировать отправляемые им адрес и команду
Звыняйте, я таки думал что "заводские" это какие идут с завода,Novice user писал(а):Я ж написал-все фузы заводские.....,а CKSEL на 8 МГц)
а не изменённые под 8 МГц.
бывает
а есть ли у кого еще вариант декодирования сигнала с пульта ду протокола NEC?
Возникла у меня необходимость запустить ЖК индикатор WO1602F-TMI-AT фирмы WINSTAR на контроллере ST7032. По даташиту написано, что совместим с контроллером HD44780.
набросал простой код для режима 8-bit.
индикатор подключен по схеме из даташита

После запуска на индикаторе ничего нет, даже первая строка не подсвечивается. Стандартный дисплей HD44780 при этом работает.
набросал простой код для режима 8-bit.
Спойлер
Код: Выделить всё
' WO1602F-TMI
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Lcd = 16x2
Config Lcdpin = Pin , Port = Portb , E = Portc.0 , Rs = Portc.1
Initlcd
Cursor On
'Cursor Off Noblink
'Cls
Locate 1 , 1
Lcd "Hello world!"
Locate 2 , 1
Lcd "0123456789ABCDEF"
Do
Loop
End
После запуска на индикаторе ничего нет, даже первая строка не подсвечивается. Стандартный дисплей HD44780 при этом работает.
- Вложения
-
- WO1602F-TMI-AT.pdf
- Datascheet
- (417.27 КБ) 232 скачивания
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
А порты по которым данные поступают почему не указали?serg_svd писал(а): Config Lcd = 16x2
Config Lcdpin = Pin , Port = Portb , E = Portc.0 , Rs = Portc.1
Вот примерно так:
Config Lcdpin = Pin , Rs = Portd.5 , E = Portd.6 , Db4 = Portd.7 , Db5 = Portb.0 , Db6 = Portb.1 , Db7 = Portb.2
Это 4 битный режим индикатора. Я использовал 8 битный.Adagumer писал(а): Вот примерно так:
Config Lcdpin = Pin , Rs = Portd.5 , E = Portd.6 , Db4 = Portd.7 , Db5 = Portb.0 , Db6 = Portb.1 , Db7 = Portb.2
Строчка кода об этом и говорит
Код: Выделить всё
Config Lcdpin = Pin , Port = Portb , E = Portc.0 , Rs = Portc.1PORTB.0 ---> D0
PORTB.1 ---> D1
PORTB.2 ---> D2
PORTB.3 ---> D3
PORTB.4 ---> D4
PORTB.5 ---> D5
PORTB.6 ---> D6
PORTB.7 ---> D7
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Звыняйте не заметил!serg_svd писал(а): Это 4 битный режим индикатора. Я использовал 8 битный.


