Sari la conținut
ELFORUM - Forumul electronistilor

Mai multe receptoare pe acelasi bus UART


ohamoha

Postări Recomandate

Salut,Aplicatia mea foloseste un PIC central care trebuie sa comunice cu trei module, doua dintre ele fiind obligatoriu UART, iar al treilea este la bunul meu plac (pot alege alt protocol). Pentru scris folosesc MikroC. Problema este ca ansamblul se vrea de precizie in masurarea timpului, asa ca imi este cam peste mana sa folosesc libraria SoftwareUART. Intrebarea mea este, pot sa leg cele trei module la acelasi port UART hardware al PIC-ului? Functioneaza o astfel de lipitura? Identificarea destinatarului se va face pe un layer superior (trimit un sir de caractere care va contine si un identificator).Merci fain,Adi

Link spre comentariu
  • Răspunsuri 5
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • ohamoha

    2

  • bogdan_

    1

  • ratza

    1

  • Mindware

    1

Top autori în acest subiect

Daca modulele atasate microcontrollerului nu trebuie sa vorbeasca intre ele pe acel bus UART, partea de Tx a microcontrollerului e simpla.Pur si simplu conectezi toate Rx-urile modulelor la Tx-ul microcontrollerului. Cat despre drumul inapoi(catre microcontroller) al datelor, aici e mai greu, pentru ca exista riscul ca ambele module sa vobeasca in acelasi timp si nici chiar cu un dispozitiv adaptor (la nivele logice, vorbind) sa nu reusesti, decat daca acel adaptor stie cand se termina mesajul(intreg sirul de caractere) al fiecarui modul in parte, moment dupa care sa permita celorlalte module sa "vorbeasca". Daca ar sti sa blocheze traficul doar pe parcursul unui singur caracter(desi , chiar si asta implica ceva inteligenta pentru acel adaptor), ar exista posibilitatea de a permite altui modul sa trimita un caracter intr-un sir pe care microcontrollerul il crede al primului modul(cel care a initiat conversatia/transferul ), compromitand intregul mesaj.Solutie ar fi folosirea a cate unui pin pentru receptia UART a fiecarui modul in parte(transmisia facandu-se broadcast(cumam prezentat mai sus)) dar asta implica rutine complicate si intreruperi de care poate nu beneficiaza al tau microcontroller....etc..etc...Deci ori folosesti un microcontroller cu cel putin 2 UART-uri (lpc2148, etc) ori...folosesti pentru toate un bus gen I2C sau CAN. I2C stie sa faca broadcast(daca vrei sa anunti toate device-urile de un eveniment, simultan).Acum, intrbarea e , concret ce trebuie sa legi la ce si ce sa faca ele? Poate gasim alta solutie....Numai bine! :bere:

Link spre comentariu

Transmisia invers o poti aranja la nivel de software. Conectezi toate TXurile de la slave la RXul masterului. In mod normal fiecare slave are TX de la USART dezactivat si pinul TX facut ca intrare. Trece in mod activat si iesire doar dupa ce primeste ceva care ii spune sa faca asta. Masterul asigura managementul comunicatiei. In orice caz, oricum ai face la nivel HW, ai un singur RX de la master deci asta inseamna ca o transmisie simultana duce la erori, trebuie sa eviti asta.Daca vrei ca oricare sa vorbeasca cu oricare, mai bine te indrepti spre un bus I2C care ar necesita HW minim. Mai complicat poti merge pe RS485.

Link spre comentariu
...doua dintre ele fiind obligatoriu UART, iar al treilea este la bunul meu plac (pot alege alt protocol)...

UART nu este un protocol, e o interfata la nivel fizic. Peste ea poti implementa diferite protocoale.

 

...Problema este ca ansamblul se vrea de precizie in masurarea timpului, asa ca imi este cam peste mana sa folosesc libraria SoftwareUART...
Defineste ce inseamna de precizie. Daca e important timpul atunci sincronizezi toate dispozitivele si trimiti pachete de date cu stampila de timp.

 

Intrebarea mea este, pot sa leg cele trei module la acelasi port UART hardware al PIC-ului?
Da, daca stii cum s-o faci si daca alegi un protocol corespunzator.

 

Functioneaza o astfel de lipitura?
Ce lipitura? Vrei sa le lipesti pur si simplu intre ele cu fludor? Se poate si asta daca pinii Tx ai dispozitivelor slave pot fi trecuti in 3-state si daca implementezi un protocol de tip master-slave. Tx de la master il legi la Rx de la slave si invers.
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări