initiation picaxe pour systeme de jalonnage

MGU

Senior Member
Pour la prise ISO par de problèmes, je me posais des questions au niveau des raccordements sur le boitier (que j'avais vu sur un ancien post, je vais essayer de retrouver).
 

JRTEC

Senior Member
Bonjour

consernat le raccordement sur le boitier , en fait j ai souder des boinier sur le PCI de type suivant : http://cgi.ebay.fr/ws/eBayISAPI.dll?ViewItem&item=290688355256&ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649

j ai pris du fils style , eclairage de remorque : donc 5 conducteurs dedans ce quie st suffisant pour recolter les infos

une question , dans le programme vous ecrivez la choses suivante mais je ne le conprends pas :
ligne 261
" TempoM = 24000/255 * TempoM + 4000 'Mise à l'échelle entre 4000 et 28000 (soit 0,5 et 3,5 s)
ceci est pour l interpretation du potentionmetre

imaginons qu il est au milieu , alimente par une source de 5 v il donne la moitie de la tension soit 2.5 v
j ai calcule , je n arrive pas a trouver les 2 secondes

pourriez vous m exliquer ?
 

MGU

Senior Member
Bonjour,

Merci pour les réponses.

Calcul de la temporisation:

A 4 mHz," pause 1000" fait une pause de 1000ms
la commande setfreq m32 fait tourner le processeur à 32mHz, les temps de la plupart des commandes sont divisés par 8

A cette fréquence, il faut écrire "pause 8000" pour une pause de 1 s.

La commande readadc lit la tension sur l'entrée et transforme la valeur lue de 0 à 5 volt en un nombre de 0 à 255

2,5 v donne 127

24000/255 *127 = 11952
11952 + 4000 = 15952, ce qui n'est pas loin de 16000 ( pause 16000 => 2 s à 32MHz).

La variation de 0 à 5 v fait varier cette valeur de 4000 à 28000 soit de 500 à 3500 ms.

J'ai modifié la dernière version 10 (plusieurs modifs de cette version) pour avoir une tempo de 2 s par défaut

Et la fonction "arrêt" ça fonctionne ?


MM
 
Last edited:

JRTEC

Senior Member
bonsoir

oui loui la fonction arret fonctionne

bon j ai crame mon premiere picaxe

un coup de 12 v il n a pas apprecier( erreur de branchement de mes boutons , il etaient sur le + 12 au lieu du + 5 v ) est c est seulement avec le RAZ que le picaxe a cramé , du coup j en ai mis un autre ... lol
 

PieM

Senior Member
un coup de 12 v il n a pas apprecier( erreur de branchement de mes boutons , il etaient sur le + 12 au lieu du + 5 v ) est c est seulement avec le RAZ que le picaxe a cramé , du coup j en ai mis un autre ... lol
Bonsoir,

Il y a un capteur de température sur les picaxes .... faut demander à MGU qu'il vous fasse une modif de programme pour déclencher automatiquement un extincteur en cabine !! :rolleyes:
 

MGU

Senior Member
Belle réalisation, c'est du sérieux.

Je ne connais pas assez le matériel pour comprendre l'effet du moteur sur les rangs, je pense voir un rectangle qui monte et qui descend.
Avec votre permission, je mettrai cette photo sur le blog, les spécialistes (si il y a en) comprendront sûrement.

Attention, il y cramé et cramé. J'ai un 08M éclopé (il a une patte en moins) mais le reste fonctionne, il peut encore servir (enfin, ça se discute).

L'idée de l'extincteur de PieM est à retenir. Il n'y a plus une patte de libre sur le 20M2, mais si il vous en reste d'autres, on peut y réfléchir...

Pour le câblage, j'avais vu sur un schéma une polarisation Vo du LCD pas très orthodoxe. Avez vous fait des modifs par rapport au schéma fourni?

Penser aussi à immobiliser ( Ex colle au pistolet) tout ce qui peut bouger ou vibrer.
 

JRTEC

Senior Member
Belle réalisation, c'est du sérieux.

Je ne connais pas assez le matériel pour comprendre l'effet du moteur sur les rangs, je pense voir un rectangle qui monte et qui descend.
Avec votre permission, je mettrai cette photo sur le blog, les spécialistes (si il y a en) comprendront sûrement.

Attention, il y cramé et cramé. J'ai un 08M éclopé (il a une patte en moins) mais le reste fonctionne, il peut encore servir (enfin, ça se discute).

L'idée de l'extincteur de PieM est à retenir. Il n'y a plus une patte de libre sur le 20M2, mais si il vous en reste d'autres, on peut y réfléchir...

Pour le câblage, j'avais vu sur un schéma une polarisation Vo du LCD pas très orthodoxe. Avez vous fait des modifs par rapport au schéma fourni?

Penser aussi à immobiliser ( Ex colle au pistolet) tout ce qui peut bouger ou vibrer.
il n uy a pas de pb pour la photo

le principe et la fermeture horizontale de l alimentation d un rng de semis

j avais mis un reflechissant aronge pour voir de la cabine dans quel etat est le volet
 

JRTEC

Senior Member
a au fait j avais oublie

consernant la polarisation j ai fait un branchement a l aide d un potentiometre de 10 kohm relie a la masse sans le plus +5v

consernant le sauvetage du picaxe , j ai essaye de le reprogrammé , mais sans succes le soft du pc ne me voyant pas le picaxe

pour etre plus clair vis a vis du jalonnage , imaginez que dans la caisse du semoir , il y est un trou pour chaque rang de semis , celui debouchant sur un roue a ergo donc la vitesse de rotaion est propotionnelle a la vitesse d avancement car entraine par les roues du semoirs , et donc la largeur de l ergo est reglable afin de pouvoir faire varie le debit . Ce trou de caisse possede une sorte de guillotinne qui, permet de ferme des rangs au choix , si on veux pour certaine culture semer un rang sur 2 ( exemple colza ) , ou laisse un rang sur 5 en semis ( cela ne fait plus mais dans le passe on semait du maîs comme cela ). J utilise cette guillotine pour faire mon jalonnage est feme un simple rang est ceci fait mon marquage

pour un autre projet , j aiimerai comprendre plusieurs choses :

dans #123 , ce qui m interesse c est la lecture du potentiometre

donc si je comprend bien la valeur du potentiometre est converti en valeur sur une echelle de 255 ok

mintenant , j aimerai est cela je n arrive pas a le trouver dans les documentations pouvoit definir plusieur choses en utilisant lusieurs potentiometre :
* des notions de valeur superieur : c est comparait 2 potentiometres ou un potentiometre est de valeur memorise dans le programme
exemple un potentiometrelu a 200 , est un seuil a 180 , comme il est superieur gerer une fonction
* pour d autre etapes du programme j aimerai definir aussi des plage de tolerence , exemple un potiometre A lu a 150 , un valuer de reference d un autre potentiometre B lui a 148 , est dire dans le programme : si A = B +ou - 5, generer une action

une dernier question , vis a vis des leds , vous aviez mis des resistance de 390 ohm , perso j ai mis des 294ohms mais je ne trouve pas que cela brille tres fort , est ce la vous aussi ?

dans votre programme version 10 , vous avez remplacer la symbolique du jalonnage , perso je l ai modifie

en semis , j ai mis " : " je trouve que cela simule la chute des graines est en jolanne j ai mis "-" pour simuler la fermeture
mais pourquoi , alors qu il y a 3 caracteres de libres , je ne peux pas mettre " :::" et :-:" ?

j arrete avec mes questions lol

bonne journée
 

MGU

Senior Member
Bonjour,

Comme promis, je répondrai à tout. Mais attention, je ne suis professionnel ni en électronique ni en informatique et je ne suis prof de rien.
Si je dis des bêtises, que les pointures du forum veuillent bien les corriger.

La polarisation du LCD:
Avec une résistance, on limite un courant.
Avec un pont de résistances, on fixe un potentiel.
La doc dit qu'il faut ajuster le potentiel de Vo pour régler le contraste.
Jusqu'à présent, pour les LCD que j'ai , il faut Vo = 0,6 à 0,7v. Je remplace donc le potentiomètre par une diode dans le retour au (-) du rétroéclairage.
Mais si la 10k donne un bon contraste, OK.

J'avais bien compris que le moteur bouchait quelque chose, mais sans trop savoir comment. Éventuellement, si je pouvais avoir un gros plan du mécanisme...merci.

Lecture des potentiomètres:
Il y a deux instructions permettant de lire une tension avec le picaxe;

READADC convertit cette tension en un nombre codé sur 8 bits (type byte comme "b0") de 0 à 255

READADC10 convertit cette tension en un nombre codé sur 10 bits (il faut une variable word comme "w0") de 0 à 1023.

Ces valeurs sont stockées dans des variables, on peut toujours comparer deux variables et gérer le résultat Ex: " if b1>b0 then gosub XXX"

Possible de placer des tolérances en ajoutant ou retranchant une constante.
ATTENTION toutefois à bien définir les butées max et min Ex: b0 = b0 + 5 MAX 255
Parce que si on dépasse 255, on retombe à 0, sans aucune alerte. ça peut donner parfois des résultats inattendus.

Les LEDs:
Une sortie picaxe peut fournir 20mA. Le total des sorties est limité à 90mA (à vérifier)
une R de 390 ohms limite à 13mA. (des 294 ohms? marqué ou mesuré?)
Correction: En voilà déjà une que je corrige moi même: il faut tenir compte de la tension Vf aux bornes de la diode.
environ 1,5v pour une led standard (dépend de la couleur) à 3,5v pour une blanche haute luminosité.
Ici, la formule est donc : I = (5 - Vf) / R . (Ca ne fait plus que 9mA)

Mais il y plein de LEDS différentes, les "économiques", les "basse consommation", les "haute luminosité", diffusantes, transparentes.
Avec 10 mA, on peut avoir une bonne luminosité en choisissant une "bonne led". Sinon, il faut amplifier le courant (comme pour les relais) et prendre un bon gros voyant à lampe.

Le symbole jalonnage:
J'avais mis | pour évoquer la trace du jalonnage et rien si pas de trace. Mais les petites graines qui tombent, pourquoi pas.
Ca nous amène à l’affichage sur LCD;
En gros, deux types d'afficheurs, les "parallèles", à 3 euros sur ebays et les "séries", plus simples d'emploi mais plus chers parce qu'ils ont en plus une interface qui va gérer les chaines de caractères.
Avec les parallèles, il faut envoyer les caractères un par un. on peut écrire ":" , pas ":::" .

Même si la présentation trompeuse des data peut faire penser à des chaines, chaque caractère est stocké et relu séparément.

Autre chose, les données transmises sont des commandes ou des caractères à afficher. La différentiation se fait au niveau du dernier bit de la chaine.

J'ai pompé la gestion du LCD sur le net mais c'est beaucoup plus simple que ça en a l'air

RSCMDmask c'est 0
RSDATmask c'est 1

Cette valeur, nommée ensuite rsbit est placée à la fin de la chaine par un OU logique: 0 à la fin, c'est une commande; 1 c'est un caractère à afficher.

Les commandes servent à initialiser le LCD au début. Aussi par ex. à effacer l'écran ou placer le curseur au bon endroit.

Dans ce programme, il y a un texte fixe et des caractères variables intercalés.

Si sur trois espaces, on veux écrire trois caractères au lieu d'un, il faut placer le curseur un cran avant.

J'ai un peu développé tout çà sur cette page:

http://electromag1.over-blog.com/pages/LCD_alphanumerique_et_picaxes_M2-5587279.html

A bientôt

Bon WE

MM
 
Last edited:

JRTEC

Senior Member
bonjour

dites voir j ai un probleme avec mon montage

j ai change le picaxe 20m2

je l ai reprogrammé , mais je n ai qu ne seule ligne noire en haut qui apparait

pour oi le piaxe tourne car lorsque je bascule l inter de blocage de comptage la diode rouge s allume

j ai essaye le soft version 9 a la place du 10 pareil

auriez vous une idee
 

MGU

Senior Member
Bonjour,

L'afficheur a déjà fonctionné à 32MHz, je ne pense pas qu'il y ai de problème d'initialisation

Revoir la dernière modification: que toutes les pattes du 20M2 soient bien dans le support et pas à côté ou repliée en dessous
Soit il y a un problème de câblage: vérifiez les connexions.
Ou il y a un problème de réglage du contraste. Câblez Vo comme indiqué sur le schéma.

MM
 
Last edited:

JRTEC

Senior Member
Bonjour,

L'afficheur a déjà fonctionné à 32MHz, je ne pense pas qu'il y ai de problème d'initialisation

Revoir la dernière modification: que toutes les pattes du 20M2 soient bien dans le support et pas à côté ou repliée en dessous
Soit il y a un problème de câblage: vérifiez les connexions.
Ou il y a un problème de réglage du contraste. Câblez Vo comme indiqué sur le schéma.

MM
Bonsoir

bon mon ecran est mort qualite chinoise lol

par contre afin de pouvoir faire marcher le nouveau il a fallu que je le branche sur votre montage " test lcd " tel que decris ici : http://electromag1.over-blog.com/pages/LCD_alphanumerique_et_picaxes_M2-5587279.html

Pourquoi ? cela depasse mes competences mais une fois remis sur mon circuit il s est mis a fonctionner

LA ligne R/S de l affichage comment fonctionne telle ?
 

MGU

Senior Member
Bonjour,

Les problèmes que j'ai pu avoir avec ces afficheurs venaient à chaque fois d'une erreur de ma part.

Pouvez vous communiquer un schéma complet du système définitif.

Seule différence avec le programme test, la pause d'initialisation de 15ms (pause 15). A 32MHz, il faudrait écrire pause 120 au lieu de pause 60. Mais je n'ai pas eu de problème à ce sujet.
Vos afficheurs sont peut être plus sensibles.

Sur un système embarqué, il faut particulièrement soigner la qualité du circuit et des connexions.

Pour RS, c'est simple:
Si RS = 0: les bits "data" correspondent à une commande (Effacement de l'afficheur, positionnement du curseur ..

Si RS = 1 : les bits "data" correspondent à un code caractère à afficher (la table de correspondance est écrite dans la mémoire de l'afficheur)

J'ai récemment mis à jour le blog à ce sujet.


MM
 

JRTEC

Senior Member
Bonjour

les expert ont toujours raison !!

Defaut de soudure sur RS provaoquant le defaut d affichage

J ai mis en piece jointe le montage tel que finaljalonnage_7 final.JPG

Une petite question , je m agace avec la fonction + 1 manu , il me semble que mon montage est correct mais meme en verrouillage la fonctionne d incremente pas le passage
j ai relu le debut de votre brogramme , pour assimiler le fonctionnement mais rien a faire , cependant je ne suis pas brancher au tracteur donc les signaux haut et bes de l odometre et de la position du relevage sont aleatoire ( en l air ) je pense que le picaxe les voit traduit la position des bras en position haute car la diode verte est etaiente meme si le bouton de blocage est aussi eteinte
 

MGU

Senior Member
Bonjour,


Le +1 : Voyant rouge allumé (en blocage), il doit fonctionner. En blocage, le voyant vert mémorise la position du relevage avant le blocage (c'est un choix, on peut changer). Attendre la fin des temporisations moteur pour faire avancer le +1.

Non connectées, les entrées des comparateurs sont à Ov par la R de 100k Relevage haut pas d'odomètre.

MM
 

JRTEC

Senior Member
Bonjour

je reviens vers vous car je me suis appercu d une chose qui me pose un probleme

le comtage du jalonnge s effectue une fois que le relevage est baissé mais cela me pose un probleme pour la manoeuvre des moteurs (oui des moteurs car j ai rajoute un systeme de jalonnage prelevée

j aimerai que le comptage s effectue a la monte un relevage , comme cela du temps de la moneuvre le systeme aura le temps de piloter les moteurs

de plus lrosque j attaque un champs si je veux etre au bon moment avant de baiser le relevage , il faut que je passe a 4/4 pour que pors que je baisse le relevage , le systeme vienne a 1/4

Si j ai compris quelque chose au niveau du programme cela se situe dans cette partie :
"***** 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é
acompte=0
pause 10 'antirebonds

Do
if Semoir=1 then
low Ledverte 'extinction voyant semoir bas VERT
gosub plusun 'possibilité d'incrémenter semoir levé
gosub arretcompte 'posibilité arret comptages
Loop
end if 'attente abaissement semoir
if acompte=0 then 'Si on ne sort pas de arretcompte
gosub increm 'incrémentation passage
endif' 'à l'abaissement et positionnement jalonnage
if sauve=0 then gosub SauveData 'sauvegarde si passé par affichage
endif
high Ledverte 'allumage voyant semoir bas
return "

il faudrait que je deplace le " gosub increment" an dessous du go sub arretcomte

mais cela ne va t il poser des bug ?
 

MGU

Senior Member
Bonjour,

Je vais voir, mais je ne suis pas sûr d'avoir bien compris le problème.

Le comptage s'effectue lorsque le semoir passe de haut à bas, avec la possibilité d'incrémenter manuellement avec le semoir haut.

Donc, pour commencer le premier rang, il faut se positionner manuellement à 4, semoir haut, pour qu'il passe à 1 à l'abaissement du semoir.

Je pense qu'il est préférable, de toute façon, s'assurer manuellement de la position du compteur au début de chaque parcelle.

Mais incrémenter à la levée au lieu de la descente, il ne devrait pas y avoir de problème.

Je m'y replonge...mais la maquette est démontée.

MM
 

JRTEC

Senior Member
Bonjour,

Je vais voir, mais je ne suis pas sûr d'avoir bien compris le problème.

Le comptage s'effectue lorsque le semoir passe de haut à bas, avec la possibilité d'incrémenter manuellement avec le semoir haut.

Donc, pour commencer le premier rang, il faut se positionner manuellement à 4, semoir haut, pour qu'il passe à 1 à l'abaissement du semoir.

Je pense qu'il est préférable, de toute façon, s'assurer manuellement de la position du compteur au début de chaque parcelle.

Mais incrémenter à la levée au lieu de la descente, il ne devrait pas y avoir de problème.

Je m'y replonge...mais la maquette est démontée.

MM
merci pour votre aide
 

JRTEC

Senior Member
Bonjour , je deterre ce sujet car je suis en train de monter un jalonnage pour un ami

Variante avec elui qui precede ce post :

Affichage MAX7219 64 led , on affiche uniquement le passage
Pas de comptage de surface , indormation prise sur une capteur on/off
Jallonnage en passe 3 , pas de jalonnage en passe 1,2,4 et 5

basé sur picaxe 14m2

ci joint le schema et le programme j aimeraiavoir votre avis , en simulation cela marche mais avant de monter la maquette
 

Attachments

MGU

Senior Member
Bonjour,

J'ai pas tout épluché.
Tu as fait un montage sur planche à pain ? C'est à essayer avant de faire un PCB.

MM
 

JRTEC

Senior Member
Bonjour j ai donc fait un essai sur un plaque d experimentation l affichage 1 et 2 ok ( j avais oublie un return apres le 1 dans la programme)

pär ontre l incrementation aussi bien par manuel ( +1 ) ou auto par la capteur aucun changement observe au display

Pouvez vous m aider ?

J ai remis le soft sinon ci dessous

"
;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
if TempoM=0 then
TempoM=32000 'tempomoteur à 4 secondes par défaut
endif




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

cas1: ;chiffre 1 col=b27, ici, c'est le n° de colone de la matrice et b26 sa description en bits
for col=0 to 7
lookup col ,(0,0,0,%11111111,%11111111,0,0,0),b26
gosub shiftt1
next
return
cas2: ;chiffe 2
for col=0 to 7
lookup col ,(0,%11111011,%11111011,%11011011,%11011011,%11011111,%11011111,0),b26
gosub shiftt1
next
return
cas3: ;chiffe 3
for col=0 to 7
lookup col ,(0,%11000011,%11000011,%11011011,%11011011,%11111111,%11111111,0),b26
gosub shiftt1
next
return
cas4:;chiffe 4
for col=0 to 7
lookup col ,(0,%00111111,%00111111,%00110000,%11111100,%11111100,%00110000,0),b26
gosub shiftt1
next
return
cas5:;chiffe 5
for col=0 to 7
lookup col ,(0,%11011111,%11011111,%11011011,%11011011,%11111011,%11111011,0),b26
gosub shiftt1
next
return



'***** 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 200 '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

gosub TempoMoteur 'Réglage temporisation moteur
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
return


'***** Réglage temporisation moteur de 0,5 s à 3,5 s (si activé) ********
TempoMoteur:
TempoM = 24000/255 * TempoM + 4000 'Mise à l'échelle entre 4000 et 28000 (soit 0,5 et 3,5 s)
return


'***** 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
gosub cas1
goto sortie

pas2:'ArretJalonnage
high pasjalon:pause tempoM:low pasjalon
low ledjalo
gosub cas2
goto sortie

pas3: 'jalonnage
high jalonn:pause tempoM:low jalonn
high ledjalo
gosub cas3
goto sortie

pas4: 'ArretJalonnage
high pasjalon:pause tempoM:low pasjalon
low ledjalo
gosub cas4
goto sortie

pas5: 'ArretJalonnage
high pasjalon:pause tempoM:low pasjalon
low ledjalo
gosub cas5
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 à 4
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

Top