Hallo Forumsfamilie!
Ich bin dabei eine Mengenlehreuhr zu bauen. Das Teil funktioniert auch (fast). Zwei Dinge bringen mich zur Verzweifelung:
1. Ich habe den 1HZ-Takt der DS3231 aktiviert. Dadurch zappelt die Sekunden LED. Allerdings nur solange, bis die RTC durch das DCF-Signal syncronisiert wird. Im selben Moment ist Ruhe im Schacht.
2. Die RTC wird zu Beginn ausgelesen und angezeigt. Allerdings nicht die Veräderungen während der Suche nach dem DCF-Signal. Ist klar, da die Anzeigeanweisung nicht im Hauptprogramm erfolgt. Mach ich das aber, funktioniert zwar die Anzeige, aber das Ganze scheint jetzt so zeitkritisch zu sein, dass die Suche nach dem DCF-Signal nur sporadisch erfolgt. Hat jemand eine Idee.
Gruß Gerd
Hier der unaufgeräumte Entwicklungs-Code
CodeBox BascomAVR
Ich bin dabei eine Mengenlehreuhr zu bauen. Das Teil funktioniert auch (fast). Zwei Dinge bringen mich zur Verzweifelung:
1. Ich habe den 1HZ-Takt der DS3231 aktiviert. Dadurch zappelt die Sekunden LED. Allerdings nur solange, bis die RTC durch das DCF-Signal syncronisiert wird. Im selben Moment ist Ruhe im Schacht.
2. Die RTC wird zu Beginn ausgelesen und angezeigt. Allerdings nicht die Veräderungen während der Suche nach dem DCF-Signal. Ist klar, da die Anzeigeanweisung nicht im Hauptprogramm erfolgt. Mach ich das aber, funktioniert zwar die Anzeige, aber das Ganze scheint jetzt so zeitkritisch zu sein, dass die Suche nach dem DCF-Signal nur sporadisch erfolgt. Hat jemand eine Idee.
Gruß Gerd
Hier der unaufgeräumte Entwicklungs-Code
CodeBox BascomAVR
$regfile = "m16def.dat" $crystal = 8000000 $hwstack = 32 $swstack = 32 $framesize = 40 $lib "i2c_twi.lbx" ' we do not use software emulated I2C but the TWI $lib "glcdKS108.lbx" $lib "mcsbyte.lbx" ' for smaller code $lib "ds1307clock.lib" ' modified lib Dim Min_Anzeige As Byte , 5_min_Anzeige As Byte , Std_Anzeige As Byte , 5_Std_Anzeige As Byte , Sec_Anzeige As Byte, Neue_sekunde as bit ' ----- DCF77 ----- Dim Dcf77_hour As Byte ' Globale Stundenvariable Dim Dcf77_min As Byte ' Globale Minutenvariable Dim Dcf77_sec As Byte ' Globale Sekundenvariable Dim Dcf77_weekday As Byte ' Globaler Wochentag Dim Dcf77_day As Byte ' Globale Tagvariable Dim Dcf77_month As Byte ' Globale Monatsvariable Dim Dcf77_year As Byte ' Globale Jahresvariable Const Rtc_address_write = &B11010000 ' Adresse des DS3231 = &HD0 (schreiben) Const Rtc_address_read = &B11010001 ' Adresse des DS3231 = &HD1 (lesen) Const Rtc_address_seconds = &H00 Const Rtc_address_minutes = &H01 Const Rtc_address_hours = &H02 Const Rtc_address_day = &H03 Const Rtc_address_date = &H04 Const Rtc_address_month = &H05 Const Rtc_address_year = &H06 Const Rtc_address_control = &H07 Dim Temp_byte_1 As Byte ' Temporäre Byte Variable Dim Temp_integer_1 As Integer ' Temporäre Integer Variable ' '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'Ds3231 '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ' Einstellen der TWI (I2C) Schnittstelle in BASCOM Config Sda = Portc.1 Config Scl = Portc.0 Twcr = &B00000100 Config Portc.2 = Output 'Fuer Signaltest-LED Signal_kontroll_led Alias Portc.2 config portc.3=Output Signal_empfangs_LED alias Portc.3 config portc.4=Output Sekundentakt alias portc.4 Config Portc.0 = Output Config Portc.1 = Output config PORTA =OUTPUT config PORTD =OUTPUT config PORTB=OUTPUT Config Dcf77 = PinD.7 , Timer = 1 , Inverted = 0 , Check = 1 , Update = 0 , Updatetime = 0 , Timer1sec = 1 , Debug = 1 , Gosub = Sectic Config Date = Dmy , Separator = . ' Datumsformat einstellen enable interrupts Gosub Rtc_set_softclock 'RTC auslesen und Softclock stellen Gosub anzeige I2cstart I2cwbyte Rtc_address_write ' 1Hz Signal der DS3231 aktivieren I2cstart i2cwbyte &H0E i2cwbyte &H80 I2cstop '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'Hauptprogramm '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Do Signal_kontroll_led = Dcf_status.0 'Als Test: Blinkt bei Empfang If dcf_status.7 = 1 Then Signal_empfangs_LED=1 Gosub Rtc_set_rtc_clock Gosub anzeige Else Signal_empfangs_LED=0 'DCF nicht o.k. End If Loop End '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Rtc_set_softclock: ' RTC DS3231 auslesen I2cstart ' START-Sequenz senden I2cwbyte Rtc_address_write ' Daten schreiben initiieren I2cwbyte Rtc_address_seconds ' Adresse übertragen = &H00 I2cstart ' START-Sequenz erneut senden I2cwbyte Rtc_address_read ' Daten lesen initiieren I2crbyte Dcf77_sec , Ack ' Byte 1 lesen I2crbyte Dcf77_min , Ack ' Byte 2 lesen I2crbyte Dcf77_hour , Ack ' Byte 3 lesen I2crbyte Dcf77_weekday , Ack ' Byte 4 lesen I2crbyte Dcf77_day , Ack ' Byte 5 lesen I2crbyte Dcf77_month , Ack ' Byte 6 lesen I2crbyte Dcf77_year , Nack ' Byte 7 lesen und fertig (NACK) I2cstop ' STOP-Sequenz ' ausgelesene Daten in SoftClock Variablen übernehmen _hour = Makedec(dcf77_hour) _min = Makedec(dcf77_min) _sec = Makedec(dcf77_sec) _weekday = Makedec(dcf77_weekday) _day = Makedec(dcf77_day) _month = Makedec(dcf77_month) _year = Makedec(dcf77_year) Return '-- End Rtc_set_softclock ----------------------------------------------------- Rtc_set_rtc_clock: ' Daten zum Speichern in BCD Format aufbereiten Dcf77_hour = Makebcd(_hour) Dcf77_min = Makebcd(_min) Dcf77_sec = Makebcd(_sec) Dcf77_weekday = Makebcd(_weekday) Dcf77_day = Makebcd(_day) Dcf77_month = Makebcd(_month) Dcf77_year = Makebcd(_year) ' RTC DS3231 synchronisieren I2cstart ' START-Sequenz senden I2cwbyte Rtc_address_write ' Daten schreiben initiieren I2cwbyte Rtc_address_seconds ' Adresse übertragen = &H00 I2cwbyte Dcf77_sec ' Byte 1 übertragen I2cwbyte Dcf77_min ' Byte 2 übertragen I2cwbyte Dcf77_hour ' Byte 3 übertragen I2cwbyte Dcf77_weekday ' Byte 4 übertragen I2cwbyte Dcf77_day ' Byte 5 übertragen I2cwbyte Dcf77_month ' Byte 6 übertragen I2cwbyte Dcf77_year ' Byte 7 übertragen I2cstop ' STOP-Sequenz ' STOP-Sequenz Return '-- End Rtc_set_rtc_clock ---------------- sectic: toggle sekundentakt return anzeige: '+++++++++++++++++++++++++++++++++++++++++++++++ 'Umrechnung der Uhrzeit in LED-Anzeige '+++++++++++++++++++++++++++++++++++++++++++++++ Min_anzeige=_min min_anzeige= min_anzeige mod 5 5_Min_Anzeige = _min/5 Std_Anzeige=_hour std_anzeige = std_anzeige mod 5 5_Std_Anzeige=_hour/5 '+++++++++++++++++++++++++++++++++++++++++++++++ 'LED´s aktivieren '+++++++++++++++++++++++++++++++++++++++++++++++ select case Min_Anzeige case 0: Portd.0=0 Portd.1=0 Portd.2=0 Portd.3=0 case 1: Portd.0=1 Portd.1=0 Portd.2=0 Portd.3=0 case 2: Portd.0=1 Portd.1=1 Portd.2=0 Portd.3=0 case 3: Portd.0=1 Portd.1=1 Portd.2=1 Portd.3=0 case 4: Portd.0=1 Portd.1=1 Portd.2=1 Portd.3=1 end select select case 5_Min_Anzeige case 0: Portd.4=0 Portd.5=0 Portd.6=0 Portb.0=0 Portb.1=0 Portb.2=0 Portb.3=0 Portb.4=0 Portb.5=0 Portb.6=0 Portb.7=0 case 1: Portd.4=1 Portd.5=0 Portd.6=0 Portb.0=0 Portb.1=0 Portb.2=0 Portb.3=0 Portb.4=0 Portb.5=0 Portb.6=0 Portb.7=0 case 2: Portd.4=1 Portd.5=1 Portd.6=0 Portb.0=0 Portb.1=0 Portb.2=0 Portb.3=0 Portb.4=0 Portb.5=0 Portb.6=0 Portb.7=0 case 3: Portd.4=1 Portd.5=1 Portd.6=1 Portb.0=0 Portb.1=0 Portb.2=0 Portb.3=0 Portb.4=0 Portb.5=0 Portb.6=0 Portb.7=0 case 4: Portd.4=1 Portd.5=1 Portd.6=1 Portb.0=1 Portb.1=0 Portb.2=0 Portb.3=0 Portb.4=0 Portb.5=0 Portb.6=0 Portb.7=0 case 5: Portd.4=1 Portd.5=1 Portd.6=1 Portb.0=1 Portb.1=1 Portb.2=0 Portb.3=0 Portb.4=0 Portb.5=0 Portb.6=0 Portb.7=0 case 6: Portd.4=1 Portd.5=1 Portd.6=1 Portb.0=1 Portb.1=1 Portb.2=1 Portb.3=0 Portb.4=0 Portb.5=0 Portb.6=0 Portb.7=0 case 7: Portd.4=1 Portd.5=1 Portd.6=1 Portb.0=1 Portb.1=1 Portb.2=1 Portb.3=1 Portb.4=0 Portb.5=0 Portb.6=0 Portb.7=0 case 8: Portd.4=1 Portd.5=1 Portd.6=1 Portb.0=1 Portb.1=1 Portb.2=1 Portb.3=1 Portb.4=1 Portb.5=0 Portb.6=0 Portb.7=0 case 9: Portd.4=1 Portd.5=1 Portd.6=1 Portb.0=1 Portb.1=1 Portb.2=1 Portb.3=1 Portb.4=1 Portb.5=1 Portb.6=0 Portb.7=0 case 10: Portd.4=1 Portd.5=1 Portd.6=1 Portb.0=1 Portb.1=1 Portb.2=1 Portb.3=1 Portb.4=1 Portb.5=1 Portb.6=1 Portb.7=0 case 11: Portd.4=1 Portd.5=1 Portd.6=1 Portb.0=1 Portb.1=1 Portb.2=1 Portb.3=1 Portb.4=1 Portb.5=1 Portb.6=1 Portb.7=1 end select select case Std_Anzeige case 0: Porta.0=0 Porta.1=0 Porta.2=0 Porta.3=0 case 1: Porta.0=1 Porta.1=0 Porta.2=0 Porta.3=0 case 2: Porta.0=1 Porta.1=1 Porta.2=0 Porta.3=0 case 3: Porta.0=1 Porta.1=1 Porta.2=1 Porta.3=0 case 4: Porta.0=1 Porta.1=1 Porta.2=1 Porta.3=1 end select select case 5_Std_Anzeige case 0: Porta.4=0 Porta.5=0 Porta.6=0 Porta.7=0 case 1: Porta.4=1 Porta.5=0 Porta.6=0 Porta.7=0 case 2: Porta.4=1 Porta.5=1 Porta.6=0 Porta.7=0 case 3: Porta.4=1 Porta.5=1 Porta.6=1 Porta.7=0 case 4: Porta.4=1 Porta.5=1 Porta.6=1 Porta.7=1 end select Return
Zuletzt bearbeitet von einem Moderator: