Vizitator radur Postat Aprilie 27, 2011 Partajează Postat Aprilie 27, 2011 Salut, nu stiu ce intelegi prin cristal intern, daca te referi la oscilatorul calibrat RC al uC-ului afla ca nu e tocmai 8MHz, ba chiar variaza in functie de temperatura si voltaj. El vine calibrat din fabrica la +/- 10% la valori fixe pentru temperatura si voltaj (valori gasite in datasheet).Nu e nimic complicat in adaugarea unui cristal extern la un uC. Link spre comentariu
Vizitator opris_p006 Postat Aprilie 27, 2011 Partajează Postat Aprilie 27, 2011 Vreau sa controlez doua motoare de curent continuu cu ajutorul Atmega328. Am o problema legata de cititul encoderelor. Variabila globala time1 nu-si actualizeaza continutul in main (este tot timpul egala cu zero). Am atasat codul pe care il utilizez. Orice idee este binevenita! #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> unsigned int time1,time2,t1,t2; int main() { TCCR0A = 0; TCCR0B = 0; TCCR2A = 0; TCCR2B = 0; DDRD|=(1<<DDD5)|(1<<DDD6)|(1<<DDD7); TCCR0A|=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00); PORTD|=(1<<PD7); TCCR0B|=(1<<CS00); // clk/1 (no prescalling) OCR0A=0; OCR0B=0; TCCR2A|=(1<<WGM21); TCCR2B|=(1<<CS20); //TCNT2 = 0; OCR2A = 100; OCR2B = 0; TIMSK2 |= (1<<OCIE2A); EIMSK |= (1<<INT0)|(1<<INT1); EICRA |= (1<<ISC11)|(1<<ISC01)|(1<<ISC10)|(1<<ISC00); sei(); while(1) //PWM { if(time1!=0) { PORTD &=~(1<<PD7); } OCR0A=128; OCR0B=128; return (0); } } //INT0 interrupt ISR(INT0_vect) { time1 = t1; t1 = 0; } //INT1 interrupt ISR(INT1_vect) { time2 = t2; t2 = 0; } //Timer2 interrupt ISR(TIMER2_COMPA_vect) { t1++; t2++; } Link spre comentariu
INCEPATOR21 Postat Aprilie 27, 2011 Partajează Postat Aprilie 27, 2011 buna seara. Acum ca am progresat am vrut sa fac un instrument de masura pt bobine si cap un lc-metru realizat de yo6pir. Folosesc bascom si nu am reusit sa l programez pe cristal extern de 8 Mhz. Am incercat sa l setez 3 Mhz-8 Mhz si poi o alta varianta 8Mhz-12 Mhz, NU se intampla nimic dar daca il las pe osc intern functioneaza eronat si imprecis Asta este prima problema , a doua este ca a trebuit sa bag un alt cod eeprom si acum vreau sa folosesc acel uc pt alte proiecte pe oscilator intern(am reusit sa l deblochez si merge pe osc intern, dar nu mai raspunde cum trebuie la cod). Banuiesc ca imi trebuie eepromul din fabrica asa ca rog pe cineva daca stie cum sa rezolv cele 2 probleme , mai ales cu eepromul original Link spre comentariu
Vizitator radur Postat Aprilie 27, 2011 Partajează Postat Aprilie 27, 2011 Vreau sa controlez doua motoare de curent continuu cu ajutorul Atmega328. Am o problema legata de cititul encoderelor. Variabila globala time1 nu-si actualizeaza continutul in main (este tot timpul egala cu zero). Am atasat codul pe care il utilizez. Orice idee este binevenita! volatile unsigned int time1,time2,t1,t2; Link spre comentariu
Vizitator biunghi Postat Aprilie 28, 2011 Partajează Postat Aprilie 28, 2011 Salut...am incercat o varianta de pe net pe port serial com a unui programator...si merge...problema e k...am creat un fisier hex scris in cod de asamblare cu isis proteus lam compilat,mia mers ,lam scris pe microcontroler si merge foarte bine, apoi am creat un fisier hex scris in c cu avr studio4 lam compilat,a mers fara nicio eroare, lam scris pe microcontroler si asta nu mai merge...nu inteleg de ce...ambele fisiere aveau un KB...defapt niciun program scris in c cu avr studio4,chiar daca la compilare imi merge,atunci cand le scriu pe microcontroler nu merg....mai ciudat e k atunci cand incarc fisierele hex intrun simulator (ca de ex isis proteus) acolo imi merg....de mentionat k folosesc atmega8 si pentru a scrie fisierele hex pe mcu folosesc pony prog....multumesc anticipat Link spre comentariu
Vizitator spy_oh_joy1389 Postat Mai 6, 2011 Partajează Postat Mai 6, 2011 Intreb si eu aici ca am dat peste o problema. Aici este proiectul meu si al colegei mele: http://matrix.elcom.pub.ro/~B37/DHarware.html uC are instalat pe el un bootloader pentru a-l putea programa prin serial. Aseara am incarcat primul program pe el, facut cu Code Vision AVR in C, facand setarile doar din interfata grafica. Am setat primii 4 pini de pe portul A ca iesire, si i-am pus pe 1 logic pentru a aprinde ledurile. Totul mergea frumos, apasam pe pinul de reset, se dezactiva programul. Plec pana la toaleta, cand ma intorc, ledurile de pe portul A palpaiau. Asta am vazut ca era de la baterie. Am schimbat bateria si ledul de status de pe pinul 20 nu mai palpia si nici nu mai raspunde la butonul de reset, iar AVRBuster nu mai recunoaste bootloaderul. De asemenea, in terminal nu mai raspunde la caracter cu caracter+1. Ce trebuie facut? Trebuie rescris cu programatorul bootloaderul, ca altfel n-am nicio idee. Asta ar insemna sa il dau inapoi domnului profesor ca eu nu dispun de un prgramator. Link spre comentariu
Vizitator spy_oh_joy1389 Postat Mai 11, 2011 Partajează Postat Mai 11, 2011 Am reusit sa resetez palcuta. Am incercat sa fac la un joc de leduri sa porneasca atunci cand apas butonul de pe pinul 19. Treaba e ca nici macar nu-l ating si sesizeaza ca a fost apasat. Nu e o coincidenta, ca se intampla numai cand apropii degetul de buton. Aveti vreo idee ce se intampla? Aici am filmat. Link spre comentariu
godFather89 Postat Mai 11, 2011 Partajează Postat Mai 11, 2011 Trebuie o rezistenta de pull-up/pull-down (in functie de cum ai facut softul). Daca butonul e activ pe 0 (sau front descrescator) atunci trebuie pull-up (vezi ca are rezistenta de pull-up interna ce poate fi activata). Ar mai trebui si un condensator pentru debouncing. Link spre comentariu
Vizitator radur Postat Mai 11, 2011 Partajează Postat Mai 11, 2011 Cu alte cuvinte ar trebui sa setezi pinul respectiv ca INPUT_HIGH (adica sa fie legat prin pull-up intern la V+) si ca cand il "apesi" trebuie sa-l "apesi" cu V0 (ground), ca sa-si schimbe valoarea in LOW. Daca vrei neaparat sa functioneze ca INPUT_LOW trebuie sa-l ti conectat la masa cand nu e HIGH, adica in timp ce butonul este OFF pinul sa fie legat la masa, cand e "apasat" il legi printr-o rezistenta la V+. Debouncing poti face si din program ceva de genul interrupt(vector){daca e pinul highasteapta 20msdaca tot e high inseamna ca e high { fa nebuneli cand e high }} Link spre comentariu
godFather89 Postat Mai 11, 2011 Partajează Postat Mai 11, 2011 Daca vrei neaparat sa functioneze ca INPUT_LOW trebuie sa-l ti conectat la masa cand nu e HIGH, adica in timp ce butonul este OFF pinul sa fie legat la masa, cand e "apasat" il legi printr-o rezistenta la V+.Cred ca vroiai sa zici sa fie legat printr-o rezistenta la masa iar cand butonul este apsat, sa faca legatura la VCC. Daca e legat la masa, nu mai are nici o sansa sa ridice tensiunea... Link spre comentariu
Vizitator radur Postat Mai 12, 2011 Partajează Postat Mai 12, 2011 erm .. nu, vroiam sa zic sa fie legat, prin intrerupator, la masa pe pozitia normal deschis a intrerupatorului, ceva gen attach.Bine, asta tine si de tipul de intrerupator Link spre comentariu
godFather89 Postat Mai 12, 2011 Partajează Postat Mai 12, 2011 Uite o varianta cu pull-up. Cand apesi butonul ai 0 logic, altfel ai 1 logic: Link spre comentariu
yo9hnf Postat Mai 19, 2011 Partajează Postat Mai 19, 2011 Luminati-ma si pe mine va rog... Am montajul de aici : http://diy.elektroda.eu/analizator-widma-akustycznego/#eng care foloseste ATMega8 In descriere scrie : "You must set the fusebits in atmega, to „external quartz with capacitors high freuency” Adicatalea ? Nu stiu ce trebuie sa selectez aici : http://www.engbedded.com/fusecalc/ Link spre comentariu
godFather89 Postat Mai 20, 2011 Partajează Postat Mai 20, 2011 CKSEL si CKSUT toate nebifate (valoarea 1 efectiva) si CKOPT bifat (valoarea 0) pentru cristal de quartz >= 8 MHz, startup time de 16K CK si delay de @65ms Link spre comentariu
yo9hnf Postat Mai 27, 2011 Partajează Postat Mai 27, 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. 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