Pages: [1]   Go Down
Author Topic: Collegamento half duplex per RS485.  (Read 1559 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 11
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 11
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);
}
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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????
Logged

Pages: [1]   Go Up
Jump to: