Edit:Shame on me ! SERIN-SEROUT, bien sûr !
Hello, comme promis, le pendant de la chose, sur IRIN et IROUT.
Préambule TRES IMPORTANT :
Si vous utilisez des modules AUREL, AM, en 433, il est IMPERATIF de "bufferiser", entre la sortie RX, et l'entrée PICAXE, avec deux portes CMOS type trigger, cd4093 en série.
Sinon, AUCUN FONCTONNEMENT CORRECT n'est possible !
J'avais déjà eu ce type de problème de "propreté" du signal, avec certaines instructions picaxe, là, c'est flagrant:
IRIN s'en fiche totalement. PAS SERIN !
Trace du dessus, sans les 4093, trace du dessous, avec :
Pas beau, le bricolage, mais :
Voilou, fin du préambule.
Donc, ça peut fonctionner.
pour "coller" au plus près aux tests Manchester, huit octets sont à transmettre, et on voit ce qui reste de bon à l'arrivée.
Première constatation, sans analyse, juste "à l'oeil", des octets de préambule(qualifier) sont impératifs.
Un seul est insuffisant, des erreurs persistent. Trois, ça ne change pas (sur 1000 trames), donc, va pour deux qualifier.
Deuxième constatation (logique), le taux d'erreur est quasi proportionnel à la vitesse. Donc, on se limite à 600Bds.
Troisième constatation (c'est là que ça 'creuse', par rapport aux IRIN), si les qualifier's assurent un checksum correct, il masquent un autre souci :
Les trames perdues ... Et il y en a !
Code du TX:
1001 trames sont transmises (1000 sont exploitées, la première est forcément perdue, voir le traitement PC)
La dernière ligne trame ne sert qu'a informer le PC que le job du TX est fini.
Code du RX, la vitesse de transfer série vers le PC a du être baissée à 4800 (compatibilité, avec le 600Bds de la liaison TX-RX)
Ce que fait le PC:
Un peu "brut de décoffrage", mais, ça fonctionne bien.
Et, le résultat :
(post suivant, deux PJ max, comme d'hab !)
Hello, comme promis, le pendant de la chose, sur IRIN et IROUT.
Préambule TRES IMPORTANT :
Si vous utilisez des modules AUREL, AM, en 433, il est IMPERATIF de "bufferiser", entre la sortie RX, et l'entrée PICAXE, avec deux portes CMOS type trigger, cd4093 en série.
Sinon, AUCUN FONCTONNEMENT CORRECT n'est possible !
J'avais déjà eu ce type de problème de "propreté" du signal, avec certaines instructions picaxe, là, c'est flagrant:
IRIN s'en fiche totalement. PAS SERIN !
Trace du dessus, sans les 4093, trace du dessous, avec :
Pas beau, le bricolage, mais :
Voilou, fin du préambule.
Donc, ça peut fonctionner.
pour "coller" au plus près aux tests Manchester, huit octets sont à transmettre, et on voit ce qui reste de bon à l'arrivée.
Première constatation, sans analyse, juste "à l'oeil", des octets de préambule(qualifier) sont impératifs.
Un seul est insuffisant, des erreurs persistent. Trois, ça ne change pas (sur 1000 trames), donc, va pour deux qualifier.
Deuxième constatation (logique), le taux d'erreur est quasi proportionnel à la vitesse. Donc, on se limite à 600Bds.
Troisième constatation (c'est là que ça 'creuse', par rapport aux IRIN), si les qualifier's assurent un checksum correct, il masquent un autre souci :
Les trames perdues ... Et il y en a !
Code du TX:
Code:
#picaxe 14M2
SetFreq M4
For w13=1 to 1001
Serout B.1,0,("X","Y",$55,$AA,$55,$AA,$55,$AA,$55,"N")'600bds,
pause 500
Next w13
Serout B.1,0,("X","Y","EOT----N")'600bds,
La dernière ligne trame ne sert qu'a informer le PC que le job du TX est fini.
Code du RX, la vitesse de transfer série vers le PC a du être baissée à 4800 (compatibilité, avec le 600Bds de la liaison TX-RX)
Code:
#picaxe 40X2
SetFreq M4
Do
'
Serin A.0,0,("X","Y"),b0,b1,b2,b3,b4,b5,b6,b7 '600, deux ident's
Serout A.2,T4800_4,(b0,b1,b2,b3,b4,b5,b6,b7) 'via max232
debug 'donc, le 'T4800
Loop
Code:
SetSys(_DateFormat, "D(D1/M1/Y1)")
Dim Data as String
Dim Chaine1 as String
Dim Chaine2 as String
Dim cpt As Long
Dim cpt2 as Long
Dim Checksum As Long
Dim Manquantes as Long
A_Recevoir=1000
Fichier=FileQUnique
If FileQ("c:\tempo\logger.txt",_Exists)=0 Then
FileOpen(Fichier,"c:\tempo\logger.txt",_Write)
FileWrite(Fichier,"Test RS232")
FileClose(Fichier)
End If
CommOpen(1,4800,100,0,8,1,_NoParity)
Loop
Loop
If CommQ(1)[_CQ_Readpending] Then
data=commRead(1,1)
Exit Loop
End If
End Loop
If data<>"N" Then
chaine1=chaine1+NumToStr(Asc(data))+" "
chaine2=Chaine2+data
Checksum=Checksum+Val(NumToStr(Asc(data)))
Else
If Instr(Chaine2,"EOT")<>0 Then
Exit Loop
End If
FileOpen(Fichier,"c:\tempo\logger.txt",_Append)
cpt=cpt+1
print chaine1;: print checksum
If Checksum <>850 Then
cpt2=cpt2+1
FileWrite(fichier,Chaine1 +" Erreur Checksum"+time$)
Else
FileWrite(fichier,Chaine1 +" "+time$)
End If
FileClose(Fichier)
chaine1=""
chaine2=""
Checksum=0
End if
End Loop
Manquante=A_Recevoir-cpt
FileOpen(Fichier,"c:\tempo\logger.txt",_Append)
FileWrite(fichier,NumToStr(cpt)+" Lignes contrôlées")
FileWrite(fichier,NumToStr(cpt2)+" Erreur(s) Ckecksum")
FileWrite(fichier,NumToStr(Manquante)+" Lignes manquées")
FileClose(Fichier)
Et, le résultat :
(post suivant, deux PJ max, comme d'hab !)
Last edited: