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 ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Compilation programme
satinas
Expert
Expert
Messages : 1489
Enregistré en : novembre 2015

#141 Message par satinas » jeu. 2 sept. 2021 19:49

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
Pikachu
Débutant
Débutant
Messages : 60
Enregistré en : septembre 2016

#142 Message par Pikachu » jeu. 2 sept. 2021 21:26

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
DigitDivers0.png

Les afficheurs deviennent rémanents, c’est le jeu de la devinette !
Bon passons a l’examen :
Oscillo01.png

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:
Oscillo2.png

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
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2889
Enregistré en : juillet 2016
Localisation : Terre

#143 Message par Temps-x » jeu. 2 sept. 2021 21:47

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.

:roll: 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. :-D

Le programme avance........

==> A+
Modifié en dernier par Temps-x le ven. 3 sept. 2021 13:02, modifié 1 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Compilation programme
Pikachu
Débutant
Débutant
Messages : 60
Enregistré en : septembre 2016

#144 Message par Pikachu » ven. 3 sept. 2021 11:26

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 Merci !
Bonne journée a tous
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Compilation programme
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3256
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#145 Message par paulfjujo » ven. 3 sept. 2021 11:54

bonjour,

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 Merci !
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)
Aide toi, le ciel ou FantasPic t'aidera

Compilation programme
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2889
Enregistré en : juillet 2016
Localisation : Terre

#146 Message par Temps-x » ven. 3 sept. 2021 12:50

Bonjour paulfjujo, Pikachu, et tout le forum,

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

:sifflotte: on avait par convention dit que le plus aller vers le moins oops 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

Lampe.png


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.

:-D c'est bien loin tout cela....

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Compilation programme
satinas
Expert
Expert
Messages : 1489
Enregistré en : novembre 2015

#147 Message par satinas » ven. 3 sept. 2021 14:39

Bonjour à tous
Pin_16f84.png

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
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2889
Enregistré en : juillet 2016
Localisation : Terre

#148 Message par Temps-x » ven. 3 sept. 2021 17:19

Re

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 :roll: que je décide de rajouter une alarme.

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églageRA1 passe en mode entréece 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         
:
      loop2         
:
      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

==> A+
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.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Compilation programme
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3256
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#149 Message par paulfjujo » ven. 3 sept. 2021 18:21

bonsoir,

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 .
Aide toi, le ciel ou FantasPic t'aidera

Compilation programme
satinas
Expert
Expert
Messages : 1489
Enregistré en : novembre 2015

#150 Message par satinas » ven. 3 sept. 2021 18:28

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 :)


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité