Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

horloge ds1307 + spi



  1. #1
    verdoom

    horloge ds1307 + spi


    ------

    bonjours à tous!

    Actuellement en 2ème année de bts électronique j'ai pour but de réaliser un projet qui enregistre l'heure, la date, grâce au ds 1307, en I2C à chaque lecture d'un badge. Ce fameux badge je le récupère en rs232 et j’enregistre le tout dans une carte SD en liaison spi. Je me dit super, je vais pouvoir utiliser flowcode sa va être plus simple... Je le fait petit à petit en commençant par l'I2C, ma routine est bonne sauf que mon afficheur ne lis pas les variables seconde, minute, heur, etc... Pourtant j'ai fait la conversion et puis j'ai vu qu'il y avais une petite erreur lors de la compilation:

    Warning unreferenced functions removed:
    FCI_FLOAT_TO_STRING in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h
    FCI_NUMBER_TO_HEX in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h
    FCI_STRING_TO_INT in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h
    FCI_STRING_TO_FLOAT in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h
    Wdt_Delay_S in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h
    isinf in: C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h
    FCD_I2C_Master0_MI2C_Send_Byte _Transaction in: H:\Travail\projet SAP\flowcode\gestion\gestion.c
    FCD_I2C_Master0_MI2C_Receive_B yte_Transaction in: H:\Travail\projet SAP\flowcode\gestion\gestion.c
    FCD_LCDDisplay0_Clear in: H:\Travail\projet SAP\flowcode\gestion\gestion.c
    FCD_LCDDisplay0_Command in: H:\Travail\projet SAP\flowcode\gestion\gestion.c
    FCD_LCDDisplay0_PrintNumber in: H:\Travail\projet SAP\flowcode\gestion\gestion.c
    FCD_LCDDisplay0_ScrollDisplay in: H:\Travail\projet SAP\flowcode\gestion\gestion.c
    FCD_LCDDisplay0_ClearLine in: H:\Travail\projet SAP\flowcode\gestion\gestion.c
    FCD_LCDDisplay0_RAM_Write in: H:\Travail\projet SAP\flowcode\gestion\gestion.c

    J’essaye de régler le problème mais sans grand succès...
    Donc je me retourne vers vous pour me venir en aide car je compte réalises ce programme en asm.
    Ah oui j'allais oublié mon pic est un 18f4580 et si vous avez quelque exemple sa serait sympas.
    Merci à vous et bonne fêtes de paques

    -----

  2. #2
    verdoom

    Re : horloge ds1307 + spi

    petit up!

    Code:
    ;	Début programme I2C
    
    	List p=16F877a	
    	#include <p16F877a.inc>
    
    ;****Déclaration des variables****************
    
    	cblock 0x40
    	seconde : 1
    	minute : 1
    	heure : 1
    	date : 1
    	jour : 1
    	mois : 1
    	annee : 1
    	endc
    
    ;***********Initialisation***************************
    
    	org 0x00
    	bcf STATUS , RP0
    	bcf STATUS , RP1
    	clrf PORTA  	; mise à 0 des sorties du port A
    	clrf PORTB 		; mise à 0 des sorties du port B
    	clrf PORTC 		; mise à 0 des sorties du port C
    
    ;**************Initialisation de l'I2C**************************
    
    	bsf STATUS , RP0 ; passage en banque 1
    	bcf STATUS , RP1 ; passage en banque 1
    	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 ; SMP = 1 : fréquence de l'horloge du bus I2C = 100 kHz
    	bcf SSPSTAT , CKE ; CKE = 0 : Disable SMBus specific inputs
    	movlw 0x31
    	movwf SSPADD ; (SSPADD) = (FOSC / (4*f SCL)) - 1 = 0x31
    	bcf STATUS , RP0 ; passage en banque 0
    	bcf STATUS , RP1 ; passage en banque 0
    	movlw B'00101000'
    	movwf SSPCON ; SSPEN = 1: enable MSSP SSPM3 = 1:I2C Master mode, clock = FOSC/(4 * (SSPADD + 1))
    	goto programme
    
    ;*******************Différentes macros de l'I2C*******************
    
    I2C_start
    	call I2C_idle ; on attend que le bus I2C soit libre
    	bsf STATUS , RP0 ; passage en banque 1
    	bcf STATUS , RP1 ; passage en banque 1
    	bsf SSPCON2 , SEN ; SEN = 1 (lancement d'une opération Start)
    	bcf STATUS , RP0 ; passage en banque 0
    	bcf STATUS , RP1 ; passage en banque 0
    	return
    
    I2C_idle
    	bsf STATUS , RP0 ; passage en banque 1
    	bcf STATUS , RP1 ; passage en banque 1
    
    I2C_idle0
    	btfsc SSPCON2 , ACKEN
    	goto I2C_idle0 ; le bit ACKEN n'est pas nul
    	btfsc SSPCON2 , RCEN
    	goto I2C_idle0 ; le bit RCEN n'est pas nul
    	btfsc SSPCON2 , PEN
    	goto I2C_idle0 ; le bit PEN n'est pas nul
    	btfsc SSPCON2 , RSEN
    	goto I2C_idle0 ; le bit RSEN n'est pas nul
    	btfsc SSPCON2 , SEN
    	goto I2C_idle0 ; le bit SEN n'est pas nul
    	btfsc SSPSTAT , R_W
    	goto I2C_idle0 ; le bit R_W n'est pas nul
    	bcf STATUS , RP0 ; passage en banque 0
    	bcf STATUS , RP1 ; passage en banque 0
    	return
    
    I2C_write
    	call I2C_idle ; on attend que le bus I2C soit prêt
    	movwf SSPBUF
    	return
    
    I2C_ACK_slave_to_master
    	call I2C_idle ; on attend que le bus I2C soit prêt
    	bsf STATUS , RP0 ; passage en banque 1
    	bcf STATUS , RP1 ; passage en banque 1
    
    I2C_ACK_slave_to_master0
    	btfsc SSPCON2 , ACKSTAT
    	goto I2C_ACK_slave_to_master0 ; on attend la réception du bit ACK
    	bcf STATUS , RP0 ; passage en banque 0
    	bcf STATUS , RP1 ; passage en banque 0
    	return
    
    I2C_Repeated_Start
    	call I2C_idle ; on attend que le bus I2C soit prêt
    	bsf STATUS , RP0 ; passage en banque 1
    	bcf STATUS , RP1 ; passage en banque 1
    	bsf SSPCON2 , RSEN ; RSEN = 1 (lancement d'une opération Repeated Start)
    	bcf STATUS , RP0 ; passage en banque 0
    	bcf STATUS , RP1 ; passage en banque 0
    	return
    
    I2C_read
    	call I2C_idle ; on attend que le bus I2C soit prêt
    	bsf STATUS , RP0 ; passage en banque 1
    	bcf STATUS , RP1 ; passage en banque 1
    	bsf SSPCON2 , RCEN ; on lance la réception
    
    I2C_read0
    	btfsc SSPCON2 , RCEN
    	goto I2C_read0 ; on attend la fin de la réception
    	bcf STATUS , RP0 ; passage en banque 0
    	bcf STATUS , RP1 ; passage en banque 0
    	movf SSPBUF , W
    	return
    
    I2C_ACK_master_to_slave
    	call I2C_idle ; on attend que le bus I2C soit prêt
    	bsf STATUS , RP0 ; passage en banque 1
    	bcf STATUS , RP1 ; passage en banque 1
    	bcf SSPCON2 , ACKDT ; ACKDT = 0
    	bsf SSPCON2 , ACKEN ; ACKEN = 1 (lancement d'une opération Acknowledge)
    	bcf STATUS , RP0 ; passage en banque 0
    	bcf STATUS , RP1 ; passage en banque 0
    	return
    
    I2C_NOACK
    	call I2C_idle ; on attend que le bus I2C soit prêt
    	bsf STATUS , RP0 ; passage en banque 1
    	bcf STATUS , RP1 ; passage en banque 1
    	bsf SSPCON2 , ACKDT ; ACKDT = 1
    	bsf SSPCON2 , ACKEN ; ACKEN = 1 (lancement d'une opération Not Acknowledge)
    	bcf STATUS , RP0 ; passage en banque 0
    	bcf STATUS , RP1 ; passage en banque 0
    	return
    
    programme
    	call I2C_start
    	movlw b'11010000' ; adresse du ds1307 d0
    	call I2C_write
    	call I2C_ACK_slave_to_master
    	movlw B'00000000' ; début du regitre seconde
    	call I2C_write
    	call I2C_ACK_slave_to_master
    	call I2C_Repeated_Start
    	movlw B'11010001' ; adresse du ds1307 d1
    	call I2C_write
    	call I2C_ACK_slave_to_master
    	call I2C_read
    	movwf seconde ; les 8 bits lus sont transférés dans le registre d'usage général seconde
    	call I2C_ACK_master_to_slave
    	call I2C_read
    	movwf minute ; les 8 bits lus sont transférés dans le registre d'usage général minute
    	call I2C_ACK_master_to_slave
    	call I2C_read
    	movwf heure ; les 8 bits lus sont transférés dans le registre d'usage général heure
    	call I2C_ACK_master_to_slave
    	call I2C_read
    	movwf date ; les 8 bits lus sont transférés dans le registre d'usage général date
    	call I2C_ACK_master_to_slave
    	call I2C_read
    	movwf jour ; les 8 bits lus sont transférés dans le registre d'usage général jour
    	call I2C_ACK_master_to_slave
    	call I2C_read
    	movwf mois ; les 8 bits lus sont transférés dans le registre d'usage général mois
    	call I2C_ACK_master_to_slave
    	call I2C_read
    	movwf annee ; les 8 bits lus sont transférés dans le registre d'usage général annee
    	call I2C_NOACK
    	call I2C_stop
    
    end
    j'ai fais ce programme et je voudrais savoir si il est bon merci!
    ps: Je sais que c'est un 16f887a mais je ne peut pas simuler mon 18f en cour....

Sur le même thème :

Discussions similaires

  1. Horloge DS1307
    Par graindemais dans le forum Électronique
    Réponses: 20
    Dernier message: 22/02/2015, 23h54
  2. horloge à temp réel (DS1307) et pic 18F452
    Par Mickl1722 dans le forum Électronique
    Réponses: 9
    Dernier message: 13/10/2011, 09h18
  3. Horloge DS1307 et 18F4550
    Par TRAXXXX dans le forum Électronique
    Réponses: 8
    Dernier message: 21/06/2011, 17h22
  4. Horloge ds1307
    Par Benjiboubou dans le forum Électronique
    Réponses: 44
    Dernier message: 24/05/2011, 08h51
Découvrez nos comparatifs produits sur l'informatique et les technologies.