peson electronique base picaxe et max 7219

PieM

Senior Member
Je viens de faire un test : si j indique une valeur de calibrage a superieur a 260 kg c est la que se cre le probleme d indication
Bonjour,

C'est normal, car si la variable tarv est bien du type word (0 à 65535)
la lecture de cette valeur est faite avec un readadc qui lui est sur 8 bits. donc de 0 à 255.
Il faut
tar:
readadc10 cap ,tarv
; lecture de la valeur en volt du capteur
Idem pour :
cal:
readadc10 cap ,calv


qui renverra une valeur entre 0 et 1023.
 

JRTEC

Senior Member
Bonsoir et merci de votre reponse

je viens de faire un essai mais pas concluant , je n aurai pas le meme probleme avec calk aussi ?

pourquoi vous dites "qui renverra une valeur entre 0 et 1023. " ? 255 x 10 = 2550 non ?
 

MGU

Senior Member
Bonsoir,

Les ADC sont des convertisseurs transformant une tension en nombre

Ex pour une alimentation de 5 v
Avec readadc: la tension de 0 à 5 v est transformées en un nombre de 0 à 255
Avec readadc10, la tension 0 à 5 v est transformée en un nombre de 0 à 1023

Le capteur utilisé est donc un capteur de pression HP carburant pour moteur diesel, (donc env 1500 bar ?).
Je ne sais pas du tout comment il fonctionne. Comment comptes tu utiliser ce capteur? Pour avoir une idée du schéma.


MM
 

JRTEC

Senior Member
Le capteur utilisé est donc un capteur de pression HP carburant pour moteur diesel, (donc env 1500 bar ?).
Je ne sais pas du tout comment il fonctionne. Comment comptes tu utiliser ce capteur? Pour avoir une idée du schéma.
Le capteur est capable de lire bien plus de 1500 bars, il a ete preleve sur un moteur PSA

Je compte le monter sur la ligne hydraulique entre le distributeur hydraulique et le verin

Perso je ne comprend pas l interet du readadc10 ; si ce n est que de gagner de la precision

car comme je compare toujours la tension du capteur au moment dde la mesure , avec une tension du meme capteur au moment du calibrage et une tension du meme capteur au moment de la tare , meme avec une plausibilite de 255, comme je tolere largement une erreur de 10 kg , ces 255 valeurs fois 10 me permette de monter jusqua 2550 kg soit a peu pres le double de ce que j ai besoin

perso j ai beau tourner ma formule dans tous les sens je ne vois ce qui cloche , si ce n est au moment du calibrage quand j indique le poids et comme je fais des essais comme pour une situation reele , soit environ 600 kg, indication qui en sort au bout n est pas correcte
 
Last edited:

PieM

Senior Member
je viens de faire un essai mais pas concluant , je n aurai pas le meme probleme avec calk aussi ?
Pourquoi avec calk ? Il ne vient pas d'une lecture analogique. à quel moment est le problème ?

Une fois que vous avez défini un symbole pour une variable, utilisez ce symbole dans le reste du programme.
Normalement on ne devrait pas retrouver de b2 à b6 ni de w6 à w13 dans le corps du programme. Il serait ainsi plus lisible pour vous ... et pour les autres.

je vous ai fait les transformations : :rolleyes:

Code:
; Peson electronique
; JR 08/12/13

;Configuration câblage:  
'       	 +V   1-v-14   0V
'       	C.5   2   13   B.0 vers DIN (DATA IN) du 7219
'	 	C.4   3   12   B.1 vers LOAD du 7219
'	  	C.3   4   11   B.2 vers CLK du 7219
'	  	C.2	5   10   B.3 CAPTEUR DE PRESSION
'poussoir + C.1	6   9    B.4 poussoir TARE
'poussoir -	C.0	7___8	   B.5 poussoir CALIBRAGE





;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|


    #picaxe14M2
    setfreq m32
;********** Nom des broches ******************    
    symbol        DIN     = B.0      ;Entrée Data In de l'afficheur
    symbol        LOAD    = B.1      ;Entrée Load de l'afficheur
    symbol        CLK     = B.2      ;Entrée CLK de l'afficheur
    symbol        cap     = B.3      ;mesure capteur de pression
    symbol        tare    =pinB.4    ;Bouton poussoir TARE appuyé 1 relache 0
    symbol        calib   =pinB.5    ;Bouton poussoir CALIBRAGE appuyé 1 relache 0
    symbol        moins   =pinC.0    ;Bouton poussoir MOINS appuyé 1 relache 0
    symbol        plus    =pinC.1    ;Bouton poussoir PLUS appuyé 1 relache 0   
;********** Nom des variables bytes (1 octet)   
	symbol      LEN     = 1       ;durée impulsion 1ms
      symbol    cpt     = b2        ;compteur
	symbol unit=b3		;b3    unité
	symbol dixa=b4		;b4    dizaine
	symbol cent=b5		;b5    centaine
	symbol mill=b6		;b6    milier
	
         
;********** Nom des variables word (2 octets)       
    symbol mesn  = w6    ; valeur net de la tension lue 
    symbol plagv = w7 ;valeur de la plage de tension de mesure
    symbol mesk  = w8 ;valeur en kg au moment de la mesure present
    symbol tarv  = w9 ; valeur de la tension du capteur en volt au momment de la tare donc poids egal 0 kg
    symbol calv  = w10 ;valeur de la tension du capteur en volt au momment du calibrage
    symbol calk  = w11 ;valeur en kg au momment du calibrage
    symbol mesv  = w12 ;valeur de la tension du capteur a momment de la mesure presente
    symbol regis =w13    ;=(b27,b26) chaque bit sera envoyé dans le registre

     
             
    
    
;****************************************       
    low DIN
    low LOAD
    low CLK   
     
;******** initialisation 7219 *******
    b27=$09  'mode décodage
    b26=%11101111  'code B tous digits
    gosub shiftt
 
      b27=$0b  'limite scanner = Nbre de digits
      b26=$04  '$04=5 digits ,$03=4 digits,, etc...
      gosub shiftt

      b27=$0c  'shutdown mode
      b26=$01  '=normal (afficheur actif)
      gosub shiftt      

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

 
 ;*****selection type affichage******
 
 	if calib=1 then		; si le bouton calibrage est appuyé
 		pause 3000		; pendant 3 secondes
 		if calib=1 then		; si le bouton calibrage est appuye 
 			goto cal		; aller au chapitre cal
 		endif	
 	endif 
 
 	if tare=1 then		; si le bouton tare est appuye 
 		pause 3000 		; pendant 3 secondes 	
 		if tare=1 then 		; si le bouton tare est appuye
 			goto tar 		; aller au chapitre tar
 		endif 		
 	endif
 		 	
 	goto mesu		; sinon aller a mesure	
 	
 	
; ****** tare ******

tar:
	readadc cap ,tarv	; lecture de la valeur en volt du capteur
				; memorisation de la valeur en volt du capteur de la tare
				
	b27=1             ;digit unite 
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage
      b27=2			;affichage 4°digit
      b26=0       	;affichage 0
      gosub shiftt      ;affichage
      b27=3             ;affichage 3°digit 
      b26=0	    	;affichage d un espace
      gosub shiftt      ;affichage
      b27=4			;affichage 2°digit
      b26=0    	;affichage d un r
      gosub shiftt      ;affichage    				
	b27=5
    	b26=%00001111    	; affichage 1°digitt = seg A,D,E,F on= % 00001111			
	gosub shiftt	; affiche du premier digit " t " pour indique la tare 
				; affichage de la valeur 0 kg
	write 1, word tarv ;memorisation de la tension de la tare

	goto debut		; retourner au debut du programme
	 
 
; ****** cal *****

cal:
	readadc cap ,calv	; lecture de la valeur en volt du capteur  
				; memorisation de la valeur en volt du capteur du calibrage
				
				
	write 3, word calv ;memorisation de la tension du calibrage			
				
 		if plus=1 then 	; si le bouton plus est appuyé
  			pause 1000		; anti rebond
 			calk=calk+10 	; ajouter 10 kg a la valeur indique
 			
 						; memorisation de la valeur de calibrage en kg
 			
 		endif
 	
 	
 		if moins=1 then		; si le bouton plus est appuyé
 			pause 1000		; anti rebond
 			calk=calk-10 	; enlever 10 kg a la valeur indique
 						; memorisation de la valeur de calibrage en kg
 						
 		endif				
 	write 5, word calk ;memorisation de la valeur du calibrage
 				
 	bintoascii calk,mill,mill,cent,dixa,unit    ;décomposition en digit
           
                
      b27=1             ;digit unite
      b26=0        	;affichage 0 car valeur arrondie a 10 kg pres pour unite
      gosub shiftt      ;affichage
      b27=2			;affichage dizaine
      b26=dixa-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=cent-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=mill-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=5
      b26=%01001110     ;C = seg A,D,E,F on= % 01001110 
      gosub shiftt	; affiche du premier digit " C " pour indique le calibrage 
				; affichage de la valeur x kg			
 				
 		
 
 		if tare=1 then		; si le bouton tare est appuye 		
 			goto cal		; retourner au menu calibrage
 		endif	
 	
 	
	goto debut		; retourner au debut du programme
	
; **** mesu *****

mesu:
	read 1, word tarv  ; lecture eproom tension tare
	read 3, word calv  ; lecture eproom tension calibrage 
	read 5, word calk  ; lecture eproom tension calibrage

	plagv=calv-tarv	; determination de la plage de mesure 
	
	
	readadc cap ,mesv	; lecture de la valeur en volt du capteur  
				; memorisation de la valeur en volt du capteur
	
	mesn=mesv-tarv ;deternination de la value de tension lue moins la valeur de tare
	mesk=calk*mesn/plagv; determination de la valeur en kg selon la tension lue 
				
	bintoascii mesk,mill,mill,cent,dixa,unit    ;décomposition en digit
           
                
      b27=1             ;digit unite
      b26=0        	;affichage 0 car valeur arrondie a 10 kg pres pour unite
      gosub shiftt      ;affichage
      b27=2			;affichage dizaine
      b26=dixa-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=cent-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=mill-48		;ascii -> numérique
      gosub shiftt      ;affichage			
	b27=5
    	b26=%01100111    	;P = ,affichage du premier digit " P" pour le terme pesée
   	gosub shiftt			; 
				; affichage de la valeur " mesk "
				
				
goto debut	
	
 
 
 
;******** Sous programme affichage *************************
  ;Format du registre sur 16 bits:

;|------------------------------regis----------------------------|                                                               |
;|-----------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
        mesv=regis & $8000        ;regis = b27,b26 & %1000 0000 0000 0000: on ne garde que le 1er bit à gauche de w12   
        low DIN                ; broche DIN à 0 à priori
        if mesv=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
        regis=regis*2              ; on décale regis 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
Je pense qu'il y a un problème lors de vos conversion tension > kg.
vous incrémentez votre calk par des valeurs de 10 le tout en kg. donc vous calculez bien en kg. et non en dizaines de kg...
 
Last edited:

JRTEC

Senior Member
MErci pour votre reponse

j ai copier tel que votre programme et mis en place , j ai toujours le meme probleme

je fais une tare avec une valeur de mon potentiometre ( qui simule mon capteur de pression ) a 0.9 V pour le 0kg

je mets mon potentiometre a 2.5v et indique dans le calibrage 680 Kg

si je continue de tourner mon potentiometre , lla valeur affichée monte jusqu a 800 kg (a 2.81 v ) puis tombe juste apres a 0 KG, si je continue de tourne mon potentiometre toujours vers le haut la valeur monte alors jusqu 800 kglorsque mon potentiometre delivre 4.64 , au dela rebelote , on repart a 0 et monte a 4.9v au environ de 130 kg

je n arrive pas a expliquer ce phenomene
merci de votre attention
 

GM39

Senior Member
readadc cap ,mesv ; lecture de la valeur en volt du capteur
; memorisation de la valeur en volt du capteur

mesn=mesv-tarv ;deternination de la value de tension lue moins la valeur de tare
mesk=calk*mesn/plagv; determination de la valeur en kg selon la tension lue
Il y a un dépassement de capacité quand mesn > 131 (500*131=65500)
de même quand mesv < 25 (qui correspond au 0,5V) la différence devient négative donc le calcul devient faux également

(avec les valeurs de #39)
 

JRTEC

Senior Member
si j ecris alors :

mesk=mesn/plagv*calk : ce serait mieux ?

j essaye de suite

et bien non c est pas ok
 

JRTEC

Senior Member
Je pense qu'il y a un problème lors de vos conversion tension > kg.
vous incrémentez votre calk par des valeurs de 10 le tout en kg. donc vous calculez bien en kg. et non en dizaines de kg...
le but est d afficher des dizaines de kg ce qui est suffisant pour mon utilisation

mais effectivement je calcule en kg
peut etre c est trop pour un pic axe ?
 

JRTEC

Senior Member
avec la version ci dessous cela l air de marcher

Code:
; Peson electronique
; JR 08/12/13

;Configuration câblage:  
'       	 +V   1-v-14   0V
'       	C.5   2   13   B.0 vers DIN (DATA IN) du 7219
'	 	C.4   3   12   B.1 vers LOAD du 7219
'	  	C.3   4   11   B.2 vers CLK du 7219
'	  	C.2	5   10   B.3 CAPTEUR DE PRESSION
'poussoir + C.1	6   9    B.4 poussoir TARE
'poussoir -	C.0	7___8	   B.5 poussoir CALIBRAGE





;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|


    #picaxe14M2
    setfreq m32
;********** Nom des broches ******************    
    symbol        DIN     = B.0      ;Entrée Data In de l'afficheur
    symbol        LOAD    = B.1      ;Entrée Load de l'afficheur
    symbol        CLK     = B.2      ;Entrée CLK de l'afficheur
    symbol        cap     = B.3      ;mesure capteur de pression
    symbol        tare    =pinB.4    ;Bouton poussoir TARE appuyé 1 relache 0
    symbol        calib   =pinB.5    ;Bouton poussoir CALIBRAGE appuyé 1 relache 0
    symbol        moins   =pinC.0    ;Bouton poussoir MOINS appuyé 1 relache 0
    symbol        plus    =pinC.1    ;Bouton poussoir PLUS appuyé 1 relache 0   
;********** Nom des variables bytes (1 octet)   
	symbol      LEN     = 1       ;durée impulsion 1ms
      symbol    cpt     = b2        ;compteur
	symbol unit=b3		;b3    unité
	symbol dixa=b4		;b4    dizaine
	symbol cent=b5		;b5    centaine
	symbol mill=b6		;b6    milier
	
         
;********** Nom des variables word (2 octets)       
    symbol mesn  = w6    ; valeur net de la tension lue 
    symbol plagv = w7 ;valeur de la plage de tension de mesure
    symbol mesk  = w8 ;valeur en kg au moment de la mesure present
    symbol tarv  = w9 ; valeur de la tension du capteur en volt au momment de la tare donc poids egal 0 kg
    symbol calv  = w10 ;valeur de la tension du capteur en volt au momment du calibrage
    symbol calk  = w11 ;valeur en kg au momment du calibrage
    symbol mesv  = w12 ;valeur de la tension du capteur a momment de la mesure presente
    symbol regis =w13    ;=(b27,b26) chaque bit sera envoyé dans le registre

     
             
    
    
;****************************************       
    low DIN
    low LOAD
    low CLK   
     
;******** initialisation 7219 *******
    b27=$09  'mode décodage
    b26=%11101111  'code B tous digits
    gosub shiftt
 
      b27=$0b  'limite scanner = Nbre de digits
      b26=$04  '$04=5 digits ,$03=4 digits,, etc...
      gosub shiftt

      b27=$0c  'shutdown mode
      b26=$01  '=normal (afficheur actif)
      gosub shiftt      

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

 
 ;*****selection type affichage******
 
 	if calib=1 then		; si le bouton calibrage est appuyé
 		pause 3000		; pendant 3 secondes
 		if calib=1 then		; si le bouton calibrage est appuye 
 		
 		read 5, word calk  ; lecture eproom xkg calibrage
 			goto cal		; aller au chapitre cal
 		endif	
 	endif 
 
 	if tare=1 then		; si le bouton tare est appuye 
 		pause 3000 		; pendant 3 secondes 	
 		if tare=1 then 		; si le bouton tare est appuye
 			goto tar 		; aller au chapitre tar
 		endif 		
 	endif
 		 	
 	goto mesu		; sinon aller a mesure	
 	
 	
; ****** tare ******

tar:
	readadc cap ,tarv	; lecture de la valeur en volt du capteur
				; memorisation de la valeur en volt du capteur de la tare
				
	b27=1             ;digit unite 
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage
      b27=2			;affichage 4°digit
      b26=0       	;affichage 0
      gosub shiftt      ;affichage
      b27=3             ;affichage 3°digit 
      b26=0	    	;affichage d un espace
      gosub shiftt      ;affichage
      b27=4			;affichage 2°digit
      b26=0    	;affichage d un r
      gosub shiftt      ;affichage    				
	b27=5
    	b26=%00001111    	; affichage 1°digitt = seg A,D,E,F on= % 00001111			
	gosub shiftt	; affiche du premier digit " t " pour indique la tare 
				; affichage de la valeur 0 kg
	write 1, word tarv ;memorisation de la tension de la tare

	goto debut		; retourner au debut du programme
	 
 
; ****** cal *****

cal:
	readadc cap ,calv	; lecture de la valeur en volt du capteur  
				; memorisation de la valeur en volt du capteur du calibrage
				
				
	write 3, word calv ;memorisation de la tension du calibrage			
				
 		if plus=1 then 	; si le bouton plus est appuyé
  			pause 1000		; anti rebond
 			calk=calk+10 	; ajouter 10 kg a la valeur indique
 			
 						; memorisation de la valeur de calibrage en kg
 			
 		endif
 	
 	
 		if moins=1 then		; si le bouton plus est appuyé
 			pause 1000		; anti rebond
 			calk=calk-10 	; enlever 10 kg a la valeur indique
 						; memorisation de la valeur de calibrage en kg
 						
 		endif				
 	write 5, word calk ;memorisation de la valeur du calibrage
 				
 	bintoascii calk,mill,mill,cent,dixa,unit    ;décomposition en digit
           
                
      b27=1             ;digit unite
      b26=0        	;affichage 0 car valeur arrondie a 10 kg pres pour unite
      gosub shiftt      ;affichage
      b27=2			;affichage dizaine
      b26=dixa-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=cent-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=mill-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=5
      b26=%01001110     ;C = seg A,D,E,F on= % 01001110 
      gosub shiftt	; affiche du premier digit " C " pour indique le calibrage 
				; affichage de la valeur x kg			
 				
 		
 
 		if tare=1 then		; si le bouton tare est appuye 		
 			goto cal		; retourner au menu calibrage
 		endif	
 	
 	
	goto debut		; retourner au debut du programme
	
; **** mesu *****

mesu:
	read 1, word tarv  ; lecture eproom tension tare
	read 3, word calv  ; lecture eproom tension calibrage 
	read 5, word calk  ; lecture eproom tension calibrage

	plagv=calv-tarv	; determination de la plage de mesure 
	
	calk= calk/10	; division pas 10 pour rester dans la limite
	readadc cap ,mesv	; lecture de la valeur en volt du capteur  
				; memorisation de la valeur en volt du capteur
	
	mesn=mesv-tarv ;deternination de la value de tension lue moins la valeur de tare
	mesk=calk*mesn/plagv*10 ; determination de la valeur en kg selon la tension lue 
				
	bintoascii mesk,mill,mill,cent,dixa,unit    ;décomposition en digit
           
                
      b27=1             ;digit unite
      b26=0        	;affichage 0 car valeur arrondie a 10 kg pres pour unite
      gosub shiftt      ;affichage
      b27=2			;affichage dizaine
      b26=dixa-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=cent-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=mill-48		;ascii -> numérique
      gosub shiftt      ;affichage			
	b27=5
    	b26=%01100111    	;P = ,affichage du premier digit " P" pour le terme pesée
   	gosub shiftt			; 
				; affichage de la valeur " mesk "
				
				
goto debut	
	
 
 
 
;******** Sous programme affichage *************************
  ;Format du registre sur 16 bits:

;|------------------------------regis----------------------------|                                                               |
;|-----------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
        mesv=regis & $8000        ;regis = b27,b26 & %1000 0000 0000 0000: on ne garde que le 1er bit à gauche de w12   
        low DIN                ; broche DIN à 0 à priori
        if mesv=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
        regis=regis*2              ; on décale regis 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
merci pour votre aide
 

JRTEC

Senior Member
je voulais eviter une erreur d affichage
Code:
mesu:
	read 1, word tarv  ; lecture eproom tension tare
	read 3, word calv  ; lecture eproom tension calibrage 
	read 5, word calk  ; lecture eproom tension calibrage
	
	

	plagv=calv-tarv	; determination de la plage de mesure 
	
	calk= calk/10	; division pas 10 pour rester dans la limite
	readadc cap ,mesv	; lecture de la valeur en volt du capteur  
				; memorisation de la valeur en volt du capteur
	
	mesn=mesv-tarv ;deternination de la value de tension lue moins la valeur de tare
	mesk=calk*mesn/plagv*10 ; determination de la valeur en kg selon la tension lue 
		
		if mesv<tarv then
			mesk=0
		endif
		
				
	bintoascii mesk,mill,mill,cent,dixa,unit    ;décomposition en digit
mais le signe inferieur ne lui plait pas pourquoi ?

erreur corrigée
 

GM39

Senior Member
peut etre c est trop pour un pic axe ?
Code:
w1=600
w2=180
w3=230

'si on veut calculer w1*w2/w3=469

w4=w1*w2
w5=w1**w2

w6=32768/w3*2*w5
w7=w4/w3+w6	; résultat 468

'autre solution (moins précise)

w8=w1/w3*w2	; résultat 360
 

MGU

Senior Member
Les picaxes ne sont pas forts en maths, il faut ruser.

w1=600
w2=180
w3=230

Avec des multiples de 10, c'est plus facile on divise tout par 10 (presque)

60 x 18= 1080
1080 x 10 =10800
10800 / 23 = 469

w1=w1/10
w2=w2/10
w3=w3/10
w4=w1 x w2
w4=w4 * 10
w5=w4 / w3 = 469

MM
 

GM39

Senior Member
Non les deux autres valeurs sont issues de tensions (d'ailleurs ce n'est pas la tare mais le calibrage qui est multiple de 10)

La masse maxi est de 1200kg donc ça passe uniquement en divisant par 10 le calibrage, et c'est ce qu'il a fait
 

MGU

Senior Member
Oui, bien sûr, on est d'accord, les valeurs issues du capteur ne sont pas des multiples de 10.
 

PieM

Senior Member
Je ne comprends pas trop le problème :
Vu les besoins de JRTEC, l'unité doit être des 10aines de kg. Le poids total est donc inférieure à 255
le capteur avec un readadc donne une valeur de 0 à 255 donc un byte qui est à convertir en 10aines de kg.

Les calculs intermédiaires eux se font naturellement sur 16 bits sur le Picaxe.

D'ailleurs, il est beaucoup plus simple de ne travailler que sur des valeurs brutes en points (0 à 255)
La tension exacte mesurée est sans importance, et la valeur en kg n'est utile que pour l'affichage.
donc la seule conversion à faire est en kg / point pour l'affichage.

Toutes les variables restent des variables byte.
dans le programme, il faut incrémenter calk par 1 et non par 10
il faut supprimer calk= calk/10
pour son affichage on affiche centaines dizaines et unité de calk , et on ajoute un 0

idem pour mesk qui reste mesk=calk*mesn/plagv

et son affichage bintoascii mesk,cent,dixa,unit avec un 0 à la fin pour les kg.

L'autre problème à l'usage est que l'affichage va varier en permanence en fonction des effets dynamiques sur le vérin, donc sur la pression.
Il faudra soit filtrer la tension déllivrée par le capteur (qui ont un temps de réponse très court) par un condensateur de forte valeur, soit faire un lissage numérique dans le programme, ce qui permet d'ajuster facilement la constante de temps en fonction des essais.
voir par ex : http://www.picaxeforum.co.uk/showthread.php?16468-Lissage-de-valeurs-mesur%E9es
 
Last edited:

MGU

Senior Member
Je ne comprends pas trop le problème :
Vu les besoins de JRTEC, l'unité doit être des 10aines de kg. Le poids total est donc inférieure à 255
le capteur avec un readadc donne une valeur de 0 à 255 donc un byte qui est à convertir en 10aines de kg.

Les calculs intermédiaires eux se font naturellement sur 16 bits sur le Picaxe.

D'ailleurs, il est beaucoup plus simple de ne travailler que sur des valeurs brutes en points (0 à 255)
La tension exacte mesurée est sans importance, et la valeur en kg n'est utile que pour l'affichage.
donc la seule conversion à faire est en kg / point pour l'affichage.

Toutes les variables restent des variables byte.
dans le programme, il faut incrémenter calk par 1 et non par 10
il faut supprimer calk= calk/10
pour son affichage on affiche centaines dizaines et unité de calk , et on ajoute un 0

idem pour mesk qui reste mesk=calk*mesn/plagv

et son affichage bintoascii mesk,cent,dixa,unit avec un 0 à la fin pour les kg.

L'autre problème à l'usage est que l'affichage va varier en permanence en fonction des effets dynamiques sur le vérin, donc sur la pression.
Il faudra soit filtrer la tension déllivrée par le capteur (qui ont un temps de réponse très court) par un condensateur de forte valeur, soit faire un lissage numérique dans le programme, ce qui permet d'ajuster facilement la constante de temps en fonction des essais.
voir par ex : http://www.picaxeforum.co.uk/showthread.php?16468-Lissage-de-valeurs-mesur%E9es
Bonjour,

Je pense que nous en sommes tous au même point de la réflexion.

Le problème n'est pas de convertir la tension lue par l'ADC en poids, on y arrivera.
Il va falloir probablement une interface capteur - picaxe

Ces capteurs mesurent des pressions de 2000 bar et la pression annoncée par JRTEC est de 300 bar max.
Je ne connais pas ces capteurs, mais sur une doc BOSCH, j'ai lu

Alimentation 5 v
Pour 100 bar tension délivrée = 0,5 v
et pour 300 bar :1,3 v

Il va donc falloir filtrer (sérieusement) et amplifier cette tension si on ne veut pas perdre trop de précision.

MM
 

PieM

Senior Member
Oui, on peut utiliser un adcconfig avec une référence 2.048V , mais reste à savoir si l'impédance de sortie d'un capteur piezo est compatible avec l'entrée ana.
Et bien sûr qu'on peut faire un ampli !

Mais vu la courbe de réponse du capteur piezo qui est fait pour des pression de 1000 bars et plus, on peut douter de la correspondance tension - charge sur l'attelage !!!

D'autre par JRTECH parle d'alimenter éventuellement son capteur en 12V.
Ces capteurs sont faits pour être reliés au calculateur d'injection qui lui ne fonctionne certainement pas en 12V...
 

jojojo

Senior Member
(non simulé....)

Comment ça ???!!! (Hé hé ... :D :D :D )

Sinon, pour le filtrage, je verrais mieux la soluce en soft.
 

jojojo

Senior Member
Oui, on peut utiliser un adcconfig avec une référence 2.048V , mais reste à savoir si l'impédance de sortie d'un capteur piezo est compatible avec l'entrée ana.
Et bien sûr qu'on peut faire un ampli !

C'est tout l'intérêt de l'ampli de s'affranchir des problèmes d'impédance d'entrée du CAD (En plus de ramener le niveau dans la zone "oû on veux").

Pour la linéarité, je sais pas, j'ai regardé les courbes, sur le lien plus haut.
Ce serait un peu fastidieux, mais, je suppose que l'on peut toujours charger à X kilos, faire une mesure, (n fois), tracer la courbe, et corriger par soft (un peu comme pour la CTN de l'alambic).
 

JRTEC

Senior Member
D'autre par JRTECH parle d'alimenter éventuellement son capteur en 12V.
Ces capteurs sont faits pour être reliés au calculateur d'injection qui lui ne fonctionne certainement pas en 12V...
Bonsoir ,

je vous vois dechainés !! hihihi

je vais faire des essais a l aide d une pompe a tarer les injecteurs pour pouvoir voir la sortie de tension en fonction de la pression

je dirai meme une chose : si je tare a 0 BARS et que je calibre a 300Bars , a ce moment la je calibre a 300 kg ( pour simuler une equivalence bars / kg ), je verrai rapidement si la valuer indique par la montage correspondra a la pression du manometre

apres si je trouvais la fiche de ce capteur , je saurai vite si il peux etre alimenter en douze volts

n y a t il pas un moyen simple de doubler la tension du capteur ? style un transistor

je vais des essais des que possible et je reviens ici

merci pour l interet que vous demonter a ce sujet

a bientot

jrtec
 
Last edited:

MGU

Senior Member
Bonjour,

Le test semble concluant. De plus, le capteur est parfaitement linéaire
Il faudrait fournir le programme de ce test.
J'ai pas bien vu en quoi était gradué le mano (bars ?)
Les valeurs de l'afficheur sont elles des valeurs "brutes" de l'adc

Il faudrait ensuite, relever la valeur de l'adc pour le chargeur vide et son poids réel, la valeur adc en charge avec le poids de la charge.

MM
 

PieM

Senior Member
Oui la linéarité est très bonne ! C'est un capteur à jauges de contraintes ce qui explique cela sans doute.
d'après la doc, la loi de variation est Usortie = (0.1+0.8 p/pn) Uv

si Uv est de 5 V ça donne U sortie = 0.5 + 4 *P/1800 donc

0.5 V pour 0
0.7 V pour 100 bars
0.94 V pour 200 bars
1.16 V pour 300 bars

peut être jouable sans ampli ... sous réserve d'une impédance compatible.

Attendons que JRTECH nous donne les infos sur sa mesure.
 

JRTEC

Senior Member
Bonjour,

Le test semble concluant. De plus, le capteur est parfaitement linéaire
Il faudrait fournir le programme de ce test.
J'ai pas bien vu en quoi était gradué le mano (bars ?)
Les valeurs de l'afficheur sont elles des valeurs "brutes" de l'adc

Il faudrait ensuite, relever la valeur de l'adc pour le chargeur vide et son poids réel, la valeur adc en charge avec le poids de la charge.

MM
Bonjour

oui le mano est en bars pardon ( pompe a tarer des injecteurs de moteurs diesel

le programme de ce test est le suivant :

Code:
; Peson electronique
; JR 08/12/13

;Configuration câblage:  
'       	 +V   1-v-14   0V
'       	C.5   2   13   B.0 vers DIN (DATA IN) du 7219
'	 	C.4   3   12   B.1 vers LOAD du 7219
'	  	C.3   4   11   B.2 vers CLK du 7219
'	  	C.2	5   10   B.3 CAPTEUR DE PRESSION
'poussoir + C.1	6   9    B.4 poussoir TARE
'poussoir -	C.0	7___8	   B.5 poussoir CALIBRAGE





;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|


    #picaxe14M2
    setfreq m32
;********** Nom des broches ******************    
    symbol        DIN     = B.0      ;Entrée Data In de l'afficheur
    symbol        LOAD    = B.1      ;Entrée Load de l'afficheur
    symbol        CLK     = B.2      ;Entrée CLK de l'afficheur
    symbol        cap     = B.3      ;mesure capteur de pression
    symbol        tare    =pinB.4    ;Bouton poussoir TARE appuyé 1 relache 0
    symbol        calib   =pinB.5    ;Bouton poussoir CALIBRAGE appuyé 1 relache 0
    symbol        moins   =pinC.0    ;Bouton poussoir MOINS appuyé 1 relache 0
    symbol        plus    =pinC.1    ;Bouton poussoir PLUS appuyé 1 relache 0   
;********** Nom des variables bytes (1 octet)   
	symbol      LEN     = 1       ;durée impulsion 1ms
      symbol    cpt     = b2        ;compteur
	symbol unit=b3		;b3    unité
	symbol dixa=b4		;b4    dizaine
	symbol cent=b5		;b5    centaine
	symbol mill=b6		;b6    milier
	
         
;********** Nom des variables word (2 octets)       
    symbol mesn  = w6    ; valeur net de la tension lue 
    symbol plagv = w7 ;valeur de la plage de tension de mesure
    symbol mesk  = w8 ;valeur en kg au moment de la mesure present
    symbol tarv  = w9 ; valeur de la tension du capteur en volt au momment de la tare donc poids egal 0 kg
    symbol calv  = w10 ;valeur de la tension du capteur en volt au momment du calibrage
    symbol calk  = w11 ;valeur en kg au momment du calibrage
    symbol mesv  = w12 ;valeur de la tension du capteur a momment de la mesure presente
    symbol regis =w13    ;=(b27,b26) chaque bit sera envoyé dans le registre

     
             
    
    
;****************************************       
    low DIN
    low LOAD
    low CLK   
     
;******** initialisation 7219 *******
    b27=$09  'mode décodage
    b26=%11101111  'code B tous digits
    gosub shiftt
 
      b27=$0b  'limite scanner = Nbre de digits
      b26=$04  '$04=5 digits ,$03=4 digits,, etc...
      gosub shiftt

      b27=$0c  'shutdown mode
      b26=$01  '=normal (afficheur actif)
      gosub shiftt      

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

 
 ;*****selection type affichage******
 
 	if calib=1 then		; si le bouton calibrage est appuyé
 		pause 3000		; pendant 3 secondes
 		if calib=1 then		; si le bouton calibrage est appuye 
 		
 		read 5, word calk  ; lecture eproom xkg calibrage
 			goto cal		; aller au chapitre cal
 		endif	
 	endif 
 
 	if tare=1 then		; si le bouton tare est appuye 
 		pause 3000 		; pendant 3 secondes 	
 		if tare=1 then 		; si le bouton tare est appuye
 			goto tar 		; aller au chapitre tar
 		endif 		
 	endif
 		 	
 	goto mesu		; sinon aller a mesure	
 	
 	
; ****** tare ******

tar:
	readadc cap ,tarv	; lecture de la valeur en volt du capteur
				; memorisation de la valeur en volt du capteur de la tare
				
	b27=1             ;digit unite 
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage
      b27=2			;affichage 4°digit
      b26=0       	;affichage 0
      gosub shiftt      ;affichage
      b27=3             ;affichage 3°digit 
      b26=0	    	;affichage d un espace
      gosub shiftt      ;affichage
      b27=4			;affichage 2°digit
      b26=0    	;affichage d un r
      gosub shiftt      ;affichage    				
	b27=5
    	b26=%00001111    	; affichage 1°digitt = seg A,D,E,F on= % 00001111			
	gosub shiftt	; affiche du premier digit " t " pour indique la tare 
				; affichage de la valeur 0 kg
	write 1, word tarv ;memorisation de la tension de la tare

	goto debut		; retourner au debut du programme
	 
 
; ****** cal *****

cal:
	readadc cap ,calv	; lecture de la valeur en volt du capteur  
				; memorisation de la valeur en volt du capteur du calibrage
				
				
	write 3, word calv ;memorisation de la tension du calibrage			
				
 		if plus=1 then 	; si le bouton plus est appuyé
  			pause 1000		; anti rebond
 			calk=calk+10 	; ajouter 10 kg a la valeur indique
 			
 						; memorisation de la valeur de calibrage en kg
 			
 		endif
 	
 	
 		if moins=1 then		; si le bouton plus est appuyé
 			pause 1000		; anti rebond
 			calk=calk-10 	; enlever 10 kg a la valeur indique
 						; memorisation de la valeur de calibrage en kg
 						
 		endif				
 	write 5, word calk ;memorisation de la valeur du calibrage
 				
 	bintoascii calk,mill,mill,cent,dixa,unit    ;décomposition en digit
           
                
      b27=1             ;digit unite
      b26=0        	;affichage 0 car valeur arrondie a 10 kg pres pour unite
      gosub shiftt      ;affichage
      b27=2			;affichage dizaine
      b26=dixa-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=cent-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=mill-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=5
      b26=%01001110     ;C = seg A,D,E,F on= % 01001110 
      gosub shiftt	; affiche du premier digit " C " pour indique le calibrage 
				; affichage de la valeur x kg			
 				
 		
 
 		if tare=1 then		; si le bouton tare est appuye 		
 			goto cal		; retourner au menu calibrage
 		endif	
 	
 	
	goto debut		; retourner au debut du programme
	
; **** mesu *****

mesu:
	read 1, word tarv  ; lecture eproom tension tare
	read 3, word calv  ; lecture eproom tension calibrage 
	read 5, word calk  ; lecture eproom tension calibrage
	
	

	plagv=calv-tarv	; determination de la plage de mesure 
	
	calk= calk/10	; division pas 10 pour rester dans la limite
	readadc cap ,mesv	; lecture de la valeur en volt du capteur  
				; memorisation de la valeur en volt du capteur
	
	mesn=mesv-tarv ;deternination de la value de tension lue moins la valeur de tare
	mesk=calk*mesn/plagv*10 ; determination de la valeur en kg selon la tension lue 
		
		if tarv>mesv then
		 mesk=0
		endif
		
				
	bintoascii mesk,mill,mill,cent,dixa,unit    ;décomposition en digit
           
                
      b27=1             ;digit unite
      b26=0        	;affichage 0 car valeur arrondie a 10 kg pres pour unite
      gosub shiftt      ;affichage
      b27=2			;affichage dizaine
      b26=dixa-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=cent-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=mill-48		;ascii -> numérique
      gosub shiftt      ;affichage			
	b27=5
    	b26=%01100111    	;P = ,affichage du premier digit " P" pour le terme pesée
   	gosub shiftt			; 
				; affichage de la valeur " mesk "
				
				
goto debut	
	
 
 
 
;******** Sous programme affichage *************************
  ;Format du registre sur 16 bits:

;|------------------------------regis----------------------------|                                                               |
;|-----------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
        mesv=regis & $8000        ;regis = b27,b26 & %1000 0000 0000 0000: on ne garde que le 1er bit à gauche de w12   
        low DIN                ; broche DIN à 0 à priori
        if mesv=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
        regis=regis*2              ; on décale regis 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
quand au valeurs affichées , elles corresppondent a une tare a 0 Bars , et un calibrage a 600 kg a 200 bars ( relation de 3 fois pour image )
 

PieM

Senior Member
Vu la réponse du capteur:

entre 0 et 200 bars, la variation de tension est de 1.94 - 0.5 soit 1.44V d'où une variation de 73 pour le readadc (donc pour 600kg)
Avec un readadc simple, la résolution de la mesure est donc de 600/73 soit 8.2 kg.
Avec readadc10 on descend à 2 kg.

Penser à mettre un condensateur de qq µF sur l'entrée ana. ça favorise la mesure et ça filtre les variation brutales liées aux déplacements.
 

JRTEC

Senior Member
Vu la réponse du capteur:


Avec un readadc simple, la résolution de la mesure est donc de 600/73 soit 8.2 kg.
Avec readadc10 on descend à 2 kg.
Bonsoir et merci de vos reponses

concernant ce readadc10 , il faut que je le mette partout ?

Code:
;
 		
 		readadc 10 5, word calk  ; lecture eproom xkg calibrage
 			goto cal		; aller au chapitre cal
 		endif
mais sous cette formule , la simulation plante
 

JRTEC

Senior Member
ce serait plutot :

...
readadc10 5,calk ; lecture eproom xkg calibrage
...

la en simulation ca marche
 

JRTEC

Senior Member
comme cela , cela vous semble bien ?

Code:
; Peson electronique
; JR 08/12/13

;Configuration câblage:  
'       	 +V   1-v-14   0V
'       	C.5   2   13   B.0 vers DIN (DATA IN) du 7219
'	 	C.4   3   12   B.1 vers LOAD du 7219
'	  	C.3   4   11   B.2 vers CLK du 7219
'	  	C.2	5   10   B.3 CAPTEUR DE PRESSION
'poussoir + C.1	6   9    B.4 poussoir TARE
'poussoir -	C.0	7___8	   B.5 poussoir CALIBRAGE





;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|


    #picaxe14M2
    setfreq m32
;********** Nom des broches ******************    
    symbol        DIN     = B.0      ;Entrée Data In de l'afficheur
    symbol        LOAD    = B.1      ;Entrée Load de l'afficheur
    symbol        CLK     = B.2      ;Entrée CLK de l'afficheur
    symbol        cap     = B.3      ;mesure capteur de pression
    symbol        tare    =pinB.4    ;Bouton poussoir TARE appuyé 1 relache 0
    symbol        calib   =pinB.5    ;Bouton poussoir CALIBRAGE appuyé 1 relache 0
    symbol        moins   =pinC.0    ;Bouton poussoir MOINS appuyé 1 relache 0
    symbol        plus    =pinC.1    ;Bouton poussoir PLUS appuyé 1 relache 0   
;********** Nom des variables bytes (1 octet)   
	symbol      LEN     = 1       ;durée impulsion 1ms
      symbol    cpt     = b2        ;compteur
	symbol unit=b3		;b3    unité
	symbol dixa=b4		;b4    dizaine
	symbol cent=b5		;b5    centaine
	symbol mill=b6		;b6    milier
	
         
;********** Nom des variables word (2 octets)       
    symbol mesn  = w6    ; valeur net de la tension lue 
    symbol plagv = w7 ;valeur de la plage de tension de mesure
    symbol mesk  = w8 ;valeur en kg au moment de la mesure present
    symbol tarv  = w9 ; valeur de la tension du capteur en volt au momment de la tare donc poids egal 0 kg
    symbol calv  = w10 ;valeur de la tension du capteur en volt au momment du calibrage
    symbol calk  = w11 ;valeur en kg au momment du calibrage
    symbol mesv  = w12 ;valeur de la tension du capteur a momment de la mesure presente
    symbol regis =w13    ;=(b27,b26) chaque bit sera envoyé dans le registre

     
             
    
    
;****************************************       
    low DIN
    low LOAD
    low CLK   
     
;******** initialisation 7219 *******
    b27=$09  'mode décodage
    b26=%11101111  'code B tous digits
    gosub shiftt
 
      b27=$0b  'limite scanner = Nbre de digits
      b26=$04  '$04=5 digits ,$03=4 digits,, etc...
      gosub shiftt

      b27=$0c  'shutdown mode
      b26=$01  '=normal (afficheur actif)
      gosub shiftt      

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

 
 ;*****selection type affichage******
 
 	if calib=1 then		; si le bouton calibrage est appuyé
 		pause 3000		; pendant 3 secondes
 		if calib=1 then		; si le bouton calibrage est appuye 
 		
 		readadc10 5,calk  ; lecture eproom xkg calibrage
 			goto cal		; aller au chapitre cal
 		endif	
 	endif 
 
 	if tare=1 then		; si le bouton tare est appuye 
 		pause 3000 		; pendant 3 secondes 	
 		if tare=1 then 		; si le bouton tare est appuye
 			goto tar 		; aller au chapitre tar
 		endif 		
 	endif
 		 	
 	goto mesu		; sinon aller a mesure	
 	
 	
; ****** tare ******

tar:
	readadc10 5,tarv	; lecture de la valeur en volt du capteur
				; memorisation de la valeur en volt du capteur de la tare
				
	b27=1             ;digit unite 
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage
      b27=2			;affichage 4°digit
      b26=0       	;affichage 0
      gosub shiftt      ;affichage
      b27=3             ;affichage 3°digit 
      b26=0	    	;affichage d un espace
      gosub shiftt      ;affichage
      b27=4			;affichage 2°digit
      b26=0    	;affichage d un r
      gosub shiftt      ;affichage    				
	b27=5
    	b26=%00001111    	; affichage 1°digitt = seg A,D,E,F on= % 00001111			
	gosub shiftt	; affiche du premier digit " t " pour indique la tare 
				; affichage de la valeur 0 kg
	write 1, word tarv ;memorisation de la tension de la tare

	goto debut		; retourner au debut du programme
	 
 
; ****** cal *****

cal:
	readadc10 5 ,calv	; lecture de la valeur en volt du capteur  
				; memorisation de la valeur en volt du capteur du calibrage
				
				
	write 3, word calv ;memorisation de la tension du calibrage			
				
 		if plus=1 then 	; si le bouton plus est appuyé
  			pause 1000		; anti rebond
 			calk=calk+10 	; ajouter 10 kg a la valeur indique
 			
 						; memorisation de la valeur de calibrage en kg
 			
 		endif
 	
 	
 		if moins=1 then		; si le bouton plus est appuyé
 			pause 1000		; anti rebond
 			calk=calk-10 	; enlever 10 kg a la valeur indique
 						; memorisation de la valeur de calibrage en kg
 						
 		endif				
 	write 5, word calk ;memorisation de la valeur du calibrage
 				
 	bintoascii calk,mill,mill,cent,dixa,unit    ;décomposition en digit
           
                
      b27=1             ;digit unite
      b26=0        	;affichage 0 car valeur arrondie a 10 kg pres pour unite
      gosub shiftt      ;affichage
      b27=2			;affichage dizaine
      b26=dixa-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=cent-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=mill-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=5
      b26=%01001110     ;C = seg A,D,E,F on= % 01001110 
      gosub shiftt	; affiche du premier digit " C " pour indique le calibrage 
				; affichage de la valeur x kg			
 				
 		
 
 		if tare=1 then		; si le bouton tare est appuye 		
 			goto cal		; retourner au menu calibrage
 		endif	
 	
 	
	goto debut		; retourner au debut du programme
	
; **** mesu *****

mesu:
	read 1, word tarv  ; lecture eproom tension tare
	read 3, word calv  ; lecture eproom tension calibrage 
	read 5, word calk  ; lecture eproom tension calibrage
	
	

	plagv=calv-tarv	; determination de la plage de mesure 
	
	calk= calk/10	; division pas 10 pour rester dans la limite
	readadc cap ,mesv	; lecture de la valeur en volt du capteur  
				; memorisation de la valeur en volt du capteur
	
	mesn=mesv-tarv ;deternination de la value de tension lue moins la valeur de tare
	mesk=calk*mesn/plagv*10 ; determination de la valeur en kg selon la tension lue 
		
		if tarv>mesv then
		 mesk=0
		endif
		
				
	bintoascii mesk,mill,mill,cent,dixa,unit    ;décomposition en digit
           
                
      b27=1             ;digit unite
      b26=0        	;affichage 0 car valeur arrondie a 10 kg pres pour unite
      gosub shiftt      ;affichage
      b27=2			;affichage dizaine
      b26=dixa-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=cent-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=mill-48		;ascii -> numérique
      gosub shiftt      ;affichage			
	b27=5
    	b26=%01100111    	;P = ,affichage du premier digit " P" pour le terme pesée
   	gosub shiftt			; 
				; affichage de la valeur " mesk "
				
				
goto debut	
	
 
 
 
;******** Sous programme affichage *************************
  ;Format du registre sur 16 bits:

;|------------------------------regis----------------------------|                                                               |
;|-----------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
        mesv=regis & $8000        ;regis = b27,b26 & %1000 0000 0000 0000: on ne garde que le 1er bit à gauche de w12   
        low DIN                ; broche DIN à 0 à priori
        if mesv=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
        regis=regis*2              ; on décale regis 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
 

PieM

Senior Member
comme cela , cela vous semble bien ?
Ben pas trop non ... :)
ligne 95 : readadc10 5,calk ; lecture eproom xkg calibrage
ça c'est une lecture de l'entrée ana, pas de l'eeprom

d'autre part, comme je le disais dans un post précédent il faut une cohérence dans les calculs:
le besoin en résolution est la 10zaine de kg.
mais dans les calculs vous raisonnez en kg et parfois vous revenez à des 10 kg pour la même variable ! (calk)

Vous mesurez une valeur ana qui s'exprime par un nombre qui n'est ni des kg ni des volts.
Ce nombre n'est relié à des kg qu'au moment de l'affichage. Donc faites tous vos calculs avec ces nombres.
calk , tarv, mesk restent ainsi des variable type byte.
Cela vous évitera de risquer des dépassement de capacité dans le calcul de mesk.
Car faire des calculs sur 32 bits n'est sans doute pas la meilleure solution.

Vous pourriez mettre tout ce bloc en sous programme aussi :

Code:
      b27=1             ;digit unite
      b26=0        	;affichage 0 car valeur arrondie a 10 kg pres pour unite
      gosub shiftt      ;affichage
      b27=2			;affichage dizaine
      b26=dixa-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=cent-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=mill-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=5
      b26=%01001110     ;C = seg A,D,E,F on= % 01001110 
      gosub shiftt	; affiche du premier digit " C " pour indique le calibrage 
				; affichage de la valeur x kg
PS: Vous êtes sûr des pressions de l'ordre de 300 bars sur l'attelage du tracteur ? sur des engins de TP, 400 bars, oui, mais me semblait que les pressions max étaient plus faibles sur des tracteurs.
Cela est important pour l'étendue de mesure en analogique...

D'autre part, votre programme permet de modifier la tare, sans refaire d'étalonnage (calibrage) ... c'est normal ?
 
Last edited:

JRTEC

Senior Member
Bonsoir

je reviens vers a ce sujet , malgres que j ai du laissse tomber pendant quelques temps pour des questions privés

j ai 2 programmes

1 en lecture normal du capteur de pression
l autre avec les readadc10

ce qui est etonnat , le premiere marche bien sauf que la plage de lecture est tres petite ( exemple pression 150 a vide et 180 avec 600 kg ) et je voulais mettre le readadc10 mais celui ci refuse la fonction calibrage et je ne comprend pas pourquoi

Pourriez vous s il vous plait me donner votre avis ?

View attachment peson picaxe jr v11 readadc10.bas
View attachment peson picaxe jr v11.bas
 

BESQUEUT

Senior Member
readadc cap ,tarv
est-il équivalent à
readadc10 5 ,tarv

?
Tout le reste est identique ; donc, si l'un marche, l'autre doit marcher aussi.
 

PieM

Senior Member
(Re)lire ce que j'ai écrit en #77

Vous confondez les read avec les readadc et readadc10
read est pour une lecture en EEPROM
readadc lit une valeur sur une entrée ana.

Donc ligne 95, le readadc10 5,calk n'a pas de sens.

Et ensuite lire de l'ana avec readadc10 5,calk n'a pas plus de sens car l'entrée capteur est B.3 et non 5 !


Je persiste, mais vous risquez d'avoir des problème de dépassement donc des erreurs, lors de vos calculs avec des variable word.
 
Top