Hallo,
Ich brauch nen einfachen Timer, am besten aus der Bastelkiste. LTC4727 und ein MAX7219 ist gefunden und nachdem ich das "MAX7219 Ansteuern "gelesen habe, die IDE angeschmissen und ein bischen Code geschrieben.
Und das kam dabei heraus. Könnte man das noch ein bissl zusammenfassen, weiß nicht so richtig wie anfangen.
Ach so, das DCF ist erstmal nur für ne Art "softclock", weil die DS3231 Geschichte noch kommt dazu.
Alles anzeigen
und noch ein Bild DSCF0656.JPG
Die Anzeige ist schon auf einer fertigen Platine, die muß ich nur noch modifizieren damit sie ins Gehäuse passt.
Ich brauch nen einfachen Timer, am besten aus der Bastelkiste. LTC4727 und ein MAX7219 ist gefunden und nachdem ich das "MAX7219 Ansteuern "gelesen habe, die IDE angeschmissen und ein bischen Code geschrieben.
Und das kam dabei heraus. Könnte man das noch ein bissl zusammenfassen, weiß nicht so richtig wie anfangen.
Ach so, das DCF ist erstmal nur für ne Art "softclock", weil die DS3231 Geschichte noch kommt dazu.
BASCOM-Quellcode: anzeige
- 'Max7219 Anzeige 7-Segment LTC4272 mit Doppelpunkt und ° zeichen
- $regfile = "m8def.dat"
- $crystal = 8000000
- $hwstack = 32
- $swstack = 32
- $framesize = 32
- $baud = 4800
- Config Portb.0 = Input : Sw_4 Alias Pinb.0 : Portb.0 = 1
- Config Portb.1 = Input : Sw_3 Alias Pinb.1 : Portb.1 = 1
- Config Portb.2 = Input : Sw_2 Alias Pinb.2 : Portb.2 = 1
- Config Portd.7 = Input : Sw_1 Alias Pind.7 : Portd.7 = 1
- Config Portd.3 = Output : Din_display Alias Portd.3
- Config Portd.5 = Output : Clk_display Alias Portd.5
- Config Portd.2 = Output : Cs_display Alias Portd.2
- Dim W_st(5) As Byte 'anzuzeigende Werte an den einzelnen Stellen
- Dim Display_adress As Byte , Display_daten As Byte
- Dim N_1 As Byte , N As Byte
- Gosub Init_max7219 'Display initialisieren
- '----------------- Config DCF77
- Config Dcf77 = Pinc.5 , Timer = 1 , Inverted = 0 , Update = 1 , Updatetime = 0 , Gosub = Sectic 'noch nicht fertig
- 'Enable Interrupts
- Config Date = Dmy , Separator = Dot
- Date$ = "16.07.19"
- Time$ = "20:24:55" 'deutsches Datumsformat
- Dim Neue_sek As Byte
- Dim Zehner As Byte , Einer As Byte
- const Timer0Reload = 78
- config timer0=timer,prescale = 1024
- load timer0 , Timer0Reload
- on ovf0 Timer0_isr
- enable ovf0
- Start Timer0
- Enable Interrupts
- Dim Doppelp As Bit
- Dim Zeig_1 As Byte
- '#####################################################
- Do
- '_sec und _min wird erstzt mit _min und _hour
- Zehner = _sec Mod 100
- Zehner = Zehner / 10
- Einer = _sec Mod 10
- W_st(4) = Lookup(einer , Segment)
- W_st(3) = Lookup(zehner , Segment)
- Zehner = _min Mod 100
- Zehner = Zehner / 10
- Einer = _min Mod 10
- W_st(2) = Lookup(einer , Segment)
- W_st(1) = Lookup(zehner , Segment)
- If Doppelp = 1 Then
- W_st(5) = &H60 ' für doppel Punkte
- Else
- W_st(5) = &H00
- End If
- Gosub Anzeigen
- If Sw_1 = 0 Then Gosub Datum 'Datum anzeigen
- If Sw_4 = 0 Then 'Zeit stellen
- Bitwait Sw_4 , Set
- Do
- Zehner = _min Mod 100
- Zehner = Zehner / 10
- Einer = _min Mod 10
- W_st(2) = Lookup(einer , Segment)
- W_st(1) = Lookup(zehner , Segment)
- W_st(3) = 0
- W_st(4) = 0
- Gosub Anzeigen
- Waitms 100
- If Sw_2 = 0 Then
- Bitwait Sw_2 , Set
- _min = _min + 1
- If _min = 60 Then _min = 0
- End If
- Loop Until Sw_4 = 0
- Bitwait Sw_4 , Set
- Do
- Zehner = _sec Mod 100
- Zehner = Zehner / 10
- Einer = _sec Mod 10
- W_st(4) = Lookup(einer , Segment)
- W_st(3) = Lookup(zehner , Segment)
- W_st(2) = 0
- W_st(1) = 0
- Gosub Anzeigen
- Waitms 100
- If Sw_2 = 0 Then
- Bitwait Sw_2 , Set
- _sec = _sec + 1
- If _sec = 60 Then _sec = 0
- End If
- Loop Until Sw_4 = 0
- Bitwait Sw_4 , Set
- End If
- Loop
- End
- '#####################################################
- Timer0_isr:
- Load Timer0 , Timer0reload
- Zeig_1 = Zeig_1 + 1
- If Zeig_1 = 50 Then
- Toggle Doppelp
- Zeig_1 = 0
- End If
- Return
- Anzeigen:
- For N_1 = 1 To 5
- Display_adress = N_1 : Display_daten = W_st(n_1)
- Cs_display = 0
- Shiftout Din_display , Clk_display , Display_adress , 1
- Shiftout Din_display , Clk_display , Display_daten , 1
- Cs_display = 1
- Next N_1
- Return
- Sectic:
- Neue_sek = 1
- Return
- Segment:
- ' hex für neue Codierung
- Data &H7E , &H30 , &H6D , &H79 , &H33 , &H5B , &H5F , &H70 , &H7F , &H7B
- Datum:
- Bitwait Sw_1 , Set
- Do
- Zehner = _day Mod 100
- Zehner = Zehner / 10
- Einer = _day Mod 10
- W_st(2) = Lookup(einer , Segment)
- W_st(2) = W_st(2) + &H80 'dp anzeige
- W_st(1) = Lookup(zehner , Segment)
- Zehner = _month Mod 100
- Zehner = Zehner / 10
- Einer = _month Mod 10
- W_st(4) = Lookup(einer , Segment)
- W_st(4) = W_st(4) + &H80 'dp Anzeige
- W_st(3) = Lookup(zehner , Segment)
- W_st(5) = &H00
- Gosub Anzeigen
- Loop Until Sw_1 = 0
- Bitwait Sw_1 , Set
- Do
- W_st(1) = &H6D '2
- W_st(2) = &H7E '0
- Zehner = _year Mod 100
- Zehner = Zehner / 10
- Einer = _year Mod 10 'Jahr Zehner
- W_st(4) = Lookup(einer , Segment) 'jahr Einer
- W_st(4) = W_st(4)
- W_st(3) = Lookup(zehner , Segment)
- W_st(5) = &H00
- Gosub Anzeigen
- Loop Until Sw_1 = 0
- Bitwait Sw_1 , Set
- Return
- '#################################
- 'Initialisieren des MAX7219
- Init_max7219:
- Display_adress = &H0C : Display_daten = &H00 ' Shutdown On
- Cs_display = 0
- Shiftout Din_display , Clk_display , Display_adress , 1
- Shiftout Din_display , Clk_display , Display_daten , 1
- Cs_display = 1
- Display_adress = &H09 : Display_daten = &H00 ' bei FF decode "B" für alle Digits,
- Cs_display = 0
- Shiftout Din_display , Clk_display , display_adress , 1
- Shiftout Din_display , Clk_display , Display_daten , 1
- Cs_display = 1
- Display_adress = &H0A : Display_daten = &H06 ' Helligkeit 0-F
- Cs_display = 0
- Shiftout Din_display , Clk_display , display_adress , 1
- Shiftout Din_display , Clk_display , Display_daten , 1
- Cs_display = 1
- Display_adress = &H0B : Display_daten = 4 ' Anzahl Digits 6, Zählung startet mit 0
- Cs_display = 0
- Shiftout Din_display , Clk_display , display_adress , 1
- Shiftout Din_display , Clk_display , Display_daten , 1
- Cs_display = 1
- Display_adress = &H0F : Display_daten = 0 ' Test Off
- Cs_display = 0
- Shiftout Din_display , Clk_display , display_adress , 1
- Shiftout Din_display , Clk_display , Display_daten , 1
- Cs_display = 1
- Display_adress = &H0C : Display_daten = 1 ' Shutdown Off
- Cs_display = 0
- Shiftout Din_display , Clk_display , Display_adress , 1
- Shiftout Din_display , Clk_display , Display_daten , 1
- Cs_display = 1
- Return
Die Anzeige ist schon auf einer fertigen Platine, die muß ich nur noch modifizieren damit sie ins Gehäuse passt.