Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problema comunicazione seriale

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Problema comunicazione seriale

Messaggioda Foto Utentedaniele1996 » 22 mar 2020, 9:32

Ciao a tutti, da qualche giorno sto programmando un Atmega328P per gestire gli output di un programma scritto in java. Ho bufferizzato la seriale e in lettura tutto funziona correttamente, solo che al momento di scrivere dati (Quindi trasmettere i dati tramite la seriale) il programma che legge le informazioni dalla porta mi riporta dati che il componente non ha inviato. A mio parere il codice non presenta errori di programmazione che possa riportare un tale funzionamento. Sto usando alcune funzioni (Credo standard) tipo strstr(...) può essere questo il problema? In caso sia questo il problema ho riscritto la funzione (è commentata buffer_contain(char * str)) è giusta?
Allegati
Cattura.PNG
uart_buffer.zip
(31.95 KiB) Scaricato 69 volte
Avatar utente
Foto Utentedaniele1996
590 2 8 11
Sostenitore
Sostenitore
 
Messaggi: 1356
Iscritto il: 29 ago 2011, 11:29

0
voti

[2] Re: Problema comunicazione seriale

Messaggioda Foto Utenteboiler » 22 mar 2020, 10:42

Ce l'hai un oscilloscopio per "sniffare" quello che realmente viene trasmesso sulla linea seriale?

Boiler
Avatar utente
Foto Utenteboiler
18,0k 5 7 13
G.Master EY
G.Master EY
 
Messaggi: 3334
Iscritto il: 9 nov 2011, 12:27

0
voti

[3] Re: Problema comunicazione seriale

Messaggioda Foto Utentedaniele1996 » 22 mar 2020, 10:45

Purtroppo no
Avatar utente
Foto Utentedaniele1996
590 2 8 11
Sostenitore
Sostenitore
 
Messaggi: 1356
Iscritto il: 29 ago 2011, 11:29

0
voti

[4] Re: Problema comunicazione seriale

Messaggioda Foto Utentedaniele1996 » 22 mar 2020, 10:49

questo problema si verifica solo se trasmetto dati dopo averli letti, e alcune volte capita che ricevo dati incomprensibili tipo lettere e numeri a "caso"
Avatar utente
Foto Utentedaniele1996
590 2 8 11
Sostenitore
Sostenitore
 
Messaggi: 1356
Iscritto il: 29 ago 2011, 11:29

0
voti

[5] Re: Problema comunicazione seriale

Messaggioda Foto Utenteluxinterior » 22 mar 2020, 10:59

Controlli preliminari (he riporto solo per promemoria)
bit di parità e stop bit sono configurati correttamente intendo uguali da entrambe le parti ?
C'è un display dove copiare quello che poi viene inviato sul buffer seriale ?
Hai fatto dei test preliminari di TX/RX "a mano" con un programma monitor seriale da PC
Avatar utente
Foto Utenteluxinterior
3.023 2 4 8
Expert EY
Expert EY
 
Messaggi: 1798
Iscritto il: 6 gen 2016, 17:48

0
voti

[6] Re: Problema comunicazione seriale

Messaggioda Foto Utenteboiler » 22 mar 2020, 11:03

Verifica che i buffer di trasmissione e ricezioni siano vuoti, svuotali se necessario.
Se la funzione di trasmissione prende un pointer, assicurati che sia all'indirizzo corretto.

Come scrive luxinterior, elimina tutto il possibile dal programma (commenta tutto) e genera una versione minima per testare la uart (per esempio una funzione echo: tutto quello che arriva sulla linea RX viene rispedito sulla linea TX).

Boiler
Avatar utente
Foto Utenteboiler
18,0k 5 7 13
G.Master EY
G.Master EY
 
Messaggi: 3334
Iscritto il: 9 nov 2011, 12:27

0
voti

[7] Re: Problema comunicazione seriale

Messaggioda Foto Utentedaniele1996 » 22 mar 2020, 11:11

boiler ha scritto: genera una versione minima per testare la uart (per esempio una funzione echo: tutto quello che arriva sulla linea RX viene rispedito sulla linea TX).

Sono partito da quello, nella funzione check_buffer() (richiamata nel loop principale) prima di esserci gli if c'era un solo "send_string(buffer)" e quindi faceva l'echo, funzionava correttamente, si è iniziato a verificare qualche problema nel momento in cui erano presenti gli strstr e inviavo l'ack "OK", se non lo inviavo non succedeva nulla
Avatar utente
Foto Utentedaniele1996
590 2 8 11
Sostenitore
Sostenitore
 
Messaggi: 1356
Iscritto il: 29 ago 2011, 11:29

0
voti

[8] Re: Problema comunicazione seriale

Messaggioda Foto Utentedaniele1996 » 22 mar 2020, 11:17

può essere il problema che non uso il buffer?
Mi spiego meglio:
Codice: Seleziona tutto
void send_string(char * str){
   while((*str) != '\r'){
      TX(*str);
      str++;
   }
   //TX('\n');
}

Questa è la funzione che invia carattere per carattere la stringa, e la richiamavo così:
Codice: Seleziona tutto
send_string("Mia stringa");

Può essere che la devo richiamare così:
Codice: Seleziona tutto
clear_buffer();
sprintf(buffer,"%s","Mia stringa");
send_string(buffer);


?
Avatar utente
Foto Utentedaniele1996
590 2 8 11
Sostenitore
Sostenitore
 
Messaggi: 1356
Iscritto il: 29 ago 2011, 11:29

0
voti

[9] Re: Problema comunicazione seriale

Messaggioda Foto Utenteboiler » 22 mar 2020, 11:19

Prima di tutto il metodo: quando debuggi qualcosa del genere hai due possibilità:
- hai un debugger vero e quindi metti un breakpoint in quella funzione e vedi cosa succede. Se ce l'avessi probabilmente non saresti qui a chiedere.
- non ce l'hai, quindi debuggi a mano. In tal caso modifica le strings che mandi in modo che siano univoche ("OK1", "OK2" e così via). In questo modo sai quale strada ha preso il programma.

Poi, dichiara buffer_full come volatile (e forse anche altre variabili, non ho analizzato a fondo il tuo codice).

Boiler
Avatar utente
Foto Utenteboiler
18,0k 5 7 13
G.Master EY
G.Master EY
 
Messaggi: 3334
Iscritto il: 9 nov 2011, 12:27

0
voti

[10] Re: Problema comunicazione seriale

Messaggioda Foto Utentedaniele1996 » 22 mar 2020, 11:25

Debugger oltre che non averne non so nemmeno come si usa, per programmarlo ho un semplice USBASP, ma a parte questo, la Keyword volatile non l'ho mai usata (dovrei prima documentarmi a cosa serve, lo sto facendo ora)
Avatar utente
Foto Utentedaniele1996
590 2 8 11
Sostenitore
Sostenitore
 
Messaggi: 1356
Iscritto il: 29 ago 2011, 11:29

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti