Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 35

Compteur à PIC16F628 2 digits 7 segments



  1. #1
    Mac49

    Compteur à PIC16F628 2 digits 7 segments

    Bonsoir à tous,

    je suis en train de réaliser un compteur / décompteur à base de PIC16F628 utilisant 2 afficheurs 7 segments multiplexés.

    J'ai trouvé sur le net un schéma correspondant à mes attentes et j'ai réalisé le circuit qui fonctionne parfaitement mais il me reste un souci à régler :
    en cas de coupure de l'alimentation, le compteur revient à "00", ce qui m'embête beaucoup car le circuit doit rester connecté toute l'année pour effectuer le comptage !

    (Je ne souhaite pas ajouter d'accu de sauvegarde car cela nécessite la réalisation d'un circuit de charge de maintien de l'accu et la coupure de l'alimentation des afficheurs pour réduire la conso et puis je veux que le circuit reste simple et de taille réduite)

    Quelqu'un est-il capable de modifier mon programme pour qu'à chaque fois que la valeur est incrémentée ou décrémentée, celle-ci soit mémorisée et ainsi réapparaisse à la remise sous tension !?
    (Et éventuellement ajouter une interruption sur une entrée libre pour la remise à zéro...)

    Je fournirai le schéma et le programme...

    Merci par avance pour votre aide et bonne fin de soirée.

    Nico

    -----


  2. Publicité
  3. #2
    Antoane

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonjour et bienvenue !

    Il faut pour cela utiliser une mémoire n'étant pas effacée lors de la mise hors tension, une mémoire non volatile. La RAM est volatile, il faut utiliser l'EEPROM du micro-contrôleur.

    Note que ce type de mémoire a une durée de vie limitée, ne pas compter plus de 100 000 réécritures (p141). Si tu as besoin de plus, il faudra "ruser".
    http://ww1.microchip.com/downloads/e...Doc/40044G.pdf
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  4. #3
    paulfjujo

    Re : Compteur à PIC16F628 2 digits 7 segments

    bonjour,


    regarde le fil concernant
    Sauvegarde de données d'un microcontrôleur : condo de back up
    cela pourrait etre une solution à ton probleme..
    sauvegarder l'etat du compteur ,juste AVANT la coupure.
    et au redemarrage re lecture de la derniere valeur du compteur ..
    et une entree speciale pour RAZ compteur.

  5. #4
    Mac49

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonsoir et merci à vous 2 pour vos conseils.

    Le nombre d'enregistrements dans l'EEPROM sera très faible (une trentaine d'enregistrement par an) alors pas de problème de ce côté là.

    Par contre, j'aurai souhaiter ne pas modifier le circuit d'origine côté hard et donc faire une modif du soft en enregistrant la valeur juste après une incrémentation / décrémentation.

    Le problème, c'est que la programmation et moi faisons 2 !
    Images attachées Images attachées

  6. #5
    vincent66

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonsoir,
    Schéma invalide selon moi, environ 20mA par segment... à l'affichage d'un 8 , plus de 140mA dans la pin Vdd, ça va cramer...
    Regarde la spécification Vdd max dans la section "absolute maximum ratings" de la datasheet...
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

  7. A voir en vidéo sur Futura
  8. #6
    Mac49

    Re : Compteur à PIC16F628 2 digits 7 segments

    J'ai remplacé les 180R par des 270R car je n'avais pas de 180R... J'atteins un max de 66mA au total pour l'affichage de "88".
    Les 180R sont celles préconisées par le concepteur du circuit...

  9. Publicité
  10. #7
    Antoane

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonsoir,

    L'Absolute Max Rating est de 250mA sur le Vdd et 200mA par port, et 25mA par pin. Peu de marge mais ca passe de ce côté.
    http://ww1.microchip.com/downloads/e...Doc/40300C.pdf, page 127

    Concernant la modification du programme, il faut le faire (rien de très sorcier, tout est donné en section 13 et ton compilateur doit avoir des bibliothèques pré-programmées) ou trouver quelqu’un pour te le faire.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  11. #8
    Mac49

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonsoir Antoane,
    serait-il possible que tu modifies mon programme si je te l'envoie !?

  12. #9
    Mac49

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonjour,
    voici mon programme, si quelqu'un peu faire quelque chose...
    Merci



    Code:
    ;*********************************************
    ;* 2 Digit UP / Down Counter    17/6/2009			*
    ;*Port B drives two 7 segment displays				*
    ;*Up Sw on RA2   Down Sw on RA3				*
    ;*"Units" drive on RA0   "Tens" drive on RA1			*
    ;*********************************************
    
    	list P = 16F628A	;microcontroller 
    	include <P16F628a.inc>	;registers for F628A
    
    
    	__Config 	_cp_off & _lvp_off & _pwrte_on & _wdt_off & _intRC_osc_noclkout & _mclre_off
    	
    ;code protection - off
    ;low-voltage programming - off
    ;power-up timer -  on
    ;watchdog timer - off
    ;use internal RC for 4MHz - all pins for in-out
    
    
    ;****************************************************************
    ; variables - names and files
    ;****************************************************************
    
    
    		;Files for F628A start at 20h 
     
    						 			
    temp1		equ 20h	;for delay
    temp2		equ 21h	;for delay
    SwUp		equ 22h	;
    SwDwn		equ 23h	;
    units		        equ 24h	;
    tens		        equ 25h	;
    Sw_Flag		equ 26h	;
    
    
    ;****************************************************************
    ;Equates
    ;****************************************************************
    status		equ	0x03
    cmcon		equ	0x1F
    rp1		        equ	0x06
    rp0		        equ	0x05
    
    ;****************************************************************
    ;Beginning of program
    ;****************************************************************
    reset	org		00	        ;reset vector address	
    		goto	SetUp	;goto SetUp
    			
    
    table	addwf   PCL,F             ;02h,1  add W to program counter 
            retlw   b'00111111'     ; "0"   -|F|E|D|C|B|A
            retlw   b'00000110'     ; "1"   -|-|-|-|C|B|-
            retlw   b'01011011'     ; "2"   G|-|E|D|-|B|A
            retlw   b'01001111'     ; "3"   G|-|-|D|C|B|A 
            retlw   b'01100110'     ; "4"   G|F|-|-|C|B|-
            retlw   b'01101101'     ; "5"   G|F|-|D|C|-|A
            retlw   b'01111101'     ; "6"   G|F|E|D|C|-|A
            retlw   b'00000111'     ; "7"   -|-|-|-|C|B|A
            retlw   b'01111111'     ; "8"   G|F|E|D|C|B|A
            retlw   b'01101111'     ; "9"   G|F|-|D|C|B|A
    
    
    ;****************************************************************
    ;* port A and B initialisation					                                           *
    ;****************************************************************
    
    SetUp	bsf	        status,rp0	
    		movlw	b'00001100'		;Make RA0,1 out   RA2,3 in
    		movwf	05h			
    		clrf	        06h			        ;Make all RB output
    		bcf	        status,rp0		        ;select programming area - bank0 
    		movlw	b'10000000'		;Turn off T0CKI
    		movwf	option_reg		
    		clrf 	        06h			        ;Clear Port B of junk 
    		clrf     	units			        ;zero the units file		
    		clrf    	tens			        ;zero the tens file		
    		clrf    	Sw_Flag
    		movlw	07h			        ;turn comparators off and enable
    		movwf	cmcon			;pins for I/O functions						
    		goto 	        Main						
    					
    
    
    ;Delay 10mS 	10 x 1,000uS
    			
    
    D_10mS	movlw	0Ah
    		movwf	temp2
    D_a		nop
    		decfsz       temp1,1
    		goto          D_a
    		decfsz       temp2,1
    		goto          D_a	
    		retlw          00
    		
    		
    Up		btfsc	        Sw_Flag,2
    		retlw	        00
    		bsf	        Sw_Flag,2
    		incf	        units,1
    		movlw	0Ah		        ;put 10 into w
    		xorwf	units,0		;compare units file with 10
    		btfss	        03,2		        ;zero flag in status file. Will be set if units is 10
    		retlw	        00
    		clrf	        units
    		incf	        tens,1
    		movlw	0Ah		        ;put 10 into w
    		xorwf	tens,0		;compare units file with 10
    		btfsc	        03,2		        ;zero flag in status file. Will be set if tens is 10
    		clrf	        tens				
    		retlw	        00		        ;display passes 99 but not below 0
    		
    		
    		
    Dwn		btfsc	        Sw_Flag,3
    		retlw	        00
    		bsf	        Sw_Flag,3
    		decf	        units,1
    		movlw	0FFh		        ;put FFh into w
    		xorwf	units,0		;compare units file with FFh
    		btfss	        03,2		        ;zero flag in status file. Will be set if units is 10
    		retlw	        00
    		movlw	09
    		movwf	units		        ;put 9 into units file
    		decf	        tens,1
    		movlw	0FFh		        ;put 0FFh into w
    		xorwf	tens,0		;compare tens file with 0FFh
    		btfsc	        03,2		        ;zero flag in status file. Will be set if tens is 0FFh
    		goto	        $+2		        ;tens file is 0FFh    Jump down 2 instructions
    		retlw	        00						
    		clrf	        tens
    		clrf	        units
    		retlw	        00		        ;display  not below 0		
    							
    
    
    Main	        btfss	        05,2			;test switch-press for UP
    		call	        Up		        ;UP switch pressed
    		btfss	        05,3		        ;test switch-press for Down
    		call	        Dwn		        ;Down switch pressed
    		movlw	b'00000001'	;Make RA0 HIGH for units drive 	
    		movwf	05h	
    		movf	        units,0		;copy unit value into w
    		call	        table		        ;unit display value will return in w
    		movwf	06h		        ;output units value
    		call	        D_10mS		;call delay
    		clrf	        06h		        ;clear display
    		movlw	b'00000010'	;Make RA1 HIGH for tens drive 	
    		movwf	05h			
    		movf	        tens,0		;copy tens value into w		
    		call	        table		        ;tens display value will return in w
    		movwf	06h		        ;output tens value
    		call	        D_10mS		;call delay
    		clrf	        06h		        ;clear display
    		btfsc	        05,2		        ;bit will be zero when sw is pressed
    		bcf	        Sw_Flag,2
    		btfsc	        05,3		        ;bit will be zero when sw is pressed
    		bcf	        Sw_Flag,3				
    		goto	        Main		
    		
    		END
    Dernière modification par Antoane ; 11/02/2015 à 21h06. Motif: Ajout balises code

  13. #10
    Antoane

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonjour,
    Citation Envoyé par Mac49 Voir le message
    Bonsoir Antoane,
    serait-il possible que tu modifies mon programme si je te l'envoie !?
    Non, je ne programme pas
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  14. #11
    Mac49

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonsoir,
    y a t-il une bonne âme qui pourrait m'aider à modifier mon programme !?
    Merci par avance...

  15. #12
    bastien31

    Re : Compteur à PIC16F628 2 digits 7 segments

    Le plus simple est de lire la datasheet de ton PIC pour savoir comment écrire dans la EEPROM.
    Le plus compliqué selon moi n'est pas de modifier le code mais bien comprendre la datasheet.

  16. Publicité
  17. #13
    mag1

    Re : Compteur à PIC16F628 2 digits 7 segments

    Citation Envoyé par bastien31 Voir le message
    Le plus simple est de lire la datasheet de ton PIC pour savoir comment écrire dans la EEPROM.
    Le plus compliqué selon moi n'est pas de modifier le code mais bien comprendre la datasheet.
    Bonjour,

    Vu l'évolution de la situation, je me demande si tu ne ferais pas mieux d'envisager une solution plus simple, à base d'un µC plus simple, avec un langage plus simple.
    Parce que si tu n'y connais absolument rien, modifier un programme ASM, après avoir lu la datasheet du pic, ce n'est pas immédiat.

    Ce n'est que mon avis

    MM
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  18. #14
    mag1

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonjour,

    En voila encore un dégoûté de la programmation, on ne le reverra plus.

    Une solution picaxe, plus simple, que tout le monde peut comprendre:

    MM
    Images attachées Images attachées
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  19. #15
    paulfjujo

    Re : Compteur à PIC16F628 2 digits 7 segments

    bonsoir,

    Citation Envoyé par Mac49 Voir le message
    Bonsoir,
    y a t-il une bonne âme qui pourrait m'aider à modifier mon programme !?
    Merci par avance...
    c'est le moment de te mettre au C , voir mikroC version pro 6.40 limitée à 2K, serait OK pour ce PIC..
    Bibliotheque EEPROM..

  20. #16
    Mac49

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonsoir,

    la programmation ne m'est pas complètement inconnue puisque j'ai fait des études pour devenir électronicien mais j'avoue que ça n'était pas mon fort à l'époque et que je n'y ai pas retouché depuis la fin de mes études...

    Et puis je ne me vois pas passer des dizaines d'heures à réapprendre le code juste pour faire une modif d'un programme alors que quelqu'un qui a l'habitude de programmer les PIC le fera en moins de 5 min...

    Merci mag1 pour ta solution picaxe qui pourrait beaucoup m'intéresser ! Le programme joint est fonctionnel !?
    C'est ta réalisation?

  21. #17
    dje8269

    Re : Compteur à PIC16F628 2 digits 7 segments

    +1 mag1

    Oui son programme est fonctionnel. Je programme aussi en picaxe , et effectivement la prise en main est toute simple, avec une doc en francais expliquant chaque fonction. Comparé à un PIC, y'as pas photo,pur un projet comme ça.
    C'est en faisant des erreurs; que l'on apprend le mieux !!

  22. #18
    pat1149

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonsoir,

    A tester pour vérifier si ce programme convient à votre problème.
    Programme écrit pour un 16F628A à l'aide de MPLABX et XC8.

    A+
    Fichiers attachés Fichiers attachés

  23. Publicité
  24. #19
    mag1

    Re : Compteur à PIC16F628 2 digits 7 segments

    Citation Envoyé par Mac49 Voir le message
    Bonsoir,

    la programmation ne m'est pas complètement inconnue puisque j'ai fait des études pour devenir électronicien mais j'avoue que ça n'était pas mon fort à l'époque et que je n'y ai pas retouché depuis la fin de mes études...

    Et puis je ne me vois pas passer des dizaines d'heures à réapprendre le code juste pour faire une modif d'un programme alors que quelqu'un qui a l'habitude de programmer les PIC le fera en moins de 5 min...

    Merci mag1 pour ta solution picaxe qui pourrait beaucoup m'intéresser ! Le programme joint est fonctionnel !?
    C'est ta réalisation?
    Bien sûr que ça fonctionne, tu peux l'essayer sur le simulateur, partie intégrante de l'éditeur (plutôt PE5.5 pour une simple simu);
    Réalisé en en... allez 30 mn, pas très compliqué.
    Je joints une modif pour faire un RAZ de l'affichage et de la mémoire en appuyant 3 s sur un autre poussoir branché sur C.6, comme les deux autres.

    Autre modif, le blocage entre 0 et 99.
    Avec un tout petit peu de pratique, tu seras capable de le modifier toi même, et faire d'autres bidouilles

    MM
    Images attachées Images attachées
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  25. #20
    Mac49

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonsoir pat1149,

    merci beaucoup pour ton programme que je viens de tester.
    Il fonctionne presque !
    La valeur enregistrée dans l'EEPROM est bien rappelée lors qu'il y a une coupure d’alimentation.

    Par contre, si je dépasse "99", l'afficheur des dizaines s'éteint et ne se rallume que si je fais un arrêt/marche de l'alimentation.
    Si je descend en dessous de "00", l'afficheur des dizaines s'éteint, le chiffre des unités reste à "0" et affiche "5" si j’appuie de nouveau sur le poussoir décrémentation. Idem, l'afficheur des dizaines s'éteint et ne se rallume que si je fais un arrêt/marche de l'alimentation.

    Sinon, lorsque je reste en appui sur un des poussoirs, les chiffres défilent et ça me pose problème car c'est un des contacts d'un relais qui va incrémenter le chiffre et celui-ci reste collé pour une journée.

    Il y a aussi quelques rebonds par moment ou alors l'appui n'est pas pris en compte.

  26. #21
    mag1

    Re : Compteur à PIC16F628 2 digits 7 segments

    Ah, premier exercice, programmer la R de pullup sur la broche C.6 que j'ai oublié.
    La commande, c'est pullup....

    La doc a été traduite en français, c'est vraiment pour des débutants.
    Si intéressé, faire un tour par là, et les autres pages
    http://electromag1.wifeo.com/les-pic...leur-basic.php

    MM
    Dernière modification par mag1 ; 11/02/2015 à 20h44.
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  27. #22
    Mac49

    Re : Compteur à PIC16F628 2 digits 7 segments

    Ok, je te remercie pour le conseil, je vais me renseigner pour trouver le matériel et un programmateur adapté!
    Je suppose que le nombre de fonctions est réduit comparé à tout ce que peut faire un PIC?

  28. #23
    Mac49

    Re : Compteur à PIC16F628 2 digits 7 segments

    J'avais déjà entendu parler des Picaxes sans savoir de quoi il s'agissait.
    J'ai jeté un coup d’œil au lien que tu m'as envoyé et je pense que c'est vraiment ce qu'il me faut pour des applications "simples" et puis la programmation graphique me plaît beaucoup ! Merci à toi et à ceux qui ont appuyé cette solution.
    Me reste plus qu'à potasser tout ça et à m'équiper !
    Sinon pour la programmation, il existe des schémas de programmateur sur port série ou USB ?

  29. #24
    mag1

    Re : Compteur à PIC16F628 2 digits 7 segments

    Citation Envoyé par Mac49 Voir le message
    Ok, je te remercie pour le conseil, je vais me renseigner pour trouver le matériel et un programmateur adapté!
    Je suppose que le nombre de fonctions est réduit comparé à tout ce que peut faire un PIC?
    La différence avec les pics d'origine est la vitesse d'exécution, mais on voit rarement la différence. Le programme proposé tourne à la vitesse de base de 4 MHz, mais on monte à 32MHz avec la série M2 (sans quartz), juste une commande setfreq à ajouter, et à 64MHz avec les X2 avec ou sans quartz, selon.
    Sinon, on fait tout ce que l'on veut, mais plus simplement. Regarde la page sur l'Agility, par exemple: http://electromag1.wifeo.com/
    Aucun matériel si tu disposes encore d'un PC avec port série , sinon, l'adaptateur USB/série (17,90 euros) est incontournable, mais vite amorti.

    Modif, je vois que tu parles de programmation graphique, je te conseille de programmer en basic, enfin c'est mon avis.

    Il n'y a pas de programmateur, on programme sur site par jack ou picots (3)

    MM
    Dernière modification par mag1 ; 11/02/2015 à 21h14.
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  30. Publicité
  31. #25
    mag1

    Re : Compteur à PIC16F628 2 digits 7 segments

    Encore un truc, à la moindre question sur les picaxes, tu vas là:
    http://www.picaxeforum.co.uk/forumdi...phone&langid=2

    MM
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  32. #26
    Mac49

    Re : Compteur à PIC16F628 2 digits 7 segments

    C'est bon, j'ai un vieux pc avec des ports série !
    Si j'ai bien compris, on relie le Picaxe directement au port série via la liaison RS232 pour le programmer !?

  33. #27
    mag1

    Re : Compteur à PIC16F628 2 digits 7 segments

    Citation Envoyé par Mac49 Voir le message
    C'est bon, j'ai un vieux pc avec des ports série !
    Si j'ai bien compris, on relie le Picaxe directement au port série via la liaison RS232 pour le programmer !?
    cetoutaféça.

    Trois fils à relier, et si on retrouve une vielle souris, ou un vieux périphérique série, c'est fini.
    Voir ici pour les détails:
    http://electromag1.wifeo.com/la-prog...es-picaxes.php

    17,90 euros à transformer en picaxes:

    http://www.gotronic.fr/cat-microcont...picaxe-325.htm
    http://www.gotronic.fr/cat-interfaces-picaxe-1068.htm

    Bonne bidouille (et à bientôt)

    MM
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  34. #28
    Mac49

    Re : Compteur à PIC16F628 2 digits 7 segments

    Merci pour tout !
    Bonne nuit et à bientôt

    Nico

  35. #29
    mag1

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonjour,

    Petit retour pour une modif sur le programme : manquait une ligne et suppression des gosub (copié collé d'un autre programme, mais ici, ajouter 6 lignes pour en économiser 2, c'est idiot)

    Voici la mise à jour (des fois que ça serve)
    Et puis aussi le schéma, avec les R de limitation courant base (c'est mieux aussi)

    MM
    Images attachées Images attachées
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  36. #30
    Mac49

    Re : Compteur à PIC16F628 2 digits 7 segments

    Bonsoir,

    merci pour tes mises à jour mag1 ! Ca devrait me servir prochainement
    J'ai commencé à me renseigner sur les PICAXES.

    Sais-tu où je peux m'approvisionner en µcontroleurs sans me ruiner !?

    Merci

Sur le même thème :

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Branchements afficheur 7 segments 4 digits ?
    Par lucas90 dans le forum Électronique
    Réponses: 10
    Dernier message: 03/12/2013, 14h27
  2. Afficheur 7 segments 3 digits
    Par XDamienX007 dans le forum Électronique
    Réponses: 23
    Dernier message: 17/06/2013, 15h45
  3. realisation d'un compteur deux digits (de 00 a 99)
    Par badr-MOB dans le forum Électronique
    Réponses: 9
    Dernier message: 06/11/2010, 11h41
  4. Compteur à 3 digits par incrémentation (contraintes diverses)
    Par Nelson25 dans le forum Électronique
    Réponses: 0
    Dernier message: 22/01/2009, 00h15
  5. Réponses: 14
    Dernier message: 18/12/2007, 07h36