Hello World! Ich baue einen Wecker mit einem ATtiny2313 und dem Pollin-DFC1-Modul. Zeit und Datum werden bereits auf einem LCD anzeigt... Soweit so gut... Jetzt frage ich mich - um einen Wecker daraus zu bauen - soll die DCF77-Zeit mit den Variablen Dim Wecker_std und Dim Wecker_min (Byte) verglichen werden um dann das Bit Alarm für 3600 Sekunden (Variable Alarmzeit) auf 1 zu setzen... Oder so ähnlich... Kann mir jemand helfen? Hier mal der Code, der teilweise aus Stefan Hoffmanns tollem Buch "Einstieg in die Elektronik mit AVR Microcontroller und Bascom" kommt - ab dem DCF-Config: Config Dcf77 = Pinb.4 , Inverted = 0 , Timer = 1 , Debug = 0 , Check = 1 , Gosub = Sectic Config Date = Dmy , Separator = . Enable Interrupts Config Portb.3 = Input 'Pinb.3 Stunden Stellen Config Portb.2 = Input 'Pinb.2 Minuten Stellen Config Portb.1 = Input 'Pinb.1 Schlummer Config Portb.0 = Input 'Pinb.0 Alarm_ein Alarm_ein Alias Pinb.0 'Schalter gegen 0 Portb.0 = 1 'Pullup-Widerstand Config Portd.6 = Output Relais Alias Portd.6 Dim Neue_sekunde As Bit Dim Alarm As Bit Dim Schlummer As Bit Dim Wecker_std As Byte Dim Wecker_min As Byte Dim Alarmzeit As Byte Do 'Relais = Dcf_status.0 'blinkt bei DCF77 empfang Debounce Pinb.3 , 0 , Stdstellen , Sub 'Tasten an Pinb.3 gegen 0 springt Stdstellen an Debounce Pinb.2 , 0 , Minstellen , Sub 'Tasten an Pinb.2 gegen 0 springt Minstellen an Debounce Pinb.1 , 0 , Schlummern , Sub 'Tasten an Pinb.1 gegen 0 springt Minstellen an If Neue_sekunde = 1 Then Neue_sekunde = 0 Gosub Anzeige End If Loop End Sectic: Neue_sekunde = 1 Return Anzeige: If Dcf_status.7 = 0 Then Locate 1 , 1 : Lcd "wait... " Locate 2 , 1 : Lcd Time$ Else Locate 1 , 1 : Lcd Date$ Locate 2 , 1 : Lcd Time$ End If Return Minstellen: Stdstellen: Schlummern:
Hast du 'ne konkrete Frage oder willst Du, dass Dir jemand hier das Programm schreibt?
Philipp schrieb: > soll die > DCF77-Zeit mit den Variablen Dim Wecker_std und Dim Wecker_min (Byte) > verglichen werden um dann das Bit Alarm für 3600 Sekunden (Variable > Alarmzeit) auf 1 zu setzen... ja wie denn sonst ??? Wenn die aktuelle Zeit = Alarm Zeit dann Alarm auslösen..
Hier ist was gutes (MagicWhiteSmoke / Bascom-Forum): Time$ ist eine Stringvariable, Bascom erlaubt den alphabetischen Vergleich > und < zweier Strings, auf eine Uhrzeit angewendet ist das aber Unsinn. Wandle die Uhrzeit in absolute Minuten oder Sekunden des Tages um und vergleich' dann mit der absoluten Minuten/Sekundenschaltzeit. Bascom stellt die internen Variablen _sec, _min und _hour bereit, diese entsprechen der Stringvariablen Time$. Also Weckzeitvariablen setzen: Wecker_std = 14 Wecker_min = 49 Und im Sub Anzeige: Anzeige: If Dcf_status.7 = 0 Then Locate 1 , 1 : Lcd "wait... " Locate 2 , 1 : Lcd Time$ Else Locate 1 , 1 : Lcd Date$ Locate 2 , 1 : Lcd Time$ End If If _hour = Wecker_std And _min = Wecker_min Then Locate 1 , 1 : Lcd Time$ 'Alarm = 1 'Bit Alarm = 1 End If Return Das hat funktioniert, für eine Minute war auf dem LCD oben und unten die Zeit!!! Ich glaube die Sub Anzeige ist ein guter Platz, denn die wird jede Sekunde ausgeführt! Jetzt Wecker_min und Wecker_std einstellen: Debounce Pinb.3 , 0 , Stdstellen , Sub Minstellen: Locate 1 , 1 : Lcd "AlrmTime" Locate 2 , 1 : Lcd Wecker_std + ":" + Wecker_min If Neue_sekunde = 1 Then Wecker_min = Wecker_min + 1 End If Stdstellen: Locate 1 , 1 : Lcd "AlrmTime" Locate 2 , 1 : Lcd Wecker_std + ":" + Wecker_min If Neue_sekunde = 1 Then Wecker_std = Wecker_std + 1 End If Problem: Auch so wird jede Sekunde Alrmtime ... auf dem LCD ausgegeben - Ohne, dass ein Taster gedrückt wird. Muss man einen Pullup setzten? Das mit den Tastern funktioniert nicht, weil es mit der regulären Anzeige um die LCD konkurriert. Wecker_min und Wecker_std werden nicht lesbar angezeigt... Der Attiny2313 ist jetzt zu 97% ausgelastet. Wenn man Debounce für alle drei Taster rausnimmt bringt das nur 6 %... Sieht fast so aus, als würde mein Tiny nicht reichen :( Wie kann man die Zeiten sekündlich inkrementieren am besten ohne Debounce und auf dem LCD dabei anzeigen??
Philipp schrieb: > Muss man einen Pullup setzten? Sicher... Also so ganz verstehe ich nicht dein Problem. Normal wenn ein taster gedrück wird, spingt man in einem SUB SUB: incr Sec Return
Und wie kann man Wecken_min sekündlich inkrementieren? sub: if Neue_sekunde = 1 Then incr Wecken_min ?
Wie soll Wecken Minute aussehen ? 14:49.... Warum nicht die Minuten erhöhen ?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.