Страница 254 из 304

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

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

Интересно как контрастность то правильно регулировать? Программно или аппаратно? А то непонятно почему мусор на индикаторе высыпается

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

Добавлено: Вт апр 12, 2016 11:05:13
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

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

Добавлено: Ср апр 13, 2016 19:50:29
serg_svd
Продолжаю играться с индикатором. Очень интересный экземплярчик. Чуть изменить инициализацию и он превращается в одно строчный с размером символов 5х16 точек.
Изображение

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

Добавлено: Вт май 03, 2016 13:03:47
Cat@lex
Доброго времени суток, уважаемые форумчане, прошу помощи.. Есть прибор, для него нужно сделать дублирующее табло. Нашёл на форуме код на bascom динамической индикации со сдвиговым регистром. Но не могу разобраться с протоколом передачи. Дайте пожалуйста совет. С контроллерами только начал разбираться.

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

Добавлено: Вт май 03, 2016 15:29:31
edm2007
Доброго.

Если только начали, то для ознакомления можете поглядеть ЗДЕСЬ. И про сдвиговые регистры в том числе...

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

Добавлено: Вт май 03, 2016 15:37:04
Gordon Shumway
Cat@lex писал(а):динамической индикации со сдвиговым регистром. Но не могу разобраться с протоколом передачи.
Вот тут на эту тему очень хорошо разжевано. Именно на Баскоме, и именно со сдвиговыми регистрами 74HC595. С поясняющими картинками, с примером программы.

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

Добавлено: Вт май 03, 2016 15:45:59
edm2007
Ну да, подробно. Только у автора явно прослеживается "таймеробоязнь". То что можно (и нужно) в три строки затолкать в прерывание, разворачивается в простыню в основном цикле. :tea:

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

Добавлено: Вт май 03, 2016 15:49:17
Gordon Shumway
edm2007 писал(а): у автора явно прослеживается "таймеробоязнь".
На мой взгляд так понятнее, особенно для новичка. А при использовании материала автора код можно (и нужно) оптимизировать в соответствии с собственным опытом. :)

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

Добавлено: Вт май 03, 2016 15:52:24
edm2007
Эх, это-то и опасно, что для новичка. Пока он до оптимизации дорастет, все это уже крепко впечатается в мозг... Ну да это всего лишь мое личное мнение. :)

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

Добавлено: Ср май 04, 2016 06:36:00
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

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

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

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

Добавлено: Ср май 04, 2016 17:48:24
serg_svd
Jack_A писал(а): А подсветка - не чересчурная ? Как по мне - таки да. Большой расход тока и малая контрастность. Сколько потребляет подсветка? Гасящий резистор есть ?
Это такой яркий на фотографии вышел. В реальности как и любой "синий" китайский дисплей, если видели. Подсветка кушает меньше 20 мА. Резистор уже впаян, но можно на плате поставить еще Ом 20 и занизить ток. Не так ярко светить будет

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

Добавлено: Ср май 18, 2016 20:55:46
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

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

Добавлено: Чт май 19, 2016 10:26:25
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

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

Добавлено: Пт май 20, 2016 09:52:55
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. Вот Вам и сдвиг.

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

Добавлено: Пт май 20, 2016 20:23:50
kip96
chernishovmihail писал(а): Проблема такова: после выхода из Powersave что-то происходит с частотой- некорректно работает "Witems", шина I2C,(возможно и 1Wire), но $baud - не меняется.
А где в Вашем коде "Witems", шина I2C,(возможно и 1Wire)?

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

Добавлено: Ср май 25, 2016 10:53:15
pavel123
Доб.день, Коты...
Тираню модуль ардуино на ds3231. Запустился без вопросов. Часики тикают. В процессе тестовых прогонок, заметил что часики убегают на 1 сек. в сутки. Так как часики будут работать в общей системе контроля с привязкой к реальному времени, то этот уход как бы много. Я делал часики на 1307, так уход был всего 2-3 сек. за полгода.
Стал разбираться с регистром коррекции хода, который есть в этой мелкосхеме.
В 7-й бит регистра записывается знак коррекции + или -.
Собственных знаний не хватает. Помогите мне пожалуйста....
Что нужно поставить в этот бит для + и что для -...
Спасибо.

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

Добавлено: Чт май 26, 2016 20:12:54
Мурлокотам
Насколько я понял, в этот регистр данные пишутся в дополнительном коде:
The code is encoded in two’s complement, with
bit 7 representing the sign bit.
Значит единица в седьмом бите - это "минус".

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

Добавлено: Пт май 27, 2016 10:59:52
pavel123
Мурлокотам спасибо за ваше внимание к моему вопросу.
Кажись разобрался.
По пдф-ке, коррекция хода происходит путем подключения и отключения дополнительных конденсаторов в самом чипе. За это отвечают младшие 6-ть битов. Коррекция происходит в диапазоне значений ±127. Бит 7 это бит знака.
Обычно, по двоичной логике 1-ца значит "включено", а 0 -"выключено".
Получается, все что меньше значения 128 это (-) коррекция, все что больше 128 это (+) коррекция.
По итогу, на сколько я могу полагаться на свой слух и "пик-пикам" радио :)) , часы таки замедлились. Я поставил значение этого регистра 131.
128 это 1 (+) в 7-й бит и 3-ка сама коррекция. &B10000011
Но надо еще понаблюдать в более длительной перспективе.
И еще одно дополнение: + замедляет ход часов, - ускоряет....

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

Добавлено: Сб июн 11, 2016 00:07:49
pavel123
Часики таки удалось замедлить и добиться более менее приемлемой точности хода. Время покажет... :)

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