SERIN et picaxe 18x

zouliv

New Member
Bonjour, je cherche à surveiller mon port serie sur mon 18x.
Le programme doit tourner en bouche, et si un caractère arrive sur le port série, exécuter une autre branche du programme. Mais quand je fais un SERIN, le programme stoppe tant qu'il n'y a pas de reception sur le port.
Y a t-il une solution pour contourner ce problème ?
Merci à vous.
Olivier
 

Chavaquiah

Senior Member
Sauf d'utiliser un X2, les interruptions peuvent être la solution. Mais cela dépend de la collaboration de l’émetteur. Le PC pourrait envoyer le caractère deux fois, avec un petit retard entre les répétitions. Le 18X surveillerait l'entrée série par l'intermédiaire des interruptions et, une fois qu'activé, lancerait la commande serin pour recevoir le deuxième caractère.
 

zouliv

New Member
Merci Chavaquiah, as tu une bride de code pour m'aider, sinon je passe sur un x2 au pire.
Olivier
 

Chavaquiah

Senior Member
Hélas, non!

Je ne suis qu’un débutant avec Picaxes et l'électronique. Toutes mes expériences jusqu'ici ont été avec le 20X2 (et les 08M, mais seulement pour envoyer). J'ai fait quelque chose semblable avec un 20X2 recevant méssages des multiples 08Ms. Pas du tout mon idée. Si vous pouvez lire l'anglais, allez voir svp Q&R sur le Picaxe par Hippy. En particulier, cette idée vient de l'article PICAXE Serial Interrupts.

Il faudrait faire quelque chose comme ça:

1) Au lieu de surveiller constamment l'entrée série, vous programmez le Picaxe pour exécuter une interruption lors qu'un signal soit présent sur la porte série.

2) Le PC envoie d'abord un signal de simulacre (je proposerais un zéro, afin de réduire au minimum les signes "haut". Il attend un peu et envoie alors le vrai message.

3) Le premier signal active la routine d'interruption. Voici que vous pouvez employer serin parce que vous "savez" qu'un message viendra très bientôt.

Il y a des problèmes avec cette méthode. Si le bruit sur la ligne fait réagir le Picaxe prématurément, l'effort sera en vain. En outre, on doit essayer plusieurs valeurs pour déterminer des retards appropriés - sur le PC (vous ne voulez pas envoyer le vrai message avant que le Picaxe soit prêt à l’écouter) et sur le Picaxe (pour que le wake-up ne soit pas interprété comme le vrai message).

Il serait quelque chose semblable à ceci:

Code:
symbol ProgrammeCurr = b9

init:
	setint %0000001, %0000001
	ProgrammeCurr = 0


main:
	'Les routines normales du programme
	' ...
	' ...
	on ProgrammeCurr gosub Routine0, Routine1, Routine2 '... etc.
	goto main
	
interrupt:
   pause 1 'Attendre que le premier caractère soit finis
   serin 0, N2400, (b0) 'Paramètres?
   setint %00000001, %00000001
   return
   
Routine0:
	'...
	return
	
Routine1:
	'...
	return
	
Routine2:
	'...
	Return
Naturellement, j'ai oublié une solution plus évidente: au lieu d’avoir le Picaxe constamment en écoute d’un message, il pourrait être possible de le faire demander un message quand il soit prêt. Ainsi, ce serait le PC qui surveillera un signal du Picaxe et enverrait quelque chose seulement après que le Picaxe lui a demandé.
 

zouliv

New Member
Merci Chavaquiah, je vais m'orienter vers ta dernière idée, plus facile à mettre ne œuvre pour moi !
 

jeanphi59

Member
J'ai rencontré le même problème avec un 14m, c'est à dire que le programme attend l'arrivée des données.

J'ai contourné le problème en surveillant dans une boucle l'entrée des données par un test de l'entrée. voici le principe :

main:
label_64: serin 0, N2400, b0
let b1=b0
pause 500
label_4A: if b1= 2 then label_6B
if b1= 3 then label_5D
goto label_64

label_5D: let pins = 0 ' %00000000
goto label_64

label_6B: if pin0=1 then label_64 ' on test l'entrée série dans cette boucle
let pins = 1 ' %00000001
goto label_4A
 

Attachments

Top