Seriale

Salve a tutti.

Sto cercando di imparare la comunicazione seriale, in particolare tra Arduino UNO e fuga.
Mi è stata data una scheda FPGA contenente 3200 valori, che vorrei ricevere sulla mia scheda Arduino e visualizzarli sul serial monitor in formato binario.
Il problema che riscontro è che i valori che ricevo sono solamente 255 invece dei 3200 che dovrei avere.
Qualcuno può aiutarmi?

Per completezza vi allego il codice semplicissimo che ho usato, con la variabile c usata per controllare il numero esatto di valori che ricevo:
int value =0;

void setup() {
Serial.begin(115200);
}

void loop() {
int c=0;
while(Serial.available())
{
value=Serial.read();
Serial.println(value,BIN);
Serial.println(c);
c++;
}
}

fai passare tutti sulla stessa porta?
abbassa quel valore di baund che Arduino non lo digerisce.
c'è anche l'apposito tag code, generalmente uno sharp, che permette di inserire il codice in maniera più consona.

Si tutto sulla stessa porta.

Potrebbe essere il baud troppo alto? questo potrebbe essere un problema...perchè la velocità settanta sull'FPGA è 115200

magari mi sbaglio ma io con tale velocità ho sempre e solo avuto problemi.
Non che sia troppo veloce, io vado a 500000 baund perfettamente.
Non puoi abbassare l'fpga?
Ma poi scusa, fai tutto su solo una porta!
almeno hai collegato FPGA solo sul RX di Arduino?
non è che sia il massimo!
prova con softserial e collega l'fpga di un'altra porta.
Rimango dell'idea che sia troppo elevato!I test si fanno a 9600 baund.
Poi l'ultima cosa che si fa è elevare tale segnale!

Puoi mettere un secondo bit di stop sull'fpga?

quando l FPGA trasmette il computer riceve! non è bello!

No scusa....uso le porte 0 e 1 sull'arduino

la 0 e la 1 sono le stesse dalla usb!, prova ad usare softwareSerial e collegati su altri pin

No vabbè...ho provato la softwareSerial...ora non ho neanche l'output.... :o :o :fearful: :fearful: :fearful:

vbetreme ha ragione: non puoi usare la USART di Arduino e contemporaneamente usare il serial monitor.

Comunque, a 115200 baud meglio usare un buffer di ricezione.

La libreria SoftwareSerial dispone già di un buffer di ricezione che potrebbe esser sufficiente per la tua applicazione.

Nel caso aggiungi un secondo buffer nel tuo sketch.

e casomai mostra il codice usato

#include <SoftwareSerial.h>

SoftwareSerial porta(7,8);//rx tx
int value=0;

void setup()
{
  Serial.begin(115200);
  pinMode(7,INPUT);
  pinMode(8,OUTPUT);
  porta.begin(115200);
}

void loop()
{
  int c=0;
  while(porta.available()>0)
  {
    value=porta.read();
    Serial.println(value,BIN);
    Serial.println(c);
    c++;
  }
}

Ho provato così, niente, adesso i valori sono addirittura diminuiti, sono 106 >:(

E' come ti dicevo: devi usare un buffer.

#include <SoftwareSerial.h>

SoftwareSerial porta(7, 8);  // rx tx
byte buffer[256];
byte c = 0;

void setup() {
  pinMode(7, INPUT);
  pinMode(8 , OUTPUT);
  Serial.begin(115200);
  porta.begin(115200);
}

void loop() {
  c = 0;
  while(porta.available() > 0) {
    buffer[c] = porta.read();
    c ++;
  }
  buffer[c] = 0;
  Serial.println(buffer);
}

ho provato, mi dà molti errori in compilazione

Prova a sostituire
byte buffer[256];
con
char buffer[256];

ok...adesso sembra trasmettere bene..Visualizzandoli però sul serial monitor, ho tutti simboli strani, vorrei invece avere la codifica binaria

Al posto di
Serial.println(buffer);
fai
for (byte i = 0; i < c; i ++) {
Serial.println(buffer*, BIN);*

  • }*

note: no known conversion for argument 1 from 'char [256]' to 'long unsigned int'
Errore durante la compilazione

risolto... era nel Serial.println del for da mettere buffer*, non solo buffer..*