criss Postat Martie 18, 2008 Partajează Postat Martie 18, 2008 Doresc sa realizez un avertizor gen bip..bip... cu diferse sunete(asta ca sa invat).Am cautat pe net dar nu am gasit doar in limbajul de ansamblare :( pe care din pacate nul cunosc....cu C am inceput sa ma obisnuiesc(ca si incepator).Poate cineva sami dea un exemplu in C pt un 'generator' sunet(sau midi) pt acest microcontroler...buzzerul pot sal conectez doar la una dintre porturi(PB3, PB4)?. nu stiu ce impedanta are un buzzer de calculator dar mai trebuie sa folosesc si o rezistenta? sau direct la pin, fata de masa.am atasat fisierul in assembly.Multumesc Link spre comentariu
danzup Postat Martie 21, 2008 Partajează Postat Martie 21, 2008 Asa cum i-am spus si unui alt user de pe forum :"Daca tot esti incepator foloseste Bascom-Avr . Il gasesti la http://www.mcselec.com la download versiuinea free care accepta cod pana la 4Kb flash. In el ai o groaza de exemple cu diferite microcontrolere Atmel Avr , Application Note etc." uite aici : http://www.mcselec.com/index.php?option ... &Itemid=57 Link spre comentariu
criss Postat Martie 21, 2008 Autor Partajează Postat Martie 21, 2008 iti multumesc dar am inceput sa invat Cul si nu prea as dori sa amestec limbajele...oricum am sa ma uit peste exemplele date de tine.dar astept daca cineva imi poate da exemple in C.Multumesc Link spre comentariu
Eugenn Postat Martie 21, 2008 Partajează Postat Martie 21, 2008 Daca buzzerul e piezo, se poate lega la pin printr-o rezistenta de peste 220 ohmi. Daca e cu bobina (am vazut un buzzer gen "tub" negru) trebuie incercat cu rezistenta si daca se aude incet trebuie facut un amplificator minimal, cu 1-2 tranzistori. MIDI cred ca e greu de facut, dar generarea de bipuri de diverse frecvente e simpla - se controleaza doar frecventa semnalului, nu si amplitudinea. Pentru a genera sunetul, e suficient ceva de genul: // se leaga buzzer la PORTB, pin 1 #define F 1000 // Hz while(1){ PORTB = PORTB ^ _BV(1); // inverseaza bitul la 1/2 din perioada delay_us(500000/F); } Se poate adapta pentru a genera o perioada de timp un sunet cu o frecventa anume. Dezavantaj - in timp ce suna buzzerul, uC nu poate sa faca altceva, sta in delay. Daca trebuie sa lucreze si la altceva in timp ce genereaza sunet, trebuie folosit un timer ce genereaza intreruperi la interval de 1/2 din perioada. In rutina de intrerupere se inverseaza bitul. Cand vrei sa generezi un sunet, configurezi perioada timerului si activezi intreruperea din prog principal. Ca sa il opresti, dezactivezi intreruperea. Dezavantaj - rezolutia de stabilire a frecventei depinde de rezolutia timerului, dar e acceptabila pentru bipuri. Pentru rezolutie mare a frecventei trebuie implementat un DDS in soft - preferabil asm, codul DDS fiind plasat intr-o ISR ce ruleaza la zeci - sute kHz, fi. Ex. acumulatorul DDS pe 24biti, fi = 100kHz => fmax=50kHz, rezolutie 0.006Hz. Cand e nevoie de impus precis durata de executie - ca la generare de semnale, e mai usor de lucrat in asamblare decat in C. Nu e greu de scris programe in asm pt AVR in AVR Studio, pt ca AVR au destule instructiuni spre deosebire de PIC de exemplu, nu trebuie sa testezi STATUS-ul, avand instructiuni de salt conditionale... Mai greu e de combinat C cu asm in WinAVR GCC. Asa ca poti sa incerci si in asm, site-ul asta are cateva tutoriale http://www.avr-asm-tutorial.net/avr_en/index.html 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