Go Down

Topic: Collegamento half duplex per RS485. (Read 1 time) previous topic - next topic

scaramuzzi

Ciao a tutti. Devo realizzare una connessione half duplex per una rete di Arduino con i 75176. Ho utilizzato un pin per la commutazione tra ricezione e trasmissione e il pin 0 e 1 per i dati in RX e TX. Utilizzo il  comando Serial.print() per trasmettere i dati settando a 1 il pin che stabilisce la direzione dei dati e poi lo resetto a 0 dopo il comando Serial.print(). Esempio

void TxMsg(msg)
{
 Serial.flush();
 digitalWrite(Pin_dir, HIGH);
 Serial.println(msg);
 digitalWrite(Pin_dir, LOW);
}

Dato che il comando Serial.print() utilizza la USART del ATmega328 l'esecuzione passa all'istruzione successiva, prima ancora che tutti i dati sono trasmessi, causando problemi. Qualcuno sa come fare per testare la fine della trasmissione, ad esempio leggendo qualche registro interno?. Spero di essere stato chiaro.
Ciao

scaramuzzi

Trovato!!!

void rs485TxMsg(char *msg)
{
 UCSR0A=UCSR0A |(1 << TXC0);  
 Serial.flush();
 digitalWrite(dir_pin, HIGH);
 Serial.print(msg);
 while (!(UCSR0A & (1 << TXC0))); // attendi fine trasm.
 digitalWrite(dir_pin, LOW);
}

Andrea Ivetich

non capisco bene ma chiamare fush() prima di mandare giu il bIt?
in modo da scaricare la porta...

digitalWrite(dir_pin, HIGH);
Serial.print(msg);
Serial.flush();
delay(30);
digitalWrite(dir_pin, LOW);

e poi UNA CODA DI DATI cioe un BUFFER fatto a coda in cui creo il mio msg e poi lo svuoto di brutto e chiamo FLUSH????

Go Up