bonjour
je suis en train de realiser un montage pour un jalonnage d un collegue , un peu dans le meme principe que celui ci : https://picaxeforum.co.uk/threads/initiation-picaxe-pour-systeme-de-jalonnage.20817/ mais avec un simple affichage MAx3219 et sans autre fonction que le comptage du passage
mais en mauvais coupieur , lors que je suis " semoir en haut " , le systeme me fait defilerles chiffre de passage alors que je voudrais qui s arrete et attende un changement d etat
et le systeme ne soccupe pas de ma tempo de pilotage des relais sur ma maquette
un petit coup de pouce svp pour m aider a comprendre
je suis en train de realiser un montage pour un jalonnage d un collegue , un peu dans le meme principe que celui ci : https://picaxeforum.co.uk/threads/initiation-picaxe-pour-systeme-de-jalonnage.20817/ mais avec un simple affichage MAx3219 et sans autre fonction que le comptage du passage
mais en mauvais coupieur , lors que je suis " semoir en haut " , le systeme me fait defilerles chiffre de passage alors que je voudrais qui s arrete et attende un changement d etat
et le systeme ne soccupe pas de ma tempo de pilotage des relais sur ma maquette
un petit coup de pouce svp pour m aider a comprendre
Rich (BB code):
;Afficheur driver MAX7219 jalonnage balou 15 M
;Matrice de leds 8x8
;JR 24/09/2018
;Format des registres MAX 7219 sur 16 bits:
;|------------------------------w13------------------------------| |
;|-----------b27-----------------|------------b26 ---------------|
;|-X-|-X-|-X-|-X-|--ADRESSE------|----------DONNEES--------------|
;|D15|D14|D13|D12|D11|D10|D09|D08|D07|D06|D05|D04|D03|D02|D01|D00|
#picaxe 14M2
setfreq m32
symbol ledbloq = B.0 ;Sortie led ARRET COMPTAGE
symbol DIN = B.1 ;Entrée Data In de l'afficheur
symbol LOAD = B.2 ;Entrée Load de l'afficheur
symbol CLK = B.3 ;Entrée CLK de l'afficheur
symbol manu =pinB.4 ;Entrée +1
symbol arretcompt=pinB.5 ;Entrée bloquage de comptage
symbol pasjalon = C.0 ;mise en place de pas de jalonnage
symbol jalonn = C.1 ;mise en place jalonnage
symbol ledjalo = C.2 ;sortiie led jalonnage
symbol Semoir =pinC.3 ;Entrée cpateur relevage
symbol Ledverte = C.4 ;sortiie led semis
symbol LEN = 4 ;durée impulsion
symbol col = b2 ;n° de colonne du chiffre, dans le registre b27=col+1; w13= (b27;b26)
symbol cpt = b3 ;compteur
'***** Nomination des variables *********************
symbol sauve=bit0 'Mémorisation sauvegarde
symbol jal=bit1 'Position jalonnage pour affichage
symbol acompte=bit2 'mémo passage par arretcompte
symbol passe=b4 'nombre total de passages
symbol rang=b5 'numéro de rang 0 à 3 pour goto calculé
symbol passage=b6 'numéro de passage de 1 à 4
symbol tempoM=w8 'valeur temporisation moteur
'***** Lecture paramètres mémorisés en EEPROM ****************
Read 50,passage, passe,TempoM
if passage=3 then
jal=1
endif
TempoM=32000 'tempomoteur à 4 secondes par défaut
low DIN
low LOAD
low CLK
;******** initialisation 7219 *******
b27=$09 'mode décodage
b26=%00000000 'pas de décodage code B mais segments
gosub shiftt
b27=$0b 'limite scanner = Nbre de digits
b26=$07 '$04=5 digits ,$03=4 digits,, etc...
gosub shiftt
b27=$0c 'shutdown mode
b26=$01 '=normal (afficheur actif)
gosub shiftt
b27=$0a 'luminosité
b26=$04 '=croissante de 0 à 15, ici c'est 4
gosub shiftt
b27=$0f 'display test
b26=$00 '=normal
gosub shiftt
'***** DEBUT PROGRAMME PERSO ************************
pause 20000 'pause de 2.5 s à la mise sous tension
DO
gosub arretcompte 'Arret des comptages surface et semoir
gosub mouvSemoir 'surveillance position semoir (pas d'odomètre si HAUT)
LOOP
'***** Mouvement semoir et incrémentation à l'abaissement **********
'Lorsque le semoir est levé, on peut
' - incrémenter les passages (si pas sur arretcompte)
' - Mettre sur arretcompte
MouvSemoir: '
if Semoir=1 then 'semoir levé
pause 20000 'antirebonds
low Ledverte 'extinction voyant semoir bas VERT
gosub increm 'incrémentation passage
Do 'Boucle attente tant que semoir haut
gosub plusun 'possibilité d'incrémenter semoir levé
gosub arretcompte 'posibilité arret comptages
Loop while semoir=1
endif 'le semoir est abaissé
high Ledverte 'allumage voyant semoir bas
return
'***** Pousoir enclenchement. Arret comptages auto des passages et surface) ******
' Mais on peut:
' - incrémenter manuellement
' - RAZ de la distance parcourue donc de la surface
' - Régler la temporisation du moteur
arretcompte:
If arretcompt=1 then
pause 10 'antirebonds
gosub plusun '+1 reste accessible
high ledbloq 'allumage voyant Arret ROUGE
if sauve=0 then 'l'affichage a changé
if semoir=0 then: high ledverte:endif 'on rallume ledverte (éteinte par pinsB ds écriture LCD)
endif
'acompte=1 'mémo passage dans arretcompte
goto arretcompte 'temps que arretcompte =1
endif
low ledbloq 'extinction voyant
return
'***** Action sur Incréméntation manuelle ************************
plusun:
if manu=1 then 'incrément manuelle
pause 1000
Do: Loop while manu=1 'attente relachement
gosub increm
endif
'
'***** Incrémentation et positionnement jalonnage ***********
'***** chaque passage est confirmé en jalonnage ou non jalonnage ******
increm:
on rang goto pas1, pas2, pas3, pas4, pas5
pas1: 'ArretJalonnage
high pasjalon:pause tempoM:low pasjalon
low ledjalo
for col=0 to 7
lookup col ,(0,0,0,0,%00111110,0,0,0),b26
gosub shiftt1
next
goto sortie
pas2:'ArretJalonnage
high pasjalon:pause tempoM:low pasjalon
low ledjalo
for col=0 to 7
lookup col ,(0,0,0,%00111010,%00101010,%00101110,0,0),b26
gosub shiftt1
next
goto sortie
pas3: 'jalonnage
high jalonn:pause tempoM:low jalonn
high ledjalo
for col=0 to 7
lookup col ,(0,%11111111,0,%00100010,%00101010,%00111110,0,%11111111),b26
gosub shiftt1
next
goto sortie
pas4: 'ArretJalonnage
high pasjalon :pause tempoM:low pasjalon
low ledjalo
for col=0 to 7
lookup col ,(0,0,0,%00001110,%00001000,%00111110,0,0),b26
gosub shiftt1
next
goto sortie
pas5: 'ArretJalonnage
high pasjalon:pause tempoM:low pasjalon
low ledjalo
for col=0 to 7
lookup col ,(0,0,0,%00101110,%00101010,%00111010,0,0),b26
gosub shiftt1
next
goto sortie
sortie:
inc passe 'incrémentation du nombre de passes
rang=passe//5 'calcul du rang dans le cycle 0 à 4
passage=rang+1 'numéro de passage de 1 à 5
return
;******** Sous programme affichage *************************
;Format du registre sur 16 bits:
;|------------------------------w13------------------------------| |
;|-----------b27-----------------|------------b26 ---------------|
;|-X-|-X-|-X-|-X-|--ADRESSE------|----------DONNEES--------------|
;|D15|D14|D13|D12|D11|D10|D09|D08|D07|D06|D05|D04|D03|D02|D01|D00|
;Ex: chiffre 5 dans digit 2
;|-X-|-X-|-X-|-X-| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
;La broche DIN va prendre successivementla valeur de chaque bit de w13, scanné de gauche à droire
shiftt1:
b27=col+1 ;le n° de col commence à 1 et pour lookup, c'est 0
shiftt:
for cpt=1 to 16 ;test des 16 bits de w13
w12=w13 & $8000 ;w13 = b27,b26 & %1000 0000 0000 0000: on ne garde que le 1er bit à gauche de w12
low DIN ; broche DIN à 0 à priori
if w12=0 then saut ;w12 contient la valeur (0 ou 1) à transmettre
high DIN ;;on ne passe ici que si w12 <> 0, alors DIN =1 (évidemment)
saut: pulsout CLK,LEN ; envoi 1 pulse horloge pour valider DIN
w13=w13*2 ; on décale w13 vers la gauche pour examiner le bit suivant
next cpt
pulsout LOAD,LEN ;chargement du registre terminé, un pulse sur load valide le registre (commande ou affichage)
return
Attachments
-
62.2 KB Views: 1
-
7.1 KB Views: 2
Last edited: