Hallo,
ich habe ein paar Probleme mit einem 3641AS 4 Digits LED Display mit gemeinsamer Kathode an meinen AtMega48.
Und wollte mal Fragen ob der Sourcecode so stimmen könnte.
Hab einige Atmega mit "klatsche" (defekten). Die manchmal funktionieren und manchmal nicht.
Kann mal jemand auf den Sourcecode schauen ob das so hinhauen könnte?
Alles anzeigen
Hab die Funktion nur gemacht da ich keinen durchgehend freien Port hab. An PortD geht es nicht wegen der späteren $baud Anweisung und an PortB nicht wegen den Quarz.
Vielen dank!
Alex
ich habe ein paar Probleme mit einem 3641AS 4 Digits LED Display mit gemeinsamer Kathode an meinen AtMega48.
Und wollte mal Fragen ob der Sourcecode so stimmen könnte.
Hab einige Atmega mit "klatsche" (defekten). Die manchmal funktionieren und manchmal nicht.
Kann mal jemand auf den Sourcecode schauen ob das so hinhauen könnte?
Quellcode
- $regfile = "m48def.dat" ' specify the used micro
- $crystal = 1000000 ' used crystal frequency
- $hwstack = 32 ' default use 32 for the hardware stack
- $swstack = 10 ' default use 10 for the SW stack
- $framesize = 40 ' default use 40 for the frame space
- Config Portc.5 = Output
- Config Portc.4 = Output
- Config Portc.3 = Output
- Config Portc.2 = Output
- Config Portc.1 = Output
- Config Portc.0 = Output
- Config Portb.5 = Output
- Config Portb.4 = Output
- Config Portd.2 = Output
- Config Portd.3 = Output
- Config Portd.4 = Output
- Config Portd.5 = Output
- Seg_a Alias Portc.5
- Seg_b Alias Portc.4
- Seg_c Alias Portc.3
- Seg_d Alias Portc.2
- Seg_e Alias Portc.1
- Seg_f Alias Portc.0
- Seg_g Alias Portb.5
- Seg_dot Alias Portb.4
- Gnd_digit_1 Alias Portd.2
- Gnd_digit_2 Alias Portd.3
- Gnd_digit_3 Alias Portd.4
- Gnd_digit_4 Alias Portb.5
- Dim Var_stunden As Byte
- Dim Var_minuten As Byte
- Dim Var_x As Integer
- Dim Var_y As Byte
- Dim Var_tmp_anzeige As Byte
- Config Watchdog = 1024
- Declare Function Write_digit(byval Var_key As Byte) As Byte
- Do
- Incr Var_x
- Incr Var_y
- If Var_x = 1000 Then
- Var_x = 0
- Incr Var_minuten
- End If
- If Var_minuten > 59 Then
- Incr Var_stunden
- Var_minuten = 0
- End If
- If Var_stunden > 59 Then Var_stunden = 0
- If Var_y = 1 Then
- Gnd_digit_1 = 1
- Gnd_digit_2 = 1
- Gnd_digit_3 = 1
- Gnd_digit_4 = 0
- Var_tmp_anzeige = Var_minuten Mod 10
- Var_tmp_anzeige = Var_tmp_anzeige + 1
- Var_tmp_anzeige = Write_digit(var_tmp_anzeige)
- Elseif Var_y = 2 Then
- Gnd_digit_1 = 1
- Gnd_digit_2 = 1
- Gnd_digit_3 = 1
- Gnd_digit_4 = 1
- Var_tmp_anzeige = Var_minuten / 10
- Var_tmp_anzeige = Var_tmp_anzeige + 1
- Var_tmp_anzeige = Write_digit(var_tmp_anzeige)
- Elseif Var_y = 3 Then
- Gnd_digit_1 = 1
- Gnd_digit_2 = 0
- Gnd_digit_3 = 1
- Gnd_digit_4 = 1
- Var_tmp_anzeige = Var_stunden Mod 10
- Var_tmp_anzeige = Var_tmp_anzeige + 1
- Var_tmp_anzeige = Write_digit(var_tmp_anzeige)
- Elseif Var_y = 4 Then
- Gnd_digit_1 = 0
- Gnd_digit_2 = 1
- Gnd_digit_3 = 1
- Gnd_digit_4 = 1
- Var_tmp_anzeige = Var_stunden / 10
- Var_tmp_anzeige = Var_tmp_anzeige + 1
- Var_tmp_anzeige = Write_digit(var_tmp_anzeige)
- Var_y = 0
- End If
- Waitms 1
- Reset Watchdog
- Loop
- Function Write_digit(var_key As Byte)
- Local Var_input_ziffer As Byte
- Var_input_ziffer = Var_key
- If Var_input_ziffer = 0 Then
- Seg_a = 1
- 'A
- Seg_b = 1
- 'B
- Seg_c = 1
- 'C
- Seg_d = 1
- 'D
- Seg_e = 1
- 'E
- Seg_f = 1
- 'F
- Seg_g = 0
- 'G
- Seg_dot = 0
- 'punkt
- Goto Endeif
- Elseif Var_input_ziffer = 1 Then
- Seg_a = 0
- 'A
- Seg_b = 1
- 'B
- Seg_c = 1
- 'C
- Seg_d = 0
- 'D
- Seg_e = 0
- 'E
- Seg_f = 0
- 'F
- Seg_g = 0
- 'G
- Seg_dot = 0
- Goto Endeif
- Elseif Var_input_ziffer = 2 Then
- Seg_a = 1
- 'A
- Seg_b = 1
- 'B
- Seg_c = 0
- 'C
- Seg_d = 1
- 'D
- Seg_e = 1
- 'E
- Seg_f = 0
- 'F
- Seg_g = 1
- 'G
- Seg_dot = 0
- Goto Endeif
- Elseif Var_input_ziffer = 3 Then
- Seg_a = 1
- 'A
- Seg_b = 1
- 'B
- Seg_c = 1
- 'C
- Seg_d = 1
- 'D
- Seg_e = 0
- 'E
- Seg_f = 0
- 'F
- Seg_g = 1
- 'G
- Seg_dot = 0
- Goto Endeif
- Elseif Var_input_ziffer = 4 Then
- Seg_a = 0
- 'A
- Seg_b = 1
- 'B
- Seg_c = 1
- 'C
- Seg_d = 0
- 'D
- Seg_e = 0
- 'E
- Seg_f = 1
- 'F
- Seg_g = 1
- 'G
- Seg_dot = 0
- Goto Endeif
- Elseif Var_input_ziffer = 5 Then
- Seg_a = 1
- 'A
- Seg_b = 0
- 'B
- Seg_c = 1
- 'C
- Seg_d = 1
- 'D
- Seg_e = 0
- 'E
- Seg_f = 1
- 'F
- Seg_g = 1
- 'G
- Seg_dot = 0
- Goto Endeif
- Elseif Var_input_ziffer = 6 Then
- Seg_a = 1
- 'A
- Seg_b = 0
- 'B
- Seg_c = 1
- 'C
- Seg_d = 1
- 'D
- Seg_e = 1
- 'E
- Seg_f = 1
- 'F
- Seg_g = 1
- 'G
- Seg_dot = 0
- Goto Endeif
- Elseif Var_input_ziffer = 7 Then
- Seg_a = 1
- 'A
- Seg_b = 1
- 'B
- Seg_c = 1
- 'C
- Seg_d = 0
- 'D
- Seg_e = 0
- 'E
- Seg_f = 0
- 'F
- Seg_g = 0
- 'G
- Seg_dot = 0
- Goto Endeif
- Elseif Var_input_ziffer = 8 Then
- Seg_a = 1
- 'A
- Seg_b = 1
- 'B
- Seg_c = 1
- 'C
- Seg_d = 0
- 'D
- Seg_e = 0
- 'E
- Seg_f = 0
- 'F
- Seg_g = 0
- 'G
- Seg_dot = 0
- Goto Endeif
- Elseif Var_input_ziffer = 9 Then
- Seg_a = 1
- 'A
- Seg_b = 1
- 'B
- Seg_c = 1
- 'C
- Seg_d = 1
- 'D
- Seg_e = 0
- 'E
- Seg_f = 1
- 'F
- Seg_g = 1
- 'G
- Seg_dot = 0
- Goto Endeif
- End If
- Endeif:
- Write_digit = Var_input_ziffer
- End Function
- End
Vielen dank!
Alex