Electromag1 Circuits électroniques et Picaxes

Petit site pour ceux qui bricolent en électronique en général et sur les PICAXES en particulier.
Les PICAXES sont des microprocesseurs (PIC de Microship) programmables en BASIC. Pleins de qualités, pas chers, ultra faciles à programmer.
Tout (ou presque) est sur le site du distributeur Gotronic (voir les liens).
Les pages  seront ajoutées ou modifiées petit à petit.
Dans le but d'améliorer ce blog, communiquez moi vos remarques et les erreurs que vous pouvez constater.
Pour me contacter: Envoyez un mail à l'adresse : mag1mic@free.fr .  Tout message reçoit une réponse
Pour retourner au menu, Cliquer sur "LISTE DES PAGES", ici ou en haut de la colonne de gauche
Pour laisser un message, allez dans le "LIVRE D'OR"
Bonne visite
 
 


TEST D'UNE MATRICE 64 LEDS à DRIVER MAX7219
PROGRAMMATION PAR PICAXE 14M2 ou 08M2





 
 


 
Cet afficheur peut être acheté en kit, ou tout monté.
Le mien est arrivé en deux parties, une plaquette (avec le MAX7219, PCB, les connecteurs,etc) et la matrice de leds à enfiler sur les connecteurs (pas de doc, il faut choisir le sens qui fonctionne...). Le MAX7219 peut être utilisé pour gérer autre chose que l'afficheur fourni.

Programmation de l'afficheur:
C'est une transposition de la programmation d'un afficheur à 8 digits standard, point décimal compris soit 8 leds.
Chaque colonne est assimilée à un digit et chacun des 8 points de cette colonne est assimilé à un segment du digit.

Dans cet exemple pour les chiffres 2 et 5, la matrice est représentée couchée (c'est plus confortable):
 
Dans l'initialisation, les 8 digits sont définis en programmation "segments".

Les données D0 à D1, associées aux "digits" sont les leds de la colonne (représentée ici horizontalement).

1 = led allumée
0 = led éteinte
Les 0 non significatifs (en tête) ne sont pas écrits.
      

 
Le code de ce test:
La description des colonnes est en binaire, comme l'exemple ci dessus, une notation hexadécimale serait plus compacte.
La description de chiffres n'est pas très attrayante, l'animation d'une figurine serait plus démonstrative (à faire).

;Afficheur driver MAX7219
;Matrice de leds 8x8
;MM 27/10/2013

;Format des registres MAX 7219 sur 16 bits:

;|------------------------------w13------------------------------|                                                               |
;|-----------b27-----------------|------------b26 ---------------|
;|-X-|-X-|-X-|-X-|--ADRESSE------|----------DONNEES--------------|   
;|D15|D14|D13|D12|D11|D10|D09|D08|D07|D06|D05|D04|D03|D02|D01|D00|


    #picaxe 14M2
    setfreq m32
    symbol    DIN    = B.1   ;Entrée Data In de l'afficheur
    symbol    LOAD   = B.2   ;Entrée Load de l'afficheur
    symbol    CLK    = B.3    ;Entrée CLK de l'afficheur
    symbol    TEST   = pinC.3
    symbol    LEN    = 1        ;durée impulsion 1ms
    symbol    num    = b1    ;colonne  
    symbol    cpt    = b2      ;compteur
      ;                b3    unité
      ;                b4    dizaine
      ;                b5    centaine
     symbol    chif  =b6
     symbol    val   =b7
     symbol        cpt2=b8       
    symbol  regis    =w13    ;=(b27,b26) chaque bit sera envoyé dans le registre
    low DIN
    low LOAD
    low CLK
;***** description des colonnes (digits) en RAM:
;chiffre "0":
    table 0, (0,%1111110,%10000001,%10000001,%10000001,%1111110,0,0)
;chiffre "1":
    table 10,(0,%100,%10,%10000001,%11111111,%10000000,0,0)
    table 20,(0,%11000010,%110100001,%10010001,%10010001,%10001110,0,0)
    table 30,(0,%1000010,%10000001,%10001001,%10001001,%1110110,0,0)
    table 40,(0,%10000,%11000,%10100,%10010,%11111111,%10000,0,0)
;chiffre "5":
    table 50,(0,%1000111,%10000101,%10000101,%10000101,%1111001,0,0)
;animation:
    table 60,(0,0,0,%11000,%11000,0,0,0)
    table 70,(0,0,%111100,%100100,%100100,%111100,0,0)
    table 80,(0,%1111110,%1000010,%1000010,%1000010,%1000010,%1111110,0)
    table 90,(%11111111,%10000001,%10000001,%10000001,%10000001,%10000001,%10000001,%11111111)
    
    pullup %100000000000  ;activation résistance pullup sur C.3 (test)
 
;******** initialisation 7219 *******
    b27=$09  'mode décodage
    b26=%00000000  'pas de décodage code B mais segments
    gosub shiftt
 
    b27=$0b  'limite scanner = Nbre de digits
    b26=$07    '$04=5 digits ,$03=4 digits,, etc...
    gosub shiftt
 
    b27=$0c  'shutdown mode
    b26=$01  '=normal (afficheur actif)
    gosub shiftt      

    b27=$0a  'luminosité
    b26=$04  '=croissante de 0 à 15, ici c'est 4
    gosub shiftt
      
    b27=$0f  'display test
    b26=$00  '=normal
    gosub shiftt

 ;****** Boucle d'affichage ******************
 demo:         
    val=0   ;correspond au chiffre affiché
    Do       
           if test = 0 then gosub tst   ;poussoir test et luminosité       
              gosub affich
              pause 8000
              inc val
              if val>5 then exit        
    loop  
    val=5
     Do       
           if test = 0 then gosub tst   ;poussoir test et luminosité       
              gosub affich
              pause 8000
              dec val
              if val>250 then exit             
    loop
    
    for cpt2 =1 to 10
        val=6
        Do       
                  gosub affich             
                  inc val
                  if val>9 then exit             
        loop  
        next
    goto demo
        
;******* Recherche caractère ******************
Affich:
        For num =1 to 8   ;n° de colonne
        b27=num           ;adresse registre
        chif=val*10 +num-1 ;calage sur le premier octet du chiffre val
        readtable chif,b26 ;lecture de l'octet "donnée colonne"
        gosub shiftt       ;affichage colonne  
        next        
    return
    
;******** Sous programme affichage *************************
  ;Format du registre sur 16 bits:

;|------------------------------w13------------------------------|                                                               |
;|-----------b27-----------------|------------b26 ---------------|
;|-X-|-X-|-X-|-X-|--ADRESSE------|----------DONNEES--------------|   
;|D15|D14|D13|D12|D11|D10|D09|D08|D07|D06|D05|D04|D03|D02|D01|D00|
;Ex: chiffre 5 dans digit 2
;|-X-|-X-|-X-|-X-| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |

;La broche DIN va prendre successivementla valeur de chaque bit de w13, scanné de gauche à droire
shiftt:
    for cpt=1 to 16            ;test des 16 bits de w13
        w12=w13 & $8000        ;w13 = b27,b26 & %1000 0000 0000 0000: on ne garde que le 1er bit à gauche de w12   
        low DIN                ; broche DIN à 0 à priori
        if w12=0 then saut     ;w12 contient la valeur (0 ou 1) à transmettre
        high DIN            ;;on ne passe ici que si w12 <> 0, alors DIN =1 (évidemment)
saut:    pulsout CLK,LEN     ; envoi 1 pulse horloge pour valider DIN
        w13=w13*2             ; on décale w13 vers la gauche pour examiner le bit suivant
    next cpt
      pulsout LOAD,LEN    ;chargement du registre terminé, un pulse sur load valide le registre (commande ou affichage)
      return
 
tst:
;****** test segments ****************    
    b27=$0f  'display test
    b26=$01  '=tous les segments de tous les digits allumés
    gosub shiftt          
    do loop while test=0  
    b27=$0f  'display test
    b26=$00  '=normal
    gosub shiftt
      
return


Les autres utilisations:
En enlevant la matrice, on trouve une plaque avec deux rangées de 8 connecteurs:


 
Les broches correspondant aux digits sont numérotées de D0 à D7
Les broches correspondant aux segments sont numérotées de S1 à S8, S8 étant le point décimal.
Les anodes des leds vont sur les broches D0 à D7.
Le max7219 intègre les limitations de courants.

De quoi programmer toutes sortes d'animations de leds...

 



Créé avec Créer un site
Créer un site