| |
| | #1 (permalink) Top |
| User |
Basta usare la formula appropiata per settare il registro del divisore SPBRG, avendo cura di settare anche il birt BRGH. la formula è: Baud Rate = FOSC/(16 (X + 1)) risolta per X: X=((FOSC/Baud Rate)/16) - 1 nel caso di FOSC = 16MHz e Baud rate = 115.200 avrai SPBRG = 8 ( errore di br accettabile, divisore teorico sarebbe 7,68) Se hai FOSC = 4 MHz non puoi usare i 115.200 Baud.
__________________ Peace & Love Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein) |
| | |
| | #2 (permalink) Top | |
| User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| !!!
si è vero c'è una formula, devo andarla a rivedere.. e applicarla, l'avevo rimossa, o meglio ricordavo erroneamente che SPBRG influiva in modo standard con le velocità espresse nella tabella, invece esso può generare dei valori di bps opportuni, comppresi ovviamente nel range descritto dalla tabella. ogni tanto un ripasso, non fa male! comunque pian piano cercherò di costruire quest soluzione che è veramente interessante, ma quante applicazioni si possono fare ? a dopo e grazie Citazione:
| |
| | |
| | #3 (permalink) Top | |
| User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| ok
.... sono andato a leggere il datasheet allora Fosc=16.000.000 baud Rate = 115.00 = _______________ 16( X +1) per cui 1 16 * X + 16 __________ =__________________ 115.200 16.000.000 16.000.000 __________ - 16 = 16 * X 115.200 16.000.000 _____________ - 16 115.200 HBRG X= ___________________ = 7.68 16 ma deve essere un numero intero quindi 8 però in realtà se facciamo gli stessi calcoli usando 4.000.000 e un baud rate di 9600 X = 25,04 che arrotondato con 25 rappresenta un dato quasi esatto, con una differenza meno di 0.06 in questo caso invece abbiamo uno scarto di 0.32 , ben più grande... forse e ripeto fors,e potrebbe essere meglio usare un 20 Mhz magari otteniamo un' arrotondamento meno aggressivo? faccio una prova... Citazione:
| |
| | |
| | #4 (permalink) Top |
| User |
Più è alta la frequenza del quarzo minore è l'errore percentuale del generatore di baud-rate. La massima precisione però non è strettamente necessaria, la USART hw dei PIC, se non ricordo male, fa 3 (5?) campionamenti per ogni bit quindi il rischio di perdita dati è decisamente ridotto. Come standard io tendo ad usare la massima frequenza di funzionamento dei PIC, usando oscillatori esterni ed il PLL interno, l'uso di un oscillatore esterno garantisce una migliore precisione di frequenza, anche con variazioni di temperatura, inoltre libera un piedino del micro che io in genere dedico per il debug.
__________________ Peace & Love Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein) |
| | |
| | #5 (permalink) Top | |
| User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| ok
ok allora vado a prendere adesso un quarzo da 20 Mhz poi faccio il calcolo per ottenere il HBRG corretto per avere i 115200 baud.. che dici.. ogni sera per un motivo o l'altro sto scendendo a catania centro... è un casino ogni volta! a dopo fausto Citazione:
| |
| | |
| | #6 (permalink) Top | |
| User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| Occhio
ho comprato due quarzi uno da 20 e l'altro da 16 Mhz, il risultato è che funzionano solo nelle velocità indicate nel datasheet, per cui la mia considerazione iniziale era corretta, per avere USaRT hardware da 115200 occorre passare al 18F2320 e quarzo da 40 Mhz a pagina 200 trovi la soluzione. quindi non mi resta che passare alla UART software se voglio rimanere con 16F876. Ho com test solo la TX.. perchè a me interessa in futuro inviare SMS.. quindi quei calcoli vanno bene ma solo nell'ambito delle velocità prestabilite. a dopo Citazione:
| |
| | |
| | #7 (permalink) Top | |
| User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| Funzionaa
allora ci siamo questo primo ste è superato, il pic 16F876 con quarzo da 16 Mhz trasmette ee riceve a 115200 quindi conpatibile con l' FBUS dei cellulari. ![]() ti chiedo scusa, , la mia "supposta" era errata, per scrupolo ho rifatto la prova ci siamo funziona con un applicazione in JAva che legge e scrive su seriale.. devo vedere forse nel'Hyper terminal avevo qualche impostazione errata. Adesso ho sonno vado a dormire.. il set delle variabili eccolo:MOVLW 8 MOVWF SPBRG MOLW b'00100100' MOVWF TXSTA MOVLW b'1001000' MOVWF RCSTA insomma nel registro TXSTA il bit BRGH=1 8 in SPBRG come da calcolo, daltronte 57600 x 2 = 115200 era quasi scontato che da 16 si passi a 8 !!! Ho già realizzato la sagoma in plexiglas per connettermi al cellulare, dovrei usare un alcatel.. ha i pinout fuori dalla sim.. per cui lunediì ci rimettero mani, girando per i negozi stasera ho notato che tutti i nuovi Nokia hanno i pin sotto la sim... insomma strateggico, per non farsi fregare.. ...bha , ...adesso mi riposo per qualche giorno. ti ringrazio, se non avessi avuto il tuo sprono mi sarei rassegnato, su quello che leggevo nel datasheet... invece un tarlo in testa mi diceva, "prova figliuolo, prova, chi sa se quel buonomo nel forum di barone rosso la racconta giusta... abbi fiducia figliuolo ..prova" ok a dopo fausto Citazione:
| |
| | |
| | #8 (permalink) Top |
| User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
|
Visto che hai i due quarzi, ti conviene usare quello da 20 Mhz, dato che con 20Mhz e 0x0A come divisore ottieni 113.636 con un errore pari a 1,37%, mentre con 16Mhz e 0x08 come divisore ottieni 111,111 con il 3.6% di errore. Michele
__________________ __________________________________________________ The worst day flying is better than the best day working. |
| | |
![]() |
| Bookmarks |
| |
Discussioni simili | ||||
| Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
| Connessione tra due PC tramite modem GSM - HELP ! | cyborgmax | Software | 21 | 29 giugno 10 23:48 |
| Pic, mio caro Pic.... | fai4602 | Circuiti Elettronici | 7 | 24 novembre 03 20:34 |