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   607 / 839
(#) 06smici válasza zombee hozzászólására (») Jún 9, 2014 /
 
Igen, én is az egyik isp mk2-es klónodat használom, az teljesen jól műxik Csak eljött az idő mikor szükségem lenne spi kommunikációra.
Minden esetre ennyi nem sok érte, egy próbát megér. Meg úgyis rendelek más modulokat is az eladótól. Majd megírom a tapasztalatokat róla.
(#) nemezol5 hozzászólása Jún 11, 2014 /
 
Üdvözletem!
Szeretnék egy kis segítséget kérni, még csak ismerkedek az avr-ekkel, van pár db atmega8-am és van egy hibás erősítőm, aminek kiment a vezérlő chip-je, amit ki akarok váltani egy atmega8-ra.
Az lenne a problémám, hogy a bemenetválasztó bogárkát kellene vezérelni, de azt sem tudom hogyan kezdjek neki, ebben kellene segítség.
TC9163AN
A válaszokat előre is köszönöm!

Zoli
(#) Droot válasza nemezol5 hozzászólására (») Jún 12, 2014 /
 
Nézd meg a TDA7439-at. Én ezzel építettem előfokot. Állít hangerőt, Gain-t, mély, magas, közép (ezek hangolhatók külső RC-vel), bemenetválasztó (4db), egyszerű vezérelni.
Ha ilyenben gondolkozol nézd meg a TEA5767-et, ebay-ről rendeltem párszáz forintért, nekem ez is tök jól működött.
(#) nemezol5 válasza Droot hozzászólására (») Jún 12, 2014 /
 
Köszönöm, de nem akarom átépíteni, csak minimális mértékben, minden adott, csak ezt az ic-t szeretném használni, de egyébként ha szenvedős illetve nehezen megoldható, akkor azért átgondolom a cserét. Úgy olvastam valahol, hogy a TDA ic-k torzítása viszonylag nagy, így úgymond igénytelenebb erősítőkbe ajánlott beépíteni.
(#) HöTö válasza nemezol5 hozzászólására (») Jún 12, 2014 /
 
Helló!

Ennek a típusú IC-nek sem bonyolult a vezérlése. Ahogy látom egy szoftveres soros kommunikációra lesz szükséged. Az analóg kapcsoló IC három bemeneten keresztül vezérelhető, ezek sorra a következők:

- DATA Ide kell majd kipakolgatnod az adatbiteket.

- CK Ez az órajel, mikor kiraktad a beírni kívánt adatot némi késleltetés után
magas szintűre kell állítanod, majd kis késleltetés után ismét alacsonyra.
Az adatlap szerint minden felfutó élre történik meg a DATA beléptetése.

- ST Mikor beléptetted az összes bitet (14db) egy kis késleltetés után
ezt a lábat magas szintűre, majd ismét alacsonyra kell állítanod
ekkor állítódnak be a kapcsolók a bevitt biteknek megfelelően.

Az előzőekből kifolyólag tehát 3db vezérlőlábat kell beállítanod az IC-vel való kommunikációhoz, ezek mindegyike digitális kimenet.

Most tekintsük át az adatszerkezetet. A vezérlő csomag 14 bit széles ezek sorra a következők:

- Az első 8 bit sorrendben az 1,2,3 stb. kapcsolóknak felelnek meg, tehát ha
az 1 bit magas szintű, a többi alacsony, akkor valamelyik csatorna egyes
kapcsolója bekapcsol

- A következő két bittel kiválaszthatod, hogy a jobb vagy a bal oldali
kapcsolóknak küldöd-e az információt, amelyik bitet magasra állítod
annak küldesz, ha mind kettőt magasra állítod akkor mind két oldalon
ugyan az a kapcsoló bekapcsol (például mind két oldalon az 1 kapcsoló).

- Az utolsó négy bittel az IC-t azonosítod. Például ha az adatlapban szereplő
mind három típust ugyanarra a buszra kötöd rá, akkor ezzel a négy
bittel lehet eldönteni, hogy melyiknek is küldöd ténylegesen az infót.
A te esetedben ezek a bitek C0-tól C3-ig 1000 értékűek mert TC9163AN IC-t
használsz, más esetben más beállítást igényelnek.

Ahhoz hogy ezt a 14 bit széles adatot eltárold az AVR-ben egy uit16_t típusú
16 bit széles változóra lesz szükséged. Ebből majd csak 14-et léptetsz ki.
Az előzőekben írtam, hogy időzítések kellenek az adatlap alapján ezek 1 és 0,5us-osak
a biztonság kedvéért használj mindenütt 5us-os időzítéseket, nem kell annyi adatot elküldened, hogy ezek az időzítések jelentősen befolyásolják a kommunikációt.

Itt csatolok neked egy függvényt C nyelven ami megoldja a kommunikációt, de természetesen ez csak egy segédlet még ki kell egészítened a saját dolgaiddal, gondolok olyanra, hogy meg kell adnod az AVR mely kimeneteit akarod használni, milyen más perifériákat akarsz használni (infrás kommunikáció távirányítóhoz, I2C más eszközök vezérléséhez stb.). Ezt a kódot AtmelStudio 6.2 alá készítettem, így lehet hogy lesz olyan rész ( _delay_us(5); ) amit más nyelvek nem ismernek. A kommentekben pedig leírom, hogy éppen mit csinálok.
(#) Addye hozzászólása Jún 12, 2014 /
 
Sziasztok!

Szerintetek az ilyen programozó mennyire megbízható? Ennyi pénzért szerintem nagyon is megéri kisebb projektekre, de ha valakinek van valami rossz tapasztalata, nagyon megköszönném, ha megosztaná. Konkrétan most egy ATMega644 programozásához kellene és a lista szerint ahhoz alkalmas is.
(#) TavIR-AVR válasza Addye hozzászólására (») Jún 12, 2014 /
 
Semennyire. Emulált USB annak minden hátrányával. lsd. AVR égetők topic.
(#) elektros90 válasza Addye hozzászólására (») Jún 12, 2014 /
 
Személyes véleményem az, hogy érdemesebb invesztálni egy komolyabb programozóba. Kissebb projektek esetén is. Legyen az gyári, vagy valaki által fejlesztett. Én szívok/szívtam eleget ilyen programozókkal. Nem pont ezzel, ezt nem ismerem.
(#) csabeszq válasza Addye hozzászólására (») Jún 13, 2014 /
 
Elég érthetetlennek látszik ez a programozó.

Emulált USB-nek az ég világon semmi értelme nincs, csak azért született meg, mert az Atmel nem gyárt DIP-es USB IC-t, szemben a PIC-kel.

Az említett programozón minden alkatrész SMD-s, ezért nem értem, hogy miért küzdenek az Atmega8-cal, amikor hardveres USB IC van SMD-n.
(#) zombee válasza csabeszq hozzászólására (») Jún 14, 2014 /
 
Az lehet hogy a "DIP-szerelem" oltalma alatt született meg minden emulált USB-s cucc, de ne feledd hogy az SMD még mindig olcsóbb. A beültetés gyorsan automatizálható, a panelek kisebbek lehetnek, kevesebb élőmunka kell az összeszereléshez. A második kérdésedre a válasz: az ATMega8 olcsóbb, és mindig lesznek madarak akiknek ez a pár cent is számít.
(#) tib12 hozzászólása Jún 14, 2014 /
 
Üdv. Most kezdtem az AVR-eket és a programozást basic-ben (bascom-avr). Olyan kérdésem lenne, hogy miként lehet 0-300 Hz-es frekit beolvasni és azt kijeleztetni ledsorral. Keresgéltem több helyen is sikertelenül. Válaszokat előre is köszi.
(#) Kulusz hozzászólása Jún 14, 2014 /
 
Hétszegmenses kijelző milyen feszültségről működik? Nem az érdekel, amiben LED-ek vannak, hanem az a hagyományos világosszürke hátterű fekete szegmensekkel (folyadékkristályos talán).
(#) zombee válasza Kulusz hozzászólására (») Jún 14, 2014 /
 
Az LCD-k működési feszültsége 1.0-6V közötti lehet, de ami ennél fontosabb, hogy váltakozó
áram kell neki az elektrolízis megelőzése érdekében. Az áramfelvétel így is csak pár uA lehet.
(#) TavIR-AVR válasza tib12 hozzászólására (») Jún 14, 2014 /
 
Az mcselec.com oldalon nézd meg a frekvanciamérő alkalmazást.
(#) zombee válasza tib12 hozzászólására (») Jún 14, 2014 /
 
Gondolom motorfordulatot szeretnél mérni vele. Az alacsony frekiket digitális eszközzel nem is
olyan egyszerű megmérni! Már egy 10Hz-es jel esetén is látványosan ugrál a "mutató" ha a
mérőműszereknél szokásos 1/3 másodperces mérési és kijelzési időintervallumot használod.
Ezért én azt tanácsolom hogy ne (csak) egy adott idő alatt számolt fel/lefutó éleket számláld,
hanem az élek között eltelt időből számold ki a frekvenciát. Persze ezeket lehet kombináltan is,
akkor a mérési időben(1/3 másodperc) beérkező felfutó élek számát (-1) osztod a legelső és
legutolsó él között eltelt idővel.

A rövid elméleti bevezető után a gyakorlat, AVR-el:
A jel erősítése, illesztése után az AVR "T0" és "ICP1" lábaira kell kötni. A T0 a 0. időzítőt
fogja használni és az impulzusokat számlálja, az ICP1 pedig a belső órajelről működő 16 bites
1. időzítővel működik. Utóbbinál az ICP egy adott élátmenete beállítja az ICR1 regisztert
olyan értékre, amelyen az időzítő éppen áll. Az esemény természetesen interruptot is generálhat.
A T0 pedig a 0. időzítő értékét növeli 1-el az élátmenetnél.

Remélem eleget segítettem.
(#) tib12 válasza zombee hozzászólására (») Jún 14, 2014 /
 
Pontosan kerékfordulatot, hall-al és a keréken több mágnessel, akár 6 mágnessel sokkal magasabb frekvenciát kapunk így könnyebb mérni és folyamatosabb lesz a jel. Erre gondoltam a bicikli-kmórákból kiindulva hogy mennyire pontatlanok, és mennyit késnek. Értem és feldolgoztam magamban ezt a megoldást de a kevés ismeretemmel ezt nehezen tudom leprogramozni. Köszönöm a segítséget.
(#) zombee válasza tib12 hozzászólására (») Jún 14, 2014 /
 
Csak azok a mágnesek lehetőleg azonos szögtávolságra legyenek, különben lőttek a pontosságnak!
(#) tib12 válasza zombee hozzászólására (») Jún 14, 2014 /
 
Simson kerék, küllők agy felőli végére tapasztva majd erős ragasztóval rányomva örök élet+1 nap, és pontosan osztja a kereket. Szoftveresen kell még gondolkodnom.
(#) T_ohm hozzászólása Jún 16, 2014 /
 
Üdv! Van egy régi szintetizátorom, amin csak MIDI kimenet van, nincs rajta USB, szóval nem tudom összekötni a számítógépemmel. A MIDI - USB kábel eléggé drága, ennyi pénzt nem ér meg nekem, ezért csinálni szeretnék egyet. Van egy mikroXmega panelom, amellyel már sikerült MIDI üzeneteket küldenem a gépnek és arra gondoltam, hogy a szintetizátorból jövő MIDI üzeneteket az xmegával beolvasnám és küldeném tovább a gépnek, viszont nem sikerül a beolvasás. A szintiből optocsatolón keresztül jön a jel és megy az xmega Rx lábára. A baudrate 31250bps-re van beállítva. A program csak annyiból áll, hogy amit beolvas, azt küldi a gépnek. A zeneszerkesztő program néha észlel MIDI üzeneteket, de ezek nem csak note on/note off üzenetek, hanem összevissza minden jön még note on-C0 is miközben ilyen billentyű nincs is a szintetizátoron. Mivel nincs oszcilloszkópom nem tudom megnézni, hogy valójában mi jön ki a MIDI OUT-on a szintetizátorból, de rákötöttem kíváncsiságból egy LED-et és ez a led akkor is villog, mikor nem nyomok semmilyen billentyűt, ez normális? Volt már valakinek ilyesmivel dolga, vagy esetleg valamilyen tanácsot tud valaki adni?
A választ előre is köszönöm.
(#) Massawa válasza T_ohm hozzászólására (») Jún 16, 2014 /
 
az alap szinkronizácio mindig megy.
(#) T_ohm válasza Massawa hozzászólására (») Jún 16, 2014 /
 
Akkor az, hogy jön jel akkor is mikor nem nyomok semmit normális.Kösz a választ. Akkor viszont a megírt programban van a hiba.
(#) vzoole válasza T_ohm hozzászólására (») Jún 16, 2014 /
 
Annyira azért nem drága... kb. 850Ft az ebay-en postával, de az építés közben szerzett tapasztalat megfizethetetlen
(#) T_ohm válasza vzoole hozzászólására (») Jún 16, 2014 /
 
Az ebay-en tényleg nem drága, viszont nincs paypal-om, máshol meg 20-30eu környékén vannak az ilyen kábelok. Az xmegával szeretném megoldani, de nem sikerül rendesen beolvasni a szintiből jövő jelet. A MIDI üzenetet ugyan úgy olvashatom mint az UART esetében, vagy tévedek? Igazából még nincs sok tapasztalatom a mikrokontrollerekkel, de ahogy néztem a MIDI és az UART esetében is jön egy startbit, utána 8 adatbit és egy stop bit (persze így is van beállítva: 8 adatbit, 1 stopbit és nincs paritásbit) és én ezt csak kiolvasom a data regiszterből. Ez így működhet, vagy hülyeséget írtam?
(#) rolandgw válasza T_ohm hozzászólására (») Jún 16, 2014 /
 
Így működik,de ennyire azért nem egyszerű az usb miatt
Itt találsz egy példát mega8-ra:
Bővebben: Link
(#) T_ohm válasza rolandgw hozzászólására (») Jún 16, 2014 /
 
Kösz, ezt átnézem és remélem sikerül összehozni valamit
(#) gabi20 hozzászólása Jún 18, 2014 /
 
Sziasztok
Valaki használt már ATtiny45 - ben I2C portot? Külső EEPROMot szeretnék olvasni. Sajnos az ATtiny - ben az I2C és az SPI valahogy kombinálva van. Az adatlapban pedig nincs sok minden róla. Esetleg valami példaprogramot tudna valaki mellékelni?
Köszönöm szépen
(#) csabeszq válasza gabi20 hozzászólására (») Jún 18, 2014 /
 
Csináltam már I2C-t USI-val. Működik, de sok memória kell hozzá, lassú, macerás megcsinálni és van benne várakozó rész is, nem mindenütt megszakításokkal megy.

Túl sok energiát nem öltem az I2C-s USI-ba, mert Atmega 48-at 500 forintért kapsz és szívás helyett ennek vannak működő részei is.

Az Atmegák I2C implementációja totál gáz, nem szabványos, instabil, amit az USI rendesen alulmúl. Ha egy mestered van, több szolgád, akkor az Atmega még elmegy, de több mester esetén AVR helyett más IC kell.

Doksi az usihoz és példaprogram:

http://www.atmel.com/Images/doc2560.pdf
http://www.atmel.com/Images/AVR312.zip
A hozzászólás módosítva: Jún 18, 2014
(#) csabeszq válasza csabeszq hozzászólására (») Jún 18, 2014 /
 
Atmegákról tudnék mesélni, el van tolva az egész I2C kezelésük, amiért többmesteres üzemre használhatatlanok.

1. néha nem vesz észre a hardver, hogy a buszon vagy:
- szolgaként STOP jelet kapsz (A0)
- a STOP jel lekezelése neked időbe telik (interrupt), viszont az SCL-t már nem tudod alacsonyan tartani stop után, hogy fogjad a buszt
- a mester új tranzakciót kezd új START jellel
- te még az előző STOP lekezelésével foglalkozol, ezért amikor újra neked szólnak NACK megy vissza
- miután lekezelted a STOP-ot, újra engedélyezed magad a buszon, de ezidő alatt már egy pár sikertelen tranzakció megtörténhetett
- ez tervezési hiba


2. fagyás:
- egyszerre két mester adja ki a START jelet, mindkettő azt hiszi, hogy a másik adta ki, mindkettő megáll, ilyenkor kell mindkét IC-n a TWI-t letiltani és engedélyezni, hogy újra magukhoz térjenek

3. belepofázás mások adásába:
- a buszfoglaltás érzékelése nem mindig sikerül és más IC-k beszéde közben simán rányomja a START jelet
- nem hagyod, hogy a hardver adja a START jelet, saját kóddal figyeled, hogy mehet-e

4. új START jel küldésénél az I2C szabvány STOP után 5 us közeli értéket ír elő
- több mester esetén az AVR képes úgy kiküldeni a START jelet, hogy a STOP után a vonal még 2.5V-ot sem ér el, nemhogy megvárná az 5 us-t
- a busz egyik fele azt gondolja új START jel jött 0.1 us után, a másik zavart érez az erőben és észre sem veszi az egészet

5. néha STOP után az SDA-t alacsonyan felejti. Ilyenkor kell a TWI-t tiltani és újra engedélyezni, mert megáll a kommunikáció a teljes buszon.


Rémborzalom, amit ezek az IC-k I2C címszó alatt csinálnak.
A hozzászólás módosítva: Jún 18, 2014
(#) Droot hozzászólása Jún 18, 2014 /
 
Sziasztok!

24LC16-os eepromot szeretnék működésre bírni.
Az adatlap szerint kell választani blokkot (3 bit) és word adress-t (8 bit) írásnál és olvasásnál.
Ez azt jelenti hogy 2^3*2^8=2048 bitet tárolhatok le?
Blokkonként 256 bit? 8 blokk van?

Ezt úgy fogjam fel hogy van 8 komódom, minden komódban 256 fiók és minden fiókban 1 bit?
(#) kapu48 válasza Droot hozzászólására (») Jún 18, 2014 /
 
Inkább 8*256*8bit ként fogd fel!
Következő: »»   607 / 839
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