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   368 / 840
(#) wir12 hozzászólása Okt 19, 2011 /
 
Keresgélni keresgéltem na de pont erre van szükségem hogy tanácsoljatok egy könyvet ( "Az IBM PC programozása assembly nyelven" ) sok ehhez hasonlót néztem de nem tudtam eldönteni hogy ez nekem jó lenne.
A ne linkelgessetek alatt azt értettem hogy a válasz ne az legyen kapásból hogy "http://www.avr-asm-tutorial.net/" mert az angolt nem nagyon értem most kezdtem el a tanulgatását saját erőből eddig németet tanultam de az nem tetszik.
(#) wir12 válasza Reggie hozzászólására (») Okt 19, 2011 /
 
Köszönöm most már tudom hogy ez jó az induláshoz.
(#) Reggie válasza wir12 hozzászólására (») Okt 19, 2011 /
 
Szolok, hogy nehezen fogsz raakadni erre a konyvre, mert mamar eleg ritka es reg adtak ki utoljara. Inkabb konyvtarakban celszeru keresni. Viszont nagyon jo(es vastag) konyv.
(#) gtk válasza wir12 hozzászólására (») Okt 19, 2011 /
 
Van nemet forum is, nem is rossz !
(#) zsidanyi hozzászólása Okt 19, 2011 /
 
Üdv!

Olyan kérdésem volna, hogy valaki talált már neten, valamikor, valahol bármilyen AVR mikrokontrollerre LPF, vagy FFT implementációt C-ben?
Nem igazán találok csak tanácsokat, meg nagyon alap dolgokat, de én csak tesztelni szeretnék VMLAB környezetben egy komponenst, és igazából nem mennék bele a részletekbe, csak egy működő kód kéne (leginkább Atmega 128-ra).
(#) Reggie válasza zsidanyi hozzászólására (») Okt 19, 2011 /
 
Igen, a 32 bites AVR-hez van generic(azaz nem optimalizalt) fuggvenykonyvtar 16 es 32 bites szomerettel.
Az LPF alatt, ha FIR szurot ertesz, akkor az olyan egyszeru, hogy te is le tudod programozni, ugyanis csak szorzasbol es osszeadasbol all (es max a vegen egy osztas). A szuro koefficienseinek a kiszamolasahoz viszont nincsen segitseg, azt neked kell megoldanod.
(#) zsidanyi válasza Reggie hozzászólására (») Okt 19, 2011 /
 
Köszönöm a segítséget, megpróbálom megcsinálni akkor.
(#) Reggie válasza zsidanyi hozzászólására (») Okt 19, 2011 /
 
IIR es FIR szuro kalkulator oldal. nekem nagyon bevalt, es meg a C programkodot is legeneralja, bar en ujrakodoltam, mivel a folyamatosan bejovo adatok miatt nem optimalis az algoritmus, ugyanis ezzel a koddal minden bejovo uj adatnal a puffert shiftelni kellene.

AVR32 Software Framework. Ezen belul az avr32/services/dsp/dsplib/include avr32/services/dsp/dsplib/generic/basic konyvtarban talalod a dolgokat. Amire szukseged lesz egy 16 bites FFT-hez:
dsp.h
trans_dsp16_real_complex_fft.c
trans_dsp16_twiddle_factors.c
trans_dsp16_twiddle_factors.h
A twiddle factors-ban tarolja az FFT elvegzesekor az integralon beluli kifejezes e-ados tagjainak(ergo vektorok) a szoget es hosszat, igy a felbontasnak megfelelo(default 1024 pontos) darab 16 bites erteket a szogekre es a hosszokra, azaz 4096 byte-nyi konstanst. Ezeket alaphelyzetben a memoriaban tarolja, mert onnan gyorsabb az elerese, de neked nem lesz ennyi memoriad, ezert at kell irnod, hogy a programtarban tarolja, es a *fft.c -ben at kell irnod az algoritmust, hogy onnan olvassa ki. Elore szolok, nem lesz egy gyors algoritmusod.
A forditashoz meg a kovetkezo fajlokra lesz szukseged:
compiler.h
mrepeat.h
preprocessor.h
stringz.h
tpaste.h

Mivel az FFT kimenete komplex szamokbol allo tomb, lehet, hogy teged csak az abszolut ertekuk erdekel, igy ebben az esetben meg erre a kettore is szukseged lehet:
vect_dsp16_complex_abs.c
op_dsp16_sqrt.c
Ezekkel a komplex szamok abszoluterteket tudod kepezni.
(#) Istvanpisti válasza zsidanyi hozzászólására (») Okt 19, 2011 / 1
 
Nézd meg Chan honlapját, van rajta néhány érdekes dolog, többek között FFT is.Bővebben: Link
(#) Reggie válasza Istvanpisti hozzászólására (») Okt 19, 2011 /
 
Most nezem, egesz jo sebessegu kodot irt Chan.
(#) Istvanpisti válasza Reggie hozzászólására (») Okt 19, 2011 /
 
Én már néhány dolgot felhasználtam tőle és működőképesek, pl. SD kártya használat (FAT), GPS kezelés,LCD...Ami nagyon érdekes, hogy japán létére angol nyelvű kommentekkel ellátott forrásfájljai vannak, na meg a szereléstechnika, az is megér egy misét.
A legújabb a jpeg fájlok használata AVR-rel, PIC-kel.
(#) Reggie válasza Istvanpisti hozzászólására (») Okt 19, 2011 /
 
En is angolul kommentelek forrast magyar letemre
Megneztem a GPS-es munkajanak a kepeit. Hat, nekem az a zomancozott rezhuzalos kusza technika valahogy nem jon be, nem is tunik megbizhatonak(persze asztalra biztos elegendo). De a temak erdekesek amivel foglalkozik.
(#) zsidanyi hozzászólása Okt 19, 2011 /
 
Köszönöm mindkettőtöknek, a Chan által írt kód télleg elég nagy segítségnek látszik!
(#) blackdog hozzászólása Okt 20, 2011 /
 
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.  
  4. int main (void)
  5. {
  6.   unsigned char counter;
  7.   /* set PORTB for output*/
  8.   DDRB = 0xFF;
  9.  
  10.   while (1)
  11.     {
  12.       /* set PORTB.2 high */
  13.       PORTB = 0xFF;
  14.  
  15.       /* wait (10 * 120000) cycles = wait 1200000 cycles */
  16.       counter = 0;
  17.       while (counter != 50)
  18. {
  19.   /* wait (30000 x 4) cycles = wait 120000 cycles */
  20.   _delay_loop_2(30000);
  21.   counter++;
  22. }
  23.  
  24.       /* set PORTB.2 low */
  25.       PORTB = 0x00;
  26.  
  27.       /* wait (10 * 120000) cycles = wait 1200000 cycles */
  28.       counter = 0;
  29.       while (counter != 50)
  30. {
  31.   /* wait (30000 x 4) cycles = wait 120000 cycles */
  32.   _delay_loop_2(30000);
  33.   counter++;
  34. }
  35.     }
  36.  
  37.   return 1;
  38. }


Sziasztok!

A fenti kódból nekem nem tiszta, hogy " PORTB = 0xFF;" miért a PORTB.2 -t nyitja meg.
Miből derül ez ki?
(#) huba válasza blackdog hozzászólására (») Okt 20, 2011 /
 
Azért nem tiszta, mert nem csak azt állítja magasra, hanem a B port minden bitjét. Hibásak a kommentek.

  1. PORTB|=(1<<PB2);//magasra allitja a 2 es labat
  2. PORTB&=~(1<<PB2); //lekapcsolja a 2 es labat
(#) blackdog válasza huba hozzászólására (») Okt 20, 2011 /
 
Köszönöm. Már megijedtem, hogy ennyire láma vagyok.
Lassan tanulok lassan.....

Van egyébként valami könyv vagy leírás ami az alapoktól kezdi az AVR C programozását?
(#) sikolymester válasza blackdog hozzászólására (») Okt 20, 2011 /
 
Az avrgcc egy forkja a gcc-nek. Mindketto erosen probalja kovetni az ansi c szabvanyokat. De mivel a gcc alapbol egy neumann architekturaju fordito, mig az avr harvard architekturaju, igy van egy-ket piszkos trukk az avrgcc-ben.

Ugyanakkor kezdo koraban ilyenekkel nem nagyon talalkozik az ember. Ha tehat barmilyen C konyvet eloveszel, akkor maris tanulhatod az avr programozast. Csak annyit kell tudni, hogy milyen header filet kell includeolni. Illetve tanulmanyozni kell az avr stdlibjeit, ami az avr-libc.

Meg egy trukk lehet fontos, az az interruptok hasznalata, de az az avrlibc interrupt.h jaban dokumentalva van. Egyaltalan mindenek elott elolvasnam a helyedben az avrlibc manualt.

Ha barmi nem lenne vilagos, akkor itt szerezhesz infokat.
(#) blackdog válasza sikolymester hozzászólására (») Okt 20, 2011 /
 
Vannak C könyveim természetesen forgatom őket, de nekem pont az AVR specifikus dolgokról kellene konkrét leírás.
Ezek szerint az avrlibc lesz az én barátom?
(#) Reggie válasza blackdog hozzászólására (») Okt 20, 2011 /
 
Igen, az avrlibc oldalat erdemes nezegetned. A specifikus dolgok 99.9%-rol van ott leiras.
(#) sikolymester válasza blackdog hozzászólására (») Okt 20, 2011 /
 
Kifejezetten ez az ami kell: avr-libc manual
És ide is érdemes benézni konkrét megoldásokért: avrfreaks tutorials

Mindkettőhöz kell tudni angolul, de sajnos az informatika már csak ilyen diszciplína.

Németül tudóknak egy hasonlóan kimerítő portál: mikrocontroller.net

Az avrlibc-hez fontos tudni, hogy csak a 8bites AVR-ekhez való, a 32bites Atmel termékekhez az Atmel maga ápol standard libraryket, illetve az avr32 gcc is Atmel fork.
(#) kiborg válasza Istvanpisti hozzászólására (») Okt 20, 2011 /
 
Esetleg valaki hasonló témában, DE assemlyben ?
Ne mondjátok, mert tudom, hogy mazochista vagyok és élvezem

Üdv Kiborg
(#) blackdog hozzászólása Okt 20, 2011 /
 
Nos addig eljutottam, hogy portok kezelése és LCD életrekeltése.
Viszont a piezoval megakadtam.
Hoagy tudom rendesen megszólaltatni?
(#) Reggie válasza blackdog hozzászólására (») Okt 20, 2011 /
 
Ha van elektronika a piezon, akkor csak tapot kell adni neki, ha nincsen, akkor negyszogjelet kell eloallitani.
(#) blackdog válasza Reggie hozzászólására (») Okt 20, 2011 /
 
Ha a piezo prtját kapcsolgatom akkor kattog.

  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.  
  4.  
  5. int main (void)
  6. {
  7.  
  8.  
  9.  DDRB = (1 << PIN1);
  10.  
  11.   while (1)
  12.     {
  13.  PORTB|=(1<<PB1);
  14.         _delay_ms(3000);
  15.  
  16.       PORTB&=~(1<<PB1);
  17.    _delay_ms(900);
  18. }
  19.  
  20.   return 0;
  21. }


Ennél többet nem tudok kihozni belőle.
(#) sikolymester válasza blackdog hozzászólására (») Okt 20, 2011 /
 
Pár kommenttel ezelőtt volt ez:

avrlibc delay.h -ről
"The maximal possible delay is 262.14 ms / F_CPU in MHz."

szerk:
Höhö, én sem végeztem a házimat rendesen, mert egy sorral alatta írja:
"When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. In this mode _delay_ms() will work with a resolution of 1/10 ms, providing delays up to 6.5535 seconds (independent from CPU frequency). The user will not be informed about decreased resolution."

Szóljon védelmemben, hogy nem szoktam _delay_ms() -t használni, vagy legfeljeb csak 1-2 ms-re

Amúgy azt áruld már el, hogy miért gondolod, hogyha a piezzot ~0.5 Hz-cel kapcsolgatod, akkor fogsz kapni valami értelmes hangot?
Az emberi fül eleve csak 10 Hz fölött hal hangokat tudtommal. Meg szerintem a piezzonak sem ez a működési frekvenciája.
(#) Reggie válasza blackdog hozzászólására (») Okt 20, 2011 /
 
Akkor valoszinuleg nincs rajta elektronika, csak a piezo van bekotve kozvetlen. Kattogtasd kicsit nagyobb sebesseggel, mondjuk legyen a delay 0.5 ms mindket helyen es maris 1kHz-en fog sipolni.
(#) blackdog válasza Reggie hozzászólására (») Okt 20, 2011 /
 
Bascom-ban van valami Sound vagy Tone függvény és azzal szépen tudtam "zenéltetni".
C-ben nincs ilyen alap függvény?
(#) Reggie válasza blackdog hozzászólására (») Okt 20, 2011 /
 
A C nem a tehetsegpotlasrol szol
Egy negyszogjelet eleg sok fele modon elo lehet allitani. PWM-el, timer-rel, szoftverbol, igy egy ilyen fuggveny lete sem tul szugseges, raadasul egy 4 soros ciklust nem nehez megirni. Te is jo uton jarsz, csak a delayt kene lecsokkentened ketezredere.
(#) blackdog válasza Reggie hozzászólására (») Okt 20, 2011 /
 
Köszi a bíztatást. Közben megtörtént az 'áttörés'

_delay_us()
_delay_ms()
_delay_loop_1()
_delay_loop_2()

Mi van még?
Valahogy nem teljes (vagy számomra nem áttekinthető) az avrlibc leírása.
A portok kezelését még mindig nem találom benne.
(#) blackdog hozzászólása Okt 20, 2011 /
 
Ha már az uC órajelénél tartunk.
  1. #define F_CPU 1600000UL

Így kell beállítani, ha 16 MHz az órajel?

AVR-Duino+EthMax. Erre töltögetem fel a kísérleteimet. EthMax azért mert azon van piezo.
Következő: »»   368 / 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