Fórum témák
- • Erősítő mindig és mindig
- • Vicces - mókás történetek
- • Lemezjátszó beállítása, javítása
- • Alternativ HE találkozó(k)
- • LM1875, LM3875, LM3886, stb. TI végerősítők
- • LCD kijelző vezérlése, életre keltése
- • Felajánlás, azaz ingyen elvihető
- • 3D nyomtatás
- • Kondenzátor feltöltés
- • Villanymotor
- • Villanyszerelés
- • XBOX kiegészítők, javítások átalakítások
- • Erősítő építése elejétől a végéig
- • Quantum véletlenszámgenerátor
- • Multiméter - miért, milyet?
- • Multiméter problémák
- • TV hiba, mi a megoldás?
- • Quad 405-ös erősítő tapasztalatok és hibák
- • EMG TR-0463 funkciógenerátor
- • Mosógép vezérlők és általános problémáik
- • Áramlökés határoló lágyindító
- • Állandómágneses motorok és generátorok építése
- • Fejhallgató erősítő
- • Műveleti erősítő
- • Kaputelefon
- • PLC kérdések
- • Gázkazán vezérlő hibák
- • Napelem alkalmazása a lakás energia ellátásában
- • Előerősítő
- • Érdekességek
- • Hegesztő inverter javítás
- • HESTORE.hu
- • Audiofil, High End Audio
- • Li-Po - Li-ion akkumulátor és töltője
- • Arduino
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • Villanypásztor
- • Rendelés külföldről (eBay - Paypal)
- • Kapcsolóüzemű táp 230V-ról
- • V-FET és SIT erősítő kapcsolások
- • Kombikazán működési hiba
- • Csere-bere
- • Savas akkumulátor
- • Elfogadnám, ha ingyen elvihető
- • Általános antennás kérdések, válaszok
- • Áramváltó trafóval áram mérés, hogy?
- • Elektromos sertéskábító
- • DC motor/lámpa PWM szabályzása
- • IMI villanymotor
- • Műhelyünk felszerelése, szerszámai
- • Codefon kaputelefon
- • PIC - Miértek, hogyanok haladóknak
- • Muzeális készülékek-alkatrészek restaurálása
- • Hangszínszabályzó
- • Elektronikus szulfátoldó (Akku aktivátor)
» Több friss téma
|
Fórum » ATMEGA C kód ultrahangos távmérő
Sziasztok!
Lenne egy olyan kérésem, hogy elakadtam egy kód írásában. Ultrahangos távolságmérés a téma, de kicsit más a kérdésem, mint az eddigi topikokban. Ezért bátorkodtam újat nyitni. Sikerül kiadnom a jelet az ATMEGA32 OC0-s lábán. 40kHz. És meg is tudom állítani. De hiába jön vissza jel az ICP1-es lábra, nem lép ki a while ciklusból. 5.23 Voltos jel jelenik meg a lábán mikor visszaérkezett a hang, de nem tudom hogyan dolgozzam föl. Hogy számoljam ki mennyi az ami a TIMER1-be íródott. Igazából programozásból analfabéta vagyok. Erre lenne szükségem.
while(1)
{
while (echo == 0) //for (j = 0; j < 2; j++)
{
TIMSK &= ~((1 << TICIE1) | (1 << TOIE1));
start_pwm(); // Jel kibocsatas 0.3 ms-ig
for (i = 0; i < 3; i++) _delay_us(100);
stop_pwm();
_delay_ms(2);
TIMSK |= (1 << TICIE1) | (1 << TOIE1);
}
ITT a capture:
Elvileg ennek kéne jeleznie.
SIGNAL (SIG_INPUT_CAPTURE1)
{
cli();
ido_d = ICR1; // Mentjuk a capture erteket
TCCR1B &= ~(1 << CS11); // Szamlalo leall...
TCNT1 = 0; // ... es nullazodik
echo == 1;
sei();
return;
}
Köszi a segítséget!
(#) |
Moderátor hozzászólása dedista hozzászólására (») |
Márc 14, 2010 |
|
Használd a kód beillesztést máskor.
Helló.
Én Arduino-ban programozok AVR-ket,ott az egész olvasás (általában pulseIn-t vagy SofetSerial parancsal olvasok pinget,de még van sok,pl. a wire library,NewSofetSerial,egyszerű analogRead és konverzió... és aztán pedig osztási képlettel számítók értéket. Egyébként rengeteg Ping-ről szóló anyag van a neten, könnyű megérteni működésüket. Egyébként az Arduino is egy C alapú nyelv,hasonlítanak,szinte a gondolkodásmód is azonos.) meg minden kicsit más de a gondolkodás hasonlít.
Egyébként hagyjuk az előszót térjünk a lényegre.
Itt van a kérdésedre a 100%-os megoldás példa progival meg minden infó. Sok sikert!
Üdv. Hunor!!
Szia!
Nem lehet, hogy a fordító kioptimalizálja az echo változót?
winavr csinál ilyet amikor egy globális változó a főprogramban van és pl. megszakításban változik az értéke.
(#) |
(Felhasználó 4577) válasza dedista hozzászólására (») |
Márc 20, 2010 |
 |
/ |
 |
|
Nem tudom, hogy aktuális-e még.
Hogy van deklarálva az echo változó?
Így kell:
volatile unsigned int echo = 0;
Egy apró megjegyzés. Az interruptban az echo-t nem két egyenlőség jellel kellene 1-re állítani. Szóval ehelyett:
Ez kellene:
Ahogy most van neked így csak egy egyenlőség vizsgálatot csinál, nem egyenlővé teszi 1-el. Így nem is fog kilépni a while ciklusból.
(#) |
(Felhasználó 4577) válasza Ricsi89 hozzászólására (») |
Márc 20, 2010 |
 |
/ |
 |
|
Pontosan, és a return se kell bele. return; pedig végképp nem, ha már beleteszed, valami legyen, pl return 0;, de nem kell bele return.
|
|