Hallo Zusammen,
ich habe mir hier eine Zeitschaltuhr gebaut. Das Layout habeich gleich 2x fertigen lassen. Der erste Aufbau und die Inbetriebnahme inclmeines Bascom Programmes waren kein Problem.
In der 2. Ausführung gibt es jetzt ein Problem :
Die Alarmzeiten werden über einen Drehencoder eingestellt.Wenn ich diesen betätige um Werte rauf bzw. runter zu verändern verstellen sichdie Werte eigenständig (so, als ob ein Ereigniszähler angeschlossen ist) DieAnzeige lässt sich nur selten wieder beruhigen.
Ich habe daraufhin eine eigenes kleines Testprogrammgeschrieben. In diesem Programm verhält sich die Anzeige ebenso falsch. Manschaltet ein, und die LCD Anzeige des Wertes des Encoder verändert sich ständig(zählt hoch mit geschätzt > 250 Hz). Ich hab mir die Signale an Kanal A + Bvom Encoder per Oszi angesehen. Die sind i.o. Ich hab die Verbindung zwischenuC und Dot Matrix Display mehrere Male durchgemessen, alles i.o.Das Displayhabe ich auch getauscht und den uC auch brachte alles keine Verbesserung
Das Dot Matrix Display ist ein Electronic Assembly EAW164B-NLW ; Der uC ein ATMega 328p; Der Drehencoder ist von Alps 30 Rastungen /15 Pulse(Teilenummer weiss ich eben nicht)
Wer kann mir hier mal bitte raten, was man noch machen kann;wo man den Fehler noch suchen kann. Ich bin nämlich mit „meinem Latein am Ende“.
Untenstehend das kleine Testprogramm das ich mir geschriebenhabe.
Herlichen Dank schon mal für Eure Mühe!
Gruss
Theo
Alles anzeigen
ich habe mir hier eine Zeitschaltuhr gebaut. Das Layout habeich gleich 2x fertigen lassen. Der erste Aufbau und die Inbetriebnahme inclmeines Bascom Programmes waren kein Problem.
In der 2. Ausführung gibt es jetzt ein Problem :
Die Alarmzeiten werden über einen Drehencoder eingestellt.Wenn ich diesen betätige um Werte rauf bzw. runter zu verändern verstellen sichdie Werte eigenständig (so, als ob ein Ereigniszähler angeschlossen ist) DieAnzeige lässt sich nur selten wieder beruhigen.
Ich habe daraufhin eine eigenes kleines Testprogrammgeschrieben. In diesem Programm verhält sich die Anzeige ebenso falsch. Manschaltet ein, und die LCD Anzeige des Wertes des Encoder verändert sich ständig(zählt hoch mit geschätzt > 250 Hz). Ich hab mir die Signale an Kanal A + Bvom Encoder per Oszi angesehen. Die sind i.o. Ich hab die Verbindung zwischenuC und Dot Matrix Display mehrere Male durchgemessen, alles i.o.Das Displayhabe ich auch getauscht und den uC auch brachte alles keine Verbesserung
Das Dot Matrix Display ist ein Electronic Assembly EAW164B-NLW ; Der uC ein ATMega 328p; Der Drehencoder ist von Alps 30 Rastungen /15 Pulse(Teilenummer weiss ich eben nicht)
Wer kann mir hier mal bitte raten, was man noch machen kann;wo man den Fehler noch suchen kann. Ich bin nämlich mit „meinem Latein am Ende“.
Untenstehend das kleine Testprogramm das ich mir geschriebenhabe.
Herlichen Dank schon mal für Eure Mühe!
Gruss
Theo
Quellcode
- $regfile = "m328pdef.dat" ' Prozessor AVR Mega 328P
- $crystal = 8000000 '8Mhz ohne Quarz
- $swstack = 40
- $hwstack = 40
- $framesize = 60
- 'Subs declarieren
- Declare Sub Drehencoder_auswerten()
- Declare Sub Anzeige_pruefen()
- Declare Sub Zeile_leeren()
- Declare Sub Taster_schreiben()
- '######## Anschluss LCD Display (in 4 Bit Mode)
- Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , Rs = Portd.7
- Config Lcd = 16 * 4
- Wait 1
- Initlcd
- Cls
- Cursor off Noblink
- '##########################
- Config Portb.1 = Output
- Sync_out Alias Portb.1 'zeigt Synchronisierung der DCF77 Uhr (ggf. für Testzwecke)
- Sync_out = 0
- Config PinC.2 = Input 'Eingangspin von Taster in Drehimpulsgeber
- Auswahl Alias PinC.2
- Auswahl = 1 'ist für den ausgewählten Zeitbereich (hh oder mm bei T-ein und Taus)
- '######### Drehimpulsgeber
- Config Pinc.1 = Input 'Eingangspin für Drehimpulsgeber (Kanal A)
- Portc.1 = 1
- Config Pinc.0 = Input 'Eingangspin für Drehimpulsgeber (Kanal B)
- Portc.0 = 1
- Dim Flag_re As Byte , Flag_li As Byte
- Flag_re = 0 : Flag_li = 0
- Dim Zustand as Byte
- Dim Wert as Byte
- Wert = 0
- Dim Wert_alt as Byte
- Wert_alt = 0
- '#################################
- Dim flag_A as Byte
- flag_A = 0
- Dim Zeile as Byte
- Dim Anzahl as Byte
- Anzahl = 0
- Dim Anzahl_alt as Byte
- Anzahl_alt = 0
- Dim I As Byte , J As Byte , K As Byte
- Dim Flag_B as Byte
- Flag_B = 0
- '######################## Beginn Hauptprogramm ###########################
- Do
- if flag_A = 0 then
- Anzeige_pruefen
- End if
- Debounce Auswahl , 0 , Drehimp_taster , Sub
- Zustand = Encoder(pinC.1 , Pinc.0 , Ccw , Cw , 0) 'Encoder Befehl aus Bascom
- Drehencoder_auswerten
- if Flag_B = 0 then
- Locate 1 , 1
- Lcd "Drehencoder Wert :"
- Waitms 100
- Flag_B = 1
- end if
- 'if Wert <> wert_alt then 'bringt nichts
- Locate 2 , 1
- Lcd Wert
- 'Wert_alt = wert
- 'End if
- if Anzahl <> Anzahl_alt then
- Taster_schreiben
- End if
- Loop
- End
- '################### Ende Hauptprogramm #####################
- Sub Drehencoder_auswerten()
- If Zustand <> 0 And Zustand <> 3 Then
- Flag_li = 0 : Flag_re = 0
- Waitms 5
- Exit Sub
- End If
- If Zustand = 0 Or Zustand = 3 Then
- If Flag_re > 0 Then
- Incr Wert
- End If
- If Flag_li > 0 Then
- Decr Wert
- End If
- End If
- End Sub
- Ccw:
- Flag_li = 1
- Return
- Cw:
- Flag_re = 1
- Return
- Sub Anzeige_pruefen()
- Locate 1 , 1
- LCD "Zeile 1"
- Locate 2 , 1
- Lcd "Zeile 2"
- Locate 3 , 1
- LCD "Zeile 3"
- Locate 4 , 1
- Lcd "Zeile 4"
- Wait 5
- Zeile = 2
- Zeile_leeren
- Zeile = 3
- Zeile_leeren
- Zeile = 4
- Zeile_leeren
- flag_A = 1
- End Sub
- Sub Zeile_leeren()
- For i = 1 to 16
- Locate Zeile , i
- Lcd " "
- Waitms 10
- next i
- End Sub
- Drehimp_taster:
- Incr Anzahl
- Return
- Sub Taster_schreiben()
- Locate 3 , 1
- Lcd "Taster"
- Locate 4 , 1
- Lcd Anzahl
- Anzahl_alt = Anzahl
- End sub