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