​ ​ ​ ​ picaxe 8M2 et MAX 7219 64 led
Page 1 of 2 1 2 LastLast
Results 1 to 10 of 12

Thread: picaxe 8M2 et MAX 7219 64 led

  1. #1
    Senior Member
    Join Date
    Mar 2012
    Location
    france
    Posts
    201

    Default picaxe 8M2 et MAX 7219 64 led

    Bonsoir

    je suis en train de faire une monatge ou j emploie un 8M2 et un Max7219, a fin d afficher un caractere en fonction d une tension lue

    Sur l ebauche de mon programme , PE5 me dis:" Error: #Directive error - invalid #picaxe type "

    Code:
    ;Afficheur driver MAX7219
    ;Matrice de leds 8x8
    ;JR 15/18/2017
    
    ;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 8M2
        setfreq m32
        symbol    DIN    = C.0   ;Entrée Data In de l'afficheur
        symbol    LOAD   = C.1   ;Entrée Load de l'afficheur
        symbol    CLK    = C.2   ;Entrée CLK de l'afficheur
        symbol    CAPT   = C.4	;valeur capteur bdv
        symbol    LEN    = 1      ;durée impulsion 1ms
        symbol    num    = b1    ;colonne  
        symbol    cpt    = b2      ;compteur
        
        symbol calv  = w10 ;valeur de la tension du capteur en volt au momment de la mesure
          ;              
         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 "1":
        table 10,(0,0,0,%11111111,%11111111,0,0,0)
    ;chiffre "2":   
        table 20,(0,%11111011,%11111011,%11011011,%11011011,%11011111,%11011111,0)
    ;chiffre "3":   
        table 30,(0,%11000011,%11000011,%11011011,%11011011,%11111111,%11111111,0)
    ;chiffre "4":  
        table 40,(0,%00111111,%00111111,%001100000,%11111000,%11111000,%00110000,0)
    ;chiffre "5":
        table 50,(0,%11011111,%11011111,,%11011011,%11011011,%11111011,%11111011,0)
    ;chiffre "6":
        table 60,(0,%11111111,%11111111,,%11011011,%11011011,%11111011,%11111011,0)
    ;lettre N    
        table 70,(0,%11111111,%11111111,%00001110,%000111110,%11111111,%11111111,0)
    ;lettre R
        table 80,(0,%11111111,%11111111,%00011011,%00111011,%11101111,%11001111,0)
    ;lettre E
        table 90,(0,%11111111,%11111111,%11011011,%11011011,%11000011,%11000011,0)
        
        
    
     
    ;******** 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
    
      
     Debut:
    
     
     
    
     readadc capt,  calv
    		
    		if calv<20 then table 90
    		 
    		endif
    		
    		if calv>4980 then table 90
    		 
    		endif
    		
    		if calv>20 and calv<250 then table 80
    		 
    		endif
    		
    		if calv>250 and calv<500 then table 70
    		 
    		endif		
    		
    		if calv>550 and calv<1200 then table 10
    		 
    		endif	
    		
    		if calv>1200 and calv<1900 then table 20
    		 
    		endif		
    			
    		if calv>1900 and calv<2700 then table 30
    		 
    		endif	
    		
    		if calv>2750 and calv<3500 then table 40
    		 
    		endif	
    		
    		if calv>3550 and calv<4450 then table 50
    		 
    		endif		
    			
    		
    		if calv>4550 and calv<4950 then table 60
    		 
    		endif		
    		
    	
               
          
    				
    				
    goto debut	
    	
        
    ;******** 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
    un peu serai t il possible svp ?

    Par avance merci

  2. #2
    Senior Member
    Join Date
    Jul 2010
    Location
    paris
    Posts
    1,450

    Default

    Faut écrire : #picaxe 08M2

    Même readadc10 ne dépasse pas 1023

    MM

  3. #3
    Senior Member
    Join Date
    Mar 2012
    Location
    france
    Posts
    201

    Default

    Bonjour et merci

    On vois les professionniels

    Je veux mesure sur une patte du picaxeune tension allant de 0 a 5 v

    Betement j ai reporte les plage du capteur en mV

    Autre question le 08M2 ne supporte les " tables " alors que le 14M2 oui ?

    Code:
    ;Afficheur driver MAX7219
    ;Matrice de leds 8x8
    ;JR 15/18/2017
    
    ;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    = C.0   ;Entrée Data In de l'afficheur
        symbol    LOAD   = C.1   ;Entrée Load de l'afficheur
        symbol    CLK    = C.2   ;Entrée CLK de l'afficheur
        symbol    CAPT   = C.4	;valeur capteur bdv
        symbol    LEN    = 1      ;durée impulsion 1ms
        symbol    num    = b1    ;colonne  
        symbol    cpt    = b2      ;compteur
        
        symbol calv  = w10 ;valeur de la tension du capteur en volt au momment de la mesure
          ;              
         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 "1":
        table 10,(0,0,0,%11111111,%11111111,0,0,0)
    ;chiffre "2":   
        table 20,(0,%11111011,%11111011,%11011011,%11011011,%11011111,%11011111,0)
    ;chiffre "3":   
        table 30,(0,%11000011,%11000011,%11011011,%11011011,%11111111,%11111111,0)
    ;chiffre "4":  
        table 40,(0,%00111111,%00111111,%001100000,%11111000,%11111000,%00110000,0)
    ;chiffre "5":
        table 50,(0,%11011111,%11011111,%11011011,%11011011,%11111011,%11111011,0)
    ;chiffre "6":
        table 60,(0,%11111111,%11111111,%11011011,%11011011,%11111011,%11111011,0)
    ;lettre N    
        table 70,(0,%11111111,%11111111,%00001110,%000111110,%11111111,%11111111,0)
    ;lettre R
        table 80,(0,%11111111,%11111111,%00011011,%00111011,%11101111,%11001111,0)
    
        
        
    
     ;******* 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
        
    ;******** 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
    
      
     Debut:
    
     
     
    
     readadc capt,  calv
    		
    		
    		
    		if calv>2 and calv<21 then table 80 gosub shiftt
    		gosub affich
    		endif
    		 
    		endif
    		
    		if calv>21 and calv<50 then table 70
    		 
    		endif		
    		
    		if calv>50 and calv<120 then table 10
    		 
    		endif	
    		
    		if calv>120 and calv<190 then table 20
    		 
    		endif		
    			
    		if calv>190 and calv<270 then table 30
    		 
    		endif	
    		
    		if calv>270 and calv<350 then table 40
    		 
    		endif	
    		
    		if calv>350 and calv<440 then table 50
    		 
    		endif		
    			
    		
    		if calv>455 and calv<495 then table 60
    		 
    		endif		
    		
    	
               
          
    				
    				
    goto debut	
    	
        
    ;******** 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
     
    
          
    return
    Par contre a la simulation je plante a la selection de la plage
    Last edited by JRTEC; 16-08-2017 at 06:50.

  4. #4
    Senior Member
    Join Date
    Jul 2010
    Location
    paris
    Posts
    1,450

    Default

    Bonjour,

    Pas de "table" pour le 08M2, mais il y a lookup qui peut remplacer.

    Pour la sélection, regarde select case, plus pratique et plus souple que if, else, elseif, etc

    après then, il faut une adresse (étiquette), ou un sous programme après un then gosub

    A suivre

    MM

  5. #5
    Senior Member
    Join Date
    Jul 2010
    Location
    paris
    Posts
    1,450

    Default

    Un truc non testé avec un 08M2, à essayer:
    J'ai laissé les tables en rem pour des copier-coller, il y a des cas à compléter

    Code:
    ;Afficheur driver MAX7219
    ;Matrice de leds 8x8
    ;JR 15/18/2017
    
    ;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 08M2
        setfreq m32
        symbol    DIN    = C.0   ;Entrée Data In de l'afficheur
        symbol    LOAD   = C.1   ;Entrée Load de l'afficheur
        symbol    CLK    = C.2   ;Entrée CLK de l'afficheur
        symbol    CAPT   = C.4	;valeur capteur bdv
        symbol    LEN    = 1      ;durée impulsion 1ms
        symbol    col    = b27    ;n° de colonne dans le registre w13= (b27;b26)
        symbol    cpt    = b2      ;compteur
    	
        symbol calv  = w10 ;valeur de la tension du capteur en volt au momment de la mesure        
       
        low DIN
        low LOAD
        low CLK
    #rem
    ;***** description des colonnes (digits) en RAM:
    
    ;chiffre "1":
        table 10,(0,0,0,%11111111,%11111111,0,0,0)
    ;chiffre "2":   
        table 20,(0,%11111011,%11111011,%11011011,%11011011,%11011111,%11011111,0)
    ;chiffre "3":   
        table 30,(0,%11000011,%11000011,%11011011,%11011011,%11111111,%11111111,0)
    ;chiffre "4":  
        table 40,(0,%00111111,%00111111,%001100000,%11111000,%11111000,%00110000,0)
    ;chiffre "5":
        table 50,(0,%11011111,%11011111,%11011011,%11011011,%11111011,%11111011,0)
    ;chiffre "6":
        table 60,(0,%11111111,%11111111,%11011011,%11011011,%11111011,%11111011,0)
    ;lettre N    
        table 70,(0,%11111111,%11111111,%00001110,%000111110,%11111111,%11111111,0)
    ;lettre R
        table 80,(0,%11111111,%11111111,%00011011,%00111011,%11101111,%11001111,0)
    #endrem  
           
    ;******** 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  
    	 do
    	 		readadc10 capt,  calv
    			select calv
    				case < 20
    					gosub cas1	;chiffre 1
    				case 25 to 240
    					gosub cas2
    				case 250 to 490
    					gosub cas3
    				case 500 to 1150
    					gosub cas4
    				case 1200 to 1850
    					gosub cas5
    				case 1900 to 2650
    					gosub cas6
    				case 2700 to 3450
    					gosub cas7
    				case 3500 to 4950
    					gosub cas8			
    				case > 4950
    					gosub cas9
    			endselect
    			
    		cas1:	;chiffre 1  col=b27, ici, c'est le n° de colone de la matrice et b26 sa description en bits
    				for col=0 to 7
    					lookup col ,(0,0,0,%11111111,%11111111,0,0,0),b26
    					gosub shiftt
    				next
    				return
    		cas2:	;chiffe 2	
    				for col=0 to 7
    					lookup col ,(0,%11111011,%11111011,%11011011,%11011011,%11011111,%11011111,0),b26
    					gosub shiftt
    				next		
    				return
    		cas3:	;chiffe 3	
    				for col=0 to 7
    					lookup cpt ,(0,%11000011,%11000011,%11011011,%11011011,%11111111,%11111111,0),b26
    					gosub shiftt
    				next		
    				return
    		cas4:
    				return
    		cas5:
    				return	
    		cas6:
    				return
    		cas7:
    				return	
    		cas8:
    				return
    		cas9:
    				return
    
    	loop
    	
        
    ;******** 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
    MM

  6. #6
    Senior Member
    Join Date
    Jul 2010
    Location
    paris
    Posts
    1,450

    Default

    Plus complet et moins d'erreur de colonnes


    Code:
    ;Afficheur driver MAX7219
    ;Matrice de leds 8x8
    ;JR 15/18/2017
    
    ;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 08M2
        setfreq m32
        symbol    DIN    = C.0   ;Entrée Data In de l'afficheur
        symbol    LOAD   = C.1   ;Entrée Load de l'afficheur
        symbol    CLK    = C.2   ;Entrée CLK de l'afficheur
        symbol    CAPT   = C.4	;valeur capteur bdv
        symbol    LEN    = 1      ;durée impulsion 1ms
        symbol    col    = b27    ;n° de colonne dans le registre w13= (b27;b26)
        symbol    cpt    = b2      ;compteur
    	
        symbol calv  = w10 ;valeur de la tension du capteur en volt au momment de la mesure        
       
        low DIN
        low LOAD
        low CLK
    #rem
    ;***** description des colonnes (digits) en RAM:
    
    ;chiffre "1":
        table 10,(0,0,0,%11111111,%11111111,0,0,0)
    ;chiffre "2":   
        table 20,(0,%11111011,%11111011,%11011011,%11011011,%11011111,%11011111,0)
    ;chiffre "3":   
        table 30,(0,%11000011,%11000011,%11011011,%11011011,%11111111,%11111111,0)
    ;chiffre "4":  
        table 40,(0,%00111111,%00111111,%001100000,%11111000,%11111000,%00110000,0)
    ;chiffre "5":
        table 50,(0,%11011111,%11011111,%11011011,%11011011,%11111011,%11111011,0)
    ;chiffre "6":
        table 60,(0,%11111111,%11111111,%11011011,%11011011,%11111011,%11111011,0)
    ;lettre N    
        table 70,(0,%11111111,%11111111,%00001110,%000111110,%11111111,%11111111,0)
    ;lettre R
        table 80,(0,%11111111,%11111111,%00011011,%00111011,%11101111,%11001111,0)
    ;lettre E
    	 table 90,(0,%11111111,%11111111,%11011011,%11011011,%11000011,%11000011,0)
    #endrem  
           
    ;******** 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  
    	 do
    	 		readadc10 capt,  calv
    			select calv
    				case < 4
    					gosub casEE	;lettre E
    				case 4 to 50
    					gosub casR
    				case 51 to 102
    					gosub casN
    				case 103 to 245
    					gosub cas1
    				case 246 to 389
    					gosub cas2
    				case 390 to 552
    					gosub cas3
    				case 553 to 716
    					gosub cas4
    				case 716 to 911
    					gosub cas5
    				case 912 to 1013
    					gosub cas6			
    				case > 1013
    					gosub casEE
    			endselect
    
    		casEE:	;lettre E
    				for col=0 to 7
    					lookup col ,(0,%11111111,%11111111,%11011011,%11011011,%11000011,%11000011,0),b26			
    					gosub shiftt
    				next
    				return
    		casR:
    				for col=0 to 7
    					lookup col ,(0,%11111111,%11111111,%00011011,%00111011,%11101111,%11001111,0),b26			
    					gosub shiftt
    				next
    				return
    		casN:
    				for col=0 to 7
    					lookup col ,(0,%11111111,%11111111,%00001110,%000111110,%11111111,%11111111,0),b26			
    					gosub shiftt
    				next
    				return			
    		cas1:	;chiffre 1  col=b27, ici, c'est le n° de colone de la matrice et b26 sa description en bits
    				for col=0 to 7
    					lookup col ,(0,0,0,%11111111,%11111111,0,0,0),b26					
    					gosub shiftt
    				next
    				return
    		cas2:	;chiffe 2	
    				for col=0 to 7
    					lookup col ,(0,%11111011,%11111011,%11011011,%11011011,%11011111,%11011111,0),b26
    					gosub shiftt
    				next		
    				return
    		cas3:	;chiffe 3	
    				for col=0 to 7
    					lookup cpt ,(0,%11000011,%11000011,%11011011,%11011011,%11111111,%11111111,0),b26
    					gosub shiftt
    				next		
    				return
    		cas4:
    				for col=0 to 7
    					lookup col ,(0,%00111111,%00111111,%001100000,%11111000,%11111000,%00110000,0),b26
    					gosub shiftt
    				next		
    				return
    		cas5:
    				for col=0 to 7
    					lookup col ,(0,%11011111,%11011111,%11011011,%11011011,%11111011,%11111011,0),b26
    					gosub shiftt
    				next		
    				return	
    		cas6:
    				for col=0 to 7
    					lookup col ,(0,%11111111,%11111111,%11011011,%11011011,%11111011,%11111011,0),b26
    					gosub shiftt
    				next		
    				return
    	loop
    	
        
    ;******** 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:
    	inc col						;le n° de col commence à 1 et pour lookup, c'est 0
        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

  7. #7
    Senior Member
    Join Date
    Sep 2011
    Location
    Montpellier (FRANCE)
    Posts
    2,674

    Default

    Quote Originally Posted by MGU View Post
    Un truc non testé avec un 08M2, à essayer:
    J'ai laissé les tables en rem pour des copier-coller, il y a des cas à compléter

    Code:
    ;Afficheur driver MAX7219
    ;Matrice de leds 8x8
    ;JR 15/18/2017
    
    ;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 08M2
        setfreq m32
        symbol    DIN    = C.0   ;Entrée Data In de l'afficheur
        symbol    LOAD   = C.1   ;Entrée Load de l'afficheur
        symbol    CLK    = C.2   ;Entrée CLK de l'afficheur
        symbol    CAPT   = C.4	;valeur capteur bdv
        symbol    LEN    = 1      ;durée impulsion 1ms
        symbol    col    = b27    ;n° de colonne dans le registre w13= (b27;b26)
        symbol    cpt    = b2      ;compteur
    	
        symbol calv  = w10 ;valeur de la tension du capteur en volt au momment de la mesure        
       
        low DIN
        low LOAD
        low CLK
    #rem
    ;***** description des colonnes (digits) en RAM:
    
    ;chiffre "1":
        table 10,(0,0,0,%11111111,%11111111,0,0,0)
    ;chiffre "2":   
        table 20,(0,%11111011,%11111011,%11011011,%11011011,%11011111,%11011111,0)
    ;chiffre "3":   
        table 30,(0,%11000011,%11000011,%11011011,%11011011,%11111111,%11111111,0)
    ;chiffre "4":  
        table 40,(0,%00111111,%00111111,%001100000,%11111000,%11111000,%00110000,0)
    ;chiffre "5":
        table 50,(0,%11011111,%11011111,%11011011,%11011011,%11111011,%11111011,0)
    ;chiffre "6":
        table 60,(0,%11111111,%11111111,%11011011,%11011011,%11111011,%11111011,0)
    ;lettre N    
        table 70,(0,%11111111,%11111111,%00001110,%000111110,%11111111,%11111111,0)
    ;lettre R
        table 80,(0,%11111111,%11111111,%00011011,%00111011,%11101111,%11001111,0)
    #endrem  
           
    ;******** 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  
    	 do
    	 		readadc10 capt,  calv
    			select calv
    				case < 20
    					gosub cas1	;chiffre 1
    				case 25 to 240
    					gosub cas2
    				case 250 to 490
    					gosub cas3
    				case 500 to 1150
    					gosub cas4
    				case 1200 to 1850
    					gosub cas5
    				case 1900 to 2650
    					gosub cas6
    				case 2700 to 3450
    					gosub cas7
    				case 3500 to 4950
    					gosub cas8			
    				case > 4950
    					gosub cas9
    			endselect
    			
    		cas1:	;chiffre 1  col=b27, ici, c'est le n° de colone de la matrice et b26 sa description en bits
    				for col=0 to 7
    					lookup col ,(0,0,0,%11111111,%11111111,0,0,0),b26
    					gosub shiftt
    				next
    				return
    		cas2:	;chiffe 2	
    				for col=0 to 7
    					lookup col ,(0,%11111011,%11111011,%11011011,%11011011,%11011111,%11011111,0),b26
    					gosub shiftt
    				next		
    				return
    		cas3:	;chiffe 3	
    				for col=0 to 7
    					lookup cpt ,(0,%11000011,%11000011,%11011011,%11011011,%11111111,%11111111,0),b26
    					gosub shiftt
    				next		
    				return
    		cas4:
    				return
    		cas5:
    				return	
    		cas6:
    				return
    		cas7:
    				return	
    		cas8:
    				return
    		cas9:
    				return
    
    	loop
    	
        
    ;******** 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
    MM
    Le LOOP devrait être immédiatement après le ENDSELECT
    Avec ce programme, cas1 est exécuté à chaque boucle, et de plus empile un RETURN sans GOSUB...

    Il me semble qu'à chaque appel de shiftt, b27 est perdu, et donc il semble manquer un
    b27=$0f
    par exemple avant le RETURN.

    Accessoirement, il me semble possible d'optimiser en vitesse de traitement :
    for col=0 to 7
    lookup col ,(0,%11111111,%11111111,%00011011,%00111011,%11101 111,%11001111,0
    gosub shiftt
    next
    à remplacer par
    b26=%11111111: gosub shiftt
    b26=%11111111: gosub shift
    b26=%00011011: gosub shiftt
    b26=%00111011: gosub shiftt
    b26=%11101111: gosub shiftt
    b26=%11001111: gosub shiftt
    b26=0: gosub shiftt

    On peut aussi optimiser en utilisant w0 à la place de w13 (et donc b0, b1 à la place de b26, b27) et du coup le premier bit à gauche est directement disponible dans bit15.

    Perso je trouve la structure
    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
    un peu complexe. Pourquoi ne pas écrire :
    if w12=0 then
    low DIN
    else
    high DIN
    endif
    voire
    DIN=bit15
    et encore plus simplement, pourquoi ne pas utiliser shiftout ?
    Last edited by BESQUEUT; 17-08-2017 at 13:26.
    There are 10 types of people in the world: those who understand binary, and those who don't.

  8. #8
    Senior Member
    Join Date
    Jul 2010
    Location
    paris
    Posts
    1,450

    Default

    Bonjour,

    Merci pour le temps passé sur ce bout de programme

    Le loop est un loupé, c'est sûr.

    Le lookup, c'est vrai que d'autres structures sont peut être plus rapides. Mais col est b27 et c'est un des octets du registre (ici le n° de colonne à un près et je viens de m’apercevoir que sans changement de variable, ça colle pas).
    la commande shiftout n'existe pas pour la série M2, le sous programme est directement pompé de la doc picaxe pour la remplacer. Je me suis aussi demandé pourquoi ils n'utilisaient pas if/ else, je pense que c'est une question de rapidité.

    Je n'aime pas trop utiliser w0, que je réserve pour un découpage éventuel en bits.

    Merci, je vais revoir tout ça.

    MM
    Last edited by MGU; 18-08-2017 at 15:49.

  9. #9
    Senior Member
    Join Date
    Jul 2010
    Location
    paris
    Posts
    1,450

    Default

    Cette fois ci, j'ai testé, ça fonctionne..mais on peut toujours améliorer

    Code:
    ;Afficheur driver MAX7219
    ;Matrice de leds 8x8
    ;JR 15/18/2017
    ;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 08M2
    #no_data
        setfreq m32
        symbol    DIN    = C.0  ;Entrée Data In de l'afficheur
        symbol    LOAD   = C.1  ;Entrée Load de l'afficheur
        symbol    CLK    = C.2  ;Entrée CLK de l'afficheur
        symbol    CAPT   = C.4	;valeur capteur bdv
        symbol    LEN    = 4    ;durée impulsion 
        symbol    col    = b2   ;n° de colonne du chiffre, dans le registre b27=col+1; w13= (b27;b26)
        symbol    cpt   = b3   ;compteur	
        symbol	 calv  	= w10 	;valeur de la tension du capteur en volt au momment de la mesure        
       
        low DIN
        low LOAD
        low CLK
           
    ;******** 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  
    	 do
    	 		readadc10 capt,  calv
    			select calv
    				case < 4
    					gosub casEE	;lettre E
    				case 4 to 50
    					gosub casR
    				case 51 to 102
    					gosub casN
    				case 103 to 245
    					gosub cas1
    				case 246 to 389
    					gosub cas2
    				case 390 to 552
    					gosub cas3
    				case 553 to 716
    					gosub cas4
    				case 717 to 911
    					gosub cas5
    				case 912 to 1013
    					gosub cas6			
    				case > 1013
    					gosub casEE
    			endselect
    	loop
    
    		casEE:	;lettre E
    				for col=0 to 7
    					lookup col ,(0,%11111111,%11111111,%11011011,%11011011,%11000011,%11000011,0),b26			
    					gosub shiftt1
    				next
    				return
    		casR:
    				for col=0 to 7
    					lookup col ,(0,%11111111,%11111111,%00011011,%00111011,%11101111,%11001111,0),b26			
    					gosub shiftt1
    				next
    				return
    		casN:
    				for col=0 to 7
    					;lookup col ,(%11111111,%11111111,%00000110,%00001100,%00011000,%00110000,%11111111,%11111111),b26
    					lookup col ,(0,%11111111,%11111111,%00000110,%00001100,%11111111,%11111111,0),b26
    					gosub shiftt1
    				next
    				return			
    		cas1:	;chiffre 1  col=b27, ici, c'est le n° de colone de la matrice et b26 sa description en bits
    				for col=0 to 7
    					lookup col ,(0,0,0,%11111111,%11111111,0,0,0),b26					
    					gosub shiftt1
    				next
    				return
    		cas2:	;chiffe 2	
    				for col=0 to 7
    					lookup col ,(0,%11111011,%11111011,%11011011,%11011011,%11011111,%11011111,0),b26
    					gosub shiftt1
    				next		
    				return
    		cas3:	;chiffe 3	
    				for col=0 to 7
    					lookup col ,(0,%11000011,%11000011,%11011011,%11011011,%11111111,%11111111,0),b26
    					gosub shiftt1
    				next		
    				return
    		cas4:
    				for col=0 to 7					
    					lookup col ,(0,%0011111,%00011111,%00011000,%00011000,%11111111,%11111111,0),b26	
    					gosub shiftt1
    				next		
    				return
    		cas5:
    				for col=0 to 7
    					lookup col ,(0,%11011111,%11011111,%11011011,%11011011,%11111011,%11111011,0),b26
    					gosub shiftt1
    				next		
    				return	
    		cas6:
    				for col=0 to 7
    					lookup col ,(0,255,255,219,219,251,251,0),b26	;binaire remplacé par décimal
    					gosub shiftt1
    				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
    shiftt1:
    	b27=col+1					;le n° de col commence à 1 et pour lookup, c'est 0
    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
    PS, j'ai remplacé le précédent code, avec une légère modif des caractères

    MM
    Last edited by MGU; 18-08-2017 at 15:47.

  10. #10
    Senior Member
    Join Date
    Mar 2012
    Location
    france
    Posts
    201

    Default

    Quote Originally Posted by MGU View Post
    Cette fois ci, j'ai testé, ça fonctionne..mais on peut toujours améliorer

    Code:
    ;Afficheur driver MAX7219
    ;Matrice de leds 8x8
    ;JR 15/18/2017
    ;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 08M2
    #no_data
        setfreq m32
        symbol    DIN    = C.0  ;Entrée Data In de l'afficheur
        symbol    LOAD   = C.1  ;Entrée Load de l'afficheur
        symbol    CLK    = C.2  ;Entrée CLK de l'afficheur
        symbol    CAPT   = C.4	;valeur capteur bdv
        symbol    LEN    = 4    ;durée impulsion 
        symbol    col    = b2   ;n° de colonne du chiffre, dans le registre b27=col+1; w13= (b27;b26)
        symbol    cpt   = b3   ;compteur	
        symbol	 calv  	= w10 	;valeur de la tension du capteur en volt au momment de la mesure        
       
        low DIN
        low LOAD
        low CLK
           
    ;******** 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  
    	 do
    	 		readadc10 capt,  calv
    			select calv
    				case < 4
    					gosub casEE	;lettre E
    				case 4 to 50
    					gosub casR
    				case 51 to 102
    					gosub casN
    				case 103 to 245
    					gosub cas1
    				case 246 to 389
    					gosub cas2
    				case 390 to 552
    					gosub cas3
    				case 553 to 716
    					gosub cas4
    				case 717 to 911
    					gosub cas5
    				case 912 to 1013
    					gosub cas6			
    				case > 1013
    					gosub casEE
    			endselect
    	loop
    
    		casEE:	;lettre E
    				for col=0 to 7
    					lookup col ,(0,%11111111,%11111111,%11011011,%11011011,%11000011,%11000011,0),b26			
    					gosub shiftt1
    				next
    				return
    		casR:
    				for col=0 to 7
    					lookup col ,(0,%11111111,%11111111,%00011011,%00111011,%11101111,%11001111,0),b26			
    					gosub shiftt1
    				next
    				return
    		casN:
    				for col=0 to 7
    					;lookup col ,(%11111111,%11111111,%00000110,%00001100,%00011000,%00110000,%11111111,%11111111),b26
    					lookup col ,(0,%11111111,%11111111,%00000110,%00001100,%11111111,%11111111,0),b26
    					gosub shiftt1
    				next
    				return			
    		cas1:	;chiffre 1  col=b27, ici, c'est le n° de colone de la matrice et b26 sa description en bits
    				for col=0 to 7
    					lookup col ,(0,0,0,%11111111,%11111111,0,0,0),b26					
    					gosub shiftt1
    				next
    				return
    		cas2:	;chiffe 2	
    				for col=0 to 7
    					lookup col ,(0,%11111011,%11111011,%11011011,%11011011,%11011111,%11011111,0),b26
    					gosub shiftt1
    				next		
    				return
    		cas3:	;chiffe 3	
    				for col=0 to 7
    					lookup col ,(0,%11000011,%11000011,%11011011,%11011011,%11111111,%11111111,0),b26
    					gosub shiftt1
    				next		
    				return
    		cas4:
    				for col=0 to 7					
    					lookup col ,(0,%0011111,%00011111,%00011000,%00011000,%11111111,%11111111,0),b26	
    					gosub shiftt1
    				next		
    				return
    		cas5:
    				for col=0 to 7
    					lookup col ,(0,%11011111,%11011111,%11011011,%11011011,%11111011,%11111011,0),b26
    					gosub shiftt1
    				next		
    				return	
    		cas6:
    				for col=0 to 7
    					lookup col ,(0,255,255,219,219,251,251,0),b26	;binaire remplacé par décimal
    					gosub shiftt1
    				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
    shiftt1:
    	b27=col+1					;le n° de col commence à 1 et pour lookup, c'est 0
    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
    PS, j'ai remplacé le précédent code, avec une légère modif des caractères

    MM
    bonjour
    j ai ete absent quelques jours
    mais du coup je n y comprends plus rien dans le programme

    quand vous ecrivez ceci : "readadc10 capt, calv
    select calv"
    vous prsume que le capteur va donne une tension de combien ? parce si calv est supeieur a 1013 , moi je ne sait pas ce que c est

    et pourquoi avoir fai cela ? " cas6:
    for col=0 to 7
    lookup col ,(0,255,255,219,219,251,251,0),b26 ;binaire remplacé par décimal"

    et la ? casN:
    for col=0 to 7
    ;lookup col ,(%11111111,%11111111,%00000110,%00001100,%0001100 0,%00110000,%11111111,%11111111),b26
    lookup col ,(0,%11111111,%11111111,%00000110,%00001100,%11111 111,%11111111,0),b26
    gosub shiftt1

    ne metrisant rien de ce programme je ne comprends rien

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •