logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] Jak odczytać flagę alarmu? Problem z DS3231.

szewcu12 22 Paź 2020 18:07 309 4
  • #1 18993670
    szewcu12
    Poziom 6  
    Witam,
    mam problem z odczytaniem flagi alarmu.
    Korzystam z RTC DS3231 i potrzebuje gdy rejestry czasu oraz alarmów się pokryją żeby wystawiło"1" na fladze A1F.
     void check_alarm(TDATETIME * dt){  // funkcja sprawdzania flagi A1F napisalem Nie i Tak zeby wiedziec kiedy wystawi po prostu "1"
    	uint8_t buf;
    	TWI_read_buf(ADR_DS1307, 0x0F, 1, buf);
    	dt->alarm = bcd2dec(buf);
    	if(!(dt->alarm & 0x01))
    	{
    		lcd_locate(3,0);
    		lcd_str("NIE");
    	}
    	else
    	{
    		lcd_locate(3,0);
    	lcd_str("TAK");
    
    	
    	}


    void DS1307_set_alarm(uint8_t hh, uint8_t mm, uint8_t ss) { // tutaj mam funkcję ustawiania czasu alarmu oraz ustawiania "1" na bicie ostatnim rejestru 0Ah, aby porównywał godzine minuty oraz czas.
    	uint8_t buf[4];
    	buf[0]=dec2bcd(ss);
    	buf[1]=dec2bcd(mm);
    	buf[2]=dec2bcd(hh);
    	buf[3]=0x10;
    	TWI_write_buf( ADR_DS1307, 0x07, 4, buf );
    }


    Na samym początku oczywiście ustawiam alarm i czas przed główną pętlą.
    Funkcje TWI_write_buf wpisuja do kolejno nastepujacych rejestrów począwaszy od wpisanego np jak wyżej 0x07 i kolejne 3 rejestry
  • #2 18996231
    slx
    Poziom 19  
    szewcu12 napisał:

    void DS1307_set_alarm(uint8_t hh, uint8_t mm, uint8_t ss) { // tutaj mam funkcję ustawiania czasu alarmu oraz ustawiania "1" na bicie ostatnim rejestru 0Ah, aby porównywał godzine minuty oraz czas.
    uint8_t buf[4];
    buf[0]=dec2bcd(ss);
    buf[1]=dec2bcd(mm);
    buf[2]=dec2bcd(hh);
    buf[3]=0x10;
    TWI_write_buf( ADR_DS1307, 0x07, 4, buf );
    }


    Ale wiesz, że 0x10 to nie jest ostatni bit rejestru. Zapewne miałeś na myśli 0x80 :)
  • #3 18996234
    szewcu12
    Poziom 6  
    Wiem wiem już to zauważyłem ale nadal nic
  • #4 18997188
    szewcu12
    Poziom 6  
    dla ciekawych to wartość 0x80 trzeba zamienić na kod BCD, zapomniałem przecież że w RTC posługujemy się innym kodem
  • #5 18997189
    szewcu12
    Poziom 6  
    dla ciekawych to wartość 0x80 trzeba zamienić na kod BCD, zapomniałem przecież że w RTC posługujemy się innym kodem

    Dodano po 32 [sekundy]:

    zamiana 0x80 na kod bcd
REKLAMA