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
Nagyon egyszeru: a pufferben mindig a legregebbi erteket irod felul es ezt a poziciot megjegyzed egy valtozoban. Az FFT fuggvenyet ugy kell atirni, hogy az index valtozo ne 0-tol induljon, hanem ettol a poziciotol es ha elert a tomb vegere, akkor az elejerol folytassa a beolvasast egeszen a kezdopozicio-1-ig.
Sziasztok! Volna egy problémám, melyben a segítségeteket kérném. Jelenleg egy "metrós órát" építek (aki pesti, az ismerheti a hármas/kék metróból, illetve a kisföldalattiból). A problémám az, hogy táp kihúzás, illetve csatlakoztatáskor néha, ritkán az RTC (DS1307) vissza áll alapállásba 2000.01.01. 00:00:00. Az órám szíve egy ATmega328 egy Arduino Nano 3.0 boardon, melyhez SPI-n csatlakozik felfűzve egy marék 74HC595, hozzá pedig egy marék LED. A tápot az Arduino panel USB csatlakozóján kapja.
Milyen szűrést, pufferelés kellene alkalmaznom az üzembiztos működéshez? 100nF + 16µF ? Ezek elé dióda, vagy ellenállás? Egyáltalán szerintetek ez a hiba forrása? Jó irányban gondolkozom?
Már bocs hogy megkérdezem, de hol az elem?
![]()
Ezt kérlek fejtsd ki bővebben, melyik index változóra gondolsz?
Az FFT-m DIT Radix-2 típusú. Először a mintát tartalmazó tömb indexeit bit-tükrözött sorrendbe helyezi majd utána fut le rajta az FFT ami 3 egymásba ágyazott for ciklusból áll. A külső a szinteken fut le, a második a diszkrét mintákon a legbelsőben történik a pillangó műveletek számítása. Hogy ne tört számokkal keljen számolni a műveletekhez lookup táblázatot használok.
Az elem az RTC panel hátoldalán természetesen. Képek mellékelve a panelról és a működésről.
Attiny2313-as kontrollert hogyan tudnám feltámasztani: internal 128kHz, eddig működött is, aztán ezt még osztottam 8-al
![]()
Szia!
ITT megtalálsz mindent a kérdéseddel kapcsolatosan. Én is sikeresen kizártam magam a chip-ből, megépítettem a mellékelt kapcsolást az ott található leírás, mellékletek alapján és láss csodát sikeresen működik azóta minden.
Nem lehet, hogy csak lejjebb kellene venned a programozód frekvenciáját?
Egyes klóntípusoknál vagy firmware verzióknál nem lehet. Pl. a tuxgraphics-os STK500 nem engedi,
de én egy kicsit átírtam a kódot és már lehet, a beállításhoz képest a valós freki is korrekt. AVR-Doper esetében a SLOW-SCK jumpert kell beállítani, de a legújabb firmware mellett azt se kell. 28/8/4kHz = 4kHz. Ha megy vele a programozó attól még égetni nem enged, csak a FUSE bitek állíthatók. A hozzászólás módosítva: Okt 4, 2012
Amivel a puffert(mintat tartalmazo tombot) indexeled.
Lancos féle párhuzamos programozóm van, hol tudnám azon állítani a frekvenciát? Vagy szoftveresen kellene valahol? Bascomban szoktam a fuse-biteket állítani.
Jelenleg a main függvényben van a 'real' tömb. Ezt adom át az FFT függvénynek.
Az FFT függvényben van egy 'rl' tömb ami megkapja a 'real' értékeit és ezen fut le az FFT. Ebben viszont nem tudom, hogy írjam át az indexelést anélkül, hogy ne tegyem tönkre. Kellene még egy tömb?
PC szoftvere válogatja, de emlékeim szerint nem ajánlja fel egyik sem az ISP freki beállítását.
Nem kell meg egy tomb, az csak noveli a memoriamuveletek szamat, ami csak lassitja az egeszet.
Eredeti kod:
modositott kod 1. lehetoseg:
modositott kod 2. lehetoseg:
Sziasztok
Számítógépen akarok valós időben megjeleniteni illetve tárolni különböző érzékelőktől jövő jelet erre alkalmas egy avr vagy valaki tud valami olcsó gyári megoldást. Köszi
Ez attol fugg, hogy milyen es mennyi erzekelorol van szo. Peldaul, ha nehany homerot szeretnel, akkor alkalmas ra. Ha valamilyen igen komoly jelfeldolgozasra is szukseg van, akkor nem.
Főként egyszerű áthaladás érzékelőről lenne szó, 8-10db. Percenként 350-400 jelel/db.
Még esetleg annyi kérdésem lenne, ha avr-ről ft232-vel beviszem usb-n keresztül a pc-be.Ott van valami egyszerű dolog hogy rögzítsem vagy keresek programozót?
Szerintem mindenkeppen szukseged lesz valamilyen programra. Gondolom az elmentett rekordokhoz celszeru lenne idobelyeget is hozzarendelni, mert kulonben nem lenne visszakeresheto egy-egy esemeny.
A Processing-ben eleg egyszeruen megoldhato a soros portrol jovo adatok feldolgozasa.
Processing
Egy több processzoros rendszer kódját portoltam CodeVision-ből Atmel Studio 6-ba.
A processzorok közötti kommunikáció SPI-n történik. A teljes kommunikáció megszakítás(ok)ban zajlik. Hogy ne kavarjon be a főprogram, ezért globális flagekkel nézem, hogy milyen állapotú a kommunikáció. Az optimalizációs beállításnál -O1-et adtam meg, és a következő furcsaságot találtam: az alábbi kódokat mind ugyanarra fordítja: C
ASM
Tehát a "notReady" globális változót (unsigned char típus) az SPI megszakítás állítgatja, ennek ellenére deadlockot generál az Atmel Studio. -O0 optimalizációnál nincs ez a gond, viszont időkritikus részeknél kritikán aluli a fordított asm kód. Átmenetileg megoldottam asm betéttel a problémát, de ezt nem tartom túl elegánsnak. Valakinek van valami jó tippje, mit próbáljak?
Kipróbáltam "volatile"-lal, így már jó kódot fordít. (Tudom, hogy benne van a keretes részben, de nem ISP-t, hanem GCC-t használtam. Az előző hozzászólást azért nem töröltem, mert nekem fél nap szívás volt, mire rájöttem miért fagy a kommunikáció)
Idézet: „de nem ISP-t, hanem GCC-t használtam” Gondolom ISR-re gondoltál, ami megszakítást jelent. Az ISP az az In System Programmer. Megjegyzem a fent olvasható alapszabályok, ahogyan írja is, a GCC fordítóra vonatkoznak.
Már nem láttam az idegtől így az ISR-t IAR-nek olvastam, és ISP-nek írtam.
![]() ![]()
.....
A hozzászólás módosítva: Okt 8, 2012
Üdv!
Csináltam egy módosított dasa programozót, amivel megy az AVR felprogramozás. ![]() Avrdude-dal teszteltem és WinAVR-rel programoztam. Példának az oldalon található egyik cikk 5. oldalán található kódját használtam. A program fut, de vannak eltérések: - A kezdésnél nem az első LED-del kezdi, hanem a 2.-al - visszafele szintén nem a 8. LED-et használja hanem a 7.-et - sebessége sokkal lassabb a videóhoz képest AVR: ATMega8535-16PU Így módosítottam(vastag betűsek):
Az eredetit nem másolom be, az oldalon megtalálható. Lényegében azzal próbálkoztam, hogy a várakozást feleztem meg, ill. az SPI órajelét nem 16-oltam hanem csak feleztem, de így is olyan lassú maradt. Mi lehet a gond?
Szerintem ugyanúgy tápra kell kötnöd. Bár a 800mV-ot képes lehet kiadni a Ref. feszről is, én azért tápra kötném...
|
Bejelentkezés
Hirdetés |