Sari la conținut
ELFORUM - Forumul electronistilor

Probleme de incepatori


Postări Recomandate

Alimentarea integratului e la 5V sau @3V?

Programatorul imi da 5V.In datasheet scrie asa :Operating Voltages– 2.7 - 5.5V for ATmega8515L– 4.5 - 5.5V for ATmega8515La DC Caracteristics :Active 4 MHz, VCC = 3V(ATmega8515L)4 mAActive 8 MHz, VCC = 5V(ATmega8515)12 mAIdle 4 MHz, VCC = 3V(ATmega8515L)1.5 mAAltceva legat de programare nu zice.Sa-i pun un LDO de 3.3V pe alimentare ?
Link spre comentariu

Alimentarea integratului e la 5V sau @3V?

Sa-i pun un LDO de 3.3V pe alimentare ?
Nu are rost. Ma gandeam ca il alimentezi la 3.3V si programatorul nu stie de nivele de tensiune asa mici.Nu stiu ce sa zic, e tare ciudat. Cu alte programatoare merge? Personal nu am folosit niciodata USBAsp. Imi facusem mai demult unul dar gresisem ceva la cablaj si nu l-am mai refacut. Mi-am luat un isp mk2 :).
Link spre comentariu

Multumesc nasule ! A mers perfect !Dar ai idee de ce nu pot programa ATMega8515L (L !) cu UsbAsp ? Nu il vede deloc...doua integrate am asa.

Nu stiu despre Mega8515L insa eu am programat Mega8 (fara L !!!), alimentat la 3.3V, cu USBasp si a mers. Nu mergea tot timpul uC-ul fiind subalimentat cu mai bine de 1V dar mergea. Eu as exclude problema nivelelor logice. Un al motiv pt care spun asta este ca am comunicat fara probleme intre Mega8(alimentat si la 3.3V si la 5V) si PC cu un cablu usb-serial cu nivele de 3.3V iar USBasp tot pe un Mega8/48 se bazeaza.Mega8515-urile sigur sunt bune?
Link spre comentariu
  • 3 săptămâni mai târziu...

SalFolosesc un circuit cu Atmega16. De curand am fost nevoit sa schimb uC, o data cu aceasta si programarea fusebits-urilor.I-am programat ca in imaginea atasata. Dupa programare nu-l mai recunoaste (eroarea -24)[attachment=1]fuses.jpg[/attachment][attachment=0]alert.jpg[/attachment]L-am inlocuit cu alt uC nou, dar la fel, dupa programare nu-mi mai raspunde.Unde am procedat gresit? Mai pot face ceva cu ele?Folosesc PonyProg cu programator paralel.

Link spre comentariu

SalFolosesc un circuit cu Atmega16. De curand am fost nevoit sa schimb uC, o data cu aceasta si programarea fusebits-urilor.I-am programat ca in imaginea atasata. Dupa programare nu-l mai recunoaste (eroarea -24)[attachment=1]fuses.jpg[/attachment][attachment=0]alert.jpg[/attachment]L-am inlocuit cu alt uC nou, dar la fel, dupa programare nu-mi mai raspunde.Unde am procedat gresit? Mai pot face ceva cu ele?Folosesc PonyProg cu programator paralel.

Din cate vad eu l-ai setat pt quartz extern. Are quartz-ul pus?
Link spre comentariu
  • 1 lună mai târziu...
Vizitator poke_veve

As avea nevoie de ajutor pentru a rezolva urmatoarea problema: vreau sa folosesc un singur buton pentru a indeplinii 2 functii. Apasare scurta incrementeaza o variabila, iar apasarea lunga alta variabila. Si m-am gandit eu in felul urmator: am legat butonul la INT1 al ATMEGA8-ului si am setat intreruperea activa pe LOW LEVEL. In ISR incrementez o variabila tot la 10 ms. Daca variabila este mai mare de 100 => apasare lunga, iar mai mica de 100=>apasare scurta. Intrebarea mea este, cum aduc variabila la 0 dupa ce am citit-o ca sa fie din nou 0 pentru urmatoarea apasare, cum o citesc, cat de des? Adica daca o citesc si resetez tot la 1,5 secunde de exemplu, inseamna ca eu nu pot sa ii dau apasari scurte la distante mai mici de 1,5 secunde intre ele? Poate imi ziceti voi un mod de a vedea din functia main daca eu sunt in ISR sau nu, ca atunci asta ar rezolva problema, ca la fiecare iesire din ISR as citi variabila si as reseta-o.

Link spre comentariu
Vizitator poke_veve

Simplu. După ce verifici dacă e apăsare scurtă sau lungă o resetezi.

Pai daca fac asa, inseamna ca eu nu pot sa apas scurt butonul la intervale mai mici decat o apasare lunga. Sa iti dau un exemplu concret. Sa zicem ca apasarea lunga trebuie sa fie de 800 ms. Cand apas butonul mi se incrementeaza variabila, trebuie sa astept sa zicem 900 ms ca sa verific cat este variabila, sa vad daca am apasat lung sau scurt, dupa care o resetez. Dar asta inseamna ca eu nu pot sa ii dau 3 apasari scurte de 200 ms fiecare una dupa alta, de exemplu, ca o sa o ia ca una singura lunga. Ei, aici am nevoie de ajutorul vostru. Hai sa pun si codul ca sa discutam pe ceva concret.volatile uint8_t press_time0=0, press_time1=0;ISR(INT0_vect){_delay_ms(100); press_time0++;}ISR(INT1_vect){_delay_ms(100); press_time1++;}void main(){ ... while(1) { TCCR0=speed; if(press_time1!=0) { _delay_ms(1000); if(press_time1>8){cal=1; press_time1=0;} //apasare lunga else {speed--; press_time1=0;} //apasare scurta } //end if(press_time1!=0) afis(cal);//o functie care imi afiseaza variabila cal pe un afisaj cu leduri if(press_time0!=0) { _delay_ms(1000); if(press_time0>8){cal=0; press_time0=0;} //apasare lunga else {speed++; press_time0=0;} //apasare scurta } //end if(press_time0!=0) }//end while(1)} Deci, imi declar variabilele "press_time0" si "press_time1" care se incremeanteaza in ISR tot la 100 ms. Dupa care in main, daca apas lung, incrementez sau decrementez "speed" si fac 0 sau 1 "cal". Problema este ca datorita delay-ului de 1 sec care imi este necesar pentru a verifica daca apasarea este lunga sau scurta, eu nu pot apasa butonul scurt mai des de 1 secunda. Daca ar exista o metoda care sa imi zica cand ies din ISR ar fi foarte simplu: cand ies din ISR verific variabila "press_time" si in functie de aceasta imi incrementez sau decrementez "speed" si fac 0 sau 1 "cal". Ei bine, exista aceasta metoda? :)
Link spre comentariu

Nu aşa, te complici. Cînd apeşi pe buton porneşti un timer care să dureze cît ai tu nevoie. În întreruperea timerului verifici dacă butonul mai e apăsat. Dacă da, pui un flag pentru main. După verificare resetezi timerul şi îl opreşti. În mare eu aşa aş proceda.

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