Vizitator poke_veve Postat August 7, 2011 Partajează Postat August 7, 2011 Da, multumesc amandurora! Am reusit, folosind metoda lui godFather. Link spre comentariu
fubiansky Postat August 9, 2011 Partajează Postat August 9, 2011 Salut,Cerinte:In schema din atasament se gaseste un potentiometru de 250 ohmi inseriat cu o rezistenta de 1.7 Kohmi.Eu vreau sa citesc cu ADC-ul lui ATmega168 tensiunea cursorului si sa folosesc valoarea pentru a modifica factorul de umplere al PWM-ului (portb.1).Ideea este ca, atunci cand potentiometrul este la maxim (+5v) PWM-ul sa aiba factorul de umplere 100%, iar atunci cand este la minim sa am factorul de umplere 60%.Eu am reusit pana acum sa-l fac sa coboare pana la 85% dar nu stiu cum sa fac sa pot ajunge la 60%.As dori explicatii in Bascom AVR dar pot fi si in C++ ca le descifrez eu pana la urma.Mi-ar fi de mare ajutor si o posibila idee nu neaparat cod gata scris.Montajul este folosit la varierea turatiei unui motor dar problema este ca aceasta configuratie (potentiometru+rezistenta) nu o pot modifica. Link spre comentariu
godFather89 Postat August 10, 2011 Partajează Postat August 10, 2011 Nu aveai nevoie decat de un potentiometru > 10k si restul faceai din cod. Pwm = 60 + valoare / val_maxima * 40 (%). Link spre comentariu
fubiansky Postat August 10, 2011 Partajează Postat August 10, 2011 Pai daca foloseam doar un simplu potentiometru este usor de facut. Dar eu acel montaj potentiometru+rezistenta nu-l pot modifica. El este montat pe un panou de comanda, unse se afla si alte module (remporizari, comenzi pompe etc) si la care nu am acces. Eu trebuie sa ma adaptez cumva la nenorocirea aia de montaj. Uite mai jos cum am facut eu: Daca pun un simplu potentiometru pot varia PWM-ul de la 0 la 100%. Daca pun montajul acela stupid il pot varia de la ~85 la 100%. Mare filozofie nu este dar inca nu m-am prins cum sa fac. De aceea orice sugestie e binevenita, macar sa stiu cum sa fac citirea ca, codul il fac eu dupa aceea. $regfile "m168def.dat" $crystal = 8000000 $baud = 9600 Dim Pwm_mo As Word Config Timer1 = Pwm , Compare A Pwm = Clear Down , Prescale = 1 Start Timer1 Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc Do Pwm_mo = Getadc(0) Pwm_mo = Pwm_mo / 4 Loop End Link spre comentariu
ole Postat August 10, 2011 Autor Partajează Postat August 10, 2011 O solutie ar fi asta: valoare_PWM = (valoare_ADC - valoare_ADC_minima)*(interval_de_valori_cerut / interval_de_valori_obtinut) + valoare_minima_ceruta.Ex: (85-85)*2.66+60=60; (90-85)*2.66+60=73.3; (100-85)*2.66+60=99.9.Valorile date ca exemple mai sus sunt procentele despre care vorbeai in postul anterior, dar formula e valabila si pentru valori luate direct de la adc. Link spre comentariu
godFather89 Postat August 10, 2011 Partajează Postat August 10, 2011 Cum s-a spus mai sus. De ce precizie ai nevoie? Link spre comentariu
fubiansky Postat August 10, 2011 Partajează Postat August 10, 2011 Cum s-a spus mai sus. De ce precizie ai nevoie?Nu ma prea intereseaza precizia.Sa zicem o toleranta de 5%.Maine am timp sa fac si montajul practic cu tipul de motor folosit.Pana acum am folosit un motoras mic Link spre comentariu
ole Postat August 10, 2011 Autor Partajează Postat August 10, 2011 Ai reusit cum ti-am zis? Link spre comentariu
Vizitator poke_veve Postat August 28, 2011 Partajează Postat August 28, 2011 Salutare tuturor. As avea nevoie de ajutor in a rezolva urmatoarea problema. Am realizat montajul din proiectul asta: http://www.societyofrobots.com/member_t ... /TSOP2.pdf cu exceptia TSOP-ului care este unul de 38 KHz si nu de 36 Khz cum scrie acolo. // IR LED is connected to PORTC3, output of TSOP is connected to PORTC4. // Visible wavelength LED is connected to PORTD0 #include #include #include ISR(TIMER2_COMP_vect) { if(bit_is_clear(PINC, 3)){PORTC|=(1< else{PORTC&=~(1< }; int main (void) { DDRC|=(1< DDRD|=(1< TCCR2|=(1< OCR2=13; TIMSK|= (1<<(OCIE2)); //output compare interrupt enable sei(); while(1) { if (bit_is_clear(PINC,4)) {PORTD|=(1< else {PORTD&=~(1< } } Iar acesta este codul pus pe un ATMEGA8 cu oscilatorul intern la 1MHz. Problema este ca LED-ul IR nu imi emite. Restul functioneaza bine, fiindca daca butonez o telecomanda de TV LED-ul de pe PORTD0 mi se aprinde. Vedeti voi ceva in neregula la acest cod? Link spre comentariu
ole Postat August 28, 2011 Autor Partajează Postat August 28, 2011 Da, este o problema si anume ca timerul nu are sursa de ceas selectata. Adauga dupa TCCR2|=(1<<WGM21); //mod CTCOCR2=13;TIMSK|= (1<<(OCIE2)); //output compare interrupt enable TCCR2|=(1< sau ar mai merge si OCR2=13;TIMSK|= (1<<(OCIE2)); //output compare interrupt enableTCCR2|=(1<<WGM21)|(1<<CS20); //mod CTCin felul asta mai salvezi 2 bytes de flash. Link spre comentariu
Vizitator poke_veve Postat August 28, 2011 Partajează Postat August 28, 2011 Da, asa-i. Mi-a scapat, scuze ca am deranjat doar cu atat. Link spre comentariu
Vizitator alexvia Postat Septembrie 8, 2011 Partajează Postat Septembrie 8, 2011 Buna seara tuturor, Am si eu o problema; sunt foaaarte incepator in ceea ce priveste microcontrollerele si as dori sa ma ajute cineva daca se poate. Incerc sa aprind un led (ceva in genul hello world) cu un AtTiny 13, iar codul in bascom este urmatorul. Config Portb = Output 'set port B as outputDo ' eternal loopPortb.3 = 1 ' make portB.0 highWaitms 500 ' wait 500msPortb.3 = 0 ' make Portb.0 LowWaitms 500 'wait 500msLoop Problema e ca acest cod este compilat si la verificarea sintaxei nu imi da erori insa cand programez chipul (programatorul este USBAsp iar programul este Extreme Burner) imi da o eroare de genul Mismatch at Location 0x00000000 si evident ledul nu se aprinde. Ceva idei ? Multumesc. Link spre comentariu
ole Postat Septembrie 8, 2011 Autor Partajează Postat Septembrie 8, 2011 Din ce ai scris pare a fi o problema de scriere a softului in uC nu de cod. Se pare ca nu se scrie cum trebuie hex-ul in uC si evident verificarea esueaza. Incearca Khazama, poate ai succes cu acel program. De asemenea, verifica sa fie alimentat corespunzator uC-ul. Link spre comentariu
Vizitator alexvia Postat Septembrie 8, 2011 Partajează Postat Septembrie 8, 2011 Am verificat pcb-ul care il folosesc, la fel si conexiunile si sunt ok. (USBAsp-ul nu stiu cum sa il verific ) In imaginile de mai jos sunt varianta .hex originala si cea citita de extreme burner dupa acea eroare. Ceva idei ? :cry: Link spre comentariu
ole Postat Septembrie 8, 2011 Autor Partajează Postat Septembrie 8, 2011 Vezi la probleme de programare sau in topicul in care vand programatoare. Stiu ca a mai avut cineva probleme cu Tiny13 dar am urmarit problema si nu stiu cum s-a rezolvat atunci. 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