Vai al contenuto
PLC Forum


Ricezione Dati Dalla Seriale


madmax

Messaggi consigliati

Ciao a tutti, ho letto che quando si spediscono dei dati lungo una linea seriale bisogna tenere conto del campionamento in ricezione e che questo viene effettuato al centro di ogni bit. Come faccio a tenere conto di questo nella progettazione della routine di ricezione? E questo campionamento chi lo fa? Il max232/485?

Ho un dispositivo a microcontrollore che dovrebbe ricevere dei dati da una linea seriale.

Ho parecchia confusione in testa, se qualcuno potesse darmi qualche suggerimento... grazie...

Link al commento
Condividi su altri siti


ifachsoftware

Il Max 232/485 ti converte il livello logico della RS232/485 allo 0/5V che vanno a Micro , nel micro ti devi smazzare la comunicazione.

Ciao B)

Link al commento
Condividi su altri siti

Per ora vorrei capire in generale come si affronta il problema...

devo impostare una specie di timer che vada a leggere i bit a intervalli regolari sperando di beccarli sempre al centro??

Ho trovato un programmino in assembly per un st6 e la routine di ricezione mi pare che faccia questo,

Viene attivata da un interrupt sul piedino di RX e poi controlla se il segnale è 1 setta il primo bit dell'accumulatore "A" e se è 0 lo resetta. Ad ogni set o reset sposta a sinistra i bit dell'accumulatore e poi li carica in "data"

*******Questa è la parte di codice che mi interessa********

REC2  LDI A,04h                ; \

REC3  DEC A                    ;  |

  JRNZ REC3                ;  |  tempo = 1 / ( 9600 x 2 ).

  LD A,data                ; /

Link al commento
Condividi su altri siti

Prima di tutto volevo chiarirmi le idee per capire il funzionamento della ricezione a livello di singoli bit...

Il mio micro è un atmega8 e ha l'UART quindi se ho capito bene ci pensa lei a fare tutto... depositando il byte in un registro... userò la routine scritta nel datasheet

E se avessi più byte da ricevere?

Grazie a tutti anche per il link lo guarderò domani perchè ora vado al lavoro... magari domani tornerò a farvi qualche domanda... confidando nella vostra pazienza... ciao a tutti!!!!!!!!!!!!

Link al commento
Condividi su altri siti

Vorrei costruire un sistema di acquisizione dati remoti con tanti nodi slave e un master che interroga.

Gli slave sono dispositivi a microcontrollore che acquisiscono e visualizzano in locale l'altezza del liquido in un serbatoio. Per ora ho costruito uno dei nodi slave che visualizza l'altezza su un display.

Ora vorrei che il master che è un PC interrogasse gli slave e che questi ultimi rispondessero con l'altezza.

Ecco perchè mi interessava la comunicazione seriale...

Non sono sicuro di una una cosa, questa parte di codice (quella per l'ST6) cicla su se stessa otto volte e poi carica il dato nell'accumulatore. Perchè proprio otto volte? Ha a che fare con la velocità di 9600?? Come si ragiona in generale per ricevere i bit?

RECO  LDI A,04h                          ; \

REC1  DEC A                                  ;  |

  JRNZ REC1                    ;  |  tempo = 1 / ( 9600 x 2 ).

  NOP                              ;  |

  NOP                              ; /

REC2  LDI A,04h                          ; \

REC3  DEC A                                  ;  |

  JRNZ REC3                    ;  |  tempo = 1 / ( 9600 x 2 ).

  LD A,data                      ; /

Link al commento
Condividi su altri siti

ifachsoftware

Probabilmente in quell'esempio si sono costruiti la gestione della ricezione non avendo a disposizione di una porta seriale.

In quel caso considera che 9600 sono i bit al secondo e che quindi devi fare le opportune temporizzazioni per leggere correttamente la sequenza dei bit che ti arrivano.

Ciao :)

Link al commento
Condividi su altri siti

Ma allora bisogna conoscere il tempo di esecuzione delle singole istruzioni? Questo tempo è scritto nei datasheet dei microcontrollori?

ciao e grazie...

Link al commento
Condividi su altri siti

ifachsoftware

Certo , e' un dato fondamentale per chi programma in assembly , anche se nel tuo caso potresti fare la cosa lavorando sugli interrupt di un timer , quindi fregandotene (in linea teorica) dei tempi delle singole istruzioni , l'iportante e' che leggi il bit in arrivo nella giusta finestra temporale.

Ciao :)

Link al commento
Condividi su altri siti

Ho letto per benino l'articolo del link che mi avete dato, è abbastanza chiaro e ho capito parecchie cose.

Io comunque dato che ce l'ho userò l'UART dell' ATmega8, ora cercherò di mettere in piedi la rete master-slave, per adesso con un solo slave e PC.

Grazie a tutti per l'aiuto.........ciao..... ^_^

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...