ja robiłem wiele razy zegar na licznikach systemowych i jakoś nigdy nie miałem błędu 5 minut nawet na tydzień, co najwyżej pare sekund
jeśli dobrze dobierzesz kwarc, prescaler i liczbę którą ładujesz do timera to będzie ok
możesz dodatkowo podłączyć trymer do kwarcu i ustalić nim najlepszą prędkość taktowania
a jak nadal upierasz się przy PCF8583 to proszę:
$regfile = "2313def.dat"
$crystal = 4000000 'dla 4MHz
Set Ddrb.0 'impulsy będą dostępne na nóżkach portb.0
Set Ddrb.1 '... i portb.1
Config Scl = Portd.0
Config Sda = Portd.1
I2cinit
On Int0 Pcf8583
Enable Interrupts
Enable Int0
Dim Sekundy As Byte
Dim Pin As Bit
Do
If Sekundy < 2 Then
If Pin = 1 Then
Set Portb.0
Else
Set Portb.1
End If
Else
Reset Portb.0
Reset Portb.1
End If
Loop
End
Pcf8583:
I2cstart
I2cwbyte 160 'zależy jak skonfigurowane piny adresowe
I2cwbyte 2 'komórka sekund
I2cstart
I2cwbyte 161 '^^^
I2crbyte Sekundy , Nack
I2cstop
'Sekundy = Makedec(sekundy) 'tego nie musi być
If Sekundy = 0 Then Pin = Not Pin
Return
nóżkę int0 pcf8583 (7) trzeba podłączyć do PD.2 w uC przez układ RC, ponieważ pcf8583 daje przebieg o częstotliwości 1Hz, wypełnienie 50%... a nie chcemy, żeby przerwanie było wywoływane co chwile przez te pół sekundy...
można też sprawdzać co chwile czy są zmiany w rejestrach sekund pcf8583, ale to mało eleganckie
można również zamiast układu RC odpowiednio napisać program... jednak chyba najlepszym wyjściem jest układ RC
długość trwania stanu niskiego na nóżce PD.2 mikrokontrolera to około 5us (nawet mniej) przy kwarcu 12MHz wystarcza w zupełności, dla 4MHz też powinno iść, jeśli nie, trzeba będzie zwiększyć pojemność kondensatora lub wartośc opornika "4,7k"
do pcf8583 też dobrze jest podłączyć trymer