

miniOT - Obvod reálného času PCF8583 - jak ho přimět, aby se do něj zapsal datum?
Ahoj,
mám vývojovou desku EasyPIC 6 a v ní PIC16F887. Vyrobil jsem si k ní modul reálného času dle následujícího schematu: http://www.mikroe.com/pdf/rtcproto_schematic_v100. pdf . Zapojil jsem do desky k pinům RC3 a RC4 a zkusil jsem přečíst přes sběrnici I2C sekundy, které by měly být uložené v tom obvodu. Napsalo mi to 255. Tak jsem si řekl, že ten obvod nebyl rok zapnutý a dostal zabrat při vyletování, tak se to z tý paměti nějak vymazalo. Nahrál jsem tedy program, přes který by mělo jít zapsat. Zkusil jsem, ale 255 tam je zapsáno pořád. Osciloskopem jsem zkontroloval, jestli probíhá samotná komunikace a "jehličky" na "datovém drátu" naskakujou, takže komunikace tam nějaká je. Hodinový signál 1Hz generuje taktéž, oscilátor funguje. Je to jasný příznak toho, že je odpálenej nebo jsem ještě něco opomněl? Takto vypadá kod na čtení (psaný v mikroC PRO for PIC):
// nadefinované piny LCD displeje a toho RTC obvodu
void main()
{
ANSEL = 0x0f; // Configure AN2 pin as analog
ANSELH = 0; // Configure other AN pins as digital I/O
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
TRISA = 0xFF; // PORTA is input
TRISC = 0; // PORTC is output
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
while(1)
{
Soft_I2C_Init();
Soft_I2C_Start(); // Issue repeated start signal
Soft_I2C_Write(0xA0); // Address PCF8583, see PCF8583 datasheet
Soft_I2C_Write(0); // Start from address 2
Soft_I2C_Write(0xA1); // Address PCF8583 for reading R/W=1
seconds = Soft_I2C_Read(1); // Read seconds byte
Soft_I2C_Stop(); // Issue stop signal
Lcd_Chr(1,1,48+seconds/100);
Lcd_Chr(1,2,48+(seconds%100)/10);
Lcd_Chr(1,3,48+(seconds%100)%10);
}
}
Díky za odpovědi a kdybych něco zapomněl napsat, tak doplním.