Sari la conținut
ELFORUM - Forumul electronistilor

multiplexor si PIC16F876


Vizitator c0de

Postări Recomandate

Buna.Am o problema care ma framanta de cateva zile si nu ii gasesc solutia. Folosesc un PIC16F876 pentru a comanda 3 axe (2 de translatie si una de rotatie). Pe fiecare axa am 3 senzori digitali (de fapt sunt bariere optice - fotodioda-fototranzistor... si functioneaza ca niste switch-uri... pe mine ma intereseaza doar trecerea dintr-o stare in alta, ex din Off in ON). Pentru fiecare axa, 2 dintre senzori reprezinta capetele de cursa iar unul se comporta ca un traductor incremental (de genul senzorilor din mouse). In momentul de fata am acesti senzori legati la PIC ca si input (pinii RB0-RB7 si RC0). In functie de semnalele care le achizitionez, comand motoarele de pe fiecare axa (motoare de curent continuu) cu ajutorul unor punti-H. Porturile de output sunt RA0-RA5.Acum vreau sa leg la acelasi PIC si un LCD si e posibil ca in viitorul apropiat sa trebuiasca sa mai comand o axa. In aceste conditii as dori sa mai reduc din pinii de input (adica cei de la senzori). Pentru a face acest lucru m-am gandit sa folosesc fie multiplexoare fie 10-to-4 line encoder (nu stiu cum le zice in romana). Am gasit pe net documentatia pentru un asemenea encoder: 74HC147 care are 10 intrari digitale si 4 iesiri digitale.Problema este ca la un moment dat as putea sa am mai multi pini de input activi (adica ON) iar conform documentatiei acest encoder trimite datele pentru pinul cu prioritate mai mare... ceea ce nu-mi convine. Ideal ar fi sa pot intarzia cumva transmisia semnalului de la pini, astfel incat encoderul sa poata "procesa" toate semnalele. M-am gandit sa pun intre senzori si encoder un buffer octal ... insa nu stiu daca acesta imi rezolva problema. Orice idee este binevenita. Va multumesc anticipat.

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

Top autori în acest subiect

  • Abram Burel

    4

  • sofian

    2

  • MirceaM

    1

  • vsurducan

    1

Top autori în acest subiect

Vizitator c0de

atunci incearca multiplexoare 8:1(74hc251) sau chiar 16:1

Merci. cred ca asta e solutia cea mai buna... astfel voi putea citi fiecare pin intr-o bucla infinita. Multiplexoare 8:1 am mai vazut in comert... 16:1 am cautat pe net la ceva magazine din romania dar n-am gasit. Aveti vreo idee pe unde as putea gasi? In cel mai rau caz pot sa fac unul din 5 multiplexoare 4:1 (4 pt intrari si unul pentru celelalte 4 multiplexoare).Merci
Link spre comentariu

Dar cum de ai ajuns la 16:1? Initial te multumeai cu un 10:4! Anyway, pentru un 16:1 folosesti 2 x 8:1 cu 3 pini de adresa + inca 2 de discriminare. Asta daca nu vrei sa te complici cu un simplu "inversor" cu un tranzistor si cateva rezistente (sau un tranzistor "digital"), caz in care economisesti un pin.Concluzia: 2 multiplexoare 8:1, un inversor si ai 16 intrari pentru care consumi 1 intare si... 4 iesiri (3 pe adresele ABC si una pentru "enable")

Link spre comentariu
Vizitator c0de

Dar cum de ai ajuns la 16:1? Initial te multumeai cu un 10:4! Anyway, pentru un 16:1 folosesti 2 x 8:1 cu 3 pini de adresa + inca 2 de discriminare. Asta daca nu vrei sa te complici cu un simplu "inversor" cu un tranzistor si cateva rezistente (sau un tranzistor "digital"), caz in care economisesti un pin.Concluzia: 2 multiplexoare 8:1, un inversor si ai 16 intrari pentru care consumi 1 intare si... 4 iesiri (3 pe adresele ABC si una pentru "enable")

Eram in faza de cercetare. Nu m-am mai intalnit cu probleme de genul asta si n-am mai lucrat cu multiplexoare. Am luat un CD4051 8-1 analog mux/demux si am incercat sa vad ce-mi iese. Rezultatul e un pic ciudat si probabil un electronist ar rade de mine. Am conectat output-ul de la cd4051 (pinul 3) la RA0 a carui stare o citesc la un interval de 200ms (afisez starea lui pe LCD). CD4051 este legat astfel:pin16 - Vdd - +5Vpin6 (INH) si pin8 (Vss) - la masaIn mod normal, fara sa dau comanda pe A,B sau C, output-ul (pin3) ar trebui sa aiba valoarea input-ului 0 (pin13). Dar, fara sa alimentez pinul 13, rezultatul e urmatorul: starea output-ului e OFF cam 1 secunda dupa care trece in ON si se schimba rapid iar in OFF... si tot asa.Eu nu am pus condensatori pe intrarile mux-ului si nici pullup sau pulldown pe intrarea RA0 a PIC-ului. Oare asta sa fie problema? Sincer sa fiu, cunostintele mele de electronica sunt putine si nu stiu exact cum anume sa leg aceste multiplexoare. Ma intreb daca cele TTL (parca 74HC151) au alt mod de conectare si functionare....
Link spre comentariu

Dar cum de ai ajuns la 16:1? Initial te multumeai cu un 10:4!

Anyway, pentru un 16:1 folosesti 2 x 8:1 cu 3 pini de adresa + inca 2 de discriminare. Asta daca nu vrei sa te complici cu un simplu "inversor" cu un tranzistor si cateva rezistente (sau un tranzistor "digital"), caz in care economisesti un pin.

Concluzia: 2 multiplexoare 8:1, un inversor si ai 16 intrari pentru care consumi 1 intare si... 4 iesiri (3 pe adresele ABC si una pentru "enable")

Eram in faza de cercetare. Nu m-am mai intalnit cu probleme de genul asta si n-am mai lucrat cu multiplexoare. Am luat un CD4051 8-1 analog mux/demux si am incercat sa vad ce-mi iese. Rezultatul e un pic ciudat si probabil un electronist ar rade de mine.

Am conectat output-ul de la cd4051 (pinul 3) la RA0 a carui stare o citesc la un interval de 200ms (afisez starea lui pe LCD). CD4051 este legat astfel:

pin16 - Vdd - +5V

pin6 (INH) si pin8 (Vss) - la masa

In mod normal, fara sa dau comanda pe A,B sau C, output-ul (pin3) ar trebui sa aiba valoarea input-ului 0 (pin13). Dar, fara sa alimentez pinul 13, rezultatul e urmatorul: starea output-ului e OFF cam 1 secunda dupa care trece in ON si se schimba rapid iar in OFF... si tot asa.

Eu nu am pus condensatori pe intrarile mux-ului si nici pullup sau pulldown pe intrarea RA0 a PIC-ului. Oare asta sa fie problema?

Sincer sa fiu, cunostintele mele de electronica sunt putine

 

Aici ar trebui lucrat putin, toti cei care cunosc bine si foarte bine software cred ca programarea microcontrolerului este doar software. Se vede lucrul asta usor daca spui ca ai cumparat un multiplexor analogic pentru o aplicatie digitala...

Multiplexorul analogic se alimenteaza la VCC, GND si VEE unde VCC este potentialul pozitiv si VEE este potentialul negativ. GND e masa, se considera potential neutru si referita de masura. Are nevoie de cele trei alimentari ca sa poata transfera un semnal analogic (de exemplu un sinus de 5Vvv) calat pe tensiunea de referinta (0V=GND in acest exemplu) Ca sa transformi un mux analogic in unul digital conectezi impreuna VEE si GND.

Si nu uita sa listezi complet la imprimanta fila de catalog a circuitului in cauza, nu de alta dar ca sa o poti citi cu atentie.

 

si nu stiu exact cum anume sa leg aceste multiplexoare. Ma intreb daca cele TTL (parca 74HC151) au alt mod de conectare si functionare....

Link spre comentariu
Vizitator c0de

Aici ar trebui lucrat putin, toti cei care cunosc bine si foarte bine software cred ca programarea microcontrolerului este doar software. Se vede lucrul asta usor daca spui ca ai cumparat un multiplexor analogic pentru o aplicatie digitala...

Din pacate asa e. Am si mentionat mai sus ca nu am multe cunostinte de electronica insa nevoia te invatza. Am cumparat multiplexorul analogic pentru ca in graba nu am gasit unul digital (ca 74**151). In final mi-am dat seama dupa ce am citit cu mai mare atentie documentatia ca trebuie sa leg si Vee la ground. Nici soft-ul nu era perfect dar am testat toate intrarile cu un led la iesire si merge bine. Ramane sa fac circuitul final si soft-ul (asta daca gasesc multiplexoarele digitale). Merci mult pt toate informatiile.
Link spre comentariu
  • 1 lună mai târziu...
c0de, nu mai repeta ca nu stii Electronica. Electronica nu este cine stie ce, Matematica este! Privite foarte de sus, cu detasare, lucrurile arata ca de la descoperirea tranzistorului in 1956 nu s-a mai intamplat NIMIC cu adevarat deosebit. Exista prea multe exemple de soft scris de ingineri electronisti sau automatisti (inclusiv compilatoare, simulatoare) de care atunci cand iei cunostinta cu greu te abtii... Pana la urma trebuie sa coexiste toti dar numai Matematica il invata pe om sa gandeasca cu adevarat, altfel decat in rationamente si exprimari "de limba romana", ambigue si dependente de context, precum orice limbaj de categoria # in ierarhia lui N Chomsky...
Link spre comentariu
  • 2 luni mai târziu...
Vizitator c0de

Hello. Revin iar cu vechea mea problema: multiplexoarele. Am reusit sa fac un circuit cu 2 multiplexoare cd4051bc conectate la unul 74ls157. Cu alte cuvinte cam facut un mux 16:1 din 3 mux-uri. Problema e ca mux-urile cd4051 nu merg chiar cum ma asteptam. In documentatie zice:"CD4051BC is a single 8-channel multiplexer having threebinary control inputs. A, B, and C, and an inhibit input. Thethree binary signals select 1 of 8 channels to be turned?ON? and connect the input to the output."Legaturile pt cd4051 le-am facut in felul urmator: A,B,C si Output (pinii 9,10,11 si 3) conectati la PIC. Pinii INH, Vee si Vss ( pin 6,7,8) la masa. Conform tabelei de adevar output-ul depinde de valoarea pinului de input si a configuratiei pinilor A,B,C. Ex: daca A,B,C = 0 (legati la masa) output (pin3) = input-pin0 (pinul 13). Problema e ca indiferent care e configuratia A,B,C output= HIGH daca ORICARE din pinii de input e HIGH, sau output=LOW daca TOTI pinii de input sunt LOw. Celalalt mux (74ls157) functioneaza corespunzator. Aveti vreo idee de ce se comporta cd4051 asa?Merci.

Link spre comentariu

Pai, o intrebare ar fi daca pinul de la PIC la care ai conectat COMMON OUT/IN este "tras" la Vdd sau masa?Spre deosebire de 74LS157 care e un TTL, deci da 0 sau 1 logic ferm indiferent de starea iesirilor (ma rog, nu chiar indiferent :) ), 4051 e un set de 8 intrerupatoare amarate cu un capat legat impreuna si celelelate in aer. Daca si capatul comun e "in aer", atunci...Activeaza pull-up daca e dispobil pe pinul folosit sau pune o rezistenta de 10K spre Vdd si poate se schimba ceva :)

Link spre comentariu
Vizitator c0de

Cred ca am rezolvat problema. Am ignorat oare legea lui Ohm? Componentele sunt legate asa:input---> cd4051 ----> (input) 74ls157 -----> (input) PICEu am testat legand pur si simplu 5V direct la input-ul cd4051. Cu o rezistentza in serie merge:D Asta inseamna ca nu aveam destul curent pe input, nu? Daca e asa... mai am multe de citit:D

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