Ora problemi con la Newsofterial

Dopo essermi sgrugnato con l'RTC, ora to combattendo con la seriale...

L'hardware: arduino UNO, window XP netbook e un adattatore 232-to-USB (per essere sicuro che il problema non fosse dell'adattatore ne ho provati due di marche diverse).
Ho provato il test della libreria modificato cosi':

#include <...>
NewSoftSerial mySerial(2, 3);

void setup()
{ // set the data rate for the NewSoftSerial port
mySerial.begin(4800);
delay(500);
}

void loop() // run over and over again
{
mySerial.println(“Hello, world?”);
delay(1000);
}

Ho settato 4800 sul erial monitor ma ricevo solo caratteri illeggibili.
Non so che fare...
Suggerimenti ?

Ugo

non è che invece del print devi usare il write? ho cercato velocemente ma non ho trovato documentazione a riguardo purtroppo..
non vorrei che stia mandando la conversione dei caratteri in byte o qualcosa del genere.
prova a inviare un solo carattere e vedere se te lo scrive o se vedi il suo valore in ascii. perchè comunque se qualcosa vedi la comunicazione funziona, e se sei certo che il baud rate e tx-rx sono collegati giusti, allora l'unica spiegazione è da trovarsi nel metodo di invio dei caratteri..

Stando agli esempi ufficiali

#include <NewSoftSerial.h>

NewSoftSerial nss(2, 3);
NewSoftSerial nss2(4, 5);

void setup()
{
  nss2.begin(4800);
  nss.begin(4800);
  Serial.begin(115200);
}

void loop()
{
  // Every 10 seconds switch from 
  // one serial GPS device to the other
  if ((millis() / 10000) % 2 == 0)
  {
    if (nss.available())
    {
      Serial.print(nss.read(), BYTE);
    }
  }
  
  else
  {
    if (nss2.available())
    {
      Serial.print(nss2.read(), BYTE);
    }
  }
}

Parrebbe corretto...

Ho settato 4800 sul serial monitor ma ricevo solo caratteri illeggibili.

puoi linkare i modelli di convertitori? sicuro di aver settato bit di stop, etc... nel modo corretto?

lesto:

Ho settato 4800 sul serial monitor ma ricevo solo caratteri illeggibili.

puoi linkare i modelli di convertitori? sicuro di aver settato bit di stop, etc... nel modo corretto?

Convertitori: Il primo e' un Hama acquistato qalcha gg fa da Mediaword, il secondo e' un vecchi convertitore marchiato uc-232A
Settings: Ehm... l'unica cosa che ho fatto e' stato scrivere quel codice che ho postato. Il resto non ho toccato nulla. Dove e come si settano?

Ugo

mi pare che il serial monitor setti già tutto da solo. sicuro dei collegamenti? tx con rx e rx con tx?

lesto:
mi pare che il serial monitor setti già tutto da solo. sicuro dei collegamenti? tx con rx e rx con tx?

(A parte che per sicurezza ho provato ad invertirli) se li inverti NON si deve ricevere nulla!!!
Io invece ricevo schifezze.

Ugo

da NewSoftSerial | Arduiniana

several important improvements: (a) support for 300, 1200, 14400, and 28800 baud (see caveats), (b) added bool overflow() method to test whether an RX buffer overflow has occurred, and (c) tuned RX and TX for greater accuracy at high baud rates 38.4K, 57.6K, and 115.2K.

mi sa che 1400 baud non sono supportati...

infatti aprendo NewSofSerial.cpp osserviamo 3tavole in base al clock, che rappresentano i tempi di delay in base al baud rate:

{
  //  baud    rxcenter   rxintra    rxstop    tx
  { 115200,   1,         17,        17,       12,    },
  { 57600,    10,        37,        37,       33,    },
  { 38400,    25,        57,        57,       54,    },
  { 31250,    31,        70,        70,       68,    },
  { 28800,    34,        77,        77,       74,    },
  { 19200,    54,        117,       117,      114,   },
  { 14400,    74,        156,       156,      153,   },
  { 9600,     114,       236,       236,      233,   },
  { 4800,     233,       474,       474,      471,   },
  { 2400,     471,       950,       950,      947,   },
  { 1200,     947,       1902,      1902,     1899,  },
  { 300,      3804,      7617,      7617,     7614,  },
};

e 1400 baud non c'è!

prova con gli altri valori!!

lesto:
e 1400 baud non c'è!

prova con gli altri valori!!

Eh? Non credo di aver usato 1400! Dove l'hai letto?
:astonished:

U.

Difatti Ugo usa 4800 :stuck_out_tongue:

Mi sa che da sto pantano non ne esco...

ma se usi la "SoftSerial" (è già nell'arduino IDE) hai lo stesso problema? prova a non collegare l'usbv ad arduino, ma usa la seriale hardware con i chip esterni... che succede?

ahhh ma hai collegato il GND degli adattatori ad arduino?!?!?!?!

lesto:
ma se usi la "SoftSerial" (è già nell'arduino IDE) hai lo stesso problema? prova a non collegare l'usbv ad arduino, ma usa la seriale hardware con i chip esterni... che succede?

ahhh ma hai collegato il GND degli adattatori ad arduino?!?!?!?!

Scusate la latitanza, ma sto impicciato tra lavoro e casini personali.
Rispondo ad una domanda per volta :slight_smile:

  • Non trovo la SoftSerial :frowning:
  • Cosa intendi con seriale hardware e chip esterni? Porta pazienza, sono proprio terra terra...
  • Dalla seriale esce RX, TX, e GND ... ho collegato rx ad un pin tx ad un altro pin e il GND ad uno dei GND di arduino..., senno' come comunica? Dove dovrei collegarlo?

partiamo con ordine.
Carica sull'arduino uno sketch base che comunica a 2400 baud usando la normale Serial.

Prendi il tuo convertitore FTDI (l'ho chiamato chip prima per brevità)
collega tx sul pin 0 e rx sul pin 1. In pratica ti stai inserendo "in parallelo" all'FTDI di arduino, lo scopo del gioco è usare la seriale harware di arduino che sappiamo sicuramente funzionante coi chip per vedere se son loro ad essere configurati male o cosa.

A questo punto alimenti arduino da fonte esterna (alimentatore), ma credo vada bene anche da USB.

prova a comunicare con arduino col chip FTDI. Se sei collegato via USB magari prova anche quella "normale". Non usarle insieme o fai casini, ma tanto il serial monitor dovrebbe impedirtelo.

Se la prova funziona, ok, andiamo al passo 2:

la softserial è già dentro arduino, basta che fai #include <SoftwareSerial.h> e usi quella. Quì esempi e guide utili: http://arduino.cc/en/Reference/SoftwareSerial

provi la softwareSerial sui pin 2 e 3 col chip esterno.

Per ora vedi se funziona così.

La SoftwareSerial è da scartare a priori, perché ha delle limitazioni (es.: blocca l'esecuzione dello sketch in TX/RX perché non è interrupt-driven). Utilizzate fin da subito la NewSoftSerial, è inutile partire utilizzando una cosa che poi dovrete cambiare.

si, ma se la soft serial è di defult al contrrio della newsofserial (che se non erro però lo sta per diventare), un motivo ci sarà.. e dato che stiamo cercando un problema meglio affidarsi a cose più ufficiali possibile per non incorrere in un loop infinito

Non sempre le cose distribuite con l'IDE sono affidabili. Vogliamo parlare dell'Optiboot bacato o della versione hacked Optifix che funziona perfettamente? :wink:

Cmq fate vobis :sweat_smile:

stai mettendo una libreria, che tra l'altro è talmente terra terra che non usa interrutp, usata da anni, contro un prodotto della complessità di un boot-loader appena uscito. :grin:

lesto:
stai mettendo una libreria, che tra l'altro è talmente terra terra che non usa interrutp

Ed è questa la sua più grossa debolezza. Cmq stiamo discutendo del mio-più-bello-del-tuo, quindi lasciamo stare: non diamo nessun contributo all'amico. :wink:

Scusate la lunga latitanza, sono riuscito a rimettere le mani sul problema solo mezz'ora fa.

Ho provato a mettermi n parallelo sui piedini 0 e 1 usando la SoftSerial.
Niente da fare, con gli adattatori mi arivano lo stesso caratteri illeggibili.
Scartato il problema software, e' evidente che il problema e' hardware.

Potrei dare la colpaagli adattatori, ma mi stupisce siano fottuti entrmbi.
Non e' ce ho un Arduino bacato e i suoi livelli d'uscita non sono compatibili con la rs-232?
:frowning:

Ugo