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

[atmega32][c]pcf8583 zapis i odczyt powyżej adresu 0F

margas4542 29 Paź 2010 18:51 1469 3
REKLAMA
  • #1 8678560
    margas4542
    Poziom 16  
    Po zapoznaniu się z datashetem i polskimi ubogimi tłumaczeniami napisałem kawałek kodu aby zapisywać i odczytywać 4 nastawy czasu [godziny][minuty] do pcf-a ale coś nie gra i nie wiem czy nie zapisuje czy nie czyta....analogiczny kod ustawienia czasu zegarka chodzi bez problemów...chochlik czy ja coś skonociłem
    
    Zapis do PCF8583
    
    if(!(PIND & _BV(7)))
    	{//
    		_delay_ms(30);
        		TWI_write(zegar,0x10,rtc_pcf[0]);//godziny kanał 1 włącz    
        		TWI_write(zegar,0x20,rtc_pcf[1]);//minuty kanał 1 włącz
    
        		TWI_write(zegar,0x30,rtc_pcf[2]);//godziny kanał 1 wyłącz       
        		TWI_write(zegar,0x40,rtc_pcf[3]);//minuty kanał 1 wyłącz
    
    		TWI_write(zegar,0x50,rtc_pcf[4]);//godziny kanał 2 włącz           
        		TWI_write(zegar,0x60,rtc_pcf[5]);//minuty kanał 2 włącz
    
    		TWI_write(zegar,0x70,rtc_pcf[6]);//godziny kanał 2 wyłącz     
        		TWI_write(zegar,0x80,rtc_pcf[7]);//minuty kanał 2 wyłącz
    	}
    
    
    Odczyt z PVF8583
    
    {
    	PCF8583=TWI_read(zegar,0x10);		//adres rejestru dla kanal 1 
         	rtc_bin[8]=PCF8583 >> 4;		//odczyt godzin i minut kanał 1 włącz
         	rtc_dec[8] = bcd_na_dec(rtc_bin[8]);	 		
         	rtc_bin[9]=PCF8583 & 0x0F;
         	rtc_dec[9] = bcd_na_dec(rtc_bin[9]);	//konwersja na dec
    	//kolejne trzy analogiczne jedynie ze zmianą adresu rejestru
    }
  • REKLAMA
  • #2 8678687
    kiziu13
    Poziom 17  
    A jak wyglądają same funkcje do TWI?
  • REKLAMA
  • #3 8678910
    margas4542
    Poziom 16  
    Proszę bardzo...z zegarem wszystko na tym kodzie śmiga bez problemu
    
    //********** funcje obsługi TWI dla PCF8583
    #define ACK 1
    #define NOACK 0
    static void TWI_start(void)
    {
    	TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    	while (!(TWCR & (1<<TWINT)));
    }
    static void TWI_stop(void)
    {
    	TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
    }
    void TWI_write(unsigned char scalak,unsigned char adres_rejestru,unsigned char liczba)
    {
    	TWCR =(1 << TWINT) | (1 << TWSTA) | ( 1 << TWEN );
    	while(!(TWCR & (1 << TWINT)));
    	TWDR =scalak;
    	TWCR =(1 << TWINT) | (1 << TWEN);
    	while(!(TWCR & (1 << TWINT)));
    	TWDR =adres_rejestru;
    	TWCR =(1 << TWINT) | (1 << TWEN);
    	while(!(TWCR & (1 << TWINT)));
    	TWDR =liczba;
    	TWCR =(1 << TWINT) | (1 << TWEN);
    	while(!(TWCR & (1 << TWINT)));
    	TWCR =(1 << TWINT) | (1<<TWEN) | (1<<TWSTO);
    } 
    unsigned char TWI_read(unsigned char scalak,unsigned char adres_rejestru)
    {
    	unsigned char odczyt;     
    	TWCR =(1 << TWINT) | (1 << TWSTA) | ( 1 << TWEN );
    	while(!(TWCR & (1 << TWINT)));
    	TWDR =scalak;
    	TWCR =(1 << TWINT) | (1 << TWEN);
    	while(!(TWCR & (1 << TWINT)));
    	TWDR =adres_rejestru;
    	TWCR =(1 << TWINT) | (1 << TWEN);
    	while(!(TWCR & (1 << TWINT)));
    	TWCR =(1 << TWINT) | (1 << TWSTA) | ( 1 << TWEN );
    	while(!(TWCR & (1 << TWINT)));
    	TWDR =scalak | 0x01;
    	TWCR =(1 << TWINT) | (1 << TWEN);
    	while(!(TWCR & (1 << TWINT)));
    	TWCR =(1 << TWINT) | (1 << TWEN);
    	while(!(TWCR & (1 << TWINT)));
    	odczyt =TWDR;     
    	TWCR =(1 << TWINT) | (1<<TWEN) | (1<<TWSTO);
    	return(odczyt);
    }
  • #4 8686984
    margas4542
    Poziom 16  
    Proszę o pomoc...odczytanie dnia tygodnia tzn czy poniedziałek itd;...druga sprawa zapis dziesiątek i jednostek miesięcy.....niby proste a za chiny zapisać nie potrafię już paluchy bolą od klepania w klawisze żadne przesunięcia bitowe nie działają...odczyt dla miesięcy zdefiniowany tak;a dni tygodnia ????????
    
    {
    			PCF8583=TWI_read(zegar,0x06);		
         		pcf_10mc = PCF8583 >> 4;			//dziesiatki miesięc					
         		dec_10mc = bcd_na_dec(pcf_10mc);				 
         		pcf_1mc = PCF8583 & 0x0F;			//jednostki miesięcy		
         		dec_1mc = bcd_na_dec(pcf_1mc);
    
REKLAMA