J'utilise SoftwareSerial sur une carte Nano : "mySerial.begin(9600);"
Cela fonctionne à peu près mais j'ai des nombreux ratés.
Je pense que cela pourrait venir du nombre de bits, du nombre de stops, de la parité ?
Je ne trouve pas d'exemples.
(J'ai regardé les fichiers SoftwareSerial.h et SoftwareSerial.ccp ?)
Une piste svp ?
Merci
Nota 1 : #include <NewSoftSerial.h> ne fonctionne pas sur mon application
Si vous en connaissez d'autres, je suis preneur pour tester. Merci
Nota 2 : Pour que SoftwareSerial fonctionne avec les interruptions multiples sur les pins du port C (PCMSK1)
modifier le fichier de librairie "SoftwareSerial.cpp" , ligne 233 mise en commentaire. (Merci à CG qui m'a retiré cette épine)
// (ISR(PCINT1_vect, ISR_ALIASOF(PCINT0_vect));
PS : Peut-être : mySerial.begin(9600,7,0,1); ? . Je vais le tester.
Réponse : NON, ne compile pas.
SoftwarSerial c'est une émulation soft d'un UART.
Si ton programme set très occupé, tu peux perdre des caractères en réception. En émission il ne devrait pas y avoir de programme.
Plus le baudrate est élevé plus il y a de risques d'erreurs. A 9600 bds en principe ça fonctionne correctement, par contre il est déconseillé de l'utiliser à 115200 bds.
merci kamill pour ta réponse mais tu ne réponds pas à ma question.
c'est en émission que j'ai un problème. (modem GSM)
Je voudrais pouvoir tester d'autres configurations que celle par défaut( que je ne connais pas).
(débit : OK mais nombre de bits, nombre de stops, parité ? )
un bref coup d’œil à la référence, il ne semble pas que la librairie permette de paramétrer le nombre de bits de données et de stop : donc fixés à 8 et 1
si ta com fait 7 bits de données tu es coincé. Des solutions ? :
utiliser un leonardo ou un méga qui disposent d'au moins un port hardware libre, tu pourras choisir de 5 à 10 bits
modifier la librairie SoftwareSerial, intuitivement ce serait assez facile à faire
Il semblerait que le Nb de bits/octet émission soit 8 (et non 7 comme sur mon modem.)
Sauf erreur de ma part, ce n'est pas un problème en asynchrone. (transmission d'un octet = plus de temps)
Ce qui peut poser problème c'est le bit de parité dans ce cas !
Retour à la case départ :
modifier la librairie SoftwareSerial, intuitivement ce serait assez facile à faire
Pourrais-tu m'aider à modifier le nombre de bits ?
Quel fichier, h ou ccp ? quelle zone ?
Merci d'avance.
Ce serait étonnant que ce soit une transmission 7 bits qui est complètement tombée en désuétude.
En général les en reception les uarts acceptent 1, 1.5 ou 2 bits de stop quel que soit leur paramétrage.
Reste le bit de parité qui est rarement utilisé.
A mon avis le problème de communication avec ton gsm ne vient pas d'une mauvaise config de la liaison
Rectificatif : La commande AT+CBST? me renvoie 7,0,1
(7 pour 9600 et j'avais traduit, 7 bits , 0 parité, 1 stop)
En résumé je voudrais bien trouver/tester une autre librairie Serial.
Depuis le début, j'ai des problèmes avec SoftwareSerial et NewSoftSerial ne fonctionne pas non plus.
Avec une carte Mega2560 je n'avais pas de problèmes avec mon programme d'émission qui n'a pas changé. (en 2015)
Finalement, j'ai réussi à faire fonctionner. J'en fait profiter tout le monde.
La librairie SoftwareSerial.h fonctionne correctement à condition de supprimer la ligne 233.
ligne 233 = // SoftwareSerial ((ISR(PCINT1_vect, ISR_ALIASOF(PCINT0_vect))
Lors de mes tests, l'entrée Rx de la Nano était en l'air ! (Mérite une bonne fessée)
(Ne pas confondre avec un port RS232 qui peut rester ouvert ! ! )
Le module GSM qui avait le niveau de sortie Rx trop faible = 2.65V seulement = aléatoire.
En incorporant une diode et une R pullup 33k, le niveau est maintenant :
niveau bas ---> 0,65 V
niveau haut ---> 3.3 V et ça fonctionne.