Sari la conținut
ELFORUM - Forumul electronistilor

Ajutor pentru o portiune de cod...


Vizitator

Postări Recomandate

Prin natura profesiei am suficiente cunostinte de C++ dar la capitolul microcontrolere sunt aerian.In ce consta problema? Se da un echipament deja existent care se conecteaza la un MCU Atmeltip atmega88 (ceas intern, 8 MHz) prin doua conexiuni la PB1(strobe) si PB2(data). In momentulapasarii unui buton de pe echipamentul original, acesta trece iesirea data in 0 si asteapta camicrocontrolorul sa-i semnalizeze la intrarea strobe ca este gata sa preia date. Dupa primirea dela MCU a doua impulsuri strobe - hs1 si hs2, echipamentul considera ca secventa de handshakeeste terminata si incepe sa transmita datele la fiecare falling al semnalului strobe. In total sunt128 biti care sunt interpretati de MCU si afisati pe un LCD alfanumeric 1x16. Vor fi deci 128 + 2 =130 semnale strobe (flanc descrescator). Atasez si diagrama de semnale pentru intelegerea problemei.Problema afisarii pe LCD am rezolvat-o folosind cod free, insa pentru partea de comunicatie cuechipamentul nu reusesc sa-i dau de cap, lipsa de cunostinte si termenulul deja depasit :) suntinsurmontabile.Concret am facut cam asa:ISR (PCINT0_vect){ // aici ar trebui verificat daca PB2 "cade" in "0" //daca da se incepe transmiterea celor 130 semnale strobe //dupa doua semnale strobe se urmareste PB2 pe timpul PB1 in "0" //si in functie de nivelul PB2 se stocheaza bitii corespunzatori}In timpul executarii instructiunilor in cadrul intreruperii valoare PB2 se va tot schimba. Va rezultade aici recursivitate?De asemenea cum pot face ca semnalul strobe sa aiba lungimea necesara (minim 250 ns) ?La iesirea din intrerupere ar trebui sa folosesc "reti" ?

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

Top autori în acest subiect

  • Laci

    1

Top autori în acest subiect

Salut,1.) In timpul executarii instructiunilor in cadrul intreruperii valoare PB2 se va tot schimba. Va rezultade aici recursivitate?rasp. : Cand intervine o intrerupere se sterge bitul global interrupt enable din registrul SREG(status register "The I-bit is cleared by hardware after an interrupt has occurred, and is set bythe RETI instruction to enable subsequent interrupts. The I-bit can also be set and cleared bythe application with the SEI and CLI instructions, as described in the instruction set reference."Deci nu apare recursivitate.2.)De asemenea cum pot face ca semnalul strobe sa aiba lungimea necesara (minim 250 ns) ?rasp: Vad ca folosesti avr-gcc, este o functie _delay_loop_1(uint8_t clock)3.)La iesirea din intrerupere ar trebui sa folosesc "reti" ?rasp: Daca folosesti compilator C, atunci nu trebuie sa introduci manual instructiunea reti, daca lucrezi in assambler, atunci da.

Link spre comentariu

Pana la urma am renuntat la dezvoltare si am conectat un laptop prin portul serial cu interfatarea TTL de rigoare.Cam scumpa solutia, dar am scris programelul in 30 min. :) Si culmea, seful chiar a fost incantat...Apoi, de amorul artei, mai gandind, mai sapand am facut cam asa:ISR (PCINT0_vect){ uint8_t contor = 0; if ( !(PINB & (1<

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