![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> Hallo Dietmar! > > > > Auf der Open-Maxi gibt es die Möglichkeit eine eigene Routine in das System einzubinden. > > DAnn könnte man natürlich auch gleich das "Software-Filter" für DCF77 implementieren. > > Stimmt, das mit der eigenen Routine wäre eine Möglichkeit. > Ich muß mir das noch mal genauer anschauen, vielleicht habe ich zu kompliziert gedacht. > > @Norbert: Ich habe auch ein DS3231 Uhrenmodul, welches ich noch nicht angesteuert bekomme. Könntest du ein Beispiel posten? > > > Viele Grüße > Dirk, von das |_ Team Hallo, ich habe eben auf die Schnelle ein Programm bis auf einige RTC-Details gekürzt. Etliche Define-Einstellungen sind überflüssig. Freundliche Grüße Norbert '--------------------------------------------------------------------------- 'Aus einem Programm Details für das Modul DS3231, 'weggelassen sind die Timer- und Interrupt-Möglichkeiten des Moduls include "omax.def" '--------------------------------------------------------------------------- dim a,b,c,d,k,l,i byte '--------------------------------------------------------------------------- define ADDRESS word define ADDRHI byte define ADDRLO byte define DATA byte define xWM byte define xYD byte define xHour byte define xMin byte define xSec byte '--------------------------------------------------------------------------- define Impuls byte define ImpulsMax byte define Zeit byte define MySecond byte define MyMinute byte define MYHour byte define Sekunde byte define Intensitaet byte '--------------------------------------------------------------------------- define AktuelleSec byte define LetzteSec byte define VergleichsSec byte '--------------------------------------------------------------------------- 'Init '--------------------------------------------------------------------------- End2Host=ON 'PrintSpc=ON RunOnErr=ON IF ERR THEN ?"Fehler Nr."ERR END END IF POKE i2cdelay,20 'ca. 100 kHz I²C-Bustakt DS3231=&hD0 'ADRESSE EEPROM in DS3231 LCDINIT 'setzt LcdErr auf OFF bei ACK vom PCF8574, sonst auf ON IF LcdErr THEN PRINT "NoAck vom I2C-LCD" : END LCDLight=on LCDCLS '--------------------------------------------------------------------------- #Loop '--------------------------------------------------------------------------- ' mit Drehmelder (Impuls) werden die einzelnen Unterroutinen ausgewählt '-------------------------------------------------------------------------- If Impuls=15 then 'Uhrzeit setzen SetRTCZeit Pause 50 end if '-------------------------------------------------------------------------- If Impuls=16 then 'Uhrzeit auslesen und anzeigen While TasteR=on GetRTCZeit wend end if '-------------------------------------------------------------------------- #EndLoop Impuls=0 goto Loop '-------------------------------------------------------------------------- #SetRTCZeit LCDLocate 0,0 LCDPrint "Uhr stellen " Pause 15 'Pause zum Abklingen Drehtaste 0 LCDLocate 1,0 LCDPrint "Stunde " ImpulsMax=23 Drehwahl2 hour=impuls Pause 15 'Pause zum Abklingen Drehtaste 0 LCDLocate 1,0 LCDPrint "Minute " ImpulsMax=59 Drehwahl2 minute=impuls Pause 15 'Pause zum Abklingen Drehtaste 0 LCDLocate 0,0 LCDPrint "Datum " LCDLocate 1,0 LCDPrint "Jahr " ImpulsMax=16 Drehwahl2 year=impuls Pause 15 'Pause zum Abklingen Drehtaste 0 LCDLocate 1,0 LCDPrint "Monat " ImpulsMax=12 Drehwahl2 month=impuls Pause 15 'Pause zum Abklingen Drehtaste 0 LCDLocate 1,0 LCDPrint "Tag " ImpulsMax=31 Drehwahl2 Day=impuls Pause 15 'Pause zum Abklingen Drehtaste 0 Impuls=0 LCDCLS LCDLocate 1,0 LCDPrint "Start TasteR " While TasteR=on wend xHour=Dez_to_BCD(hour) 'xSec=Dez_to_BCD(second) xSec=Dez_to_BCD(0) xMin=Dez_to_BCD(minute) I2C_Init I2C_stop I2C_Start 'start i2c_write(DS3231) i2c_write(0) 'select second register i2c_write(xSec) i2c_write(xMin) i2c_write(xHour) I2C_stop Return '--------------------------------------------------------------------------- #GetRTCZeit I2C_Init I2C_Start 'start i2c_write(DS3231) i2c_write(0) I2C_stop 'stop I2C_Start 'start i2c_write(DS3231+1) xsec=i2c_read 'seconds pause 5 xmin=i2c_read 'minutes pause 5 xHour=i2c_read 'hours I2C_stop Hour=BCD_to_Dez(xHour) 'Stundenregister Second=BCD_to_Dez(xSec) Minute=BCD_to_Dez(xMin) 'print "Uhrzeit "; hour; ":"; minute; ":"; second; ":"; " ' "; day; "."; month; "." ;year; " " LCDCLS LCDLocate 0,0 LCDPrint "Zeit" repeat mySecond=Second myMinute=Minute myHour=Hour until mySecond<>59 or Second<>0 LCDLocate 0,7 If myHour>9 then LCDPrint myHour else LCDPrint "0";myHour end if LCDPrint ":" If myMinute>9 then LCDPrint myMinute else LCDPrint "0";myMinute end if LCDPrint ":" If mySecond>9 then LCDPrint mySecond else LCDPrint "0";mySecond end if LCDLocate 1,0 LCDPrint "Datum " day; "."; month; "." ;year Return '--------------------------------------------------------------------------- Function BCD_to_Dez(Wert) ' Wandele BCD in Dezimalzahl 'Wert=i2c_read ' Hole BCD-Zahl (Minute/Stunde usw. aus UhrMemory x= Wert and &hF ' BCD-Zahl (ohne obere 4 BITs in x)=EINER SHR y= x+10*(WERT SHR 4) RETURN y end function FUNCTION Dez_to_BCD (Wert) ' Wandele Dezimal in BCDzahl (Zahl in Wert) Y=Wert/10 ' Zehner ' ' x= Wert -(Y*10)+ (Y SHL 4) ' Zehner(Y SHL 4) Einer (Wert-Y*10) 'i2c_write(x) ' MINUTEn oder Stunden gesetzt 'PAUSE 20 RETURN x end function '----------------------------------------------------------------------------------- 'OMAX_I2C.PRO: '----------------------------------------------------------------------------------- PROCEDURE i2c_init INLASM ! jmp FwI2Cinit END PROCEDURE PROCEDURE i2c_start INLASM ! jmp FwI2Cstart END PROCEDURE FUNCTION i2c_write INLASM ! jsr FwPop 'Eintrag vom Rechenstack in den Akkumulator holen ! jsr FwI2Cwrite ! sta OSTEMP ! jmp FwPushW 'ACK auf Stack END FUNCTION FUNCTION i2c_read INLASM ! jsr FwPop 'ACK vom Rechenstack in den Akkumulator holen ! jsr FwI2Cread ! jmp FwPush 'Gelesenes Byte auf den Rechenstack END FUNCTION PROCEDURE i2c_stop INLASM ! jmp FwI2Cstop END PROCEDURE '--------------------------------------------------------------------- ' Die Firmware-Routinen einbinden ' --------------------------------------------------------------------- INCLUDE "om_fw.pro" |
Antwort schreiben |