Newsgroup: it.hobby.elettronica.digitale
Titolo: Clock Calendar PCF8563

Sulla mia scheda ho:
     PIC18F2525
     EEprom 24C32  I2C, funzionamento OK
     Clock calendar PCF8563  I2C, non funziona.
     Le 2 linee I2C sono appese ai +5 con 10k.
Il Clock Calendar non mi funziona.
    Invio dei dati via I2C come indicato nel datasheet ma non ricevo
    che cose strane.
    L'alimentazione è OK
    Una cosa che non capisco: ai capi del quarzo 32768 Khz
    con oscilloscopio non leggo niente.
Qualche consiglio?
Grazie. 

     con oscilloscopio non leggo niente.
Spero siano Hz, non kHz. E' possibile che la capacità della sonda
dell'oscilloscopio ti smorzi l'oscillazione?
La scheda l'hai fatta tu o comprata? Ci sono zoccoli?


Si, sono Hz. Il quarzo indicato su questi Clock Calendar 32,768 Khz.
La scheda l'ho fatta io su millefori e il chip è montato su zoccolo.
Su questa scheda ho una EEprom stesso bus I2C e funziona perfettamente.
Il montaggio su zoccolo può avere importanza? la frequenza non è poi
cosi alta.
Grazie
Saluti

    L'alimentazione è OK
Per la lettura del PCF8583 io faccio così:
- Invio condizione di start lettura i2c
- Invio indirizzo i2c 0xA0 con richiesta di scrittura (il bit LSB è 
ignorato)
- Invio registro da dove voglio iniziare la lettura: 0x02 (secondi)
- Invio indirizzo i2c 0xA0 con richiesta di lettura
- lettura sequenziale dei registri, nel mio caso con un ciclo for leggo fino 
al registro 0x06 (weekdays/months) + invio ACK ad ogni lettura
altrimenti non legge niente. Il PCF incrementa automaticamente il registro 
ad ogni lettura.
- Invio condizione di stop i2c
Nel caso del PCF8563 vedo che i registri sono disposti in modo diverso ma la 
sequenza di lettura dovrebbe essere identica.
Scusa la povertà del mio linguaggio tecnico ma al momento sono un pò 
arrugginito.
Ciao.
Alex

 Ciao.
Alcune considerazioni:
1) Sullo stesso BUS ho anche una EEprom con indirizzo 0xA0
2) Sul datasheet del PCF8563 vengono indicati 2 indizzi
            lettura    A3h
            scrittura A2h
Farò altre prove.
Grazie
Ciao 


In lettura il bit 0 deve essere uguale a 1
0xa3 e' determinato da 0x0a + 0x02 + 0x01 (bit R/W).
0x0a = identificativo hardware per Eeprom serie 24xx
0x02 = indirizzo hardware dispositivo (determinato dai pin di 
indirizzamento connessi a +5 o Gnd)
0x01 bit per lettura
0x00 bit per scrittura
Attenzione che nell'uso, l'indirizzo hardware deve essere traslato dai 
bit da 0 a 2 nei bit da 1 a 3 della variabile.
Questo potrebbe essere una causa di mancata risposta da parte del 
dispositivo che non e' indirizzato correttamente.
ciao
Angelo

     con oscilloscopio non leggo niente.
Non è difficile spegnere un oscillatore quarzato facendo una misura
con l'oscilloscopio. A volte le cose migliorano utilizzando una sonda
1/10, a volte ancora non basta e la capacità dovuta alla sonda è
sufficiente ad impedire al sistema di funzionare.

 Angelo
Ti ringrazio per le tue indicazioni.
Con le EEprom I2C utlizzo le librerie di Laurtec.it di Mauro Laurenti
senza problemi.
Non ho ben capito il tuo ragionamento ma farò delle prove e poi farò
sapere.
Saluti

Ancora problemi con il mio clock Calendar.
Sembra che conti in esadecimale.
Conta in questo modo:
  0 -   1 -   2 -   3 -   4 -  5  -   6 -   7 -  8  -   9
16 - 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24 - 25
32 - 33 - 34 - 35 - 36 - 37 - 38 - 39 - 40 - 41
48 - 49 - 50 - 51 - 52 - 53 - 54 - 55 - 56 - 57
64 - 65 - 66 - 67 - 68 - 69 - 70 - 71 - 72 - 73
80 - 81-  82 - 83 - 84 - 85 - 86 - 87 - 88 - 89
Come si vede dopo il 9 diventa 16
Come si può contare in decimale?
Grazie per suggerimenti.
Qui sotto il mio codice.
#include <i2c.h>
char dato,vista[15];
unsigned int i1;
if(pu1==0)
{    EEByteWrite(0xA2,0x00,0x00);  //Control_Status_1.
      EEByteWrite(0xA2,0x01,0x00);  //Control_Status_2
      EEByteWrite(0xA2,0x02,0x01);  //Secondi.
      EEByteWrite(0xA2,0x03,0x01);  //Minuti.
      EEByteWrite(0xA2,0x04,0x02);  //Ore.
}
main()
{ ...
  ...
ciclo:
   dato=EERandomRead(0xA2,0x02); //Secondi
   dato=dato&0b01111111;                //Maschera VL.
   btoa(dato,vista);                               //Converte in 
alfanumerico
   HomeLCD();
   WriteStringLCD("   ");
   HomeLCD();
   WriteVarLCD(vista);                       //Visualizza.
   for(i1=0;i1<60000;i1++);                //Pausa.
   goto ciclo;