Go Down

Topic: Problema seriale caratteri strani. (Read 448 times) previous topic - next topic

dukeluca86

Stò usando un arduino nano con la seriale software per ripetere i messaggi che riceve sulla seriale hardware e viceversa.

Il problema è che mentre quello che invio dalla seriale hardware tramite console viene trasmesso correttamente, quello che leggo invece è semileggibile ma contiene comunque errori.

Vi posto un listato qui sotto, dove lo collego alla seriale di un raspberry.

Cosa può essere ? Ho pensato al buffer troppo piccolo, ma si presenta pure con frasi molto corte.

Code: [Select]
Linux raspy4.19.42-v7+ #1219@SMP Tue May@14 21:20:58 BST 2019 a⸮ٝ⸮5

}⸮uy⸮⸮ae⸮⸮5⸮}⸮⸮⸮
 dbeop e,⸮!
dasuac⸮⸮a

b/ wB⸮9}a⸮⸮
rdpbw
SS⸮ is enabled@⸮⸮bab⸮q⸮⸮⸮⸮}⸮r}⸮ba:ej⸮⸮⸮⸮⸮}⸮yayy⸮
This is cill prtp t oroot@raspy:~#
root@raspy:~#
root@raspy:/# l
bin   dev  home  lost+found  mnt  proc run   server  srv  tmp   usb@⸮⸮⸮u
boc s   
root@raspy:/#

dukeluca86

#1
Nov 11, 2019, 04:09 pm Last Edit: Nov 11, 2019, 04:10 pm by dukeluca86
Questo è il codice usato

Code: [Select]

void loop() {

  if (Serial.available()) {
    soft_serial.print(char(Serial.read()));
  }

  if (soft_serial.available()) {
    Serial.print(char(soft_serial.read()));
  }

}

gpb01

#2
Nov 11, 2019, 04:10 pm Last Edit: Nov 11, 2019, 04:10 pm by gpb01
1. a che velocità fai lavorare la SoftwareSerial?

2. hai adattato i livelli? Arduino lavora a 5V, raspberry a 3.3V

Guglielmo
Search is Your friend ... or I am Your enemy !

dukeluca86

I livelli li ho adattati con un resistenza di 120ohm e uno zener a 3.3. da arduino a raspy, al contrario non li ho adattati ma il livello da 3v3 a 5 dovrebbe andare bene, perchè di solito le porte hanno il LOW da 0 a 0,8 e l'HIGH da 1,8 a 5... però devo controllare meglio sul datasheet dell 328p.

la velocità è la stessa sia per la hardware che per la software, impostata a 115200.

gpb01

Scordatela quella velocità ... :D
... la SoftwareSerial, abbiamo dimostrato tempo fa qui sul forum, è affidabile fino a 9600 ... già a 38400 non va più bene.

Prova a 19200 o cala definitivamente a 9600.

Guglielmo
Search is Your friend ... or I am Your enemy !

dukeluca86

#5
Nov 11, 2019, 05:03 pm Last Edit: Nov 11, 2019, 05:54 pm by dukeluca86
ok. Ho sistemato l'adattamento di livello, ma niente da fare, è migliorato un pò ma il problema persiste. Il fatto è che devo modificare i parametri dal raspberry e mi secca un pò perchè avevo altre cose che volevo gestire a 115200. va beh, in caso vedo se si può usare l'hardware serial dai pin 0 e 1.

Ma posono dare problemi se li uso anche per programmare il nano ? O devo scollegarli ogni volta ? No perchè l'RX è bufferizzato con due transistor e non dovrebbe dare rogne, mentre il TX ha solo una resistenza e uno zener, questo vuol dire che mentre lo programmo la roba arriva pure al raspy, spero non interferisca.

Niente, ho provato ma va per forza dissaldato.

gpb01

#6
Nov 11, 2019, 06:02 pm Last Edit: Nov 11, 2019, 06:03 pm by gpb01
Se devi per forza andare a quelle velocità, ti serve un qualche cosa con più di una seriale hardware ...
... o una scheda basata su ATmega1284P (es. QUESTA, con due seriali HW) o una Arduino MEGA con 4 seriali a bordo.

Guglielmo
Search is Your friend ... or I am Your enemy !

dukeluca86

Grazie intanto, posso anche abbassare alla fine.

Però è sorto un altro problema. Scrive male anche in TX, cioè sul raspy se do:

Cat /dev/ttyS0

Mi lista lo stream della seriale, e si vede che i caratteri a volte vengono scritti bene, altre volte troncati e altre ancora viene giù roba incomprensibile...

Cosa può essere ?

gpb01

Ma le masse le hai messe in comune?  Hai abbassato la velocità della SoftwareSerial?

Guglielmo
Search is Your friend ... or I am Your enemy !

dukeluca86

Le masse sono in comune certamente, e uso la seriale hardware. Non uso più la software.

In sostanza alla pressione di un pulsante scrivo al raspberry facendo il login e dicendogli di spegnersi. Ovviamente così funziona una volta su 10.

E poi ci saranno 10cm di filo mica metri.

speedyant

Controlla che entrambe le seriali abbiano i parametri identici. Come test riduci la velocità fino a che non ottieni caratteri puliti.

dukeluca86

#11
Nov 12, 2019, 11:26 am Last Edit: Nov 12, 2019, 11:30 am by dukeluca86
Ok, ho abbassato la velocita a 9600 e va molto meglio. Strano però.

Ora ho messo un contatore che printa a partire da zero in sù.

In sostanza faccio

Serial.print (i);
Serial.print ("\r\n");
i++

E funziona però se dò cat sulla seriale dal raspy mi printa si i numeri incolonnandoli uno sotto laltro, però occasionalmente ne perde uno, diciamo uno ogni 20-30...

In più a volte i numeri sono attaccati uno sotto l'altro, a volte invece cè una riga di spazio.

E cosa ancora più strana, dopo un pò mi butta fuori dal cat e torna alla console, sul raspy intendo. Premetto che raggiungo il raspy tramite SSH. Ma se redireziono lo stream verso un file di log fa lo stesso, cioè dopo un pò smette di loggare.

Che può essere ?

gpb01

#12
Nov 12, 2019, 11:31 am Last Edit: Nov 12, 2019, 11:31 am by gpb01
La raspberry è un micro computer che gira un OS che ... ha i suoi tempi e le sue "latenze", Arduino è un microcontrollore, senza alcun OS che spara dati a raffica ...

Se vuoi fare una cosa veramente affidabile, anche ad alte velocità, devi mettere in piedi un piccolo "protocollo" che, per ogni invio, indichi ad Arduino che ha avuto buon fine e che può effettuare il prossimo.

Guglielmo
Search is Your friend ... or I am Your enemy !

steve-cr

Le masse sono in comune certamente, e uso la seriale hardware. Non uso più la software.

In sostanza alla pressione di un pulsante scrivo al raspberry facendo il login e dicendogli di spegnersi. Ovviamente così funziona una volta su 10.

E poi ci saranno 10cm di filo mica metri.
Dipende in che "ambiente" stai lavorando, che disturbi elettromagnetici ci sono (alimentatori switching, inverter nei paraggi, ecc...)

Prova solo a togliere i 10 cm di filo e vedi di collegarli con un ponticello oppure, in qualche modo, con UN centimetro di filo.
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

Claudio_FF

Io ho provato solo una volta a testare la seriale hardware di un RasPy (ma era ancora una delle prime versioni) e non permetteva neppure il full duplex (semplice ricezione in loop di quanto trasmesso). Si perdevano un sacco di byte. Credo che il consiglio di ridurre drasticamente il flusso (che non vuol dire la velocità) sia fondamentale. Quindi NO trasmissione continua da Arduino, almeno intervallare ogni trasmissione con una pausa.
* * * * Una domanda ben posta è già mezza risposta * * * *

Go Up