Простой вольтметр на HD44780 и ATTINY13
Оригинал статьи http://mdiy.pl
Этот проект родился из чистого любопытства - что можно сделать из маленького микропроцессора ATtiny13? Оказалось, что достаточно много! В данном случае эта крошка будет измерять напряжение, ток и температуру. При этом все показания выводятся на ЖК-дисплее. Несмотря на необычное решение и некоторые недостатки этот прибор может быть использован в качестве измерительного прибора в блоке питания.
![]()
Принципиальная схема прибораИзмерение напряжения производится от 0 до 99.9V с точностью 0.1V. Измерение тока в диапазоне от 0 до 9.99A с точностью 0.01A осуществляется путем измерения напряжения на шунте сопротивлением 0.1 Ом. Температура в диапазоне от 0 до 99,9оC с точностью 0,01оC измеряется аналоговым датчиком температуры LM35. В качестве опорного напряжения измерение используется внутренний источник ATtiny13 1.1V - Vref.
Такое простое устройство имеет некоторые недостатки. Измерение производится на тех же выводах микропроцессора, где выводятсмя данные для ЖК-дисплея, что вносит некоторую погрешность измерения (7 мВ). Эти 7 мВ просто вычитаются из результата измерения и показания не совсем линейны в диапазоне от 0 до 5 В. Другой недостаток в том, что устройство не позволяет делать несколько измерений и показывать усредненное значение (не хватает места в крошечном флэш-памяти). В результате этого показания последней цифры немного прыгают.
Не забывайте обеспечить необходимую мощность шунта для высоких токов и напряжений. Калибровка напряжения и тока производится двумя потенциометрами. Контрастность ЖК-дисплея установлена постоянной - резисторами R9,R10. Потребляемый ток устройства,включая ЖК-подсветку, составляет около 30 мА.
Fusebits: Включите fusebit RSTDISBL.
ВНИМАНИЕ, убедитесь, что вы правильно запрограммировали крошечный микропроцессор, потому что после установки вы потеряете доступ через типичной ISP программатор.
![]()
Печатная плата прибора 35 мм х 16 мм
![]()
Bascom симуляторПРИЛОЖЕНИЕ: HD44780_ATTINY13.rar - cхема, печатная плата, исходники на BASCOM, HEX и BIN-файлы.
Обновленная программа tiny13lcd_9_64-sample производит 64 пробы для каждого измерения и отображает среднее значение.Исходник на BASCOM
'------------------------------------------------------------------------------' 'Program: miniaturowy miernik do zasilacza na procesorze attiny13 ' 'kompilator: bascom 1.11.9.0 data: 21.12.2009 autor: Manekinen ' 'strona domowa projektu: http://diy.elektroda.eu/ ' 'wszelkie modyfikacje dozwolone, publikuj¦c nale¬y zachowaµ ten nag¦?wek ' ' WYuNCZNIE DO U»YTKU NIEKOMERCYJNEGO ' '------------------------------------------------------------------------------' Const Napiecie = 62 'mno¬nik napi?cia (62 dla 100V... 19 dla 30V... itp) Const Prad = 62 'mno¬nik pr¦du (62 dla 10A... j.w.) Const Temp = 62 'mno¬nik temperatury, dobrany eksperymentalnie dla vref 1.1V i LM35 (wliczaj¦c mV poprawk? poni¬ej) 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 = 16 $swstack = 16 $framesize = 16 $noramclear Dim Pomiar As Word Dim Pokaz As String * 4 Dim Pokaz2 As String * 4 Dim Znak As Byte Dim Licz As Byte Declare Sub Formuj_i_mierz Declare Sub Wyswietl Config Adc = Single , Prescaler = Auto , Reference = Internal 'off Start Adc Config Lcd = 16 * 1 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0 'Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portb.1 , Rs = Portb.0 Cursor Off Do Upperline Znak = 86 Pomiar = Pomiar * Napiecie 'pr¦d... Licz = 3 Formuj_i_mierz Wyswietl Znak = 65 Pomiar = Pomiar * Prad 'temperatura... Licz = 0 Formuj_i_mierz Pokaz2 = Format(pokaz , "0.00") Wyswietl Pomiar = Pomiar * Temp 'napi?cie... Licz = 1 Formuj_i_mierz Wyswietl Loop Formuj_i_mierz: 'Ddrc = &B110001 ' 543210 Ddrb = &B010011 Shift Pomiar , Right , 6 Pokaz = Str(pomiar) Pokaz2 = Format(pokaz , "00.0") Waitms 50 Pomiar = Getadc(licz) - Pullup Return Wyswietl: 'Ddrc = &B111111 ' 543210 Ddrb = &B111111 Lcd Pokaz2 ; Chr(znak) ; Chr(32) Return
Свободный перевод от RA3TOX