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

Jak skonfigurować TWI w Atmega8A z RTC PCF8563 przy 8MHz?

wiem_wiem 01 Maj 2012 17:19 1350 1
REKLAMA
  • #1 10850010
    wiem_wiem
    Poziom 1  
    Witam,

    Mam problem z odpaleniem TWI w atmedze. Procesor taktowany wewnętrznym oscylatorem 8MHz. Do procesora podłączony zegar RTC PCF8563. Testowałem różne warienty pull-upów od 1k do 10k.
    Wklejam kod programu:
    
    	TWBR =0b00001000;
    	DDRD=0xff;
    	DDRC=0x07;
    	LCD_init();
    	char buff[3];
    	LCD_sendText("LCD test!");
    	_delay_ms(5000);
    	LCD_sendCommand(LCDcom_clear);
    
    	TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    	while (!(TWCR & (1<<TWINT)));
    	if ((TWSR & 0xF8) != TW_START) LCD_sendText("e1");
    	TWDR = 0xA3;
    	TWCR = (1<<TWINT) | (1<<TWEN);
    	while (!(TWCR & (1<<TWINT)));
    	if ((TWSR & 0xF8) != TW_MR_SLA_ACK) LCD_sendText("e2");
    	TWCR = (1<<TWINT) | (1<<TWEN);
    	while (!(TWCR & (1<<TWINT)));           // <- Tutaj program się zapętla
    	if ((TWSR & 0xF8) != TW_MR_DATA_ACK) LCD_sendText("e3");
    	LCD_sendText(itoa((int)(TWDR),buff,16));
    	TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
    

    W większości przypadków program zostaje w pętli oczekując na dane. Na wyświetlaczu pojawia się e2, wiec nie dostajemy potwierdzenia adresu od slave'a.
    Kilkukrotnie udało mi się odczytać pierwsze 8 bitów danych z zegarka. Dane zgadzają się z dokumentacją. Jednak w większości przypadków program wisi na tej pętli. Siedzę przy tym już drugi dzień i nie bardzo wiem gdzie szukać błędów.
    Oczywiście przeczytałem podobne tematy.
    Z góry dzięki za pomoc.
    Pozdrawiam
  • REKLAMA
  • #2 10850340
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA