Vizitator mar010 Postat Decembrie 1, 2009 Partajează Postat Decembrie 1, 2009 Salut! Am un proiect de realizat care consta in masurarea unei distante pana la un obiect si afisarea acesteia pe un LCD. Pt asta folosesc acel modul ultrasonic SRF05,care emite niste unde si apoi le receptioneaza cand acestea se intorc de la obstacol si in functie de timpul scurs calculeaza distanta. Intrebarile mele sunt: cum ar trebui sa leg acel SRF 05 la microcontroller ? cum comunica acesta cu ATMEga 16(analog sau digital). Lcd l-am legat la microcontroller,dar nu sunt sigur daca am facut-o bine...Pinii de la lcd de la 11 la 14 i-am legat la pinii 40 la 37 de la microc,apoi pinii 4,5,6 de la LCD la pinii 36,35,34 si am pus o rez de 1k pt contrast la Vee de la LCd, pinul 1 la GND si pinul 2 laVCC. V-as fi recunoscator daca mi-ati raspunde cat mai repede.Multumesc anticipat! Link spre comentariu
nana Postat Decembrie 1, 2009 Partajează Postat Decembrie 1, 2009 Salut! Am un proiect de realizat care consta in masurarea unei distante pana la un obiect si afisarea acesteia pe un LCD. Pt asta folosesc acel modul ultrasonic SRF05,care emite niste unde si apoi le receptioneaza cand acestea se intorc de la obstacol si in functie de timpul scurs calculeaza distanta. Intrebarile mele sunt: cum ar trebui sa leg acel SRF 05 la microcontroller ? cum comunica acesta cu ATMEga 16(analog sau digital). Lcd l-am legat la microcontroller,dar nu sunt sigur daca am facut-o bine...Pinii de la lcd de la 11 la 14 i-am legat la pinii 40 la 37 de la microc,apoi pinii 4,5,6 de la LCD la pinii 36,35,34 si am pus o rez de 1k pt contrast la Vee de la LCd, pinul 1 la GND si pinul 2 laVCC. V-as fi recunoscator daca mi-ati raspunde cat mai repede.Multumesc anticipat!Deci sa o luam pe rand senzorul SFR05 este un sonar care functioneaza pe BUS I2C. Deci se conecteaza SCL si SDA la pini cu aceleasi functi ale MCU-ului adik 22 si 23.Eu am un proiect cu srf08 facut dar acu sunt prea racit ca sa stau sa il modific ca abea ma tin pe picioare. Conectare LCD la MCU gasesti pe google o gramada de exemple. Incearca www.avrfreaks.net gasesti acolo mai mult ca sigur.Iar codu la SFR08 il gasesti aici singrura varianta e ca e pentru comnunicare seriala. http://www.bdmicro.com/code/ Link spre comentariu
Vizitator mar010 Postat Decembrie 1, 2009 Partajează Postat Decembrie 1, 2009 Salut! Am un proiect de realizat care consta in masurarea unei distante pana la un obiect si afisarea acesteia pe un LCD. Pt asta folosesc acel modul ultrasonic SRF05,care emite niste unde si apoi le receptioneaza cand acestea se intorc de la obstacol si in functie de timpul scurs calculeaza distanta. Intrebarile mele sunt: cum ar trebui sa leg acel SRF 05 la microcontroller ? cum comunica acesta cu ATMEga 16(analog sau digital). Lcd l-am legat la microcontroller,dar nu sunt sigur daca am facut-o bine...Pinii de la lcd de la 11 la 14 i-am legat la pinii 40 la 37 de la microc,apoi pinii 4,5,6 de la LCD la pinii 36,35,34 si am pus o rez de 1k pt contrast la Vee de la LCd, pinul 1 la GND si pinul 2 laVCC. V-as fi recunoscator daca mi-ati raspunde cat mai repede.Multumesc anticipat!Deci sa o luam pe rand senzorul SFR05 este un sonar care functioneaza pe BUS I2C. Deci se conecteaza SCL si SDA la pini cu aceleasi functi ale MCU-ului adik 22 si 23.Eu am un proiect cu srf08 facut dar acu sunt prea racit ca sa stau sa il modific ca abea ma tin pe picioare. Conectare LCD la MCU gasesti pe google o gramada de exemple. Incearca http://www.avrfreaks.net gasesti acolo mai mult ca sigur.Iar codu la SFR08 il gasesti aici singrura varianta e ca e pentru comnunicare seriala. http://www.bdmicro.com/code/ Multumesc mult pt raspuns. Cineva mi-a zis sa leg Echo_output la pinul 20 si trigger_input la pinul 4. (http://www.robotstorehk.com/sensors/doc/srf05tech.pdf). Acum nush ce sa fac. Exemple cu lcd am gasit destule,insa si variante diferite.Ms inca o data si insanatosire grabnica. Link spre comentariu
nana Postat Decembrie 1, 2009 Partajează Postat Decembrie 1, 2009 senzoru asta e dif fatza de cel cu care am lucrat eu. Asta trebuie sa faci tu calculele intre triger si semnalul ecou. ca sa determini ecou trebuie sa calculezi latimea impulsului pe frontu pozitiv. uite aici un tutorial care sa te ajute sa masori distanta dintre rising si falling edge. http://winavr.scienceprog.com/avr-gcc-t ... inavr.html Link spre comentariu
Vizitator mar010 Postat Decembrie 1, 2009 Partajează Postat Decembrie 1, 2009 senzoru asta e dif fatza de cel cu care am lucrat eu. Asta trebuie sa faci tu calculele intre triger si semnalul ecou. ca sa determini ecou trebuie sa calculezi latimea impulsului pe frontu pozitiv. uite aici un tutorial care sa te ajute sa masori distanta dintre rising si falling edge. http://winavr.scienceprog.com/avr-gcc-t ... inavr.htmlOk,am sa citesc ce mi-ai dat si sper sa ma descurc.Am sa iti zic ce rezolv. Link spre comentariu
Vizitator mar010 Postat Decembrie 2, 2009 Partajează Postat Decembrie 2, 2009 Salut! Am zis ca o sa pun aici ce o sa rezolv..deci Am citit chestiile acelea pe care mi le-ai trimis si inca datasheet de la SRF05 si am inteles cat de cat.Mai am totusi unele lucruri care nu sunt clare. Am vazut ca in functie de quartzul folosit(16Mz in cazul meu) se inmulteste valoarea de pe frontul pozitiv al impulsului ecoului(adica timpul cat se primeste ecoul de la obiect) si apoi valoarea se imparte la 58 pt a o afisa in cm. Ce nu am inteles este modul exact de functionare al acelui modul sau mai bine zis cum se calculeaza exact acel timp. Mai intai se da un impuls timp de 10us si apoi el trimite 8 cicli de sunete ,in timp pinul echo_output este high si cand receptioneaza ecoul devine low,adica "0" ? De asemenea ICR1:( Input Capture Register) si TCNT1:( Timer Counters Register ) nu ii inteleg ...ce fac ei exact,ce valori retin si cand? ICR?ul am vazut ca este folosit pentru a masura timpul intre 2 evenimente,cum ar fi masurarea latimii impulusului(pulsului ) unui semnal,adica al ecoului ,dar cum se face mai exact? Link spre comentariu
mitescu Postat Decembrie 2, 2009 Partajează Postat Decembrie 2, 2009 SFR05 este un modul cu doua traductoare piezo cu frecveta de rezonanta la 40Kz. Fiecare din traductori poate fi folosit ata ca emitator cat ca si receptor. Modulul contine un amplificator care "ataca" traductorul emitator. Traductorul receptor are un filtru trece banda pe frecventa de 40KHz si un amplificator. Principiul de functionare: - se ataca emitatorul cu un semnal "scurt" care va avea o frcventa de 40KHz - " sunetul" se propaga pana la primul obstacol , de care se "loveste". O parte din reflectata, ajunge in dreptul receptorului - iesirea de la receptor va fi filtrata si amplificata , aducand linia de iesire in 1 logic. - diferenta de timp dintre momentul emisiei si momentul in care incepe receptia reprezinta timpul necesar sunetului sa parcurga drumul de modul la obstacol si inapoi. Daca impartim acet timp la 2 , impreuna cu viteza sunetului se obtine distanta : d=v * t. Implementare: resurse utilizate : timer1 - masurarea timpului de propagare a sunetului timer 2 - generator 40 KHz Initializari: TCCR1A=0x00;TCCR1B=0x02;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;ASSR=0x00;TCCR2=0x19;TCNT2=0x00;OCR2=0x64;deci PWM-ul de la timer 2 este setat pentru a genera o frecventa de 40KHz (quartz-ul fiind de 8 MHZ)iar timer 1 este setat ca numarator cu un clock de clk/8- 1000KHz scriu 4 macro. Doua reprezinta pornirea respectiv oprirea emisiei #define sonar_on {TCCR2=0x19;TCNT2=0x00;OCR2=0x64;}#define sonar_off {TCCR2=0x00;TCNT2=0x00;}se vede clar ca oprirea se face prin dezactivare, iar pornirea pri reinitializarea PWM-uluiAlte doua macro vor porni/opri masurarea timpului. #define techo_stop {TCCR1B=0;TCCR1A=0;}#define techo_start {TCNT1H=0;TCNT1L=0;TCCR1B=0X02;}Tot in faza de initializare se opresc cele doua elemente(ptr siguranta) techo_stopsonar_offDeci cele doua timere sunt inactive.Observatie : daca pornim timer1 si il oprim dupa un timp, continutul TCNT1 va fi timpul in care timer1 a fost pornit exprimat in microsecunde, frecventa de la intrare fiind de 1MHz Procedura - se porneste emitatorul(timer2) - se porneste numaratorul (timer1) - se "pandeste" PINx, pinul configurat ca intrare , la care este legata iesirea lui SFR05 - cand acesta "basculeaza" insemna ca s-a "intors" reflectata si in TCNT1, vom avea numarul de microsecunde dupa care s-a intors. Se imparte valoarea la 2 ( dus-intors) si se aplica formula de mai sus. Acum exista posibilitatea ca semnalul sa nu se intoarca, nu exista reflectata. Pentru aceasta se reseteaza un flag si tot odata intr-o rutina de intrerupere a lui timer1_overflow, acesta se seteaza. Seminificatia este ca dupa 65535us, daca nu s-a receptionat reflectata insemna ca nu avem echo- nu exista obstacole sau semnalul este prea slab. Secventa (simplificata) ar fi: interrupt [TIM1_OVF] void timer1_ovf_isr(void){ flag_snr=true;}Intreaga operatie (tot simplificat) ar fi: flag_snr=false; sonar_on techo_start tmpw=0; lolo: if(PINx=1){;goto lolo1;} // daca s-a receptionat if(flag_snr==true){tmpw=0xffff;goto lolo2;} // daca este overflow goto lolo; // daca nu again lolo1: tmpw=TCNT1; lolo2: techo_stop sonar_offin variabila tmpw obtinem timpul in microsecundeSoftul a fost probat si merge de "behaie" Adaptaeza-l si ti-ai rezolvat problema Succes. Link spre comentariu
Vizitator mar010 Postat Decembrie 2, 2009 Partajează Postat Decembrie 2, 2009 In primul rand, va multumesc frumos pentru toate informatiile si detaliile furnizate. Am inteles cum functioneaza acel SFR05. In al doilea rand sunt la inceput asa ca trebuie sa mai citesc niste materiale(apropo, poate imi recomandati documentatii ceva sau niste carti, ceva care sa inceapa treptat ) ca sa inteleg pe deplin si sa fiu capabil sa fac modificarile necesare.Acel PINx(care devine 1 cand se reflecta semnalul), este pinul la care leg iesirea lui SFR05? Care ar fi acesta? As putea sa aleg pinul 4,OC0?Daca trece timpul acela de 65535de usdaca se inseamna ca nu am avut niciun obstacol...de ce este atat? In datasheet era parca 30ms(30000us). Link spre comentariu
mitescu Postat Decembrie 3, 2009 Partajează Postat Decembrie 3, 2009 Acel PINx(care devine 1 cand se reflecta semnalul), este pinul la care leg iesirea lui SFR05? Care ar fi acesta? As putea sa aleg pinul 4,OC0?Binenteles, cu grija ca sa il configurezi intrare (DDRB.3=0)Trebuie sa ai grija ca intrarea in SFR05 sa o legi la OC2 de la MC (PD7), si binenteles sa il configurezi ca atare.Daca trece timpul acela de 65535de usdaca se inseamna ca nu am avut niciun obstacol...de ce este atat? In datasheet era parca 30ms(30000us).Pai... valoarea maxima a lui TCNT1 poate sa fie 0xFFFF, ceea ce insemna 65535 si prin urmare timpul maxim masurat este de 65,535ms. La datasheet-ul de care faci vorbire, timpul de 30ms este timpul din aplicatie , dupa care se considera ca nu exista reflectata.Acum , daca tii neaparat sa te limitezi la 30ms, pui quartz de 16MHz, iar pentru fiecare unitate din TCNT1 ii va corespunde 0,5us, ceea ce insemna ca timpul maxim pe care il poate masura va fi de 32767us=32,767 ms. Atentie insa, daca schimbi quartz-ul la 16 MHz, o sa trebuiasca sa reconfigurezi PWM-ul de la timer2, pentru a obtine tot 40KHz.Pentru 30ms distanta pana la obstacol este de cca 4,5m. daca driverul de pe SFR05 este destul de "strong", se pot masura si distante mai mari.Eu personal nu am utilizat SFR05 din motive dimensionale. Mi-am facut eu o placa cu BPU-1640IOAH12, care face la fel ca SFR05, cu deosebirea ca emitatorul l-am "atacat" cu +/-12V, marind astfel puterea si implicita distanta de masurare(am ajuns la 8m).Succes. Link spre comentariu
Vizitator mar010 Postat Decembrie 3, 2009 Partajează Postat Decembrie 3, 2009 Binenteles, cu grija ca sa il configurezi intrare (DDRB.3=0)Trebuie sa ai grija ca intrarea in SFR05 sa o legi la OC2 de la MC (PD7), si binenteles sa il configurezi ca atare.Eu am intrarea la PD6.Pai... valoarea maxima a lui TCNT1 poate sa fie 0xFFFF, ceea ce insemna 65535 si prin urmare timpul maxim masurat este de 65,535ms. La datasheet-ul de care faci vorbire, timpul de 30ms este timpul din aplicatie , dupa care se considera ca nu exista reflectata.Acum , daca tii neaparat sa te limitezi la 30ms, pui quartz de 16MHz, iar pentru fiecare unitate din TCNT1 ii va corespunde 0,5us, ceea ce insemna ca timpul maxim pe care il poate masura va fi de 32767us=32,767 ms. Atentie insa, daca schimbi quartz-ul la 16 MHz, o sa trebuiasca sa reconfigurezi PWM-ul de la timer2, pentru a obtine tot 40KHz.Pentru 30ms distanta pana la obstacol este de cca 4,5m. daca driverul de pe SFR05 este destul de "strong", se pot masura si distante mai mari.Eu personal nu am utilizat SFR05 din motive dimensionale. Mi-am facut eu o placa cu BPU-1640IOAH12, care face la fel ca SFR05, cu deosebirea ca emitatorul l-am "atacat" cu +/-12V, marind astfel puterea si implicita distanta de masurare(am ajuns la 8m).Succes.Eu folosesc quartz de 16Mhz...asta inseamna ca treb sa reconfigurez PWM de la timerul 2,ca sa am 40Khz. :-? Nu stiu cum sa fac asta, dar o sa caut. Ce materiale as putea sa folosesc,ma refer la documentatii? Ce as putea sa citesc ca sa inteleg cum "stau" lucrurile?Multumesc pt informatiile de mai sus! Link spre comentariu
mitescu Postat Decembrie 3, 2009 Partajează Postat Decembrie 3, 2009 Eu am intrarea la PD6Foarte bine, dar te contrazici singur, tu ai scris mai sus ca vrei pe pinul 4, OC0. Se poateEu folosesc quartz de 16Mhz...asta inseamna ca treb sa reconfigurez PWM de la timerul 2,ca sa am 40Khz. :-? Nu stiu cum sa fac asta, dar o sa caut. Ce materiale as putea sa folosesc,ma refer la documentatii? Ce as putea sa citesc ca sa inteleg cum "stau" lucrurile?Pai, timer2 este configurat sa functioneze in modul CTC, cu update din OCR2, si in toggle mode. Adica timer2 numara de la 0 pana la valoarea din OCR2, dupa care o ia de la capat, si tot asa.Toggle mode, face ca de fiecare data cand se atinge valoarea de la OCR2, iesirea OC2 isi inverseaza starea. Daca te uiti la setarile de mai sus, o sa observi ca OCR2 ia valoarea 0x64, care in zecimal este 100. Clock-ul lui timer 2 este 8 MHz deci 8000KHz. care impartit la OCR2 , 100 da 80KHz. Avand in vedere faptul ca OC2 se inverseaza numai prin trecerea spre 0, insemna ca frecventa obtinuta se este de doua ori mai mica adica 80/2=40KHz. Pentru cazul de 16 MHz , nu trebuie decat sa pui in OCR2 o valoare de doua ori mai mare, adica 200, 0xC8 in hex, iar sonar_on devine: #define sonar_on {TCCR2=0x19;TCNT2=0x00;OCR2=0xC8;} si atatCa sa te lamuresti citeste datasheet-ul de la ATMega16 Link spre comentariu
Vizitator mar010 Postat Decembrie 3, 2009 Partajează Postat Decembrie 3, 2009 Eu am intrarea la PD6Foarte bine, dar te contrazici singur, tu ai scris mai sus ca vrei pe pinul 4, OC0. Se poateGreseala mea...Am vrut sa zis ca intrarea modului este conectata la pinul 4(OC0) , iar iesirea la pinul 20(ICP1).E ok? Link spre comentariu
mitescu Postat Decembrie 3, 2009 Partajează Postat Decembrie 3, 2009 Tu chiar nu citesti ceea ce scriu ? Am spus ca intrarea o poti lega unde vrei (OC0, sau PD6) dar pentru iesire am specificat clar ca trebuie sa fie OC2, care este iesire output compare dela timer2 - deci NU - semnalul de atac a lui SFR05 se face de la pinul OC2,PD7- pin 21. Parerea mea este sa citesti cu atentie ceea ce scriu, de asemenea sa citesti si datasheet-ul de la ATMEga16. Pana atunci mult succes. Link spre comentariu
Vizitator mar010 Postat Ianuarie 6, 2010 Partajează Postat Ianuarie 6, 2010 Salut! Am cautat sa cumpar senzorul SRF05,dar nu l-am gasit in Bucuresti(la magazinele de pe str Maica Domnului).Asta a fost inainte de vacanta, adica acum vreo 3 sapt.Stie cineva de unde as putea sa il cumpar? Am gasit in schimb separat emitatorul si receptorul ..oare obtin acelasi efect ca si la sfr05? Multumesc! Link spre comentariu
nana Postat Ianuarie 7, 2010 Partajează Postat Ianuarie 7, 2010 Nu cumpara emitatoru si receptoru ca nu o sa faci nimic cu ele e prea mult de lucru. SRF-urile includ pe ele un MCU in care se afla deja instalat softul de comanda al emitatoarului si receptorului. In romania nu ai sa le gasesti... eu le-am comandat din anglia. 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