Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.200.66] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте.
Есть желание собрать вольтамперметр для зарядного стройства. Вроде нашел схему АмперВольтметр на attiny13 http://meandr.org/archives/5226, но там используется дисплей на 1602, а я хочу использовать 0802, т.е 8-ми символьный. Прошу помочь исправить прошивку для этого случая, т.к в программировании я полный ноль. Исходник прошивки выкладываю ниже, а вот это я хочу получить в итоге (термометр мне не нужен): '------------------------------------------------------------------------------' 'Program: miniaturowy miernik do zasilacza na attiny13 i LCD ' 'Wersja z 64 próbkami i wyœwietlaniem œredniej ' 'kompilator: bascom 1.11.9.0 data: 23.12.2009 autor: Manekinen ' 'strona domowa projektu: mdiy.pl | wolno? wariacie w swoim warsztacie ' 'wszelkie modyfikacje dozwolone, publikuj¹c nale¿y zachowaæ ten nag³ówek ' ' WY£¥CZNIE DO U¯YTKU NIEKOMERCYJNEGO ' '------------------------------------------------------------------------------' Const Pullup = 6 'ile mV b³êdu wprowadza pullup wyœwietlacza pod³¹czony do gnd poprzez 100ohm... troche nieeleganckie ale proste i skuteczne $regfile = "attiny13.dat" '$regfile = "m8def.dat" $crystal = 1200000 '$crystal = 2000000 $hwstack = 8 $swstack = 16 $framesize = 16 '$noramclear '$sim Dim Pomiar As Word Dim Pokaz As String * 4 Dim Pokaz2 As String * 4 Dim Znak As Byte Dim Licz As Byte Dim Petla As Byte Declare Sub Mierz Declare Sub Formuj Declare Sub Wyswietl Config Adc = Single , Prescaler = Auto , Reference = Internal 'off Start Adc Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0 Cursor Off Cls Do Upperline 'od nowa dla napiêcia i pr¹du Licz = 1 'adc dla napiecia Mierz 'mierzy i formuje napiêcie 'Moc = Pomiar 'kopia dla obliczeñ mocy Znak = 86 'znak dla napiêcia Wyswietl 'wyœwietla napiêcie Licz = 3 'adc dla pr¹du ------- ?????? Mierz 'mierzy i formuje pr¹d 'w pomiar zostaje pr¹d Pokaz2 = Format(pokaz , "0.00") 'forumje pr¹d drugi raz Znak = 65 'znak dla pr¹du Wyswietl 'wyœwietla pr¹d 'Lowerline 'od nowa dla temperatury i mocy 'Mnozenie 'Pomiar = Moc * Pomiar 'liczy moc 'Pomiar = Pomiar / 100 'Formuj 'Znak = 87 'znak dla mocy 'Wyswietl 'wyœwietla moc Licz = 0 'adc dla temperatury Mierz 'mierzy i formuje temperaturê Znak = 42 'znak dla temperatury Wyswietl 'wyœwietla temperaturê Loop '_______________________ Mierz: Pomiar = 0 Petla = 0 Do Incr Petla Pomiar = Pomiar + Getadc(licz) 'sumuje pomiary Pomiar = Pomiar - Pullup 'za ka¿dym razem odejmuje napiêcie pullupa Loop Until Petla = 64 '64 próbki Shift Pomiar , Right , 6 '6/64 If Pomiar > 999 Then Pomiar = 0 'granica do 99.9 Formuj: Pokaz = Str(pomiar) Pokaz2 = Format(pokaz , "00.0") Return Wyswietl: Ddrb = &B111111 Lcd Pokaz2 ; Chr(znak) ; Chr(32) Ddrb = &B010011 Return Прикреплённая картинка
|
Сообщ.
#2
,
|
|
|
Чисто интуитивно:
Скрытый текст Цитата '------------------------------------------------------------------------------' 'Program: miniaturowy miernik do zasilacza na attiny13 i LCD ' 'Wersja z 64 próbkami i wyœwietlaniem œredniej ' 'kompilator: bascom 1.11.9.0 data: 23.12.2009 autor: Manekinen ' 'strona domowa projektu: mdiy.pl | wolno? wariacie w swoim warsztacie ' 'wszelkie modyfikacje dozwolone, publikuj¹c nale¿y zachowaæ ten nag³ówek ' ' WY£¥CZNIE DO U¯YTKU NIEKOMERCYJNEGO ' '------------------------------------------------------------------------------' Const Pullup = 6 'ile mV b³êdu wprowadza pullup wyœwietlacza pod³¹czony do gnd poprzez 100ohm... troche nieeleganckie ale proste i skuteczne $regfile = "attiny13.dat" '$regfile = "m8def.dat" $crystal = 1200000 '$crystal = 2000000 $hwstack = 8 $swstack = 16 $framesize = 16 '$noramclear '$sim Dim Pomiar As Word Dim Pokaz As String * 4 Dim Pokaz2 As String * 4 Dim Znak As Byte Dim Licz As Byte Dim Petla As Byte Declare Sub Mierz Declare Sub Formuj Declare Sub Wyswietl Config Adc = Single , Prescaler = Auto , Reference = Internal 'off Start Adc 'Config Lcd = 16 * 2 Config Lcd = 8 * 2 '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0 Cursor Off Cls Do Upperline 'od nowa dla napiêcia i pr¹du Licz = 1 'adc dla napiecia Mierz 'mierzy i formuje napiêcie 'Moc = Pomiar 'kopia dla obliczeñ mocy Znak = 86 'znak dla napiêcia Wyswietl 'wyœwietla napiêcie Lowerline '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Licz = 3 'adc dla pr¹du ------- ?????? Mierz 'mierzy i formuje pr¹d 'w pomiar zostaje pr¹d Pokaz2 = Format(pokaz , "0.00") 'forumje pr¹d drugi raz Znak = 65 'znak dla pr¹du Wyswietl 'wyœwietla pr¹d 'Lowerline 'od nowa dla temperatury i mocy 'Mnozenie 'Pomiar = Moc * Pomiar 'liczy moc 'Pomiar = Pomiar / 100 'Formuj 'Znak = 87 'znak dla mocy 'Wyswietl 'wyœwietla moc 'Licz = 0 'adc dla temperatury 'Mierz 'mierzy i formuje temperaturê 'Znak = 42 'znak dla temperatury 'Wyswietl 'wyœwietla temperaturê !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Loop '_______________________ Mierz: Pomiar = 0 Petla = 0 Do Incr Petla Pomiar = Pomiar + Getadc(licz) 'sumuje pomiary Pomiar = Pomiar - Pullup 'za ka¿dym razem odejmuje napiêcie pullupa Loop Until Petla = 64 '64 próbki Shift Pomiar , Right , 6 '6/64 If Pomiar > 999 Then Pomiar = 0 'granica do 99.9 Formuj: Pokaz = Str(pomiar) Pokaz2 = Format(pokaz , "00.0") Return Wyswietl: Ddrb = &B111111 Lcd Pokaz2 ; Chr(znak) ; Chr(32) Ddrb = &B010011 Return Цитата Прошу помочь исправить прошивку для этого случая, т.к в программировании я полный ноль. А как компилить будете? И прошивать? С бэйском для AVR я ещё не сталкивался. |
Сообщ.
#3
,
|
|
|
Так есть же Bascom-AVR, думаю в нем и скомпилировать, прошивать умею, есть программатор
Попробую тогда на макетке собрать и протестировать Добавлено выдал ошибку при компиляции, что не знает такого LCD, хотя странно: Unknown LCD type [8 * 2] Добавлено пишут, что bascom не поддерживает 0802 дисплей, но есть еще такое: "The 16 * 1a is special. It is used for 2 * 8 displays that have the address of line 2, starting at location &H8." Добавлено поставил 16 * 1a - программа не влазит во флеш - 101% ((( |
Сообщ.
#4
,
|
|
|
А если оставить 16*2, как было? Адреса начала строки у дисплеев совпадают.
Цитата The 16 * 1a is special. It is used for 2 * 8 displays that have the address of line 2, starting at location &H8." 16*1а не подойдёт - адрес начала второй строки нестандартный. Оставьте 16*2. |
Сообщ.
#5
,
|
|
|
хорошо, попробую собрать схему сначала с 1602, потом подключу вместо него 0802 и тогда буду думать
|
Сообщ.
#6
,
|
|
|
Адресное пространство вывода у обоих экранов совпадает. По идее, всё должно получиться.
|