salut tout le monde j'ai un problème avec le DS1307 je travaille avec le pic 16F877A et en assembleur je besoin d' aide s'il vous plait![]()
-----
salut tout le monde j'ai un problème avec le DS1307 je travaille avec le pic 16F877A et en assembleur je besoin d' aide s'il vous plait![]()
quel est ton problème ?
Il faut nous en dire plus !
"thewarner" Merci pour votre réponse j'ai construit un programme mais ca marche pas je ne c'est pas est ce que le problème dans la configuration de I2C ou dans logiciel de simulation " ISIS" et voila une partie de mon programme et merci une autre fois
; initialiser I2C
; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxx
; Configuration du module MSSP du PIC 16F876A (I2C maître)
; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxx
BANK1
bsf TRISC , 3 ; broche RC3/SCK/SCL configurée en entrée
bsf TRISC , 4 ; broche RC4/SDI/SDA configurée en entrée
bsf SSPSTAT , SMP ; bit 7 (SMP) = 1 : fréquence de l'horloge du bus I2C : F SCL = 100 kHz
bcf SSPSTAT , CKE ; bit 6 (CKE) = 0 : Disable SMBus specific inputs
movlw 0x31
movwf SSPADD ; (SSPADD) = (FOSC / (4*f SCL)) - 1 = 0x31
; FOSC = 20 MHz
BANK0
movlw B'00101000'
movwf SSPCON
; bit 5 (SSPEN) = 1 : enable the MSSP
; bit 3 (SSPM3) = 1
; bit 2 (SSPM2) = 0
; bit 1 (SSPM1) = 0
; bit 0 (SSPM0) = 0
; (SSPM3:SSPM0) = (1000) : MSSP configuré dans le mode I2C maîtr
; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxx
; Configuration DS1307 (Real Time Clock) bus I2C esclave
; adresse I2C : 1011000
; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx
; Ecriture dans le registre de contrôle (adresse 0x07) du DS1307
call I2C_start
movlw B'11010000' ; 8 bits à écrire (7 bits d'adresse + RW)
; 1011000 + 0 (write)
call I2C_write
call I2C_ACK_slave_to_master
movlw 0x07 ; 8 bits à écrire (adresse du registre de contrôle du DS1307)
call I2C_write
call I2C_ACK_slave_to_master
movlw B'00000000' ; écriture du contenu du registre de contrôle du DS1307
; bit 4 : SQWE = 1
; bit 1 : RS1 = 0
; bit 0 : RS0 = 0
; 1,000 000 Hz sur la sortie SQW/OUT
call I2C_write
call I2C_ACK_slave_to_master
call I2C_stop
; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
; écriture de la nouvelle date/heure dans DS1307
call I2C_start
movlw B'11010000' ; 8 bits à écrire (7 bits d'adresse + RW)
; 1011000 + 0 (write)
call I2C_write
call I2C_ACK_slave_to_master
movlw 0x00 ; 8 bits à écrire (adresse du registre du DS1307)
call I2C_write
call I2C_ACK_slave_to_master
movf secondes0 , W ; écriture dans le registre d'adresse 0x00
call I2C_write
call I2C_ACK_slave_to_master
movf minutes0 , W ; écriture dans le registre d'adresse 0x01
call I2C_write
call I2C_ACK_slave_to_master
movf heures0 , W ; écriture dans le registre d'adresse 0x02
call I2C_write
call I2C_ACK_slave_to_master
movf jours0 , W ; écriture dans le registre d'adresse 0x03
call I2C_write
call I2C_ACK_slave_to_master
movf date0 , W ; écriture dans le registre d'adresse 0x04
call I2C_write
call I2C_ACK_slave_to_master
movf mois0 , W ; écriture dans le registre d'adresse 0x05
call I2C_write
call I2C_ACK_slave_to_master
movf annee0 , W ; écriture dans le registre d'adresse 0x06
call I2C_write
call I2C_ACK_slave_to_master
call I2C_stop
goto start ; programme principal
;***************************** ****************************** ******************
; PROGRAMME PRINCIPAL *
;***************************** ****************************** ******************
start
; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; Lecture du calendrier (DS1307)
; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
call I2C_start
movlw B'11010000' ; 8 bits à écrire (7 bits d'adresse I2C + 0 Write )
call I2C_write
call I2C_ACK_slave_to_master
movlw B'00000000' ; 8 bits à écrire (registre d'adresse 0x00)
call I2C_write
call I2C_ACK_slave_to_master
call I2C_Repeated_Start
movlw B'11010001' ; 8 bits à écrire (7 bits d'adresse + 1 Read)
call I2C_write
call I2C_ACK_slave_to_master
call I2C_read
movwf secondes ; lecture des secondes (registre d'adresse 0x00)
call I2C_ACK_master_to_slave
call I2C_read
movwf minutes ; lecture des minutes (registre d'adresse 0x01)
call I2C_ACK_master_to_slave
call I2C_read
movwf heures ; lecture des heures (registre d'adresse 0x02)
call I2C_ACK_master_to_slave
call I2C_read
movwf jours ; lecture des jours (registre d'adresse 0x03)
call I2C_ACK_master_to_slave
call I2C_read
movwf date ; lecture de la dates (registre d'adresse 0x04)
call I2C_ACK_master_to_slave
call I2C_read
movwf mois ; lecture des mois (registre d'adresse 0x05)
call I2C_ACK_master_to_slave
call I2C_read
movwf annee ; lecture de l'année (registre d'adresse 0x06)
call I2C_NOACK
call I2C_stop
MOVF secondes,w
; movf minutes,w
movwf PORTB
bsf PORTB,7
CALL RETAR
CALL RETAR
bCf PORTB,7
GOTO start
END
Bonsoir,
faut configurer SDA et SCL en sorties...
vede
;O]
_______________
...
salut "VEDE"
non, pour la configuration du module MSSP en mode I2C maître
On commence par configurer les broches RC3/SCK/SCL et RC4/SDI/SDA en entrées et merci
salut BABOU ;O]
en neffet... autant pour moi...
c'est très zétrange... mais c'est comme ça ;O]
tu as vu le site :
http://pagesperso-orange.fr/fabrice....2C_16F876A.htm
il y a un exemple fonctionnel complet et détaillé en asm...
vede
;O]
____________
...
MERCI BEAUCOUP "VEDE"
J'ai fait la simulation de ce projet avec logiciel "isis" mais ca marche pas est ce que le problème dans mon logiciel "ISIS" ?
re ;O]
ça se pourrait bien...
après j'y connais rien à ISIS car c'est cher et car je ne suis pas un adepte de la simu...
t'as pas moyen de câbler ça "en vrai" rapidement?