Простой вольтметр на HD44780 и ATTINY13


Оригинал статьи http://mdiy.pl
Этот проект родился из чистого любопытства - что можно сделать из маленького микропроцессора ATtiny13? Оказалось, что достаточно много! В данном случае эта крошка будет измерять напряжение, ток и температуру. При этом все показания выводятся на ЖК-дисплее. Несмотря на необычное решение и некоторые недостатки этот прибор может быть использован в качестве измерительного прибора в блоке питания.

Cxema
Принципиальная схема прибора

Измерение напряжения производится от 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 simulator
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