walkonshit
07.04.2009, 12:09
Hallo,
ich habe vor kurzen angefangen, eine Binäruhr mit LED-Anzeige zu bauen. Mittlerweile habe ich die Platine fertig gelötet und habe mi9ch an den Code gemacht. Nun stehe ich allerdings vor dem Problem, dass der Atmega samt seiner schaltung nicht so wollen wie ich.
$regfile "m8def.dat"
$crystal = 16000000
Dim Sec As Byte
Dim Minu As Byte
Dim Hour As Byte
Dim Flag As Bit
Dim X As Byte
Dim Y As Byte
'Dim Tag As Integer
Sec = 0
Minu = 0
Hour = 0
Config Portd = Output
Config Portc = Output
Config Portb = Output
Config Timer1 = Timer , Prescale = 256
Load Timer1 , 3036
Enable Timer1
On Timer1 Timer_interrupt
Enable Interrupts
' Portd.0 = 0
'Tag = 0
Do
'(
If Tag > 976 Then
Incr Sec
Tag = 0
If Portd.0 = 1 Then Portd.0 = 0
Else
Portd.0 = 1
End If
')
For X = 0 To 2
Y = X + 3
Portb.y = Sec.x
Next
X = 0
Y = 0
For X = 3 To 5
Y = X - 3
Portc.y = Sec.x
Next
X = 0
Y = 0
For X = 3 To 5
Y = X - 3
Portb.y = Minu.x
Next
X = 0
Y = 0
For X = 0 To 2
Y = X + 5
Portd.y = Minu.x
Next
X = 0
Y = 0
For X = 0 To 4
Portd.x = Hour.x
Next
X = 0
Y = 0
Flag = 0
If Flag = 0 Then
If Sec > 59 Then
Sec = 0
Incr Minu
End If
If Minu > 59 Then
Minu = 0
Incr Hour
End If
If Hour > 23 Then
Hour = 0
End If
End If
Loop
'Do
'Loop
Timer_interrupt:
Incr Sec
Flag = 1
'Toggle Portd.0
Load Timer1 , 3036
Return
Soweit so gut. Zur Zeit läuft die Schaltung über ein 4,5 V Netzteil, woher vermutlich die Ungenauigkeit des Quarzoszillators stammt. Das aktuelle Problem ist allerdings, dass bis auf 3 LEDs (32, 16, 8 Sekunden) alle nur wild am flakern sind.
Die Beschaltung der Ports:
PD0 = 1 h
PD1 = 2 h
PD2 = 4 h
PD3 = 8 h
PD4 = 16 h
PD5 = 1 min
PD6 = 2 min
PD7 = 4 min
PB0 = 8 min
PB1 = 16 min
PB2 = 32 min
PB3 = 1 sek
PB4 = 2 sek
PB5 = 4 sek
PC0 = 8 sek
PC1 = 16 sek
PC2 = 32 sek
Ich hoffe ihr könnt mir da weiter helfen
MfG DaRe
ich habe vor kurzen angefangen, eine Binäruhr mit LED-Anzeige zu bauen. Mittlerweile habe ich die Platine fertig gelötet und habe mi9ch an den Code gemacht. Nun stehe ich allerdings vor dem Problem, dass der Atmega samt seiner schaltung nicht so wollen wie ich.
$regfile "m8def.dat"
$crystal = 16000000
Dim Sec As Byte
Dim Minu As Byte
Dim Hour As Byte
Dim Flag As Bit
Dim X As Byte
Dim Y As Byte
'Dim Tag As Integer
Sec = 0
Minu = 0
Hour = 0
Config Portd = Output
Config Portc = Output
Config Portb = Output
Config Timer1 = Timer , Prescale = 256
Load Timer1 , 3036
Enable Timer1
On Timer1 Timer_interrupt
Enable Interrupts
' Portd.0 = 0
'Tag = 0
Do
'(
If Tag > 976 Then
Incr Sec
Tag = 0
If Portd.0 = 1 Then Portd.0 = 0
Else
Portd.0 = 1
End If
')
For X = 0 To 2
Y = X + 3
Portb.y = Sec.x
Next
X = 0
Y = 0
For X = 3 To 5
Y = X - 3
Portc.y = Sec.x
Next
X = 0
Y = 0
For X = 3 To 5
Y = X - 3
Portb.y = Minu.x
Next
X = 0
Y = 0
For X = 0 To 2
Y = X + 5
Portd.y = Minu.x
Next
X = 0
Y = 0
For X = 0 To 4
Portd.x = Hour.x
Next
X = 0
Y = 0
Flag = 0
If Flag = 0 Then
If Sec > 59 Then
Sec = 0
Incr Minu
End If
If Minu > 59 Then
Minu = 0
Incr Hour
End If
If Hour > 23 Then
Hour = 0
End If
End If
Loop
'Do
'Loop
Timer_interrupt:
Incr Sec
Flag = 1
'Toggle Portd.0
Load Timer1 , 3036
Return
Soweit so gut. Zur Zeit läuft die Schaltung über ein 4,5 V Netzteil, woher vermutlich die Ungenauigkeit des Quarzoszillators stammt. Das aktuelle Problem ist allerdings, dass bis auf 3 LEDs (32, 16, 8 Sekunden) alle nur wild am flakern sind.
Die Beschaltung der Ports:
PD0 = 1 h
PD1 = 2 h
PD2 = 4 h
PD3 = 8 h
PD4 = 16 h
PD5 = 1 min
PD6 = 2 min
PD7 = 4 min
PB0 = 8 min
PB1 = 16 min
PB2 = 32 min
PB3 = 1 sek
PB4 = 2 sek
PB5 = 4 sek
PC0 = 8 sek
PC1 = 16 sek
PC2 = 32 sek
Ich hoffe ihr könnt mir da weiter helfen
MfG DaRe