Fórum témák
» Több friss téma |
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
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.
Ü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
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.
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.
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.
Semennyire. Emulált USB annak minden hátrányával. lsd. AVR égetők topic.
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.
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.
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.
Ü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.
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).
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.
Az mcselec.com oldalon nézd meg a frekvanciamérő alkalmazást.
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.
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.
Csak azok a mágnesek lehetőleg azonos szögtávolságra legyenek, különben lőttek a pontosságnak!
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.
Ü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.
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.
Annyira azért nem drága... kb. 850Ft az ebay-en postával, de az építés közben szerzett tapasztalat megfizethetetlen
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?
Í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
Kösz, ezt átnézem és remélem sikerül összehozni valamit
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
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
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
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? |
Bejelentkezés
Hirdetés |