BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: BASCOM AVR в вопросах и ответах

Сообщение serg_svd »

ЗЫ. Переписал инициализацию 8bit из даиташита. Тоже глухо. Решил рискнуть и подключить вывод 20 (NC/V0) к переменному резистору для регулировки контраста. Индикатор подал признаки жизни, но изображение нечеткое и грязное. Засвечены лишние точки. Так что похоже причина в контрастности дисплея. А инициализируется он верно, что с даташита взятый порядок инициализации, что с баскома стандартный код.

Интересно как контрастность то правильно регулировать? Программно или аппаратно? А то непонятно почему мусор на индикаторе высыпается
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: BASCOM AVR в вопросах и ответах

Сообщение serg_svd »

Утро вечера мудренее....
Победил индикатор. Инициализацию взял из даташита на ST7032 для режима 8-bit.
Изображение

В общем получилась смесь из стандартных команд баскома и даташитовской инициализации. Первый раз использовал команду Lcdcmd.
Все таки я очень плохо знаю баском и пользуюсь дай бог 5-й частью команд.

Пример кода. Может кому пригодится
Спойлер

Код: Выделить всё

' Работа с ЖК индикатором WO1602F-TMI-AT к контроллером ST7032
' 8-bit mode
' Инициализация индикатора выполнена на основании даташита на контроллер
' Автор serg_svd

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32

'                     НАСТРОЙКА ПОРТОВ МИКРОКОНТРОЛЛЕРА
'0 - вход, 1 - выход
Ddrb = &B11111111
Ddrc = &B00000011
Ddrd = 0

' КОНФИГУРАЦИЯ ИНДИКАТОРА
Config Lcdpin = Pin , Port = Portb , E = Portc.0 , Rs = Portc.1
Config Lcd = 16 * 2

' ИНИЦИАЛИЗАЦИЯ ДИСПЛЕЯ
Waitms 50                                                   ' Ожидание после включения питания

' Function set normal mode
Lcdcmd &B00111000                                           ' DL=1 (8bit), N=1 (2 line), DH=0 (5x8dot), IS=0 Normal mode
Waitus 30

' Function set Extension mode
Lcdcmd &B00111001                                           ' IS=1 Extension mode
Waitus 30

' Internal OSC frequency
Lcdcmd &B00010100                                           ' BS=1/5, F2,F1,F0=192 Hz
Waitus 30

' Contrast Set
Lcdcmd &B01110000                                           ' C3,C2,C1,C0 =0000
Waitus 30

' Power/ICON/Contrast control
Lcdcmd &B01010010                                           ' Ion=0(display OFF), Bon=0, C5,C4=10
Waitus 30

' Follower control
Lcdcmd &B01101010                                           ' Fon=1, Rab2,Rab1,Rab0=010
Waitms 200

' Display ON/OFF control
Lcdcmd &B00001100                                           ' D=1(display ON), C=0(cursor OFF), B=0(blink OFF)
Waitus 30
' КОНЕЦ ИНИЦИАЛИЗАЦИИ ИНДИКАТОРА
Cls

Do
   Locate 1 , 3
   Lcd "Hello, world!"
   Locate 2 , 1
   Lcd "0123456789ABCDEF"
   Wait 1
   Cls
   Wait 1
Loop

End


То есть вся разница и заключается в такой вот инициализации дисплея вместо стандартной баскомовской команды Initlcd
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: BASCOM AVR в вопросах и ответах

Сообщение serg_svd »

Продолжаю играться с индикатором. Очень интересный экземплярчик. Чуть изменить инициализацию и он превращается в одно строчный с размером символов 5х16 точек.
Изображение
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Cat@lex
Родился
Сообщения: 3
Зарегистрирован: Вс май 01, 2016 14:25:35

Re: BASCOM AVR в вопросах и ответах

Сообщение Cat@lex »

Доброго времени суток, уважаемые форумчане, прошу помощи.. Есть прибор, для него нужно сделать дублирующее табло. Нашёл на форуме код на bascom динамической индикации со сдвиговым регистром. Но не могу разобраться с протоколом передачи. Дайте пожалуйста совет. С контроллерами только начал разбираться.
Вложения
протокол.txt
(630 байт) 150 скачиваний
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Доброго.

Если только начали, то для ознакомления можете поглядеть ЗДЕСЬ. И про сдвиговые регистры в том числе...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Gordon Shumway »

Cat@lex писал(а):динамической индикации со сдвиговым регистром. Но не могу разобраться с протоколом передачи.


Вот тут на эту тему очень хорошо разжевано. Именно на Баскоме, и именно со сдвиговыми регистрами 74HC595. С поясняющими картинками, с примером программы.
С уважением,
Алексей.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Ну да, подробно. Только у автора явно прослеживается "таймеробоязнь". То что можно (и нужно) в три строки затолкать в прерывание, разворачивается в простыню в основном цикле. :tea:
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Gordon Shumway »

edm2007 писал(а): у автора явно прослеживается "таймеробоязнь".


На мой взгляд так понятнее, особенно для новичка. А при использовании материала автора код можно (и нужно) оптимизировать в соответствии с собственным опытом. :)
С уважением,
Алексей.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Эх, это-то и опасно, что для новичка. Пока он до оптимизации дорастет, все это уже крепко впечатается в мозг... Ну да это всего лишь мое личное мнение. :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Cat@lex
Родился
Сообщения: 3
Зарегистрирован: Вс май 01, 2016 14:25:35

Re: BASCOM AVR в вопросах и ответах

Сообщение Cat@lex »

Пробовал так.

'avrproject.ru
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600

$hwstack = 32 ' default use 32 for the hardware stack

$swstack = 10 ' default use 10 for the SW stack

$framesize = 40 ' default use 40 for the frame space

Config Com1 = Dummy , Synchrone = 0 , Parity = disabled , Stopbits = 1 , Databits = 8 , Clockpol = 0


'объявляем подпрограммы
Declare Sub Getline(s As String) 'чтение данных из буфера
Declare Sub Del_buffer() 'очистка буфера

Dim A As Long



'значение этой переменной должны будем вывести на индикатор


'переменные для преобразования исходного числа
Dim N1 As Byte
Dim N2 As Byte
Dim N3 As Byte
Dim N4 As Byte
Dim N5 As Byte
Dim N6 As Byte
Dim N7 As Byte
Dim N8 As Byte
Dim M1 As Long
Dim M2 As Long
Dim M3 As Long
Dim M4 As Long
Dim M5 As Long
Dim M6 As Long
Dim M7 As Long
Dim M8 As Long

'для значений отправляемых в регистр
Dim R As Byte

Do

Input "A" , A 'значение переменной для вывода на индикатор

'раскладываем число на составляющие
M1 = A
M2 = M1
M3 = M1
M4 = M1
M5 = M1
M6 = M1
M7 = M1
M8 = M1

M1 = M1 / 10000000
N1 = Abs(m1)

M2 = M2 Mod 10000000
M2 = M2 / 1000000
N2 = Abs(m2)

M3 = M3 Mod 1000000
M3 = M3 / 100000
N3 = Abs(m3)

M4 = M4 Mod 100000
M4 = M4 / 10000
N4 = Abs(m4)

M5 = M5 Mod 10000
M5 = M5 / 1000
N5 = Abs(m5)

M6 = M6 Mod 1000
M6 = M6 / 100
N6 = Abs(m6)

M7 = M7 Mod 100
M7 = M7 / 10
N7 = Abs(m7)

M8 = M8 Mod 10
N8 = Abs(m8)

'начинаем задвигать данные в регистр

R = &B10000000
Gosub Anod
R = Lookup(n1 , Numbers) 'начинаем с левого разряда
Gosub Registr 'подпрограмма отправки данных в регистр

R = &B01000000
Gosub Anod
R = Lookup(n2 , Numbers)
Gosub Registr

R = &B00100000
Gosub Anod
R = Lookup(n3 , Numbers)
Gosub Registr

R = &B00010000
Gosub Anod
R = Lookup(n4 , Numbers)
Gosub Registr

R = &B00001000
Gosub Anod
R = Lookup(n5 , Numbers)
Gosub Registr

R = &B00000100
Gosub Anod
R = Lookup(n6 , Numbers)
Gosub Registr

R = &B00000010
Gosub Anod
R = Lookup(n7 , Numbers)
Gosub Registr

R = &B00000001
Gosub Anod
R = Lookup(n8 , Numbers)
Gosub Registr

Loop

End 'конец программы

'массив с кодами для семисегментника
Numbers:
Data &B11000000 '0
Data &B11111001 '1
Data &B10100100 '2
Data &B10110000 '3
Data &B10011001 '4
Data &B10010010 '5
Data &B10000010 '6
Data &B11111000 '7
Data &B10000000 '8
Data &B10010000 '9

'подпрограмма отправки данных в регистр
Registr:
Shiftout Portd.5 , Portd.6 , R , 1 'задвигаем данные
Pulseout Portd , 7 , 10 'защелкиваем регистр
Waitms 5 'задержка переключений разрядов
Return

'подпрограмма работы с регистром переключающим аноды
Anod:
Shiftout Portd.3 , Portd.4 , R , 3
Pulseout Portd , 2 , 10
Return
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: BASCOM AVR в вопросах и ответах

Сообщение Jack_A »

serg_svd писал(а):

А подсветка - не чересчурная ? Как по мне - таки да. Большой расход тока и малая контрастность. Сколько потребляет подсветка? Гасящий резистор есть ?
Изображение
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: BASCOM AVR в вопросах и ответах

Сообщение serg_svd »

Jack_A писал(а): А подсветка - не чересчурная ? Как по мне - таки да. Большой расход тока и малая контрастность. Сколько потребляет подсветка? Гасящий резистор есть ?

Это такой яркий на фотографии вышел. В реальности как и любой "синий" китайский дисплей, если видели. Подсветка кушает меньше 20 мА. Резистор уже впаян, но можно на плате поставить еще Ом 20 и занизить ток. Не так ярко светить будет
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
chernishovmihail
Родился
Сообщения: 2
Зарегистрирован: Ср май 18, 2016 17:02:36

Re: BASCOM AVR в вопросах и ответах

Сообщение chernishovmihail »

столкнулся с проблемой при выходе из режима "Powersave"
написал мигалку с моделькой в протеус чтоб наглядно было и положил на яндекс
https://yadi.sk/d/bs1ct-ovrpFaX
Использую "Config Timer2 = Timer , Async = On , Prescale = 1024"
Проблема такова: после выхода из Powersave что-то происходит с частотой- некорректно работает "Witems", шина I2C,(возможно и 1Wire), но $baud - не меняется. То есть вывод в терминал нормальный, а вот опросить датчики уже не могу. Месяца 2 уж извращаюсь. Возможно у кого-то есть соображения по этому поводу.

$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 40
$swstack = 128
$framesize = 32
$baud = 9600
Print "***"
Dim Var1 As Integer 'просто счетная переменная
Config Portb.0 = Output 'вешаем светодиод на порт
Mypover Alias Portb.0
Config Timer2 = Timer , Async = On , Prescale = 1024 'запускаем Таймер2 в асинхронном режиме
On Timer2 Awake Nosave
Enable Interrupts
Mcucr = &B10110000 'разрешаем режим Powersave
Gosub Awake
Do
Print "Powersave"
Print " "
Enable Timer2
Powersave
Loop
End

Awake:
Disable Timer2
Print "TIMSK=" ; Bin(timsk) ; " ASSR=" ; Bin(assr) ; " TIFR=" ; Bin(tifr) ; " OSCCAL=" ; Bin(osccal)
Mypover = 1 'мигаем светодиодом
Wait 1
Mypover = 0
Wait 1
Mypover = 1
Wait 1
Mypover = 0
Wait 1

Incr Var1
Print "Var1= " ; Var1
Return
Аватара пользователя
Microtech
Поставщик валерьянки для Кота
Сообщения: 2052
Зарегистрирован: Вт ноя 03, 2009 21:02:38
Откуда: Москва
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Microtech »

Нечаянно наткнулся на особенность Lookup. :shock:
По привычке, поставил RETURN после блока DATA. Всё сползло на 2 байта.

B = Lookup(1 , Tabl) даёт ерунду (предыдущий байт из памяти).
B = Lookup(2 , Tabl) b=&H44 даёт первый элемент массива tabl
B = Lookup(3 , Tabl) b=&H65 даёт второй элемент массива tabl

.....
....

end

Tabl:
Data &H44 , &H65 , &H6C
Return
Аватара пользователя
Tankor
Встал на лапы
Сообщения: 139
Зарегистрирован: Вт май 03, 2011 10:13:12
Откуда: Россия, Татарстан

Re: BASCOM AVR в вопросах и ответах

Сообщение Tankor »

Microtech писал(а):Нечаянно наткнулся на особенность Lookup. :shock:
По привычке, поставил RETURN после блока DATA. Всё сползло на 2 байта.

B = Lookup(1 , Tabl) даёт ерунду (предыдущий байт из памяти).
B = Lookup(2 , Tabl) b=&H44 даёт первый элемент массива tabl
B = Lookup(3 , Tabl) b=&H65 даёт второй элемент массива tabl

.....
....

end

Tabl:
Data &H44 , &H65 , &H6C
Return

Вообще не ясно, зачем после дата ставить return? Не надо.
Вот из хелпа:
The value can be up to 65535. 0 will return the first entry.
Ясна мысль? Lookup берёт данные с 0. Вот Вам и сдвиг.
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Re: BASCOM AVR в вопросах и ответах

Сообщение kip96 »

chernishovmihail писал(а):Проблема такова: после выхода из Powersave что-то происходит с частотой- некорректно работает "Witems", шина I2C,(возможно и 1Wire), но $baud - не меняется.

А где в Вашем коде "Witems", шина I2C,(возможно и 1Wire)?
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
pavel123
Грызет канифоль
Сообщения: 268
Зарегистрирован: Чт май 17, 2007 09:44:13
Откуда: Украина, г. Кривой Рог

Re: BASCOM AVR в вопросах и ответах

Сообщение pavel123 »

Доб.день, Коты...
Тираню модуль ардуино на ds3231. Запустился без вопросов. Часики тикают. В процессе тестовых прогонок, заметил что часики убегают на 1 сек. в сутки. Так как часики будут работать в общей системе контроля с привязкой к реальному времени, то этот уход как бы много. Я делал часики на 1307, так уход был всего 2-3 сек. за полгода.
Стал разбираться с регистром коррекции хода, который есть в этой мелкосхеме.
В 7-й бит регистра записывается знак коррекции + или -.
Собственных знаний не хватает. Помогите мне пожалуйста....
Что нужно поставить в этот бит для + и что для -...
Спасибо.
Аватара пользователя
Мурлокотам
Встал на лапы
Сообщения: 139
Зарегистрирован: Вт ноя 06, 2012 12:37:08
Откуда: СПб

Re: BASCOM AVR в вопросах и ответах

Сообщение Мурлокотам »

Насколько я понял, в этот регистр данные пишутся в дополнительном коде:
The code is encoded in two’s complement, with
bit 7 representing the sign bit.

Значит единица в седьмом бите - это "минус".
Лом - это сложное техническое устройство.
Аватара пользователя
pavel123
Грызет канифоль
Сообщения: 268
Зарегистрирован: Чт май 17, 2007 09:44:13
Откуда: Украина, г. Кривой Рог

Re: BASCOM AVR в вопросах и ответах

Сообщение pavel123 »

Мурлокотам спасибо за ваше внимание к моему вопросу.
Кажись разобрался.
По пдф-ке, коррекция хода происходит путем подключения и отключения дополнительных конденсаторов в самом чипе. За это отвечают младшие 6-ть битов. Коррекция происходит в диапазоне значений ±127. Бит 7 это бит знака.
Обычно, по двоичной логике 1-ца значит "включено", а 0 -"выключено".
Получается, все что меньше значения 128 это (-) коррекция, все что больше 128 это (+) коррекция.
По итогу, на сколько я могу полагаться на свой слух и "пик-пикам" радио :)) , часы таки замедлились. Я поставил значение этого регистра 131.
128 это 1 (+) в 7-й бит и 3-ка сама коррекция. &B10000011
Но надо еще понаблюдать в более длительной перспективе.
И еще одно дополнение: + замедляет ход часов, - ускоряет....
Аватара пользователя
pavel123
Грызет канифоль
Сообщения: 268
Зарегистрирован: Чт май 17, 2007 09:44:13
Откуда: Украина, г. Кривой Рог

Re: BASCOM AVR в вопросах и ответах

Сообщение pavel123 »

Часики таки удалось замедлить и добиться более менее приемлемой точности хода. Время покажет... :)

В итоге, диапазон корректировки оказался не ±127, как я прочитал в одном из пдф к эти часам, а всего ±7.
Значение имеет количество 1 (включено) в байте коррекции. А в каком бите они будут стоять похоже без разницы. Естественно кроме 7-го бита в который записан знак коррекции. :)
Ответить

Вернуться в «AVR»