Go Down

Topic: Comunicazione seriale arduino mega [RISOLTO] (Read 1 time) previous topic - next topic

Patrick_M

#15
Aug 06, 2018, 08:31 pm Last Edit: Aug 06, 2018, 08:31 pm by Patrick_M
scusami ma io sono "di coccio"  come si dice :)

mi pare che tu stia facendo parlare due seriali tra di loro sulla mega, siccome la seriale "standard" è collegata al monitor seriale dell'ide o apri un altro monitor seriale sul pc (esempio con termite) e la colleghi alla seconda seriale della mega o altrimenti come fai per vedere la risposta e per effettuare l'invio di caratteri...
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

fafidio

Patrick sembra ma non è così.... :)

Ho collegato un dispositivo sconosciuto tramite softserial su un mega e funziona perfettamente.
Se collego lo stesso dispositivo tramite serial1 (hw) o serial2 o serial3 il dispositivo non funziona.
Chi lo sa perchè?

Ho postato i codici con le letture, ma ancora nessuno sa spiegare il motivo....tantomeno io che ho visto il dispositivo che prima funzionava perfettamente sulle seriali hw ed ora solo con seriali simulate.

Non ci capisco più niente.....

Standardoil

Secondo me delle due l'una:
O hai sbagliato a collegarti alle seriali hw
Oppure le hai guastate...
e aggiungo:
No schemi no capire
Prima legge di Nelson (che sono io):
A parità di risultato
maggiore è il pensiero,
minore il lavoro.
Quindi prima di fare pensa!

uwefed

Hai provato di cortocicuitare RX con TX sulla MEGA?

Hai provato di invertire RX con TX tra MEGA e scheda non funzionante.

Ciao Uwe

fafidio

#19
Aug 07, 2018, 08:07 am Last Edit: Aug 07, 2018, 08:20 am by fafidio
e aggiungo:
No schemi no capire
Questo è il semplicissimo schema di collegamento tra il dispositivo che trasmette dati su seriale e l'arduino mega che riceve (o almeno dovrebbe).

Provando con una seriale simulata sul pin 10 funziona perfettamente, con una delle tre seriali hw non legge niente.

Confermo che collegando un arduino uno al mega ed inviando dati dall'una all'altra scheda e viceversa le due schede comunicano perfettamente: escludo errori di connessioni e porte danneggiate.

Ciao Fabio

fafidio

#20
Aug 07, 2018, 08:08 am Last Edit: Aug 07, 2018, 08:16 am by fafidio
@Uwe

In che senso cortocircuitare tx rx? a che scopo?

Le prove di inversione sono state già effettuate senza alcun risultato.

Puso

Comunque anchio credo di avere um problema simile con la Mega ed il bluetooth.

Sulimarco

E' possibile sapere cos'e' il dispositivo sconosciuto, o e' sconosciuto in senso assoluto?

Ciao
Marco

fafidio

#23
Aug 07, 2018, 09:33 pm Last Edit: Aug 07, 2018, 10:37 pm by fafidio
un semplice dispositivo che trasmette dati sulla  seriale arduino Mega che grazie all'aiuto di Nelson abbiamo correttamente configurato  con lo  sketch postato e che fino a poco tempo fa ha funzionato perfettamente, ma purtroppo ora sta creando non pochi problemi.....

@Puso
cosa di preciso fa con la bluetooth?

 

Sulimarco

In che modo il semplice dispositivo pilota la linea seriale?

fafidio

Buongiorno a tutti.

Aggiorno il post sperando in un aiuto per un problema inspiegabile.
Il codice seguente dato dal fornitore del dispositivo basato su pic che "dovrebbe" inviare i dati al mio arduino mega (anzi lo ha sempre fatto ma ora non più), mi permette di leggere sulle porte seriali e stampare i valori riscontrati di ph e redox.
Naturalmente il codice è sia per l'uso con  softserial che Serial1.

Di seguito uno screenshot di ciò che leggo a parità di dati inviati dal dispositivo sulla porta seriale simulata e su una delle  seriali hardware di arduino mega.

Premetto che ho provato a testare le seriali hw di mega e funzionano perfettamente.
Come si può evincere dall'immagine, entrambe le seriali leggono perfettamente il dato iniziale 0x55 (cioè 85), ma successivamente nell'indice da 1 a 8 i valori sono decisamente errati.
Come è possibile che la seriale simulata legge correttamente i dati che arrivano mentre la seriale hardware legge dai errati?
 
Spero vivamente in un aiuto per dare una spiegazione logica al problema.

Grazie a tutti in anticipo.

Code: [Select]

#include <SoftwareSerial.h>

#define rxPin 10
#define txPin 11

SoftwareSerial softSerial =  SoftwareSerial(rxPin, txPin);

//--------------------------------
int CalcChannel(unsigned char ui8type, unsigned char ui8Msb, unsigned char ui8Lsb)  {
int ui8Temp;
if (ui8type==0){
ui8Temp=ui8Msb*256+ui8Lsb;
}
if (ui8type==1) {
ui8Temp=ui8Msb*256+ui8Lsb;
ui8Temp=ui8Temp-2048;
}
return (ui8Temp);
}
//--------------------------------
int ui8Buffer[8][2];
int ui16Idx=0;
int ui8CheckSum=0;
//--------------------------------
//
void setup()  {
 
 pinMode(rxPin, INPUT);
 pinMode(txPin, OUTPUT);
 softSerial.begin(9600);
 //Serial1.begin(9600);
 Serial.begin(9600);
 Serial.println ("test lettura seriale hw");
   
     
}
void loop() {
          // send data only when you receive data:
          if (softSerial.available() > 0) //per arduino1
          //if (Serial1.available() > 0) //per arduino mega
         
          {
            if (softSerial.read()==0x55) { // per arduino1
          //   if (Serial1.read()==0x55) {  //per arduino mega
             
              Serial.println(0x55);
                  ui8Buffer[0][0]=0x55;
                  ui8Buffer[0][1]=0;
                        do {
                           if (softSerial.available() > 0) { // per arduino1
                           //if (Serial1.available() > 0) { //per arduino mega
                            Serial.println (ui16Idx);                           
                            ui16Idx++;                           
                            ui8Buffer[ui16Idx][0] = softSerial.read();//per arduino1
                            //ui8Buffer[ui16Idx][0] = Serial1.read();//per arduino mega
                           
                            ui8Buffer[ui16Idx][1] = ui16Idx;
                           
                            Serial.println (ui8Buffer[ui16Idx][0]);
                           
                           }
                       }while (ui16Idx<=8);
                     
                      ui16Idx=0;                   
                      ui8CheckSum=0;

//Calcolo del check sum
         
        for (ui16Idx=0;ui16Idx<7;ui16Idx++){
       
        ui8CheckSum = ui8CheckSum + ui8Buffer[ui16Idx][0];
        }
       
     Serial.println ("mio checksum");
     Serial.println (ui8CheckSum);
      ui16Idx=0;
        if (((unsigned char)ui8CheckSum)==ui8Buffer[7][0]){
         
          Serial.println("checksum calcolato:");
          Serial.println((unsigned char)ui8CheckSum);
          Serial.println("Pacchetto ricevuto:");

          Serial.println("Lettura del primo canale:");
          if (ui8Buffer[1][0]==0) Serial.println("ph:");
          if (ui8Buffer[1][0]==1) Serial.println("rx:");
          Serial.println(CalcChannel((unsigned char) ui8Buffer[1][0], (unsigned char) ui8Buffer[2][0], (unsigned char) ui8Buffer[3][0])); //calcola il valore
          //
          Serial.println("Lettura del secondo canale:");
          if (ui8Buffer[4][0]==0) Serial.println("ph:");
          if (ui8Buffer[4][0]==1)Serial.println("rx:");
          Serial.println(CalcChannel((unsigned char) ui8Buffer[4][0], (unsigned char) ui8Buffer[5][0], (unsigned char) ui8Buffer[6][0])); //calcola il valore 
          //
                 
         }
         else {
          Serial.println("checksum error:");
         }
         ui16Idx=0;
}
}


}




fafidio

ecco lo screenshot

Standardoil

#27
Aug 10, 2018, 02:05 pm Last Edit: Aug 10, 2018, 02:22 pm by Standardoil
Ma la seriale sw è sulla stessa mega delle hw che non vanno?
E la mega che non va è la stessa che andava due mesi fa?
Prima legge di Nelson (che sono io):
A parità di risultato
maggiore è il pensiero,
minore il lavoro.
Quindi prima di fare pensa!

fafidio

Esatto, è la stessa mega di due mesi fa!
Sulla stessa mega la seriale simulata sui pin rx 10 e tx 11 (ma io collego solo rx), mentre sulla serial1 oppure serial2 oppure serial3 la trasmissione è corrotta.

Ho provato anche con un'altra mega, stesso risultato.

Dubito che sia un problema di hardware.

Sembra che stampi bene l'indice, ma il dato non arriva correttamente: arrivano dati a caso senza senso.

Standardoil

Simula la soft sugli stessi piedini della hw1
Se non usi la hw1 i suoi piedini sono liberi per la soft
Prima legge di Nelson (che sono io):
A parità di risultato
maggiore è il pensiero,
minore il lavoro.
Quindi prima di fare pensa!

Go Up