programation I²C - Page 2
Répondre à la discussion
Page 2 sur 3 PremièrePremière 2 DernièreDernière
Affichage des résultats 31 à 60 sur 63

programation I²C



  1. #31
    invited02d59f3

    Re : programation I²C


    ------

    je ne comprend rien a la datasheet apres plusieur essai je n'arrive toujour pas a ecrire sur les port du MCP23016

    si quelqu'un a une idée

    -----

  2. #32
    gedonet

    Re : programation I²C

    Bonjour
    Il faut que tu accedes aux registres de config un par un, le code 67h n'existe pas dans le tableau 1.3, n'inventes pas des choses, un exemple, tu veux ecrire sur les ports:
    1° tu envoies l'adresse du composant (0100) suivit de A2, A1 et A0 suivit de R/W=0
    2° Tu envoies le COMMAND BYTE ici 6h pour IODIR0
    3° Tu envoies 00000000 pour mettre le port0 en sortie
    4° tu envoies un stop et tu recommences pour IODIR1
    5° tu recommences pour acceder au registre GP0 code 0h avec R/W=0 (tu veux ecrire) et tu ecris la valeur que tu veux sur le port0 et ainsi de suite pour l'autre port.
    En faite il n'y a pas grand chose à lire en anglais, il faut regarder l'image 1.3.
    Gilles

  3. #33
    Gérard

    Re : programation I²C

    Il y a aussi une partie hard à configurer pour l'adresse du composant, adresse qui sera reprise dans le dialogue soft.

  4. #34
    invited02d59f3

    Re : programation I²C

    merci
    je n'avais pas compris comme les registre etait sur 4 bit je pensais que l'on enmettai 2 a la suite suivie de data 1 puis data2

    sinon pour la partie adresse en hard pour la mttre a 0 pas de souci mais pour la mise a 1 faut il une resistance ou directement a VDD?

    bye

  5. #35
    Gérard

    Re : programation I²C

    Citation Envoyé par thesheep Voir le message
    merci
    je n'avais pas compris comme les registre etait sur 4 bit je pensais que l'on enmettai 2 a la suite suivie de data 1 puis data2
    Désolé, mais maintenant, c'est moi qui ne comprend pas.

    Citation Envoyé par thesheep Voir le message
    sinon pour la partie adresse en hard pour la mttre a 0 pas de souci mais pour la mise a 1 faut il une resistance ou directement a VDD?

    bye
    Si tu mets une résistance vers VDD et un cavalier entre masse et la pin d'adresse :
    cavalier mis : adr = 0
    cavalier retiré : adr = 1

    Avec 3 cavaliers (ou pas de cavalier) sur A0, A1 et A2, tu as le choix entre 8 adresses.

  6. #36
    gedonet

    Re : programation I²C

    Citation Envoyé par thesheep Voir le message
    merci
    je n'avais pas compris comme les registre etait sur 4 bit je pensais que l'on enmettai 2 a la suite suivie de data 1 puis data2
    Bonjour
    Ils aurraient pu ecrire 06h au lieu de 6h, mais dans la suite, on comprend que tu ne pourrais pas ecrire dans deux registres en même temps.

    sinon pour la partie adresse en hard pour la mttre a 0 pas de souci mais pour la mise a 1 faut il une resistance ou directement a VDD?

    bye
    J'imagine que tu parles de A2, A1 et A0, dans ce cas, à mon avis, c'est directement à Vdd.
    J'espere que tu n'as pas oublié la resistance de 3.7K et le condo de 33pF pour l'entrée CLK (voir figure 1.1)
    Gilles

  7. #37
    Gérard

    Re : programation I²C

    Citation Envoyé par thesheep Voir le message
    bonjour a tous

    merci pour votre aide

    je shouaitrait passer du PCF8574 a un MCP23016 mais je n'arrive pas a ecrire sur ses sortie (et mon niveau d'anglais me fais defaut pour commprendre la datasheet)
    Qu'est ce que tu ne comprends pas.

    Ce soir j'ai écrit un mini prog pour ce CI (que je compte bientôt utiliser) et çà marche du 1er coup.

    Je travaille en Basic.

    Code:
    ;*************************************************************
    ;		PROGRAMME PRINCIPAL
    ;*************************************************************
    		
    	GoSub		INIT_I2C
    
    LOOP:		
            
    
    
    LOOP1:  
            BusOut  01000000, 0,[255,255]
            DelayMS 500
            BusOut  01000000, 0,[0,0]
            DelayMS 500
            
    		GoTo		LOOP1
    		
    ;*************************************************************
    ;		S/P INIT_I2C
    ;*************************************************************
    		
    INIT_I2C:	
    		
    		 
    		BusOut 01000000, 6,[0,0] 	;1er 23016 en sortie
    		DelayMS	10
    		
    		Return
    Il n'y a que la partie du prog pour le 23016.

  8. #38
    invited02d59f3

    Re : programation I²C

    merci a vous j'essai demain et je vous tient au courant

    merci a gedounet pour le clok je n'avait pas fais attention

  9. #39
    invited02d59f3

    Re : programation I²C

    merci a vous tous

    je communique grace a vous avec mon mcp

    je vais maintenant pouvoir passer a la suite

  10. #40
    invited02d59f3

    Re : programation I²C

    bonjour a tous

    je n'ai toujours pas ajouté mes poussoir (3bouton, un +, un -,et un mode)

    je pensais utiliser une interruption sur timer
    a chaque interruption on scrute les bouton brancher sur le port B
    et on agi en fonction ou non, suivant si bouton appuyé on non

    pour le câblage je pense qu'il faut relier le pic a la masse par l'intermédiaire une résistance et au VDD par le bouton poussoir (dite moi si je me trompe ou si il y a plus simple)

    après pour le programme je ne sait pas comment partir

    il faut que lorsque l'on appuie sur le bouton +
    le port 0 du premier mcp passe de 10101010 a 01010101
    puis nouvelle appuie 11100010
    puis nouvelle appuie 00110011
    ansi de suite avec des valeur prédéfini (environ 20 valeur)
    bien sur on revient a la précédente si appuie sur -

    ensuite on appuie sur mode puis sur + (ou -) on passe a GP1 du mcp
    appuie sur mode on le modifie avec les même valeur que précédemment

    on ré appuie sur mode puis + (ou -) on passe au mcp suivant sur GP0(ou retour a GP0 du premier MCP) ainsi de suite

    contrôle jusqu'à 8 mcp

    merci de me guider je me suit perdu

  11. #41
    invited02d59f3

    Re : programation I²C

    Des idées ??

  12. #42
    invited02d59f3

    Re : programation I²C

    j'ai essayer de programer pour utiliser deux bouton tres simplement changement d'une variable pour le nombre de boucle d'un compteur pour une tempo qui fais clignoter une led

    scrut a toute le interuptions du timer0 mes 2 bouton
    si plus apuier 9 boucle si moins 1

    et plus rien ne se passe la led ne clignote plus

  13. #43
    Gérard

    Re : programation I²C

    Tu peux utiliser les interruptions sur changement d'état de port au lieu de scruter les BP.

  14. #44
    invited02d59f3

    Re : programation I²C

    peut tu developper STP

    merci

  15. #45
    Gérard

    Re : programation I²C

    Citation Envoyé par thesheep Voir le message
    peut tu developper STP

    merci
    Le 16F84 connait les interruptions sur changement pour les lignes RB4 à RB7, c'est dans la doc.

  16. #46
    invited02d59f3

    Re : programation I²C

    oui sa j'ai vue

    mais aurrait tu un exemple de code en asm tout simple qui gere sa ??

  17. #47
    Gérard

    Re : programation I²C


  18. #48
    invited02d59f3

    Re : programation I²C

    c grâce a se cour que j'apprends

    mais je n'arrive pas a gérer les interruption sur RB4/RB7

    voila le code
    Code:
    INTCONVAL	EQU	B'00001000'
    
    
    			;sauvegarder registres	
    			;---------------------
    	org 0x004			; adresse d'interruption
    	movwf   w_temp  		; sauver registre W
    	swapf	STATUS,w		; swap status avec résultat dans w
    	movwf	status_temp		; sauver status swappé
    	movf	FSR , w			; charger FSR
    	movwf	FSR_temp		; sauvegarder FSR
    	BANK0				; passer en banque0
    
    			; interruption RB4/RB7
    			; --------------------
    intsw2
    	btfsc	INTCON,RBIE		; tester si interrupt RB4/7 autorisée
    	btfss	INTCON,RBIF		; oui, tester si interrupt RB4/7 en cours
    	goto 	intsw3			; non sauter
    	call	intrb4			; oui, traiter interrupt RB4/7
    	bcf	INTCON,RBIF		; effacer flag interupt RB4/7
    	goto	restorereg		; et fin d'interrupt
    ;*****************************************************************************
    ;                         INTERRUPTION RB0/RB4                               *
    ;*****************************************************************************
    intrb4
    		btfss	PORTB,6
    		incf	nombre,f			; incrémenter nombre
    		btfss	PORTB,5
    		decf	nombre,f			; incrémenter nombre
    ;		btfss	PORTB,4
    ;		incf	nombre,f
    		call	antirebond
    	return				; fin d'interruption RB0/RB4
    					; peut être remplacé par 
    					; retlw pour retour code d'erreur
    
    
    			; autoriser interruptions (banque 0)
    			; ----------------------------------
    	clrf	PIR1			; effacer flags 1
    	bsf	INTCON,GIE		; valider interruptions
    	goto	start			; programme principal
    merci

  19. #49
    Gérard

    Re : programation I²C

    Qu'est ce que tu n'arrives pas ?
    Bigo explique bien.

  20. #50
    gedonet

    Re : programation I²C

    Bonjour
    L'interruption sur RB4/RB7 est une interruption qui se declanche sur un changement d'etat de RB4/RB7, on dirait que tu n'attends que des fronts montants, il faut aussi traiter le cas des fronts descendants.
    De plus une routine d'interruption doit être le plus court possible il faudrait peut être traiter en dehors de l'interruption le cas de l'antirebond, encore que dans ton cas, c'est à verifier.
    P.S. Avec ton message, je viens de constater que j'ai fait une erreur sur le fichier maquette, dans l'intitulé de cette interruption, j'ai ecrit sur les fichiers maquettes "INTERRUPTION RB0/RB4" au lieu de "INTERRUPTION RB4/RB7" Je viens de corriger sur mon site: http://gedonet.free.fr/aide_pic/aide_pic.htm les fichiers maquettes pour les 16F628, 628A, 876A ,877A, 88, 767 , mais ils ne sont pas encore rectifié sur le site de Bigonoff, cela ne cause pas de probleme, mais pourrait induire en erreur un debutant.
    Gilles

  21. #51
    invited02d59f3

    Re : programation I²C

    j'avais vue ton erreur mais j'ai regarder la datasheets et je me suis dit qued se devait etre une faute de frappe

    sinon aurrai tu un exemple car je ne voie pas comment tu veux que je traite l'interuption

    voie tu une erreur dans se que j'ai fait ??
    merci pour tout

  22. #52
    gedonet

    Re : programation I²C

    Bonjour
    Il y a un truc qui ne va pas dans ta routine d'interruption, tu as un bouton +, un bouton - et un troisieme bouton mode qui fait je ne sais trop quoi.
    Toi tu incrementes nombre avec le bouton sur RB6, tu décrementes avec RB5 et tu incrementes aussi avec RB4, il doit y avoir un probleme avec RB6 ou RB4.

    Si je peux te donner un conseil, c'est d'oublier un instant la programmation du µC et d'ecrire sur un papier ce que tu veux faire avec des mots simples comme si tu voulais expliquer le deroulement de ton programme à un enfant pour qu'il le comprenne. Ensuite tu verras le but final sera plus clair dans ta tête et il sera plus simple d'ecrire ton programme.
    C'est le defaut des debutants, moi le premier, de se lancer tête baissée sur le clavier pour ecrire des lignes de code sans connaitre exactement les etapes pour atteindre le but final.
    Par exemple, les interruptions, c'est bien d'essayer, mais dans ton cas ou c'est un être humain qui doit appuyer sur les boutons, à mon avis, tu te compliques la vie pour rien, par exemple si tu appuies sur un bouton pendant une communication I2C, cela risque de poser de serieux problemes, avec une routine I2C soft, le µC ne ferra pas deux choses en même temps.

    Gilles

  23. #53
    invited02d59f3

    Re : programation I²C

    pour RB4 et RB6 on pour le moment la meme fonction car je ne me suis pas encore attaquer au changement d'esclave

    je fais deja la technique d'ecrire avec des mot simple c pour cela que pour chaque etape j'essaie de fair fonctionner mon montage losque il marche je valide et je passe a l'etape suivante

    sinon comment veut tu que je fassse si les interuption ne sont pas la bonne metode ??

    merci

  24. #54
    gedonet

    Re : programation I²C

    Bonjour
    Pour eviter les interruptions, tous le travail que tu fais dans la routine d'interruption, tu le fais au debut de ta boucle, c'est à dire que tu commences par lire l'etat des boutons, s'ils sont à 1 tu passes au bouton suivant, si l'un est à 0 alors tu traites, incf ou decf et apres avoir passé tout les boutons tu envoies la bonne valeur en I2C, ensuite une petite tempo de 10 ou 20 ms pour l'antirebond et tu reboucles sur la lecture des boutons.
    Tu vois c'est tres simple et "plus c'est simple, moins c'est compliqué", il ne faut pas plus d'un quart d'heure pour ecrire le code.
    Gilles

  25. #55
    invited02d59f3

    Re : programation I²C

    merci pour ta reponse

    j'avais trouver la solution et sa marche

    sinon j'ai fais un tableau comme explique bigonoff pour mes differente valeur se qui ma value beaucoup de bug (je pense que c'est a cause du include I2C en fin de programe qui se chargai sur les meme emplacement ) si tu connais une meilleur methode je suis preneur

    encore merci a tous pour votre aide

  26. #56
    gedonet

    Re : programation I²C

    Bonjour
    Mplab est suffisement bien fait pour ne pas ecrire ton tableau au même endroit que la routine I2C (attention avec la derniere version de Mplab de choisir "Absolute"). Par contre si ton tableau est tres long, il peut être à cheval sur deux pages memoires dans se cas avant l'etiquette(le label) du tableau, tu places un org pour le placer en debut d'une page. Par exemple org H'800' pour un pic qui a plus de 2K de memoire flash et tu devra utiliser les macros de saut long de Bigonoff ou à la rigueur de Microchip. Si tu utilises un 16F84 ou 16F628, le probleme ne se pose évidement pas.
    Gilles

  27. #57
    invited02d59f3

    Re : programation I²C

    merci pour la réponse cela fonctionne très bien j'arrive a faire se que je veut grâce a mes 3 boutons

    mais j'ai encore une question

    j'essaie de sauvegarder mes valeur en eeprom et de les charger des la mise sous tension mais mon programme plante?comme si le pic ne démarrai plus mes mcp affiche rien et je ne peut pas aller dans le menu mode (visualise led indiquant si l'on est dans le menu éteinte)

    pour écrire et lire j'utilise les macro de gedounet trouver sur son site (pic16F628A)

    et j'utilise l'adresse du mcp comme adresse dans l'eeprom pour sauvegarder le port 0 et adrmcp +1 pour le port 1

    je n'arrive pas a trouver de solution

  28. #58
    gedonet

    Re : programation I²C

    Bonjour
    Mes macros, pour ecrire en EEprom, ont une particularité.
    L'appel se fait avec
    Code:
    REEPROM macro	adeeprom		; lire eeprom (adresse dans adeeprom & résultat en w)
    	movlw	adeeprom		; charger adresse eeprom (passage de la valeur en litteral)
    	;movf	adeeprom,w		; charger adresse eeprom (passage de la valeur par une variable)
    Il y a deux façons de passer l'adresse dans adeeprom,
    -soit en litteral, on ecrit un nombre à la place de adeeprom, et on ne change rien
    -soit en ecrivant le nom d'une variable, qui contient l'adresse, à la place de adeeprom et dans ce cas on met un point virgule devant la seconde ligne et on enleve celui qui debute la troisieme ligne.
    Gilles

  29. #59
    invited02d59f3

    Re : programation I²C

    donc dans mon cas (l'adresse est dans une variable )


    Code:
    REEPROM macro	adeeprom		; lire eeprom (adresse dans adeeprom & résultat en w)
    	;movlw	adeeprom		; charger adresse eeprom (passage de la valeur en litteral)
    	movf	adeeprom,w		; charger adresse eeprom (passage de la valeur
    et pour l'appeler
    Code:
    REEPROM	adr
    et on récupère la valeur dans w

  30. #60
    gedonet

    Re : programation I²C

    Bonjour
    S'il s'agit d'une question dans ton dernier post, la reponse est oui.
    Gilles

Page 2 sur 3 PremièrePremière 2 DernièreDernière

Discussions similaires

  1. Programation en C
    Par invite23d08468 dans le forum Logiciel - Software - Open Source
    Réponses: 9
    Dernier message: 19/12/2008, 19h18
  2. programation
    Par invite1687c371 dans le forum Électronique
    Réponses: 2
    Dernier message: 10/09/2007, 20h03
  3. programation orientée
    Par c_a_r_a_83 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 31/08/2007, 12h59
  4. programation html
    Par inviteba67e777 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 13
    Dernier message: 30/08/2007, 13h02
  5. programation de microcontroleur
    Par invite17f09bd6 dans le forum Technologies
    Réponses: 8
    Dernier message: 12/01/2007, 22h30
Découvrez nos comparatifs produits sur l'informatique et les technologies.