Hallo MagicWSmoke !
Im Posting 12 also genau vor Deiner Antwort ist ein Link zu dem Beispiel, das ich nutze und hier nochmals in wiederholter Form:
Nur ist ein Unterschied, das bei mir der PortB.0 bei HR= 8 und MIN = 30 von HIGH zu LOW wechseln ...Nachtrag: Ich habe mir dieses Beispiel als Vorlage genommen zum Test, ohne das Setzen der UHR (Auskommentiert) wollte nur sec,min,hr auswerten. Das RTC ist mit aktueller Zeit versorgt
also:Mein Code zur Auswertung mal angedeutet, ohne die aber vorhandenen(!!!) Funktionen BCD2DEC dargestellt, also da kann ich nix auswerten. Es sei denn ich initialisiere selber die Zeitvariablen mit dem entsprechenden wert, dann geht es.Code:HR_D = BCD2DEC(hr); // Zeit von BCD Code in Dezimal umwandeln MIN_D = BCD2DEC(min); // Zeit von BCD Code in Dezimal umwandeln if ((HR_D == 0x08) && (MIN_D == 0x1E)) PORTB =0xFE else PORTB = 0xFF; if ((HR_D == 0x08) && (MIN_D == 0x1F)) PORTB =0xFD; else PORTB = 0xFF;
Ich hoffe das reicht nun zur Erklärung...
Nachtrag: Um allem gerecht zu werden hier nun der komplette Code den ich verwende und der nicht geht, d.h. keine Auswertung an PortB0,PortB1 möglich...
Woher das Grundgerüst ist , findet man unter den oben erwähnten Link.Code:/* ========================================================================== */ /* */ /* zeitauswertung DS1307 / ATMEGA16 an PortB Pin B0 + B1 */ /* */ /* ========================================================================== */ #define F_CPU 1600000UL #include<avr/io.h> #include<util/delay.h> void rtc_init(void) { TWSR=0x00; TWBR=0x98; TWCR=0x04; } void rtc_start(void) { // sende START Bedingungen TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); // warte bis fertig... while(!(TWCR & (1<<TWINT))); } unsigned char rtc_read(void) { TWCR=(1<<TWINT)|(1<<TWEN); while(!(TWCR & (1<<TWINT))); return(TWDR); } void rtc_write(unsigned char data) { TWDR=data;// sending address TWCR=(1<<TWINT)|(1<<TWEN); // warte bis fertig... while(!(TWCR & (1<<TWINT)));} void rtc_stop() { TWCR=(1<<TWINT)|(TWSTO)|(1<<TWEN); // warte bis fertig... while(!(TWCR & (1<<TWINT))); } /* ========================================================================== */ /* */ /* DEZIMAL ZU BCD // Uhr Stellen */ /* */ /* ========================================================================== */ char dez_to_bcd(char num) { return ((num/10 * 16) + (num % 10)); } /* ========================================================================== */ /* */ /* BCD zu DEZIMAL // UHR LESEN */ /* */ /* ========================================================================== */ char bcd_to_dez(char num) { return ((num/16 * 10) + (num % 16)); } /* ========================================================================== */ /* */ /* */ /* */ /* ========================================================================== */ int main(void) { unsigned char sec,min,hr,HR_D,MIN_D; DDRB=0xFF; rtc_init(); _delay_ms(1000); rtc_start(); /// Zeit zum Test auf 0,5 min vor Schaltvorgang setzen rtc_write(0b11010000); // 1101000=adress of ds1307 and bit 0= write rtc_write(0x00); // pointing address location 00 i.e seconds rtc_write(0x1E);// set sec=30 rtc_write(0x1D);// set min=29 rtc_write(0x08);// set hr=8 rtc_stop(); while(1) { rtc_start(); rtc_write(0b11010001); // 1101000=adress of ds1307 and bit 1= read rtc_write(0x00); // pointing address location 00 i.e seconds sec=rtc_read(); rtc_stop(); _delay_ms(50); // etwas warten rtc_start(); rtc_write(0b11010001); // 1101000=adress of ds1307 and bit 1= read rtc_write(0x01); // pointing address location 01 i.e minute min=rtc_read(); rtc_stop(); _delay_ms(50); // etwas warten rtc_start(); rtc_write(0b11010001); // 1101000=adress of ds1307 and bit 1= read rtc_write(0x02); // pointing address location 02 i.e hours hr=rtc_read(); rtc_stop(); _delay_ms(50); // etwas warten // Zeit decodieren und auswerten HR_D = bcd_to_dez(hr); // Zeit von BCD Code in Dezimal umwandeln MIN_D = bcd_to_dez(min); // Zeit von BCD Code in Dezimal umwandeln if ((HR_D == 0x08) && (MIN_D == 0x1E)) PORTB =0xFE; else PORTB = 0xFF; if ((HR_D == 0x08) && (MIN_D == 0x1F)) PORTB =0xFD; else PORTB = 0xFF; } }
Gerhard







Zitieren
Lesezeichen