calcolo del baudrate

ciao volevo avere una conferma; se ho un programma del tipo:


void loop()
{
operazione
delay(5ms)
operazione
delay(5ms)
serial.print(stirnga lunga 30 caratteri)
delay(10ms)
}

il tempo che passa tra un’invio e l’altro è di 20 ms??
se imposto un’baudrate di 19200 ci sto dentro?? 30caratteri*8bit/0.01sec=12000bit/sec
ci sta dentro come ragionamento o devo considerare 10ms tra un’invio e l’altro???

grazie cioa Confa

PS scusate se continuo ad aprire topic ma sto smanettando un sacco con Arduino e trovo sempre un sacco di problemi,quindi a volte ho bisogno di capire se faccio giusto.

il tuo ragionamento è giusto in caso serial.print() ti mette in attesa (diciamo che ha un delay interno) nel caso stai superando il baudrate

Ciao Confa ciao lesto

Per primo la seriale non usa 8 Bit per la trasmissione di un Byte ma 10, 11 o 12 Bit a secondo del numero di bit di start, di stop e paritá. Nel nostro caso usa 10. L'esecuzione del Serial.print di una stringa di 30 caratteri dura 14msecondi. Misurato col programma sottostante.

Il programma:

void setup() {
  Serial.begin(19200);   
   Serial.println(micros() );       
delay(5);
delay(5);
//Serial.print("abcdefghijklmnopqrstuvwxyz1234");
delay(10);   
   Serial.println(micros() );  
}
void loop() {}

con 19200 baudrate senza la stampa della stringa ci mette 21232 µsecondi con la stampa della stringa ci mette 35804 µsecondi che sono 14msecondi in piú. Con un baudrate di 1200 ci mette 240msecondi in piú stampando la stringa di 30 caratteri.

Da questo deduco che il Serialprint ferma il programma nello stesso modo come un delay.

Ciao Uwe

intanto vi ringrazio per il tempo e la chiarezza. ora vedo di far due prove, un'ultima cosa; per guerdare il tempo di ciclo uso la funzione micros come nell'esempio o mi conviene usarne un'altra??? cioa Confa

la micros è quella con risoluzione migliore (1/1000000 di secondo) altrimenti per cose "lunghe" puoi usare la millis (1/1000 di secondo)

ok, grazie. comunque tornando a prima vorrei esser "ri-sicuro". se ci mette 35804 microsecondi=0,035s, ad inviare 30 caratteri che sono 10bit l'uno fanno 300bit, quindi ci vuole un baudrate>= 300/0,035=8571bit/s; e quindi con 19200 ci sto più che dentro, oppure sto andando a viole e non ho capito nulla??? poi vedo di non rompere più...spero grazie e buona notte Confa

Da questo deduco che il Serialprint ferma il programma nello stesso modo come un delay.

Vuol dire che rllenti il programma, ma non perdi dati. CIao Uwe

ok ci sono. adesso avrei un'altra domanda, io uso un programma in c++ per leggere dalla seriale, il numero di bit letti devo impostarlo a 8 o a 10, imio codice per impostare la seriale è di questo tipo.

dcb.ByteSize = 8; // numero di bit dcb.StopBits = ONESTOPBIT; dcb.BaudRate = CBR_19200; // baudrate dcb.Parity = NOPARITY; // nessun bit di parità dcb.fAbortOnError = 0;

dei 10 bit che arrivano da arduino, 1 sarà di parità, 8 il dato, e 1 quello di stop, giusto??? sapete dovo trovo i riferimenti alla trasmissione seriale in arduino??? grazie ancora Confa