godFather89 Postat Mai 27, 2011 Partajează Postat Mai 27, 2011 Alimentarea integratului e la 5V sau @3V? Link spre comentariu
yo9hnf Postat Mai 27, 2011 Partajează Postat Mai 27, 2011 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
godFather89 Postat Mai 27, 2011 Partajează Postat Mai 27, 2011 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
yo9hnf Postat Mai 27, 2011 Partajează Postat Mai 27, 2011 Alt programator nu am :cry: . Cu el am scris perfect ATmega8515 (fara L), ATMega8, Atmega32. Link spre comentariu
ole Postat Mai 29, 2011 Autor Partajează Postat Mai 29, 2011 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
claudio Postat Iunie 15, 2011 Partajează Postat Iunie 15, 2011 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
ole Postat Iunie 15, 2011 Autor Partajează Postat Iunie 15, 2011 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
claudio Postat Iunie 15, 2011 Partajează Postat Iunie 15, 2011 Da, este pus.Sunt aceleasi setari ca si la uC vechi. Link spre comentariu
claudio Postat Iunie 16, 2011 Partajează Postat Iunie 16, 2011 S-a rezolvat.1. Din neatentie: nu aveam tensiune pe circuit2. Din nestiinta: citirea si programarea fusebitilor s-a putut face doar cu programatorul, adica fara sursa de alimentare externa(dupa cum am specificat am folosit programatorul "5 sarme" paralel) Link spre comentariu
Vizitator poke_veve Postat August 1, 2011 Partajează Postat August 1, 2011 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
ratza Postat August 3, 2011 Partajează Postat August 3, 2011 Simplu. După ce verifici dacă e apăsare scurtă sau lungă o resetezi. Link spre comentariu
srdjan Postat August 7, 2011 Partajează Postat August 7, 2011 eu cred ca el se refera la faptul ca nu vede valoarea actualizata a variabilei. daca este asa atunci te ajuta link-ul acesta: http://www.nongnu.org/avr-libc/user-man ... q_volatile Link spre comentariu
Vizitator poke_veve Postat August 7, 2011 Partajează Postat August 7, 2011 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
ratza Postat August 7, 2011 Partajează Postat August 7, 2011 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
godFather89 Postat August 7, 2011 Partajează Postat August 7, 2011 O alta metoda ar fi sa pui o intrerupere pe ambele fronturi. In intrerupere pornesti/opresti un timer in functie de starea actuala a bitului iar atunci cand opresti timerul, verifici si cat timp a trecut. Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum