peson electronique base picaxe et max 7219

JRTEC

Senior Member
Bonjour

suite a ce message sur ce forum:
http://www.picaxeforum.co.uk/showthread.php?24499-picaxe-et-afficheur-segment
j essaye de realise un peson electronique qui en mesurant la valeur en volt d un capteur de pression hydraulique me permettra d afficger un poids en kg

Je me suis tres fortement inspirer du site de monsieur MM :
http://electromag1.wifeo.com/compteur-d-eau-et-affichage-sur-5-digits-max7219-dig.php

mais etant lon de ses competences bien sur je cale sur l affichage ( je n arrive pas a digerer ce language ) et calle sur l histoire des variables

du coup j ai realise un plan electrique de mon montage ( rien de fait symplement un schema )

et attaquer un debut de programme qui bug deja : dans ce programme a la fin vous retrouver le programme de monsieur MM car je m en suis servi de base

pourriez vous s il vous plait m en expliquer un peu ??

par avance merci pour votre aide
 

Attachments

MGU

Senior Member
Bonjour

suite a ce message sur ce forum:
http://www.picaxeforum.co.uk/showthread.php?24499-picaxe-et-afficheur-segment
j essaye de realise un peson electronique qui en mesurant la valeur en volt d un capteur de pression hydraulique me permettra d afficger un poids en kg

Je me suis tres fortement inspirer du site de monsieur MM :
http://electromag1.wifeo.com/compteur-d-eau-et-affichage-sur-5-digits-max7219-dig.php

mais etant lon de ses competences bien sur je cale sur l affichage ( je n arrive pas a digerer ce language ) et calle sur l histoire des variables

du coup j ai realise un plan electrique de mon montage ( rien de fait symplement un schema )

et attaquer un debut de programme qui bug deja : dans ce programme a la fin vous retrouver le programme de monsieur MM car je m en suis servi de base

pourriez vous s il vous plait m en expliquer un peu ??

par avance merci pour votre aide
Bonjour,

Je te rassure tout de suite, si le code ne fonctionne pas, c'est tout à fait normal;

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     = B.4    ;Bouton poussoir TARE appuyé 1 relache 0
    symbol        calib    = B.5    ;Bouton poussoir CALIBRAGE appuyé 1 relache 0
    symbol        moins    = C.0    ;Bouton poussoir MOINS appuyé 1 relache 0
    symbol        plus     = C.1    ;Bouton poussoir PLUS appuyé 1 relache 0   
;********** Nom des variables bytes (1 octet)   
    
    
    
;********** Nom des variables word (2 octets)       
    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 mesk = w14 ;valeur en kg au moment de la mesure present 
    symbol plagv = w15 ;valeur de la plage de tension de mesure         
    
    
;****************************************       
    low DIN
    low LOAD
    low CLK   
     
;******** initialisation 7219 *******
    b27=$09  'mode décodage
    b26=%11111111  '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=$04  '=croissante de 0 à 15, ici c'est 4
      gosub shiftt
      
      b27=$0f  'display test
      b26=$00  '=normal
      gosub shiftt
 
 
 
 Debut

 
 ;*****selection type affichage******
 
 
 
 	if tare=1 		; si le bouton tare est appuye 
 	wait 2000		; pendant 2 secondes
 	if tare=1 		; si le bouton tare est appuye
 	gosub tar 		; aller au chapitre tar
 	
 	if calib=1		; si le bouton calibrage est appuyé
 	wait 2000		; pendant 2 secondes
 	if calib=1 		; si le bouton calibrage est appuye 
 	gosub cal		; aller au chapitre cal
 	
 	endif 
 	gosub mesu		; sinon aller a mesure
 	
 	
 	
 	
; ****** sub tare ******

tar
	readadc cap 	; lecture de la valeur en volt du capteur
	write tarv		; memorisation de la valeur en volt du capteur de la tare
				; affiche du premier digit " t " pour indique la tare 
				; affichage de la valeur 0 kg
	endif 
	gosub debut		; retourner au debut du programme
	 
 
; ****** sub cal *****

cal
	readadc cap 	; lecture de la valeur en volt du capteur  
	write calv		; memorisation de la valeur en volt du capteur du calibrage
				; affiche du premier digit " C " pour indique la tare 
				; affichage de la valeur x kg
				
 	if plus=1		; si le bouton plus est appuyé
 	calk + 10 =calk	; ajouter 10 kg a la valeur indique
 	wait 1000		; attendre une seconde
 	write calk		; memorisation de la valeur de calibrage en kg
 	gosub cal		; retourner au menu calibrage
 	
 	
 	if moins=1		; si le bouton plus est appuyé
 	calk + 10 =calk	; ajouter 10 kg a la valeur indique
 	wait 1000		; attendre une seconde
 	write calk		; memorisation de la valeur de calibrage en kg
 	gosub cal		; retourner au menu calibrage
 	
 	endif 
	gosub debut		; retourner au debut du programme
	
; **** sub mesu *****

mesu

	plagv=calv-tarv	; determination de la plage de mesure 
	write plagv		
	
	readadc cap 	; lecture de la valeur en volt du capteur  
	write mesv		; memorisation de la valeur en volt du capteur
	
	mesk=calk*mesv/plagv; determination de la valeur en kg selon la tension lue 
				; affichage du premier digit " P" pour le pterme pesée
				; affichage de la valeur " mesk "
Pour que le code soit lu, il faut le placer entre les balises "code" disponibles en "mode avancé" en bas à droite.

Et pour qu'il fonctionne, il faut lire la doc traduite en français et reprendre quelques fondamentaux:
******************************
Les labels se terminent par ":"

GOTO toto

toto:​
*****************
revoir la syntaxe du "If , then, else" dans la doc

**********************************
Sur la série M2, il y a 28 variables de base (type byte) de un octet de b0 à b27
Les variables de type word (2 octets) regroupent deux bytes de w0 (b0,b1) à w13 (b26,b27). La dernière est donc w13.

**********************************************
L'appel des sous programmes se fait par un gosub, le sous programme se termine logiquement par un return
Ex

gosub toto

toto:
return

Le return renvoie à la ligne qui suit le gosub

****************************************
Suivant le bon enseignement de PieM,
C.2 désigne la broche, mais pour tester la valeur de cette broche, il faut écrire:
symbol valeur= pinC.2

Voilà pour les premières remarques.
J'attends la seconde mouture

MM
 

BESQUEUT

Senior Member
Grilled by MGU

et attaquer un debut de programme qui bug deja :
Si j'ai bien compris, ça bug déjà en simulation...
(Et effectivement w14 n'existe pas sur un PICAXE 14M2, il faut mettre ":" après les labels, il faut ajuster les IF avec les ENDIF,...)

Peut-être trouveriez-vous quelques avantages à lire, et même à tester en pratique les bases contenues dans :
Manuel pour débutants
 

JRTEC

Senior Member
Re bonsoir

ok j ai compris beaucoup de chose

merci de votre aide , mais cela fais pres de 1 an que je n ai pas toucher a des Picaxes

par contre maintenant je plante toujours sur la correction de a valeur en kg de calibrage ( le + 10 kg ) et la je n ai pas trouver de reponse dans le manuel en francais

je vais repasser les manuels en anglais

petites questions :

* j ai privilegiéutilise des variable word plutot que variables bytes , mais cela ne sera t il pas un probleme lors de l envoi du message au max 7219 ?
* les " endifs " sont ils obligatoires , ? le programme tourne sans

bonne soiree
 

Attachments

MGU

Senior Member
balises.jpg

Et le mode "avancé", c'est en bas , a droite

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)   
    
    
    
;********** Nom des variables word (2 octets)       
    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 mesk = w8 ;valeur en kg au moment de la mesure present 
    symbol plagv = w7 ;valeur de la plage de tension de mesure         
    
    
;****************************************       
    low DIN
    low LOAD
    low CLK   
     
;******** initialisation 7219 *******
    b27=$09  'mode décodage
    b26=%11111111  '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=$04  '=croissante de 0 à 15, ici c'est 4
      gosub shiftt
      
      b27=$0f  'display test
      b26=$00  '=normal
      gosub shiftt
 
 
 
 Debut:

 
 ;*****selection type affichage******
 
 
 
 	if tare=1 then		; si le bouton tare est appuye 
 	pause 1000 		; pendant 1 secondes
 	if tare=1 then 		; si le bouton tare est appuye
 	goto tar 		; aller au chapitre tar
 	
 	if calib=1 then		; si le bouton calibrage est appuyé
 	pause 1000		; pendant 1 secondes
 	if calib=1 then		; si le bouton calibrage est appuye 
 	goto cal		; aller au chapitre cal
 	
 	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
				; affiche du premier digit " t " pour indique la tare 
				; affichage de la valeur 0 kg
	endif 
	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
				; affiche du premier digit " C " pour indique la tare 
				; affichage de la valeur x kg
				
 	if plus=1 then 	; si le bouton plus est appuyé
 	wait 10		; anti rebond
 	calk+10=calk	; ajouter 10 kg a la valeur indique
 	wait 1000 then		; attendre une seconde
 	write calk		; memorisation de la valeur de calibrage en kg
 	goto cal		; retourner au menu calibrage
 	
 	
 	if moins=1		; si le bouton plus est appuyé
 	calk + 10 =calk	; ajouter 10 kg a la valeur indique
 	wait 1000		; attendre une seconde
 	write calk		; memorisation de la valeur de calibrage en kg
 	goto cal		; retourner au menu calibrage
 	
 	endif 
	goto debut		; retourner au debut du programme
	
; **** mesu *****

mesu:

	plagv=calv-tarv	; determination de la plage de mesure 
	write plagv		
	
	readadc cap 	; lecture de la valeur en volt du capteur  
	write mesv		; memorisation de la valeur en volt du capteur
	
	mesk=calk*mesv/plagv; determination de la valeur en kg selon la tension lue 
				; affichage du premier digit " P" pour le pterme pesée
				; affichage de la valeur " mesk "
En basic, le signe = a un sens
variable = valeur
toto=toto+1
L'inverse ne fonctionne pas

A suivre

MM
 
Last edited:

JRTEC

Senior Member
tout d abord merci pour vos precieux conseils

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)   
    
    
    
;********** Nom des variables word (2 octets)       
    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 mesk = w8 ;valeur en kg au moment de la mesure present 
    symbol plagv = w7 ;valeur de la plage de tension de mesure         
    
    
;****************************************       
    low DIN
    low LOAD
    low CLK   
     
;******** initialisation 7219 *******
    b27=$09  'mode décodage
    b26=%11111111  '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=$04  '=croissante de 0 à 15, ici c'est 4
      gosub shiftt
      
      b27=$0f  'display test
      b26=$00  '=normal
      gosub shiftt
 
 
 
 Debut:

 
 ;*****selection type affichage******
 
 
 
 	if tare=1 then		; si le bouton tare est appuye 
 	pause 1000 		; pendant 1 secondes
 	if tare=1 then 		; si le bouton tare est appuye
 	goto tar 		; aller au chapitre tar
 	
 	if calib=1 then		; si le bouton calibrage est appuyé
 	pause 1000		; pendant 1 secondes
 	if calib=1 then		; si le bouton calibrage est appuye 
 	goto cal		; aller au chapitre cal
 	
 	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
				; affiche du premier digit " t " pour indique la tare 
				; affichage de la valeur 0 kg
	endif 
	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
				; affiche du premier digit " C " pour indique la tare 
				; affichage de la valeur x kg
				
 	if plus=1 then 	; si le bouton plus est appuyé
 	wait 10		; anti rebond
 	calk=calk+10 	; ajouter 10 kg a la valeur indique
 	pause 1000 		; attendre une seconde
 				; memorisation de la valeur de calibrage en kg
 	goto cal		; retourner au menu calibrage
 	
 	
 	if moins=1 then		; si le bouton plus est appuyé
 	calk=calk+10 	; ajouter 10 kg a la valeur indique
 	pause 1000		; attendre une seconde
 				; memorisation de la valeur de calibrage en kg
 	goto cal		; retourner au menu calibrage
 	
 	endif 
	goto debut		; retourner au debut du programme
	
; **** mesu *****

mesu:

	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
	
	mesk=calk*mesv/plagv; determination de la valeur en kg selon la tension lue 
				; affichage du premier digit " P" pour le pterme pesée
				; affichage de la valeur " mesk "
Voila pour le programme de base

mais reste tout l affichage a gerer
 

MGU

Senior Member
Bonsoir,

Faut pas confondre wait et pause
wait est en seconde, pause en milliseconde
wait 10, pour un antirebond...c'est beaucoup

Principe d'affichage d'un nombre sur MAX 7219

- décomposer le nombre en chiffre, un chiffre par digit de l'afficheur. J'utilise bintoascii
- mais bintoascii donne la correspondance dans la table ascii cad 1 donne 49 etc
- il faut donc soustraire 48 pour retrouver le nombre original
- chaque chiffre doit être envoyer dans le digit correspondant
j'utilise les bytes b27 et b26 donc W13 doit être libre.

Pour envoyer 3 dans le digit 1, il faut écrire:

b27=1
b26=3
gosub shiftt

shiftt est le sous programme d'affichage. il faut le recopié sur programme d'exemple de cette page:

http://electromag1.wifeo.com/afficheurs-led-pilotes-par-max7219.php

A suivre

MM
 

JRTEC

Senior Member
bonsoir

merci pour votre aide

Bon , et bien meme pour les copier coller je ne suis pas bon !!!

j ai a peu pres tout essayé , mais le programmeplante au moment de la conversion " bintoasii" et je ne vois pas pourquoi :

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    temp    = b1    ;lecture température    
      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 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=%11111111  '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=$04  '=croissante de 0 à 15, ici c'est 4
      gosub shiftt
      
      b27=$0f  'display test
      b26=$00  '=normal
      gosub shiftt
 
 
 
 Debut:

 
 ;*****selection type affichage******
 
 
 
 	if tare=1 then		; si le bouton tare est appuye 
 	pause 2000 		; pendant 2 secondes
 	if tare=1 then 		; si le bouton tare est appuye
 	goto tar 		; aller au chapitre tar
 	
 	if calib=1 then		; si le bouton calibrage est appuyé
 	pause 1000		; pendant 1 secondes
 	if calib=1 then		; si le bouton calibrage est appuye 
 	goto cal		; aller au chapitre cal
 	
 	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 dizaine
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage
      b27=4		 	;affichage millier
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage     				
	b27=5
    	b26=%00001111    	; t = seg A,D,E,F on= % 00001111			
	gosub shiftt			; affiche du premier digit " t " pour indique la tare 
				; affichage de la valeur 0 kg
	endif 
	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
				
				
	
				
 	if plus=1 then 	; si le bouton plus est appuyé
 	wait 10		; anti rebond
 	calk=calk+10 	; ajouter 10 kg a la valeur indique
 	pause 1000 		; attendre une seconde
 				; memorisation de la valeur de calibrage en kg
 	goto cal		; retourner au menu calibrage
 	
 	
 	if moins=1 then		; si le bouton plus est appuyé
 	calk=calk+10 	; ajouter 10 kg a la valeur indique
 	pause 1000		; attendre une seconde
 				; memorisation de la valeur de calibrage en kg
 				
 	bintoascii calk,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub6shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-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
			
 				
 				
 	goto cal		; retourner au menu calibrage
 	
 	endif 
	goto debut		; retourner au debut du programme
	
; **** mesu *****

mesu:

	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
	
	mesk=calk*mesv/plagv; determination de la valeur en kg selon la tension lue 
				
	bintoascii mesk, b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub6shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-48		;ascii -> numérique
      gosub shiftt      ;affichage			
	b27=1
    	b26=%01100111    	;P = seg A,B,E,F,g on= % 01100111 ,affichage du premier digit " P" pour le pterme pesée
   	gosub shiftt			; 
				; affichage de la valeur " mesk "
				
				
	
	
 
 
 
;******** 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
et la je ne vois

de plus j ai un doute sur ma boucle au moment du calibrage
 

MGU

Senior Member
bonsoir

merci pour votre aide

Bon , et bien meme pour les copier coller je ne suis pas bon !!!

j ai a peu pres tout essayé , mais le programmeplante au moment de la conversion " bintoasii" et je ne vois pas pourquoi :

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    temp    = b1    ;lecture température    
      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 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=%11111111  '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=$04  '=croissante de 0 à 15, ici c'est 4
      gosub shiftt
      
      b27=$0f  'display test
      b26=$00  '=normal
      gosub shiftt
 
 
 
 Debut:

 
 ;*****selection type affichage******
 
 
 
 	if tare=1 then		; si le bouton tare est appuye 
 	pause 2000 		; pendant 2 secondes
 	if tare=1 then 		; si le bouton tare est appuye
 	goto tar 		; aller au chapitre tar
 	
 	if calib=1 then		; si le bouton calibrage est appuyé
 	pause 1000		; pendant 1 secondes
 	if calib=1 then		; si le bouton calibrage est appuye 
 	goto cal		; aller au chapitre cal
 	
 	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 dizaine
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage
      b27=4		 	;affichage millier
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage     				
	b27=5
    	b26=%00001111    	; t = seg A,D,E,F on= % 00001111			
	gosub shiftt			; affiche du premier digit " t " pour indique la tare 
				; affichage de la valeur 0 kg
	endif 
	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
				
				
	
				
 	if plus=1 then 	; si le bouton plus est appuyé
 	wait 10		; anti rebond
 	calk=calk+10 	; ajouter 10 kg a la valeur indique
 	pause 1000 		; attendre une seconde
 				; memorisation de la valeur de calibrage en kg
 	goto cal		; retourner au menu calibrage
 	
 	
 	if moins=1 then		; si le bouton plus est appuyé
 	calk=calk+10 	; ajouter 10 kg a la valeur indique
 	pause 1000		; attendre une seconde
 				; memorisation de la valeur de calibrage en kg
 				
 	bintoascii calk,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub6shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-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
			
 				
 				
 	goto cal		; retourner au menu calibrage
 	
 	endif 
	goto debut		; retourner au debut du programme
	
; **** mesu *****

mesu:

	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
	
	mesk=calk*mesv/plagv; determination de la valeur en kg selon la tension lue 
				
	bintoascii mesk, b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub6shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-48		;ascii -> numérique
      gosub shiftt      ;affichage			
	b27=1
    	b26=%01100111    	;P = seg A,B,E,F,g on= % 01100111 ,affichage du premier digit " P" pour le pterme pesée
   	gosub shiftt			; 
				; affichage de la valeur " mesk "
				
				
	
	
 
 
 
;******** 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
et la je ne vois

de plus j ai un doute sur ma boucle au moment du calibrage

Bonjour,

Si bintoascii décompose une variable de type byte (ex b1), il a besoin de 3 arguments pour la décomposition b2,b3,b4
bintoascii b1,b2,b3,b4
Si il décompose une variable word , il a besoin de 5 arguments puisque le nombre max possible est 65535, même si en réalité ce nombre ne dépasse pas 4 chiffres.
Dans ce cas, pour éviter de gâcher une variable, on peut écrire :
bintoascii w1, b5,b5,b4,b3,b2
J'ai testé, ça fonctionne.

Utilise l'indentation pour mieux visualiser ce qui est concerné par le "if" , et place les "end if " au bon endroit.

Attention, w12 est aussi utilisé dans le sous programme d'écriture.

remplace wait 10 par pause 10

A suivre

MM
 

JRTEC

Senior Member
encore merci j ai fait cela et ca tourne

mais bizarrement dans la simulation pas de reaction side change les valeurs des boutons

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    temp    = b1    ;lecture température    
      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 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=%11111111  '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=$04  '=croissante de 0 à 15, ici c'est 4
      gosub shiftt
      
      b27=$0f  'display test
      b26=$00  '=normal
      gosub shiftt
 
 
 
 Debut:

 
 ;*****selection type affichage******
 
 
 
 	if tare=1 then		; si le bouton tare est appuye 
 		pause 2000 		; pendant 2 secondes
 	
 		if tare=1 then 		; si le bouton tare est appuye
 		goto tar 		; aller au chapitre tar
 		endif
 		
 	if calib=1 then		; si le bouton calibrage est appuyé
 		pause 1000		; pendant 1 secondes
 		if calib=1 then		; si le bouton calibrage est appuye 
 		goto cal		; aller au chapitre cal
 	
 		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 dizaine
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage
      b27=4		 	;affichage millier
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage     				
	b27=5
    	b26=%00001111    	; t = seg A,D,E,F on= % 00001111			
	gosub shiftt			; affiche du premier digit " t " pour indique la tare 
				; affichage de la valeur 0 kg
	endif 
	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
				
				
	
				
 		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
 			goto cal		; retourner au menu calibrage
 		endif
 	
 	
 		if moins=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
 			goto cal		; retourner au menu calibrage			
 		endif				
 				
 	bintoascii w8,b6,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-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
			
 				
 				
 		goto cal		; retourner au menu calibrage
 	
 		endif 
	goto debut		; retourner au debut du programme
	
; **** mesu *****

mesu:

	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
	
	mesk=calk*mesv/plagv; determination de la valeur en kg selon la tension lue 
				
	bintoascii w8,b6,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-48		;ascii -> numérique
      gosub shiftt      ;affichage			
	b27=1
    	b26=%01100111    	;P = seg A,B,E,F,g on= % 01100111 ,affichage du premier digit " P" pour le pterme pesée
   	gosub shiftt			; 
				; affichage de la valeur " mesk "
				
				
	
	
 
 
 
;******** 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
 

MGU

Senior Member
Quand on met deux if en cascade, il faut faire attention aux endif pour terminer chaque if
J'ai fait des modifs , regarde si c'est mieux.
Ne pas oublier les goto pour éviter les mélanges, j'en ai ajouté un avant la sub shuftt:

A suive

MM

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    temp    = b1    ;lecture température    
      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 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=%11111111  '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=$04  '=croissante de 0 à 15, ici c'est 4
      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 1000		; pendant 1 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 2000 		; pendant 2 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 dizaine
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage
      b27=4		 	;affichage millier
      b26=0        	;affichage 0 car calibrage donc 0 kg
      gosub shiftt      ;affichage     				
	b27=5
    	b26=%00001111    	; t = seg A,D,E,F on= % 00001111			
	gosub shiftt			; affiche du premier digit " t " pour indique la tare 
				; affichage de la valeur 0 kg

	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
				
				
 		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
 			goto cal		; retourner au menu calibrage
 		endif
 	
 	
 		if moins=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
 			goto cal		; retourner au menu calibrage			
 		endif				
 				
 	bintoascii w8,b6,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-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			
 				
 				
 		goto cal		; retourner au menu calibrage
 	
 	
	goto debut		; retourner au debut du programme
	
; **** mesu *****

mesu:

	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
	
	mesk=calk*mesv/plagv; determination de la valeur en kg selon la tension lue 
				
	bintoascii w8,b6,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-48		;ascii -> numérique
      gosub shiftt      ;affichage			
	b27=1
    	b26=%01100111    	;P = seg A,B,E,F,g on= % 01100111 ,affichage du premier digit " P" pour le pterme pesée
   	gosub shiftt			; 
				; affichage de la valeur " mesk "
				
				
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
 

MGU

Senior Member
Un truc encore:
Dans l'initialisation, le digit 5 est défini en mode "code B" et dans le programme, il est programmé en segments pour "t" et "C". Faut modifier l'initialisation (voir ex thermomètre sur le site).

MM
 

JRTEC

Senior Member
vue connextion digit max 7219.JPGbonjour

je vais relise le circuit pour un test en grandeur nature
part contre mes afficheur digit sont legerement diffeerent au niveau du reperage vis a vis des votre

j ai pris une photo sur laquelle j ai indique ce que je pense au niveau du reperage des sorties

pourriez vous me dire si vous etes du mee avis que moi ?
 

jojojo

Senior Member
Comme les autres, je suis tout disposé a aider.
Mais :

je vais relise le circuit pour un test en grandeur nature
part contre mes afficheur digit sont legerement diffeerent au niveau du reperage vis a vis des votre
j ai pris une photo sur laquelle j ai indique ce que je pense au niveau du reperage des sorties
pourriez vous me dire si vous etes du mee avis que moi ?


Il serait bien, de relire et corriger, avant de poster. Merci.
 

MGU

Senior Member
Comme les autres, je suis tout disposé a aider.
Mais :

je vais relise le circuit pour un test en grandeur nature
part contre mes afficheur digit sont legerement diffeerent au niveau du reperage vis a vis des votre
j ai pris une photo sur laquelle j ai indique ce que je pense au niveau du reperage des sorties
pourriez vous me dire si vous etes du mee avis que moi ?


Il serait bien, de relire et corriger, avant de poster. Merci.
On peut mettre l'éditeur en français, tout en bas à gauche, ça aide.
Pour le repérage, je pense que c'est bon. Parfois, les digits sont numérotés différemment, le n°1 est à gauche ou à droite (j'ai un 4 et un 5 digits dans ce cas).

MM
 

jojojo

Senior Member
On peut mettre l'éditeur en français, tout en bas à gauche, ça aide.

Oui. Désolé, mais ... Parfois, ça fatigue.
 

JRTEC

Senior Member
Bonsoir

je vous remercie pour les reponses

Pour le jalonnage , j ai personnellement pas concu grand chose , c est surtout le travail de monsieur MGU

Quelques soucis personnels me perturbent

Je vous de bien vouloir m excuser si mes "posts" ne sont pas a la hauteurs du forum

J essaye de me changer un peu les idees en venant ici

bonne soiree a vous tous
 

jojojo

Senior Member
Vrai.
Méchant, le dimance je suis. Na !

Mais, je suppose que je ne dispose pas de tout le contexte, hein ?

Pas grave.
 

JRTEC

Senior Member
Bonjour

je suis en train de realise le montage , mais j ai besoin d un petit coup de pouce s il vous plait

Au niveau de l alimentation , j ai indique sur la sortie 5 v un condensateur de 100 nF

mais dans mon stock de composants , j ai des condensateurs marques "10 n J63" ( je presume 10 nF ) et des condensateurs marque "1n0K 63" mais la je presume que c est 1 nF mais je n en suis pas sur, pouvez vous m aider ?

maintenant a la place du 100nF si je mets un 10Nf , quelles sont les consequences ?

par avance merci
 

PieM

Senior Member
maintenant a la place du 100nF si je mets un 10Nf , quelles sont les consequences ?
Aucune grave à priori , mais à n'en mettre qu'un de faible valeur, il serait préférable de le mettre aux bornes V+ et 0V du Picaxe.
 

MGU

Senior Member
mais dans mon stock de composants , j ai des condensateurs marques "10 n J63" ( je presume 10 nF ) et des condensateurs marque "1n0K 63" mais la je presume que c est 1 nF mais je n en suis pas sur, pouvez vous m aider ?

par avance merci
Bonjour,

Oui, c'est cela, le n de nano est à la place de la virgule, pour faire plus compacte, sans doute.
En général, il y a deux condensateurs de découplage (pour court circuiter les signaux parasites), un chimique (ex 220µF) et comme ces chimiques sont de mauvais court circuit aux fréquences élevées, on ajoute un 100nF au plus près du générateur de fréquences élevées, càd le µC. Comme l'a dit PieM, un 10nF, c'est mieux que rien.

Il est au point ce programme? En cas de problème, n&#8217;hésite pas à le montrer.

MM
 

JRTEC

Senior Member
Bonjour

merci pour vos reponses

J ai mis le 10 nF au bornes du picaxe

Consernant le programme ,je ne sais pas si il est a point ou bien si j ai une erreur dans mon montage , d ailleurs pourriez vous d indiquez comme vous realise la liaison entre les digit et le circuit imprime , perso je voulais realise cela a l aide de connestion mais j ai l impression que cela beug

a la mise sous tension j ai d afficher " . 5530" avec un cintillement du zero

si je presse le bouton tare , la j ai 4 zero qui apparaissent mais pas le T devant
si je presse le bouton cal , la j ai d ecrit " P000" et aucun changement que se soit en pressant le + ou le -

Si je coupe le contact et que je le remt je revient au " .5530"
si la je presse le cal j ai d ecrit " P5530" cet toujours aucune reaction en pressant le + et le -
et la si je presse le tare aucune reaction

Pour simuler mon capteur j ai mis un potentiometre, mais quelque soit le position de celui ci le 5530 est toujours la , je presume que cela est du a l absence du calibrage complet ( tare + calibrage )

il faut que je relise mon programme
 

JRTEC

Senior Member
Bonjour

merci pour vos reponses

J ai relu mon programme et j ai trouvé quelques erreurs

cependant je ne comprends pas tout dans le defaut de fonctionnement

je dirai meme que certains caracteres ne s affichent pas du moment qu ils sont sous format " %00110011" pas exemple , c est pour cela que parfois j ai insere des caractere connus du tableau ( exemple du H)


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 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=%11111111  '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 4
      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 1000		; pendant 1 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 2000 		; pendant 2 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=15       	;affichage d un espace
      gosub shiftt      ;affichage
      b27=3             ;affichage 3°digit 
      b26=%00000101    	;affichage r
      gosub shiftt      ;affichage
      b27=4			;affichage 2°digit
      b26=%01110111    	;affichage A 
      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

	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
				
				
 		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 	; ajouter 10 kg a la valeur indique
 						; memorisation de la valeur de calibrage en kg
 						
 		endif				
 				
 	bintoascii w8,b6,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=5
      b26=12     ;C = seg A,D,E,F on= % 01001110  ici 12 pour test H
      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:

	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
	
	mesk=calk*mesv/plagv; determination de la valeur en kg selon la tension lue 
				
	bintoascii w8,b6,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-48		;ascii -> numérique
      gosub shiftt      ;affichage			
	b27=5
    	b26=14    		;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:

;|------------------------------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
J ai l impression que les boucle de calibrage et de tare marchent

la correction de valeur ( +10 kg ou -10 kg ) elle, je suis moins sur car l affichage ne bouge pas


un fait : lorsque je presse le bouton tare je devrai obtenir " tAr 0" et j obtiens " 75 0" et la j avoue que je ne comprends pour quoi
un probleme entre les variables bytes et variables WORD ?

jrtec
 

MGU

Senior Member
Pour que le digit n° 5 (celui de gauche) soit codé par segments,il faut l'initialisation 7219/ mode décodage:
b27=$09
b26=%11101111
càd un 0 à la position désignant le digit 5 sinon, il va chercher dans la table "code B" (voir la page du site ou la doc du max7219).

(Je ne peux rien simuler en ce moment)

MM
 

JRTEC

Senior Member
Bonjour

quand on a a faire a des pro cela se voit !!

merci

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

	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
				
				
 		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				
 				
 	bintoascii w11,b6,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-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:

	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
	
	mesk=calk*mesv/plagv; determination de la valeur en kg selon la tension lue 
				
	bintoascii w8,b6,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-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:

;|------------------------------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
Avec ce programme beaucoup de choses marchent

2 ou 3 problemes encore ,

* Si je desire faire ecrire plusieurs caracteres speciaux , style "tAr 0" , j ai beau essaye dans tous les sens uniquement le t et le 0 appraissent , apres les 2° et 3° eux n en font qua leur tete et reste un 7 et un 5 pas grave j ai 2 zero a la place et cela marche ,si je mets des espaces "b26= 15" c est ok etrange non ?


* j ai l impression qu a la coupure de contact toutes ces valeur sont perdue et je n ai plus que a refaire le calibrage
dans le programme du jalonnage j ai retrouve cela :

symbol sauve=bit0 'Mémorisation sauvegarde
...
if sauve=0 then gosub SauveData 'sauvegarde si passé par affichage

Le but etait bien de sauvegarder des valeurs dans la memoire du picaxe pour eviter de les perdre en cas de coupure de contact non ?

une erreur dans le programme , lors du calibrage ,si je corrige le calibrage l indication de mesure ensuite mais je dirai proportionnellement

exemple , avec mon potentiometre , je donne une valeur de 0.2 v et dis que c est la tare soit 0 kg
je calibre en mettant le totentiometre a 4.8 v et dis que la c est 500 kg
au moment ou je relache le bouton si cela se trouve je vais avoir 300 kg d indiqué et la je ne comprend s pas pourquoi
 
Last edited:

MGU

Senior Member
Bonjour,

Pour pouvoir aider efficacement, il faudrait avoir une idée plus précise de la finalité de ce programme. De ce qui doit s'afficher, la sauvegarde des paramètres (il n'y en a aucune dans ce programme), etc

En attendant, joyeux noël.

MM
 

JRTEC

Senior Member
Bonsoir

La finalite de ce programme est d etre utilise comme un peson :un epandeur d engrais est attelé generalement sur un attelage 3 points sur un tracteur
ce systeme d attelage est aminé par un verin hydraulique

suivant la charge de produit dans l epandeur d engrais , la pression evolue dans le verin


distributeurs-d-engrais.jpg

ci dessus une image pour donner une idee

la tare se ferai epandeur vide ( exemple de pression de 50 bars )

une fois charge et le poids mis connu , je pourrai faire le calibrage ( valeur de l ordre de 1000 kg mais pouvant aussi etre de 600 kg suivant conditionnemennt )

Durant l utiliation , la mesure de la pression permttrai de savoir ou en est la quantite restante

la memorisation permettrai lors de l arret du tracteur de ne pas perdre les valeurs de calbrage et de tare

j espere vous avoir eclaici sur le projet que je souhaite realiser

la finalite est une sorte de balance

joyeux noel a vous
 
Last edited:

JRTEC

Senior Member
Bonjour

j ai trouve mon probleme de calibrage et calcul de poids ( erreur due a l oubli du retarit de la tension au moment de tare )

dans le programme suivant c est ok

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

	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
				
				
 		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				
 				
 	bintoascii w11,b6,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-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:

	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 w8,b6,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-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:

;|------------------------------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
j aimerai simplement maintenant pourvoir " sauvegarder " malgres une coupure d alimentation les donnees de tensions de tare et de calibrage, et l indication du poids lors du calibrage
 

MGU

Senior Member
Bonjour,

Pour sauvegarder des données, il faut utiliser la commande "write"
Les données sont enregistrées dans un espace mémoire (EEPROM) de 256 octets;

Pour une donnée de type byte (un octet, par ex b1)
Syntaxe:
write 0, b1
La valeur de b1 est enregistrée dans la mémoire 0 (la première)

pour relire, en début de programme
read 0, b1

la valeur enregistrée est placée dans b1 ( utiliser b1, mais ce n'est pas une obligation, on )

Pour le valeur de type word, (deux octets), l'utilisation de deux octets est signalée par le préfixe Word
Ecriture:
write 5, word w13 (w13 est enregistré dans les mémoires 5 et 6, la mémoire suivante utilisable est donc la 7)

Lecture:
read 5, word val ( la valeur enregistrée dans les mémoires 5 et 6, est placée dans la mémoire nommée val qui doit avoir été déclarée par ex par symbol val = w10)

Je ne sais pas si ce condensé des possibilités est très clair

Questions annexes:

Faut il régler la tare souvent (godets différents) ? Ou la prise en compte de la tare fait elle partie de la procédure de calibration?

Le capteur est il linéaire? Où peut on voir la doc de ce capteur? le signal est il bien compris entre 0 et 5 v ? poids max d'un godet plein?

MM
 
Last edited:

JRTEC

Senior Member
Bonjour

merci de votre reponse

dans le programme suivant j ai inserer les memorisations " eprom" et ca marche
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 w9 ;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 w10 ;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 w11 ;memorisation de la valeur du calibrage
 				
 	bintoascii w11,b6,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-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 w8,b6,b6,b5,b4,b3    ;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=b4-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=3			;affichage centaine
      b26=b5-48		;ascii -> numérique
      gosub shiftt      ;affichage
      b27=4			;affichage millier
      b26=b6-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:

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

JRTEC

Senior Member
suite car message trop long pour un post :
par contre je rencontre encore en bug mais je crois avoir compris pourquoi

si je mets une tension de 0.5 a l entre capteur et que je fais ma tare ( 0 kg )
puis un calibrage a 4.5 v et que la je fais un calibrage a 500 kg , biszarrement la valeur indiquée ne depasse pas 250 kg et lorsque je tourne le potentiometre qui me simule le capteur , a 260 kg l affichage repasse a 0 et est reparti pour 250 kg

n y a t il pas un probleme vis a vis d une valeur maxi a 255 ?
si oui je peut simplement divise la valeur par 10 et au moment de l affichage juste la multiplier par 10

Reponses a vos questions : non il n est pas necessaire de calibrer souvent la tare car generalement le poids de l ependeur vide est toujours le meme

consernant le ravitaillement il se fait generalement soit par des sacs de 600 kg ou bien du vrac de 1000 kg

le poids maxi peut allé a 1200 kg ( si il y a du restant de l epandage precedent )

le capteur est de type lineaire oui , je n ai pas de doc technique a son sujet , par contre le signal qui resortira de lui sera normalement toujours en dessous de 5 V : je m explique : c est un capteur de moteur diesel de " commun rail " cpapable de lire des pression de 0 a 3000 bars , ici son utilisation fera qu il travaillera sur une pression allant au maximun a 300 bars ( sur un choc ) et en statique maxi 200 bars
je pensais l alimenter en 13 volts ( tension de charge de la batterie a bord du tracteur ) ce qui permettrai de multiplier par 2.6 les valeurs redonnées par celui ci afin de gagner en precision , en meme temps une mesure a 10 kgs pres est largement suffisante

le capteur est de marque Bosch est porte une reference : 0 281 002 283

il faut que je retravaille mon histoire de valeur maxi a 255

merci encore pour votre aide
 
Last edited:

JRTEC

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
 
Top