Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
WinAVR / GCC alapszabályok:
1. Ha ISR-ben használsz globális változót, az legyen "volatile"
2. Soha ne érjen véget a main() függvény
3. UART/USART hibák 99,9% a rossz órajel miatt van
4. Kerüld el a -O0 optimalizációs beállítást minden áron
5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás
6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et
Bővebben: AVR-libc FAQ
Lapozás: OK   171 / 840
(#) Topi válasza janyjozsef hozzászólására (») Dec 14, 2009 /
 
Mert Te még mindig 100nF-os kondiról beszélsz. Ezt mondtam a legelején, hogy 100nF-al szűrni egy FET-es bemenetet értelmetlen. nA-ekre is átáll a FET-es bemenet.
100nF-al maximum nagyfrekis szenpontból leföldelted a bemenetet. De ettől még az lebeg! És a bemenet impedancia - 100nF-os idő állandó még mindig védtelen a Te 50Hz-es "kéz" zajoddal szemben.

Ezt magyarázom, hogy a 100nF-os szűrés semmire nem jó itt. Itt felhúzó ellenállás gond is van (logikai sorrend hibán felül), nem szűrő kondi.

Kevered a szezont a fazonnal.
(#) S79 válasza gerinc hozzászólására (») Dec 14, 2009 /
 
Köszi szépen a segítségeket.

Gerinc kérdezhetek még majd ezzel kapcsolatban priviben? nem szeretném telefloodolni a fórumot.
(#) janyjozsef hozzászólása Dec 14, 2009 /
 
"
Ha megnézzük a kódot, látszik hogy a szoftveres "pwm" kikapcsolt port állapotban fejezi be a jel generálást. Az új hang meg egyből 1-es szinttel kezdődik.
"
Éa ha 0 szint van a generálódás végén?
Hang csak akkor keletkezik, ha van változás. Ha 0-val kezdődne, akkor is a következő szint 1 lenne (ekkor is pattana?). Vagyis mi a különbség abban, hogy nem 0-val kezd hanem 1-el?

A legnagyobb hülyeség:
"
Ez a 0-1 váltás egy végtelen frekvenciájú jel, ez okozza a pattanást.
"
Végtelen freki?
Ha meg végtelen akkor miért hallható?

És szerintem a frekvencia egy periódus változás vagyis a 0-ból 1-be az csak szint és nem periódus váltás.
De ez már lehet, hogy hülyeség.
(#) Topi válasza janyjozsef hozzászólására (») Dec 14, 2009 /
 
Idézet:
„A legnagyobb hülyeség:
"
Ez a 0-1 váltás egy végtelen frekvenciájú jel [...]
"
Végtelen freki?

Ha meg végtelen akkor miért hallható?


Idézet:
„És szerintem a frekvencia egy periódus változás vagyis a 0-ból 1-be az csak szint és nem periódus váltás.”

Még jó hogy ilyenekről senki nem beszélt. Ha tetszik ha nem, periódus idő változással együtt, frekvencia változás is történik. Ha megcáfolod, ha nem.

Na jó, én kiszálltam. Elektronikai alapismereted hiányában nem tudok tovább vitatkozni, teljesen evidens dolgokról. Kérlek ne haragudj.
(#) BlueFox hozzászólása Dec 14, 2009 /
 
Itt a nagy szűrés vitájában úgy érzem elveszett az én kérdésem

Mégegyszer felteszem, hátha csak nem vette észre valaki aki tud nekem segíteni!

Kérdés mégegyszer: Miért nem kell fel az attiny13 power down módból ha az INT0 lábára érkezik egy jel? lefutó élre üt be az interrupt, a menüt tökéletesen tudom vele léptetni, de ha elmegy aludni nem kel fel. Ha nem power down-ba küldöm, hanem IDLE-be akkor felkel, csak az nekem sokat fogyaszt. Esetleg valaki tud segíteni?
(#) zsuscsinyo válasza janyjozsef hozzászólására (») Dec 14, 2009 /
 
Idézet:
„Ez a 0-1 váltás egy végtelen frekvenciájú jel, ez okozza a pattanást.
"
Végtelen freki?
Ha meg végtelen akkor miért hallható?


A válasz rettentő egyszerű, az alábbi linken magad is megláthatod.

Bővebben: Link
(#) vtsoftware hozzászólása Dec 14, 2009 /
 
Sziasztok

Szeretnék SPI-n keresztül AVR-el - pl.: AtTiny45-el (bár lehet errre kicsi, akkor AtMega8) - egy IC-t vezérelni de fogalmam sincs hogyan, milyen kóddal.

A vezérelendő IC több darab AS1116.

Könnyű kérni, meg minden, de a kódból hátha ki tudom szedni egy kis szórakozással hogy is működik ez a "regiszter" dolog, sajna szinte semmit nem találok a neten... bár lehet hogy nem jól, nem jó helyen keresgélek

Előre is köszi
(#) janyjozsef válasza vtsoftware hozzászólására (») Dec 14, 2009 /
 
Hali!

Ez csak alap.

A részleteket az ATMEGA8 adatlapban nézd meg.

SPI.h

SPI.c
   
(#) vzoole válasza BlueFox hozzászólására (») Dec 14, 2009 /
 
Szia!

Tedd fel a forráskódot, esetleg kapcsolási rajzot is.

(#) janyjozsef válasza BlueFox hozzászólására (») Dec 14, 2009 /
 
Szia!

Ilyet még nem csináltam, de a leírás alapján INT-re ébrednie kellene.
Ez azonban függ az Interrupt beállításától és a CKSEL FUSE bitek beállításától is (wake up time).

Bővebbet esetleg, ha teszel fel kódot.
(#) hátor hozzászólása Dec 14, 2009 /
 
Sziasztok !
Kezdő vagyok AVR szinten és szeretnék megtanulni programozni. Programoztam már AVR-t ,de csak már megírt forráskóddal ,vagy Hex-a fájlal .A kérdésem az lenne ,hogy Bascom alatt szeretnék programozni és ahoz használható -e a Virtual Basic könyv ? Szeretném tudni ,hogy mit és mikor kell használnom az egyes parancs szavakat. Előre is köszi .
(#) janyjozsef válasza zsuscsinyo hozzászólására (») Dec 14, 2009 /
 
Link elolvasva!

Ott sincs szó végtelen frekvenciáról.

Idézet a linkelt oldalról:
"
Vajon miből áll egy négyszögjel? Hogy lehetne definiálni?
Elárulom. Egy négyszögjel nem más, mint végtelen sok szinusz-függvény összege.
"
A végtelen sok függvény és a végtelen frekvencia szerintem nem azonos.
De ha tévednék, akkor... :peace:
(#) zsuscsinyo válasza janyjozsef hozzászólására (») Dec 14, 2009 /
 
Tévedni emberi dolog
(#) Vacok válasza Topi hozzászólására (») Dec 14, 2009 /
 
Azt jól értelmeztem ebből a hosszú vitából, hogy AVR-re nem lehet olyan programot írni, ami sweepelést valósít meg?
Ez PICcel megvalósítható?
(#) kendre256 válasza janyjozsef hozzászólására (») Dec 14, 2009 /
 
A végtelen sok szinusz úgy értendő, hogy van 1*f0, 2*f0, 3*f0,....n*f0, ahol n egész szám. Ha n végtelen, akkor n*f0 is végtelen frekvencia (a végtelennek akárhányszorosa is végtelen). Az ideális impulzus átviteléhez végtelen nagy sávszélesség kell, mert végtelen frekvenciájú összetevőket is tartalmaz.
(A valóságos impulzussorozat "elég jó minőségű" átviteléhez is az impulzussorozat alapfrekvenciája sokszorosának megfelelő sávszélességre van szükség.)
(#) BlueFox válasza janyjozsef hozzászólására (») Dec 14, 2009 /
 
Ez az interrupt maga és a beállítása:

  1. ISR(INT0_vect)
  2. {
  3.         gomb++;
  4. }
  5.  
  6. void init()
  7. {
  8.         DDRB=0x01;
  9.         MCUCR = (1<<ISC01);
  10.         GIMSK = (1<<INT0);
  11.         set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  12. }


Ez pedig a végtelen ciklus, ahol történik az esemény: (néhány pontot kihagytam mert felesleges ide az egész menü felsorolása)
  1. while(1)
  2.         {
  3.                 while(gomb==1)
  4.                 {
  5.                         while(vtime<36)
  6.                         {
  7.                                 PORTB &= ~0x01;
  8.                         }
  9.                         PORTB |= 0x01;
  10.                         if(vtime>=38)
  11.                         {
  12.                                 vtime=0;
  13.                         }
  14.                 }
  15. //itt kihagytam a többi menürészt
  16.                 while(gomb==7)
  17.                 {
  18.                         PORTB |= 0x01;
  19.                 }
  20.                 PORTB &= ~0x01;
  21.                 gomb=0;
  22.                 TCCR0B = 0x00;
  23.                 sleep_mode();
  24.                 inittimer();
  25.         }


Ha a sleep mode IDLE akkor tökéletesen működik, csak mint már írtam, nekem az sajnos nem jó.
(#) janyjozsef válasza kendre256 hozzászólására (») Dec 15, 2009 /
 
:peace:
Meggyőztetek!
De!

Akkor minden váltásnál ott a "végtelen" freki.
És, akkor miért nem pattanások sora hallható?
(rajz)
Vagyis miért szünet utáni szintváltásnál van pattanó hang és egyéb szintváltás helyén nincs?
Ráadásul a váltás után nagyon rövid időn belül (a hang frekvenciájának megfelelő idő) jön a kövi váltás.
Ha az gyors, akkor nincs idő pattanást hallani.

frek.JPG
    
(#) vzoole válasza BlueFox hozzászólására (») Dec 15, 2009 /
 
Adatlap...

Power Management
and Sleep Modes

power down mode rész.
Látsz egy táblázatot, hogy mi tudja fölkelteni a procit.
Itt INT0-nál van jelölés.
Azt írja INT0 használatakor csak "level" megszakítás.

Valószínű ezt kell beállítani:
The low level of INT0 generates an interrupt request.
(External Interrupts fejezet)

tehát isc01=0 isc00=0

Remélem így jó lesz.

(#) BlueFox válasza vzoole hozzászólására (») Dec 15, 2009 /
 
Köszönöm, így ténlyeg működik! ötleted után utánaolvastam, és az a baj, hogy ha le vagy felfutóélre rakom, akkor túl kevés ideig kel fel hogy teljesen felkeljen, és ezért nem kellt fel.

Köszönöm mégegyszer a segítséget!
(#) kendre256 válasza janyjozsef hozzászólására (») Dec 15, 2009 /
 
A pattogást azért hallod, mert van egy DC szint ugrás. A kimenő jeled tulajdonképpen egy Ut/2 feszültségre ültetett +-Ut/2 csúcsfeszültségű négyszögjel. Amikor a kimenőjel elindul, akkor van egy Ut/2 ugrás. Ez lassan (a hanghoz képest lassan) feltölti a csatolókondenzátort, ezt a feltöltődést hallod. Meg kellene nézni oszcilloszkóppal a terhelésen lévő jeledet, azon gyönyörűen látszana a kondi feltöltődése.
Két dologgal próbálkoznék:
1. A csatolókondenzátort kisebbre venném. Ez persze a csatolt jel frekvenciájától függően szintcsökkenést okoz.
2. Ha a szintcsökkenés és frekvenciafüggés baj (bár szerintem négyszögjelnél nem lehet nagyon probléma) akkor a csatolókondenzátor vezérlő felőli végét féltápfeszültségre tenném, és a szünetek idejére a kimenetet nagyimpedanciás állapotba állítanám. Lehetne bemenetként is konfigurálni, csak akkor a kondi féltápfeszre húzását kisebb ellenállásokkal kellene megvalósítani. A mellékelt rajzon jelzett 4k7 lehet nagyobb is, vagy kisebb is kellhet, attól függően, hogy bemenetként mekkora a felhúzóellenállás. (És persze ne legyen olyan kicsi, hogy a kimenetet feleslegesen terhelje.)
Ha nincs is csatolókondenzátor, csak egy piezo van egy kimenetre kötve, a megoldás akkor is jó, a töltődő kapacitás olyankor maga a piezo.

szint_j.jpg
    
(#) janyjozsef válasza kendre256 hozzászólására (») Dec 15, 2009 /
 
Köszi a választ, de itt nincs féltáp.
Rajz
A soros kondi természetesen nem jó megoldás.

Az eredeti problémát Krisz03 írta le.
A kód innen van: Téma
(#) kendre256 válasza janyjozsef hozzászólására (») Dec 15, 2009 /
 
"Köszi a választ, de itt nincs féltáp."
Azért csináltam a két 4,7 kOhm-os ellenállással...
Inkább én is feladom...
(#) janyjozsef válasza kendre256 hozzászólására (») Dec 15, 2009 /
 
Megértettem.
Tudom. Lassú a felfogásom.
De, ha ennyien értik a problémát és tudják a megoldást, akkor miért nem lehet egy max két hozzászólásban megmondani. Miért kell hozzá hülyeségeket kérdezni?
(bár legalább okosodtam a témában )

A zavaró az volt a válaszodba, hogy az első mondatnál tényként indítottad, hogy féltápon van a kimenet, ami a linkelt rajz esetén nem igaz. "A kimenő jeled tulajdonképpen egy Ut/2 feszültségre ültetett +-Ut/2 csúcsfeszültségű négyszögjel."

Viszont!
Az eredeti rajz esetén Ha az IC kimenete a jel kiadása végén 0V, akkor Q1 zár, A piezo 5 és 12V közé kerül.
Vagyis töltődhet.
Ha Q1 nyit, akkor a piezó 12V-ot kap.
Mi lenne, ha a piezó is 5V-ot kapna?
Ekkor ha Q1 zárt, akkor a piezó 2 pontja azonos potenciálon van és nem lenne töltődés.
Vagy az R2-t 12V-ra.

Nos? Vélemény?

:smile:
(#) Krisz03 válasza janyjozsef hozzászólására (») Dec 15, 2009 /
 
Hiába kötöttem a piezót 5V-ra (vagy akár tranyó nélkül közvetlen a kimenetre), vagy húztam 12V-ra a kollektort, ugyanúgy megvolt a pattanás.

Köszönöm, hogy fáradoztatok a probléma megoldásában, de részemről lezártnak tekintem a mikrokontrolleres elképzelést. Sikeresen átalakítottam a vízkőoldós témában lévő áramkört, ami a hallathó tartomány tetejétől (kb 18kHz-től) egészen az ultrahang tartományban (kb 30kHz-ig) szólaltat meg hangokat.
(#) janyjozsef válasza Krisz03 hozzászólására (») Dec 15, 2009 /
 
Gratulálok.

És annál nincs pattanás?

Belinkelnéd a rajzot és a kódot ami működik?

Csak az összehasonlítás kedvéért.

Köszi.
(#) Krisz03 válasza janyjozsef hozzászólására (») Dec 15, 2009 /
 
Köszi! Bevallom, nem volt egyszerű, szó szerint az egész napom ráment.
Ennél nincs pattanás, ez fokozat nélkül változtatja a hangját, de nem processzoros, hanem egy NE556 és egy CD4013 a lelke. A kapcsolást a vízköves topikban csatoltam: Bővebben: Link.
Persze tudom, alkatrésztemető, meg minden, de ha ez végre csendre utasítja a kutyákat, akkor nekem már bőven megérte.
(#) kendre256 válasza janyjozsef hozzászólására (») Dec 15, 2009 /
 
OFF
Ezek a kérdések nem ebbe a topikba valók.
Az a probléma, hogy elektrotecnikából és elektronikából nem tudsz bizonyos dolgokat.
Itt van pl. ez a mondat:
"első mondatnál tényként indítottad, hogy féltápon van a kimenet,"
Én a jelről mondtam (és nem a kimenetről!), hogy a tápfeszültség felének megfelelő DC feszültségre ültetett, a tápfeszültség felének megfelelő csúcsfeszültségű négyszögjel. Vagyis két jelből lehetne összerakni, egy DC jelből és egy négyszögjelből.
A kimenetről nem mondtam, hogy féltápon van, viszont a jel bekapcsolásakor a jel átlagértéke (50%-os kitöltés esetén) a tápfeszültség felére ugrik (fentről vagy lentről). Ha a kimenet alapállapotban féltápon lenne, nem volna semmi baj (ezt oldom meg a két ellenállással), mert akkor nem történne DC ugrás a kimeneten.
A piezót simán lehetne a vezérlő kimenetére kötni (mint ahogy az eredeti cikkben is volt), nem jelent akkora terhelést, szerintem felesleges a tranzisztor. A piezó másik végét pedig teljesen felesleges +12V-ra kötni, az váltakozóáramú szempontból ugyanúgy föld, mint a +5V, vagy a tápfeszek negatív pontja.
A változtatott kapcsolásban is ugyanaz történik, mint amiről beszéltem. Az a DC ugrások szempontjából semmit nem változtat, hogy a piezó egyik pontja 12V-on van, csak lesz egy állandó 7V-os egyenszint a piezón mindig, ez fog változni a jel beindulásával 2,5V-tal.
A tranzisztor a DC ugrás szempontjából problémásabb, mert a beforrasztott felhúzóellenállását nem lehet ki-be kapcsolgatni programból. Sokkal bonyolultabban meg lehetne tranzisztorral is oldani a DC ugrás kivédését, de piezóhoz semmi értelme nincs.
ON
(#) janyjozsef válasza kendre256 hozzászólására (») Dec 15, 2009 /
 
Most lett teljesen világos. (remélem)

(Maradjunk a 0...5V-nál)
Vagyis. A pattanó hangot az okozta, hogy a kimenet alapállapotban 0V a jel bekapcsolásakor a kimeneti DC (Ueff mivel 50% a kitöltés tényező) 2.5V-ra ugrik. Ehhez képest 5V és 0V-ra megy a jel.
És az indulásnál 0-ról 2.5-re ugrás a hallható pattanás.

Jól értem?

Ha megnézzük az említett vízkőmentesítőt Bővebben: Link, akkor ott is kellene pattanást hallani. Mivel Uki = 0V és egy tranyó egyszer csak 12V-ra kapcsolja. Itt Udc = 6V.
Vagyis ugrás 0-ró 6V-ra.

Itt nincs UT/2-re állító ellenállás és nincs kimeneti HiZ sem.
(#) kendre256 válasza janyjozsef hozzászólására (») Dec 16, 2009 /
 
Ennél a kapcsolásnál nem tudom, hova kapcsolódik a piezo, mert nincs a rajzon jelölve. Van elképzelésem, de több ponton érthetetlen, és túlbonyolítottnak tűnik nekem a rajz.
A két D tároló és a két tranzisztor helyett a csatolt rajzon lévő kapcsolást tenném, azzal sem pattogna a piezo.
Mellesleg ez jó lenne egy AVR kimenethez is (az ötletet Krisz03 kapcsolásának utángondolása adta), ez egy egyszerű inverterrel kialakított primitív "hídkapcsolás".

szint1_j.jpg
    
(#) janyjozsef válasza kendre256 hozzászólására (») Dec 16, 2009 /
 
Szia!

"Ennél a kapcsolásnál nem tudom, hova kapcsolódik a piezo, mert nincs a rajzon jelölve."

Szerintem a KI1 Ki2 pontokra kapcsolódik.


A "hídkapcsolásod" viszont jó megoldásnak tűnik.
Így még a kimenet teljesítmény is növekszik (szerintem).
Mert a piezó nem 0 és 5V között van, hanem egyszer 0-5V A másik fázisban 5-0V. Ez olyan mintha 0-10V-ot kapna.
A kérdés csak az, hogy a piezó polaritásfüggetlen? Ezt nem tudom. De, ha kondiként értelmezzük, akkor annak kell lenne.
Következő: »»   171 / 840
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem