Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : mazertoc
Compilation programme
oui c'est le même
Code : Tout sélectionner
B7 B6 B5 B4 B3 B2 B1 B0
g f e d c b a led
Compilation programme
Bonsoir a toute la compagnie,
Voila j’ai osé la manipulation de "Temps-X" enlever les transistors
Le constant:
Un florilège de mes captures d'affichage
Les afficheurs deviennent rémanents, c’est le jeu de la devinette !
Bon passons a l’examen :
Important:
Entre ces 2 oscillogrames
A gauche c’est bon !
A droite c’est la cata !
Signal perturbé et amplitude réduite de prés de 1 v
Mauvaise référence par rapport à la masse
Le signal est en lévitation !
Signal perturbé en plus visible:
Conclusion :
En aucun cas on ne doit infliger a un µC, une modification de ses caractéristiques de sortie !
On soutire de l’énergie au PIC !!! ce n’est pas son job !
Eh oui bien sur ! j’avais déjà vu ça quelque part
En fait j’avais dans ma tête une interruption possible sur le PORTB
Tout a fait aucun soucis
Merci a tous
Voila j’ai osé la manipulation de "Temps-X" enlever les transistors
Le constant:
Un florilège de mes captures d'affichage
Les afficheurs deviennent rémanents, c’est le jeu de la devinette !
Bon passons a l’examen :
Important:
Entre ces 2 oscillogrames
A gauche c’est bon !
A droite c’est la cata !
Signal perturbé et amplitude réduite de prés de 1 v
Mauvaise référence par rapport à la masse
Le signal est en lévitation !
Signal perturbé en plus visible:
Conclusion :
En aucun cas on ne doit infliger a un µC, une modification de ses caractéristiques de sortie !
On soutire de l’énergie au PIC !!! ce n’est pas son job !
satinas a écrit :Pour la ligne de test de T0IF, elle ne sert à rien, car on a autorisé les interruptions avec GIE = 1, et un seul type d'interruption avec TOIE = 1. Donc si une interruption se produit, c'est forcément l'interruption timer, et TOIF
Eh oui bien sur ! j’avais déjà vu ça quelque part
En fait j’avais dans ma tête une interruption possible sur le PORTB
Si vous appuyez sur le poussoir heure, puis le poussoir minute, donc les 2 appuyés en même temps pendant 1 seconde, est ce que l'affichage MM:SS apparaît ?
Tout a fait aucun soucis
Merci a tous
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Compilation programme
Bonsoir Pikachu,
Il est fortement déconseillé la manœuvre que je fais, mais tout dépends ce que consomme tes afficheurs, c'est à toi de les contrôler avant d'y ajouter des transistors.
Tu vas pas mettre un transistor pour allumé une simple led qui consomme 15 mA ....
En ce qui concerne mes afficheurs
1 seule afficheur consomme 12 mA avec une résistance de 470 ohm par segment (affichant un 8), sans multiplexage, avec anode relier au plus de l'alimentation de 5 volts (essai refait ce soir à 22 heures 02 minutes 13 secondes)
Regarde ce que consomme tes afficheurs en reliant l'anode au plus de ton alimentation de 5 volts, pour les miens c'est déjà fais.
Le programme avance........
A+
Il est fortement déconseillé la manœuvre que je fais, mais tout dépends ce que consomme tes afficheurs, c'est à toi de les contrôler avant d'y ajouter des transistors.
En ce qui concerne mes afficheurs
1 seule afficheur consomme 12 mA avec une résistance de 470 ohm par segment (affichant un 8), sans multiplexage, avec anode relier au plus de l'alimentation de 5 volts (essai refait ce soir à 22 heures 02 minutes 13 secondes)
Regarde ce que consomme tes afficheurs en reliant l'anode au plus de ton alimentation de 5 volts, pour les miens c'est déjà fais.
Le programme avance........
Modifié en dernier par Temps-x le ven. 3 sept. 2021 13:02, modifié 1 fois.
Compilation programme
Bonjour a tous,
Désormais, je ne cherche pas a convaincre, mais a comprendre !
Voici une tentative de compréhension plus théorique
Un petit schéma :
Il y a quand même un paradoxe!
Prenons RA3 le programme le configure bien en sortie !
Alors pourquoi lui faire absorber un courant en entrée ?
Si l’un d’entre vous, pouvait me donner la réplique
Bonne journée a tous
Désormais, je ne cherche pas a convaincre, mais a comprendre !
Voici une tentative de compréhension plus théorique
Un petit schéma :
Il y a quand même un paradoxe!
Prenons RA3 le programme le configure bien en sortie !
Alors pourquoi lui faire absorber un courant en entrée ?
Si l’un d’entre vous, pouvait me donner la réplique
Bonne journée a tous
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Compilation programme
- paulfjujo

Maître- Messages : 3256
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
En entrée ?
c'est parce que tu utilise le sens conventionnel du courant..!
mois je prefere le sens electronique .. du moins vers le plus
si RB1 segment =1 ( pres de +vcc)
sir RA3=1 le transistror conduit
le courant passe via le transistor saturé, de Gnd vers led + resistance --> RB1 (à +Vcc)
Pikachu a écrit :Bonjour a tous,
Désormais, je ne cherche pas a convaincre, mais a comprendre !
Voici une tentative de compréhension plus théorique
Un petit schéma :
Schéma.png
Il y a quand même un paradoxe!
Prenons RA3 le programme le configure bien en sortie !
Alors pourquoi lui faire absorber un courant en entrée ?
Si l’un d’entre vous, pouvait me donner la réplique![]()
Bonne journée a tous
En entrée ?
c'est parce que tu utilise le sens conventionnel du courant..!
mois je prefere le sens electronique .. du moins vers le plus
si RB1 segment =1 ( pres de +vcc)
sir RA3=1 le transistror conduit
le courant passe via le transistor saturé, de Gnd vers led + resistance --> RB1 (à +Vcc)
Compilation programme
Bonjour paulfjujo, Pikachu, et tout le forum,
Exacte, j'ai appris l'électronique en lisant un livre qui explique l'électronique des lampes (ne rigolé pas c'est très instructive), et il explique quand début du siècle
on avait par convention dit que le plus aller vers le moins
Il s'est avéré que c'était une grosse erreur.
c'est tout le contraire, et les lampes le prouve, c'est bien l'électron qui va de la cathode à l'anode, moins vers plus
Exemple
Pour les transistors, c'est à peu près pareille, les électrons circule à partir de trou dans l'atome et pour comblé leur lacune un électron vient le remplir. on appelle aussi cela un ion.
Pour information
Un ion est un atome, ou un groupe d'atomes, ayant perdu ou gagné un ou plusieurs électrons
Un ion négatif (anion) a gagné des électrons, Un ion positif (cation) a perdu des électrons.
c'est bien loin tout cela....
A+
paulfjujo a écrit :Source du message mois je prefere le sens electronique .. du moins vers le plus
Exacte, j'ai appris l'électronique en lisant un livre qui explique l'électronique des lampes (ne rigolé pas c'est très instructive), et il explique quand début du siècle
Il s'est avéré que c'était une grosse erreur. c'est tout le contraire, et les lampes le prouve, c'est bien l'électron qui va de la cathode à l'anode, moins vers plus
Exemple
Pour les transistors, c'est à peu près pareille, les électrons circule à partir de trou dans l'atome et pour comblé leur lacune un électron vient le remplir. on appelle aussi cela un ion.
Pour information
Un ion est un atome, ou un groupe d'atomes, ayant perdu ou gagné un ou plusieurs électrons
Un ion négatif (anion) a gagné des électrons, Un ion positif (cation) a perdu des électrons.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Compilation programme
Bonjour à tous
Dans les caractéristiques du pic, ils parlent bien de "Maximum output current sunk by any I/O pin" à 25mA. C'est une valeur limite acceptée durant peu de temps, il vaut mieux plutôt rester en dessous de 10mA.
Dans les tests sans transistors, as-tu bien inversé les niveaux sur A3 à A0, car avec le programme actuel, je pense qu'il allume 3 digits en même temps. Le programme de Temps-x nous éclairera, on l'attend avec impatience.
De mon côté, aucun test possible car l'horloge tourne, et pas un chouïa de dérive après 2 jours, alors je suis pas près d'y toucher :)
Alors pourquoi lui faire absorber un courant en entrée ?
Dans les caractéristiques du pic, ils parlent bien de "Maximum output current sunk by any I/O pin" à 25mA. C'est une valeur limite acceptée durant peu de temps, il vaut mieux plutôt rester en dessous de 10mA.
Dans les tests sans transistors, as-tu bien inversé les niveaux sur A3 à A0, car avec le programme actuel, je pense qu'il allume 3 digits en même temps. Le programme de Temps-x nous éclairera, on l'attend avec impatience.
De mon côté, aucun test possible car l'horloge tourne, et pas un chouïa de dérive après 2 jours, alors je suis pas près d'y toucher :)
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Compilation programme
Re
J'ai encore plein de chose à faire, mais je vous donne la premier version qui n'est pas du tout synchronisé dans le temps.
Car les minutes défile à la vitesse approximativement d'une demi-seconde, j'ai surtout essayer d'optimisé le code, pour qu'il soit lisible.
reste à faire le comptage de tout cela, à moins
que je décide de rajouter une alarme.
satinas, normalement les afficheurs son dans ton code binaire d'après ce que tu m'as dit hier soir, si ça va pas, voir en bas de page dans deco_bcd
Si vous comprenez pas une routine dans le code demandé le moi, je vous expliquerais.
Fichier code+compiler à télécharger ICI
A+
satinas a écrit :Source du message Le programme de Temps-x nous éclairera, on l'attend avec impatience
J'ai encore plein de chose à faire, mais je vous donne la premier version qui n'est pas du tout synchronisé dans le temps.
Car les minutes défile à la vitesse approximativement d'une demi-seconde, j'ai surtout essayer d'optimisé le code, pour qu'il soit lisible.
reste à faire le comptage de tout cela, à moins
Code : Tout sélectionner
;***********************************************************************************************
; Principe de fonctionnement
;
; "A" pour le réglage des minutes, "C" pour le réglage des heures, "E" pour le réglage de l'étalonage.
;
; Deux bouton pour le réglage, le premier bouton qui se trouve sur RB0 sert à déclencher
; l'initiation du réglage.
;
; Quand on arrive dans le mode réglage, RA1 passe en mode entrée, ce qui provoque un arrêt de
; l'afficheur2, ce qui permet de laisser un vide pour le réglage des 3 fonctions.
;
;***********************************************************************************************
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
LIST p=16F84
#include <p16F84.inc>
radix dec ; par defaut en mode décimal
;***********************************************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
;*************************************** assignations *****************************************
#DEFINE segment PORTB ; PORTB les 8 segments des afficheurs
#DEFINE anode1 PORTA,0 ; c'est le premier qui se trouve à gauche
#DEFINE anode2 PORTA,1 ; à coté de l'afficheur qui se trouve à gauche
#DEFINE anode3 PORTA,2 ; à coté de l'afficheur qui se trouve à droite
#DEFINE anode4 PORTA,3 ; c'est le premier qui se trouve à droite
#DEFINE led1 PORTA,4 ; RA4 afficher le point et l'alarme
;********************************* "déclaration des variables" *********************************
CBLOCK 0x0C ; début de la ram en banque 1 soit 68 octets
loop1 :1
loop2 :1
loop3 :1
loop4 :1
loop5 :1
temps :1
tmps :1
afficheur1 :1 ; c'est le premier qui se trouve à gauche
afficheur2 :1 ; à coté de l'afficheur qui se trouve à gauche
afficheur3 :1 ; à coté de l'afficheur qui se trouve à droite
afficheur4 :1 ; c'est le premier qui se trouve à droite
sauver :5
espion :1
accumulateur :1
unité :1
dizaine :1
calibration :2 ; synchronisation de l'horloge
valeur :1
buzzer :1 ; sonnerie
donner :1
adresse :1
ENDC
;********************************** "déclaration des macros" ***********************************
;******************************* "adresse de depart après reset" *******************************
ORG H'00'
goto debut
ORG H'04' ; interruption haute priorité
retfie
;******************************** "configuration des registre" *********************************
debut
BANKSEL OPTION_REG ; passer en bank 1
movlw B'10000000' ; b7 = 1 résistances hors service
movwf OPTION_REG ;
;*********************************** configuration de INTCON ***********************************
bcf INTCON,GIE ; on interdit toutes les interruptions
;***********************************************************************************************
clrf afficheur1
clrf afficheur2
clrf afficheur3
clrf afficheur4
;******************** "configuration du PORTA & PORTB pour le mode horloge" ********************
démarrage
BANKSEL TRISB ; passer en bank 1
movlw B'00000001' ;
movwf TRISB ; 6(RB0), 7(RB1), 8(RB2), 9(RB3), 10(RB4), 11(RB5), 12(RB6), 13(RB7)
movlw B'00000000'
movwf TRISA ; 17(RA0),18(RA1),1(RA2),2(RA3),3(RA4)
BANKSEL PORTA ; passer en bank 0
clrf PORTA
clrf PORTB
;**********************************************************************************************
boucle
btfss PORTB,0 ;
goto initialisation ;
call affiche ; affiche les digits
decfsz temps,F
goto boucle ;
;************************************ "avance d'une minute" ************************************
minute
call droite_début ;
movf accumulateur,W
xorlw D'59'
btfsc STATUS,Z
goto heure
call séparer
call droite_final
goto boucle
heure
call gauche_début ;
movf accumulateur,W
xorlw D'23'
btfsc STATUS,Z
goto boucle
call séparer
call gauche_final
goto boucle
;***************************** "addition afficheur1 & afficheur2" ******************************
gauche_début
movf afficheur1,W ; sauver afficheur1
movwf accumulateur
call multiplier ;
movf afficheur2,W ; ajouter les unités
addwf accumulateur,F
clrf afficheur2 ;
clrf afficheur1 ;
return
;***************************** "addition afficheur3 & afficheur4" ******************************
droite_début
movf afficheur3,W ; sauver afficheur3
movwf accumulateur
call multiplier ;
movf afficheur4,W ; ajouter les unités
addwf accumulateur,F
clrf afficheur3 ;
clrf afficheur4 ;
return
;********************* "transfére le résultat dans afficheur1 & afficheur2" ********************
gauche_final
movf dizaine,W ;
movwf afficheur1 ;
movf unité,W ;
movwf afficheur2 ;
return
;********************* "transfére le résultat dans afficheur3 & afficheur4" ********************
droite_final
movf dizaine,W ;
movwf afficheur3 ;
movf unité,W ;
movwf afficheur4 ;
return
;*********************************** "multiplication par 10" ***********************************
multiplier
bcf STATUS,C ; effacer carry
rlf accumulateur,F ; multiplier par 2
rlf accumulateur,F ; multiplier par 4
addwf accumulateur,F ; ajouter accumulateur, donc multiplier par 5
rlf accumulateur,F ; multiplier par 10
return
;********************** "séparer les dizaines et les unités et ajouté 1 " **********************
séparer
clrf unité ;
clrf dizaine ;
incf accumulateur,F ; ajouter 1
tr1
movlw D'10'
subwf accumulateur,F
btfsc STATUS,Z
goto tr2
btfsc STATUS,C
goto tr2
movf accumulateur,W
addlw D'10'
movwf unité
return
tr2
incf dizaine,F
goto tr1
return
;***************** "configuration du PORTA & PORTB pour le réglage de horloge" *****************
initialisation
BANKSEL TRISA ; passer en bank 1
movlw B'00000010'
movwf TRISA ; 17(RA0),18(RA1),1(RA2),2(RA3),3(RA4)
BANKSEL PORTA ; passer en bank 0
;-----------------------------------------------------------------------------------------------
movf afficheur1,W
movwf sauver+1 ; sauver afficheur1
movf afficheur2,W ;
movwf sauver+2 ; sauver afficheur2
movf afficheur3,W ;
movwf sauver+3 ; sauver afficheur3
movf afficheur4,W ;
movwf sauver+4 ; sauver afficheur4
;-----------------------------------------------------------------------------------------------
movlw D'17' ; éteindre afficheur2
movwf afficheur2
movlw D'9' ; on commence par le chiffre "9" suivi juste après
movwf afficheur1 ; de la lettre "A", pour le mode réglage des minutes
clrf espion ; effacement
bsf espion,0 ; mode réglage des minutes, après la premier rotation de bit
;
btfss PORTB,0
goto $-D'1' ; attendre le relachement du bouton
;-----------------------------------------------------------------------------------------------
avance
call tempo ; pause pour éviter l'anti-rebond, avec affichage
bcf STATUS,C ; mettre carry à zéro
rlf espion,F ; réglage suivant
incf afficheur1,F ; on passe à la lettre suivante, pour réglage suivant
btfsc espion,3 ;
call lecture ; lecture de leeprom, pour réglage de l'étalonnage
btfss espion,2 ;
goto retour ;
movf sauver+1,W ; affiche les heures à droite
movwf afficheur3 ;
movf sauver+2,W ;
movwf afficheur4 ;
;-----------------------------------------------------------------------------------------------
retour
call affiche ; affiche les digits
btfsc PORTA,1 ; controler si appui, pour choisir la sélection de
goto sauter ; réglage minute, réglage heure, réglage étalonnage
;-----------------------------------------------------------------------------------------------
call tempo ; pause pour éviter l'anti-rebond, avec affichage
btfsc espion,1
movlw D'59' ; mode minute
btfsc espion,2
movlw D'23' ; mode heure
btfsc espion,3
movlw D'99' ; mode étalonnage
movwf valeur ; enregistrer la sélection
call droite_début ; addition sur afficheur3 & afficheur4
movf accumulateur,W ;
xorwf valeur,W ;
btfsc STATUS,Z ;
goto sauter ; remettre l'afficheur à zéro
call séparer ; convertion décimal en digit
call droite_final ; transfére le résultat dans afficheur3 & afficheur4
;-----------------------------------------------------------------------------------------------
sauter
btfsc PORTB,0
goto retour
call tempo ; pause pour éviter l'anti-rebond, avec affichage
;-----------------------------------------------------------------------------------------------
sauve_minute
btfss espion,1
goto sauve_heure
movf afficheur3,W ; sauvegarde des minutes
movwf sauver+3
movf afficheur4,W
movwf sauver+4
;-----------------------------------------------------------------------------------------------
sauve_heure
btfss espion,2
goto sauve_étalonnage
movf afficheur3,W ; sauvegarde des heures
movwf sauver+1
movf afficheur4,W
movwf sauver+2
;-----------------------------------------------------------------------------------------------
sauve_étalonnage
btfss espion,3
goto avance
étape_1
movf calibration+0,W ; regerder si c'est idendique, si c'est pas, on enregistre
xorwf afficheur3,W
btfsc STATUS,Z
goto étape_2
call enregistrement
call clignote
goto sortie
étape_2
movf calibration+1,W
xorwf afficheur4,W
btfsc STATUS,Z
goto sortie
call enregistrement
call clignote
;-----------------------------------------------------------------------------------------------
sortie
movf sauver+1,W
movwf afficheur1
movf sauver+2,W
movwf afficheur2
movf sauver+3,W
movwf afficheur3
movf sauver+4,W
movwf afficheur4
call tempo ; pause pour éviter l'anti-rebond, avec affichage
goto démarrage
;**********************************************************************************************
enregistrement
clrf adresse ; 0x00 emplacement d'écriture
movf afficheur3,W ;
movwf donner
call ecriture_eeprom ;
;-----------------------------------------------------------------------------------------------
incf adresse,F ; 0x01 emplacement d'écriture
movf afficheur4,W ;
movwf donner
call ecriture_eeprom ;
return
;**********************************************************************************************
lecture
clrf adresse ; 0x00 emplacement de lecture
call lecture_eeprom ; on va chercher à l'adresse 0x00
; le réglage de la synchronisation
movf donner,W
movwf afficheur3
movwf calibration+0
;-----------------------------------------------------------------------------------------------
incf adresse,F ; 0x01 emplacement de lecture
call lecture_eeprom ; on va chercher à l'adresse 0x00
; le réglage de la synchronisation
movf donner,W
movwf afficheur4
movwf calibration+1
return
;*********** "clignotement des afficheurs pour signaler un enregistrement en eeprom" ***********
clignote
movlw D'5'
movwf loop5
clrf loop4
re_clignote
call _300ms
call affiche
decfsz loop4
goto $-D'2'
decfsz loop5
goto re_clignote
return
;********************************* "gestion de l'affichage" ***********************************
affiche
movlw D'3' ; page 4, tableaux de 256 octets.
movwf PCLATH
;-----------------------------------------------------------------------------------------------
movf afficheur1,W
xorlw D'0' ; éteindre l'afficheur1 si égal à zéro
btfsc STATUS,Z
movlw D'17' ; nombre qui correspond à afficheur éteint
btfss STATUS,Z
movf afficheur1,W
call deco_bcd
movwf segment
bsf anode1 ; allumage anode1
bcf anode2 ; éteindre anode2
bcf anode3 ; éteindre anode3
bcf anode4 ; éteindre anode4
call _270µs
;-----------------------------------------------------------------------------------------------
movf afficheur2,W
call deco_bcd
movwf segment
bcf anode1 ; éteindre anode1
bsf anode2 ; allumage anode2
bcf anode3 ; éteindre anode3
bcf anode4 ; éteindre anode4
call _270µs
;-----------------------------------------------------------------------------------------------
movf afficheur3,W
call deco_bcd
movwf segment
bcf anode1 ; éteindre anode1
bcf anode2 ; éteindre anode2
bsf anode3 ; allumage anode3
bcf anode4 ; éteindre anode4
call _270µs
;-----------------------------------------------------------------------------------------------
movf afficheur4,W
call deco_bcd
movwf segment
bcf anode1 ; éteindre anode1
bcf anode2 ; éteindre anode2
bcf anode3 ; éteindre anode3
bsf anode4 ; allumage anode4
call _270µs
;-----------------------------------------------------------------------------------------------
bcf anode4 ; éteindre anode4
call _270µs
return
;***********************************************************************************************
tempo
movlw D'100'
movwf loop3
call affiche ;
decfsz loop3,F
goto $-D'2'
return
;***************** "pause de 300 millisecondes pour 16F avec horloge de 4 Mhz" ******************
_300ms
movlw D'153'
movwf loop1
movlw D'134'
movwf loop2
movlw D'2'
movwf loop3
decfsz loop1,F
goto $-D'1'
decfsz loop2,F
goto $-D'3'
decfsz loop3,F
goto $-D'5'
return
;**********************************************************************************************
_270µs
movlw D'90' ;
movwf loop1 ;
decfsz loop1,F ;
goto $-D'1' ;
return
;******************************** lecture dans l'eeprom ****************************************
lecture_eeprom
movf adresse,W ; adresse de l'emplacement mémoire à lire
movwf EEADR ;
BANKSEL EECON1 ; passage en banque 1
bsf EECON1,RD ; lecture de l'EEPROM
bcf STATUS,RP0 ; passage en banque 0
movf EEDATA,W ; la valeur lue dans l'EEPROM est placée dans W
movwf donner ; puis W est transféré dans la variable donnée
BANKSEL PORTA ; passage en banque 0
return
;******************************** lecture dans l'eeprom ****************************************
ecriture_eeprom
movf INTCON,W ; sauvegarder le registre INTCON
movwf tmps
bcf INTCON,GIE ; désactivation de toutes les interruptions (recommandation de Microchip)
movf adresse,W
movwf EEADR ; 0x00 est l'adresse de l'emplacement mémoire
movf donner,W ; donner à écrit dans la mémoire eeprom
movwf EEDATA ; écrire dans l'emplacement mémoire
BANKSEL EECON1 ; passage en banque 1
bcf EECON1,EEIF ; effacer flag de fin d'écriture
bsf EECON1,WREN ; autorisation de l'écriture
movlw 0x55 ; séquence spécifique (c'est comme ça, il faut le savoir)
movwf EECON2 ; séquence spécifique
movlw 0xAA ; séquence spécifique
movwf EECON2 ; séquence spécifique
bsf EECON1,WR ; lance une opération d'écriture
btfsc EECON1,WR ; tester si l'écriture est terminé
goto $-D'1'
bcf EECON1,WREN ; une fois l'écriture terminé, on interdit l'écriture
BANKSEL PORTA ; passage en banque 0
movf tmps,W ; restaurer le registre INTCON
movwf INTCON
return
;***********************************************************************************************
ORG H'300'
deco_bcd
addwf PCL,1 ;
retlw B'10000001' ; 0 = 0
retlw B'11110011' ; 1 = 1
retlw B'01001001' ; 2 = 2
retlw B'01100001' ; 3 = 3
retlw B'00110011' ; 4 = 4
retlw B'00100101' ; 5 = 5
retlw B'00000101' ; 6 = 6
retlw B'10110001' ; 7 = 7
retlw B'00000001' ; 8 = 8
retlw B'00100001' ; 9 = 9
retlw B'00010001' ; A = 10
retlw B'10001101' ; C = 11
retlw B'00001101' ; E = 12
retlw B'00011101' ; F = 13
retlw B'10000101' ; G = 14
retlw B'00010011' ; H = 15
retlw B'10011111' ; I = 16
retlw B'11111111' ; afficheur éteint = 17
;***********************************************************************************************
;*************** "écriture dans l'EEpromm pendant la programmation du PiC16F84" ****************
;***********************************************************************************************
ORG H'2100'
DE 0x00,0x00,'T','e','m','p','s','-','X'
End
satinas, normalement les afficheurs son dans ton code binaire d'après ce que tu m'as dit hier soir, si ça va pas, voir en bas de page dans deco_bcd
Si vous comprenez pas une routine dans le code demandé le moi, je vous expliquerais.
Fichier code+compiler à télécharger ICI
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le ven. 3 sept. 2021 23:49, modifié 1 fois.
Compilation programme
- paulfjujo

Maître- Messages : 3256
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
D'accord avec toi, il faut se limiter sur le courant de sortie du MCU ..
ne pas oublier que les 20mA max par sortie , c'est pour une sortie
( sur les nouveaux PIC (18F27K42) , certaines sorties sont donnéees pour 50mA !)
il y a une autre limite pour un I maxi global ... voir la datasheet limites DC !
le courant global passant par la pauvre petite pin GND ou VSS du PIC
avec de fort courant sur plusieurs sorties, le Niveau 0 logique .. GND peut effectivement etre perturbé.
* je serai curieux de connaitre la section de la connection interne Gnd !
Ne pas oublier aussi l'importance majeure de connecter une capa de l'ordre de 100nf aux bornes VSS et GNd du PIC
si possible avec un 1 condo Mylar + 1 condo Ceramique + 1 chimique de quelques µF basse ESR ( resistance serie dynamique)
nota: j'ai mis des drivers couple ULNxxxx UDNxxx pour piloter mes horloges 7 seg 6 digits (voir meme avec Maxi digits de taille 8")
ou UDNxxxx ..ULNxxxx suivant le type d'afficheur Anode ou cathode commune.
Meme une horloge à dix sous, made in RPC , utilise des transitors en interface des digits et 7 segments ! (basée sur AT89C2051)
voir si il existe des Afficheurs 7 seg haute luminosité ..comme certaine diode Led actuelle
s'allume tres bien avec 1 ou 2 mA seulement.. Là , on pourrait se passer de transistors drivers.
Mais ne pas oublier que le multiplexage oblige à allumer bien plus que la normale ,
puisqu'on ne voit le digit qu'une fois sur 4 (HHMM) ou 1 fois sur 6 si avec HHMMSS
un bug de programme entrainant un multiplexage arrété sur un digit allumé ..(en permamence)
pourrait crammer l'afficheur ou le PIC .
Pikachu a écrit :Conclusion :
En aucun cas on ne doit infliger a un µC, une modification de ses caractéristiques de sortie !
On soutire de l’énergie au PIC !!! ce n’est pas son job !
D'accord avec toi, il faut se limiter sur le courant de sortie du MCU ..
ne pas oublier que les 20mA max par sortie , c'est pour une sortie
( sur les nouveaux PIC (18F27K42) , certaines sorties sont donnéees pour 50mA !)
il y a une autre limite pour un I maxi global ... voir la datasheet limites DC !
le courant global passant par la pauvre petite pin GND ou VSS du PIC
avec de fort courant sur plusieurs sorties, le Niveau 0 logique .. GND peut effectivement etre perturbé.
* je serai curieux de connaitre la section de la connection interne Gnd !
Ne pas oublier aussi l'importance majeure de connecter une capa de l'ordre de 100nf aux bornes VSS et GNd du PIC
si possible avec un 1 condo Mylar + 1 condo Ceramique + 1 chimique de quelques µF basse ESR ( resistance serie dynamique)
nota: j'ai mis des drivers couple ULNxxxx UDNxxx pour piloter mes horloges 7 seg 6 digits (voir meme avec Maxi digits de taille 8")
ou UDNxxxx ..ULNxxxx suivant le type d'afficheur Anode ou cathode commune.
Meme une horloge à dix sous, made in RPC , utilise des transitors en interface des digits et 7 segments ! (basée sur AT89C2051)
voir si il existe des Afficheurs 7 seg haute luminosité ..comme certaine diode Led actuelle
s'allume tres bien avec 1 ou 2 mA seulement.. Là , on pourrait se passer de transistors drivers.
Mais ne pas oublier que le multiplexage oblige à allumer bien plus que la normale ,
puisqu'on ne voit le digit qu'une fois sur 4 (HHMM) ou 1 fois sur 6 si avec HHMMSS
un bug de programme entrainant un multiplexage arrété sur un digit allumé ..(en permamence)
pourrait crammer l'afficheur ou le PIC .
Compilation programme
Je comprends pas, pour moi il y a 2 mosfets et cela me semble symétrique.
Et pourquoi il ont prévu 50 mA, si c'est pour qu'on les utilise pas ?
Pour un dsPIC "Maximum output current sourced/sunk by any I/O pin" -> 4mA (on sent la différence)
Temps-x pour allumer un segment tu mets 1 sur les 2 pins des ports A et B, c'est de la magie ? ou tu a remis des transistors ?
Tu es en anode commune, on pourra pas tester nos programmes, le hard est trop différent. Je te mets juste la pression :)
Et pourquoi il ont prévu 50 mA, si c'est pour qu'on les utilise pas ?
Pour un dsPIC "Maximum output current sourced/sunk by any I/O pin" -> 4mA (on sent la différence)
Temps-x pour allumer un segment tu mets 1 sur les 2 pins des ports A et B, c'est de la magie ? ou tu a remis des transistors ?
Tu es en anode commune, on pourra pas tester nos programmes, le hard est trop différent. Je te mets juste la pression :)
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités


