Go Down

Topic: Buffer di ricezione sporco di F0 all’apertura della porta COM Su Arduino UNO R3  (Read 3512 times) previous topic - next topic

astrobeed

Possibile che sia un problema di "sincronia" con le frequenze per la usb.
Cosi intendi con "frequenze" ?
Scientia potentia est

speedyant

Forse sto facendo confusione con il pll dei micro... Nel senso che per la gestione della usb il micro "genera" la frequenza a seconda di come imposti i parametri del pll.

astrobeed

Penso di aver capito da cosa dipende, mi ha ingannato il fatto che la prima verifica strumentale l'ho fatta con l'analizzatore di stati logici, adesso ho rifatto il test con il DSO, allego lo screen shot di cosa avviene all'apertura della seriale.
In pratica all'apertura della seriale il 16u2 genera un impulso negativo di circa 4 us sul Rx del 328, a seconda della velocità della seriale questo viene interpretato come un carattere valido con vari valori.
Devo verificarlo, però è probabile che il pin Tx del 16u2 viene tenuto in condizione di alta impedenza quando la seriale usb non è in uso, questo per limitare possibili interferenze con l'uso della seriale da parte di altro hardware, nel momento in cui il pin viene riportato alla condizioni di output si crea l'impulso dato che probabilmente è settato a 0 logico e ci vuole qualche us perché ritorni a 1 logico per la condizione di idle.
Nota aggiuntiva, al lato pc in realtà non arriva nulla, mi sono scordato che stavo facendo il test con uno sketch che fa l'eco del Rx sul Tx del 328 pertanto è normale che al pc arriva tutto quello che riceve l'Atmega, eliminato lo sketch non arriva più nulla.

Scientia potentia est

astrobeed

Il "problema" dovrebbe stare in queste righe di codice del firmware del 16u2:

Code: [Select]
/* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */
UCSR1B = 0;
UCSR1A = 0;
UCSR1C = 0;

/* Special case 57600 baud for compatibility with the ATmega328 bootloader. */
UBRR1  = (CDCInterfaceInfo->State.LineEncoding.BaudRateBPS == 57600)
? SERIAL_UBBRVAL(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)
: SERIAL_2X_UBBRVAL(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS);

UCSR1C = ConfigMask;
UCSR1A = (CDCInterfaceInfo->State.LineEncoding.BaudRateBPS == 57600) ? 0 : (1 << U2X1);
UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1));


Vengono invocate ogni volta che si apre la seriale, o viene resettato il 16u2, in pratica l'UART viene resettata e reinizializzata ogni volta che si apre la seriale.
Scientia potentia est

zoomx

Il fatto che a 9600 non compaia spiega a me perché non l'ho notato prima: usavo sempre i 9600 come standard.





astrobeed

Il fatto che a 9600 non compaia spiega a me perché non l'ho notato prima: usavo sempre i 9600 come standard.
Non compare perché un impulso di 4 us è troppo breve per poter essere interpretato come un carattere dalla UART.
Scientia potentia est

PaoloP


testato

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

zoomx

Ho appena provato l'l'HoodLoader2 e il problema sembra sparito. Apro una issue? Non devo per forza aprirla io lo può fare anche un altro.

PaoloP


zoomx

Si, ho seguito la Wiki. Una volta caricato è praticamente trasparente ma non presenta il problema che invece aveva prima: niente F0 a 115200.

Il bug è presente anche nelle Arduino.org che ho preso da RS.

zoomx

Riapro questa vecchia discussione perché sembrerebbe che tale comportamento si presenti con Windows e non in Linux.
L'utente Robin2 ha provato lo sketch su una Mega,Linux Mint con minicom e putty e non ha notato tale comportamento che invece è presente nell'argomento del primo post.
https://forum.arduino.cc/index.php?topic=512209.msg3493962#msg3493962

Non ho una macchina Linux sottomano per cui per adesso non posso replicare le sue prove.

gpb01

Riapro questa vecchia discussione perché ...
... te la lascio passare SOLO perché tu sei l'autore originale del thread ed i vari partecipanti tutt'ora molto attivi ! :)

Altrimenti, in conformità al REGOLAMENTO, punto 16.9, il tuo post sarebbe stato cancellato ed il thread chiuso. Tienilo presente per altri casi ;)

Guglielmo

Search is Your friend ... or I am Your enemy !

astrobeed

Riapro questa vecchia discussione perché sembrerebbe che tale comportamento si presenti con Windows e non in Linux.
Dato che il problema è legato al firmware sul 16u2, non al sistema operativo, trovo difficile credere che questa cosa dipende da Windows, anzi lo trovo impossibile. :)
Adesso non ho tempo per fare verifiche incrociate con Linux, però durante il fine settimana qualche provo dovrei riuscire a farla.
Scientia potentia est

zoomx

Guglielmo,
ho meditato sulla cosa ma la possibile novità mi sembrava un piccolo cambiamento, oppure uno grande, dipende dai risultati.
Ho pensato che aprendo un nuovo post avrei dovuto riscrivere praticamente tutto quanto già scritto qui, sebbene avrei potuto aggiungere un link. Tenerlo unito penso che sia stato meglio.

Ho presente il necroposting, il forum mi avverte con una bella scritta rossa. Grazie comunque!


Go Up