Bonjour,
J'utilise un PIC 18F97J60 fonctionnant à 40Mhz et je cherche a piloter une RTC de chez Maxim : DS1305.
Je rencontre un probleme de transmission SPI dès que je cherche a écrire ou lire dans un registre de la RTC.
Afin d'initialiser la RTC, il convient d'ecrire la valeur 0x00 dans le registre de contrôle de la RTC à l'adresse 0x8F.
J'ai défini les registres SSP1CON1 du PIC a 0x22 et SSP1STAT à 0x00 pour communiquer en SPI mode 1.
Ensuite, j'ai écris ceci pour initialiser la RTC :
Aussitot, l'execution du programme se bloque ici : ( sur la ligne en rouge )Code:// ---------------- CLEAR CTRL REGISTER ---------------- // Activate chip select RTC_CS_IO = 1; Delay10us(1); // wait tcc (see datasheet page 20/22) // Send Control register address RTC_SSPBUF = 0x8F; // Transmit address to write control register 0x8F (see datasheet page 6/22) while(!RTC_SPI_IF); // Wait until data is shifted out Dummy = RTC_SSPBUF; // Clear SPI Buffer RTC_SPI_IF = 0; RTC_SSPBUF = 0x00; // Transmit control register config : clear WP, Enable Oscillator, no interrupts. while(!RTC_SPI_IF); // Wait until data is shifted out Dummy = RTC_SSPBUF; RTC_SPI_IF = 0; // Deactivate chip select RTC_CS_IO = 0; Delay10us(1); // Wait ttcwh
RTC_SSPBUF = 0x00; // Transmit control register config : clear WP, Enable Oscillator, no interrupts.
while(!RTC_SPI_IF);
Je visualise bien à l'oscilloscope le passage de CS à "1" puis les front des SCK.
le pic envoi alors bien la valeur àx8F sur sa patte SDO
Rien ne se passe sur la patte SDI (pic ) / SDO (rtc)
Je me suis aperçu que si j'envoi une valeur non nulle, autre que 0x00 le code ne se bloque pas, mais pour autant la RTC ne renvoi rien sur sa patte SDO, ce n'est pas normal.
Notemment pour une opération de lecture, on adresse le registre de la RTC à lire, par exemple 0x01 puis en envoi 0x00 pour lire le contenu du registre, et là encore la RTC ne répond rien sur SDO malgré que tout semble avoir bien été envoyé sur SCK et SDI.
Auriez vous une idée du probleme ?
Je vous remercie,
-----