Sari la conținut
ELFORUM - Forumul electronistilor

Microcontrolere - Interconectare!


78ATI

Postări Recomandate

Buna! Doresc sa conectez doua microcontrolere, printr-un port I/O. Doresc ca pe acest fir comunicarea sau schimbul de date sa se faca in ambele directii prin schimbarea repetata sa directiei porturilor I -> O, O > I: Intrebare:*** Ce se va intampla in cazul unei eventuale "nesincronizari" intre cele 2 Controlere, cand ambele controlere au portul setat ca si Output ? *** Daca pot aparea probleme in functionarea unui microcontroler din acest motiv, cum se poate evita acest lucru?

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

Top autori în acest subiect

  • 78ATI

    4

  • edy_wheazel

    4

  • d2134

    3

  • lucicop

    2

Top autori în acest subiect

in asemenea cazuri de comunicatii se aplica principiul de master si slave .... ai un pic master si unul sau mai multe pic-uri slave ... masterul face toata sincronizarea si astefel scapi de bataia de cap cu conflictele de comunicatie in multimaster, nu zic ca nu se poate multimaster ci ca e destul de dificil de tratat sincronizarea si conflictele in asfel de moduri de comunicatie...Toate cele bune!

Link spre comentariu

Sincronizarea in cazul meu nu este un lucru absolut necesar. Doresc ca cele doua Controlere sa functioneze oarecum independent astfel:PIC-A trimite comanda PIC-B -> PIC -A trece pe receptiePIC-B trimite comanda PIC-A -> PIC -B trece pe receptieTeama mea, este: in cazul in care cele doua PIC sunt in acelasi timp pe SEND, deci pot avea starile: 0-0, 1-0, 0-1, 1-1, acest lucru poate duce la defectarea (arderea) celor doua porturi? sau pur si simplu programul nu va mai functiona...fiind o erroare de sincronizare, insa din punct de vedere electric Controlerele vor fi absolut in stare de functionare?

Link spre comentariu

@d2134, sa inteleg ca punand o rezistenta, nu va mai exista pericolul distrugerii porturilor?Functionarea va ramane aceiasi sau "transmisia" va avea de suferit?Va mulumesc, pentru informatii!

Link spre comentariu

Implementeaza ceva similar cu protocolul ethernet: cand canalul de comunicatie e liber, fiecare vorbeste cand vrea, daca sunt mai multi care vorbesc simultan (coliziuni) atunci fiecare asteapta o durata de timp aleatoare dupa care incearca iar sa vorbeasca, numai daca este liber canalul de comunicatie.Practic e mult mai simplu sa folosesti protocoale de tip master-slave, adica nimeni in afara de master nu vorbeste neintrebat.Bafta!

Link spre comentariu

Pt. a preintampina arderea porturilor (daca sunt amandoua pe send) eu a-si face in felul urmator: a-si folosi un pin de la un alt port pt. control, adica inainte sa trimit date pe port verific starea pinului respectiv, daca (de exemplu) este in stare high atunci nu trimit pt. ca este ocupat, celalalt port imi trimite date, daca e low totul e OK si pot trimitea date.

Link spre comentariu

faci asa : sa zicem ca in protocolu tau de comunicatie nu ai impulsuri de "1"mai mari de 10 ms sa zicem, , ca daca e vreo comunicare nu trec 10 ms si sa fie un "1" stabil pe magistrala. Fiecare controler cand vrea sa transmita ceva are pinu ca intrare evident si verifica daca este "1" pe magistrala, si daca da verifica daca sta stabil timp de 10 ms, daca da atunci poate "vorbi" el, magistrala fiind libera . Celalalt verifica daca are ceva de primit in permanenta si va primi, in urma a ceea ce primeste daca are ceva de trimis, va verifica prin acelasi procedeu daca e libera magistrala, deci nu vor avea cum sa se intersecteze .

Link spre comentariu

Daca exista resurse (adica PIC-urile stiu diverse comunicatii si sunt disponibile) atunci lucicop are dreptate: utilizati ce au gandit altii, nu reinventati roata.Daca exista limitari (de regula de cost), atunci rezistenta aia e suficienta pentru 2 PIC-uri pe aceeasi placa sau macar in aceeasi cutie.Daca sunt mai departate si cu atat mai mult daca mediul e "zgomotos", trebuie reevaluata solutia (si se ajunge probabil la prima varianta)

Link spre comentariu

Poate sunt offtopic, dar de ce ai vrea sa comunici folosind un I/O ? De ce nu folosesti un bus tip CAN sau macar I2C, care in plus poate fi extins in functie de necesitati ?

Trebuie sa cominic in acest mod deoarece am doar un singur port liber! daca aveam doua...parca alta era distractia!Am sa protejej I/O cu rezistori de 4.7Km si voi avea grija sa nu se intample errori in sincronizare.Sa vedem ce va iesii!
Link spre comentariu

Este cam riscant, si din punctul de vedere al protectiei si al sincronizarii. Dar se poate rezova, din pacate nu am lucrat cu PIC-uri dar la Atmel a-si face cam asa: foloseste o linie din port pt. control (initial), dupa care il folosesti ca si magistrala de date. Adica iei de exemplu P1.0 care ii legat de P1.0 al celui de-al doilea uC. Scrii codul in felul urmator: pinul respectiv are o stare prestabilita (low), pt. stand-by, daca are aceasta stare il treci ca si magistrala de date, poate sa primeasca date. Daca amandoua sunt in high atunci nu se comunica, unul dintre ele trebuie sa treaca pe receptie. Pt. Atmel cred ca a-si putea sa ma fortez sa scriu un cod, nu e mare lucru, dar PIC-urile nu ma pasioneaza.

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