HOME
Betriebsstundenzähler mit AVR AtMega8

Betriebsstundenzähler ohne sekundäre Spannungsüberwachung Quellcode: BSZoV.txt


Mein Arbeitsplatz ist immer überschaubar und alles liegt an seiner Stelle.



Der erste Prototype auf eine Steckkarte





Die LED blinkt im Sekundentakt zur Kontrolle



MC: ATMEGA8
Takt intern: 1MHz
Takt extern: 32kHz Uhren-Quarz
LCD: 2x24 Zeichen
Betriebsspannung: 5V
Strom: ca 10mA



Und um die Schaltung auf eine Lochrasterplatine übertragen







Eine 28 poligen IC-Socke hatte ich nicht, aber 2x14 tuen es auch



Verlöten und mit Kupferlackdraht die Pins verbinden



Von der Bestückungsseite



Das LCD ist in einem 3 1/2" Slotblende eingebaut





Schaltplan



'-----------------------------------------------------------------------------------------
'Titel : Betriebsstundenzähler
'Name : Betriebsstundenzähler.bas
'Autor : Arno Schweißinger
'Datum : 13.01.2008
'Version : 0.03
'Compiler : Bascom 1.11.8.7
'MicroController : AtMega8 1MHz interner Takt
'Hardware : Display HD 44780-kompatibel, 20x2 Zeichen
'
' Quarz 32768Hz an TOSC1/2 - Pin 9/10
'Stromversorgung: : 4V bis 6V , 5mA
'Besonderes :
'Letzte Änderung : 10.01.08 LED Betriebsanzeige binkt 5ms
' 09.01.08 EEPROM Daten werden auf plausibilität geprüft
' 18.01.08 LCD Animation
'-----------------------------------------------------------------------------------------

$regfile = "m8def.dat"
$crystal = 1000000

Powerpin
Alias Pinc.0
Ledpin
Alias Portc.1
Resetpin
Alias Pinc.2
Config Resetpin = Input ' Reset clock
Config Pinc.1 = Output ' Blink LED
Config Powerpin = Input ' Power down
'configure LCD-Display
Config Lcd = 24 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
'configure clock
Config Date = Dmy , Separator = . ' ANSI-Format
Config Clock = Soft 'this is how simple it is
Enable Interrupts

Declare Sub Init_prog
Declare Sub Datenkonsistent
Declare Sub Error
Declare Sub Savetime
Declare Sub Ledblinklicht
Declare Sub Lcdouttime
Declare Sub Datenloeschen
Declare Sub Animation

Const _version = "0.04"
Const Starttime = "00:00:00"
Const Startdate = "01.01.00"
Const Sec_zeichen = "->"
Dim E_time As Eram String * 8
Dim E_date As Eram String * 8
'Dim Temp As Byte
Dim B_poscusor As Byte
Dim Old_sec As Byte



'-------------------------
' Hauptprogramm
'-------------------------
'Begin
Call Init_prog
Call Datenkonsistent
Cls
Do
Waitms 200
Call Datenloeschen
If _sec <> Old_sec Then
Call Lcdouttime
Toggle Ledpin
Call Savetime
Call Animation
Old_sec
= _sec
End If
Loop
End ' ende Hauptprogramm

Sub Init_prog
Initlcd
Cls
Cursor Off
Lcd "Arno Schweissinger"
Locate 2 , 1
Lcd "Version: " ; _version
Waitms 500
Time$ = E_time
Date$ = E_date ' Push reset button on Pinb.2
End Sub

Sub Savetime
If _sec = 0 Then
E_time
= Time$
E_date
= Date$
Locate 2 , 1
Lcd "Time saved"
Waitms 200
End If
End Sub

Sub Lcdouttime
Locate 1 , 1
Lcd Sysday() ; "-Tage"
Locate 1 , 13
Lcd Time$
End Sub

Sub Ledblinklicht
Toggle Ledpin
End Sub

Sub Datenloeschen
If Resetpin = 1 Then
Cls
Time$ = Starttime
Date$ = Startdate
E_time
= Starttime
E_date
= Startdate
Lcd "Daten sind geloescht"
Waitms 500
$asm
jmp 0000 ' cpu reset
$end Asm
End If
End Sub

Sub Datenkonsistent
If _hour > 23 Then Call Error
If _min > 59 Then Call Error
If _sec > 59 Then Call Error
If _day > 31 Then Call Error
If _month > 12 Then Call Error
End Sub

Sub Error
Cls
Call Lcdouttime
Locate 2 , 1
Lcd "Daten inkonsistent"
Do
Toggle Ledpin
Waitms 100
Call Datenloeschen
Loop
End Sub

Sub Animation
B_poscusor
= _sec Mod 20
If B_poscusor = 0 Then
Locate 2 , 1
Lcd " " ' 21 x Space
End If
Locate 2 , B_poscusor
Lcd Sec_zeichen
End Sub



Besucherzähler    Counter
Impressum

Erstellt am 15.03.2009