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   339 / 840
(#) Fizikus válasza jhono hozzászólására (») Júl 9, 2011 /
 
Ezen a linken mar tobb informacio van.
Szerintem az lesz neked a legegyszerubb, amint azt mar TavIR-AVR kollega is javasolta ,ha egy 4 csatornas SPI-s ADC IC-t (pl. MCP3204) hasznalsz az analog gyorsulasmero jeleinek a meresere.
(#) Reggie válasza yoman917 hozzászólására (») Júl 9, 2011 /
 
A problema az, hogy a szoban forgo fuggvenyt linkeleskor a libgcc.a -ban es a libc.a -ban is megtalalja. WinAVR-t nem ismerem, igy nem tudom hol van ra lehetoseg, de el kell erned, hogy csak az egyik fuggvenykonyvtarat hasznalja linkeleshez.
(#) gtk válasza Reggie hozzászólására (») Júl 9, 2011 /
 
WinAVR is gcc.
(#) yoman917 hozzászólása Júl 9, 2011 /
 
És erre van valamiféle megoldás?
(#) gtk válasza yoman917 hozzászólására (») Júl 9, 2011 /
 
A konkret hibauzenetet masold be a keresobe (google), es valoszinu lesz megoldas.
(#) Reggie válasza gtk hozzászólására (») Júl 10, 2011 /
 
Ja, csak en linux alatt command line-bol hasznalom az avr-gcc-t, WinAVR-t egyszer messzirol lattam. Nem tudom hol kell a GUI-ban allitgatni, es nem ismerem az alapertelmezett makefile-okat sem.
(#) Reggie válasza yoman917 hozzászólására (») Júl 10, 2011 /
 
Biztosan van. Igy elso probanak szerintem azt kene csinalnod, hogy a "-nostdlib" kapcsolot tedd a gcc linkelesi parameterei koze. Ekkor a libgcc.a -val nem linkeli automatikusan. Ha ez nem megy, akkor a "-Wl,--exclude-libs libc.a" parmeterrel probald meg.

Ha igy se, ugy se fordul le, akkor kerlek a hibauzeneteket megint masold be(de kicsit jobb kepminosegben), es akkor megprobalok kitalalni meg valamit.
(#) Reggie válasza yoman917 hozzászólására (») Júl 10, 2011 /
 
Sot, meg mielott az elozo hozzaszolasombol barmit megcsinalsz, probald meg a "-Wl,--allow-multiple-definition" parametert hozzaadni. Ha jol ertem a manualt, akkor ez az amire szukseged van.
(#) yoman917 válasza Reggie hozzászólására (») Júl 11, 2011 /
 
Köszi a segítséget, de hova kellene ezt beírni?

névtelen.PNG
    
(#) asi hozzászólása Júl 11, 2011 /
 
Sziasztok,

"újrakezdő" vagyok a mikrokontroller témában.
Évekkel ezelőtt, még 8051-es architektúrán működtem, és most újra a témával szeretnék foglalkozni. Ahogy akkor is, most is ATMEL. Egy elég kezdő kérdésem lenne:

Összeütöttem egy kis progit:
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.  
  4. #define D6_ON()    PORTD |=  (1<<PD6)
  5. #define D6_OFF()   PORTD &= ~(1<<PD6)
  6.  
  7.  
  8. //-------------------------------------
  9. void delay_10ms(unsigned char val)
  10. {
  11.            unsigned char i;
  12.            for(i=0;i<val;i++) {
  13.                _delay_ms(10);
  14.            }
  15. }
  16.  
  17. void main()
  18. {
  19. DDRD = (1<<PIND6); //D6-os láb kimenet
  20.  
  21. while(1)
  22.    {
  23.     D6_ON();
  24.     delay_10ms(100); //1 sec delay
  25.         D6_OFF();
  26.     delay_10ms(100);
  27.    }
  28.  
  29. }


Egy LEDet kötöttem a D6-ra, a probléma, hogy sokkal lassabban villog, mint szerettem volna.
A fordító 8MHz-es órajellel kalkulál, és tudtommal az uis a default, de csak nem működik:
  1. avr-gcc  -mmcu=at90s2313 -Wall -gdwarf-2 -std=gnu99   -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT main.o -MF dep/main.o.d  -c  ../main.c

Mi lehet a gond?
(#) zolee1209 válasza asi hozzászólására (») Júl 11, 2011 / 1
 
Szia!
A FUSE biteknél az oszcillátor is 8MHz-re van állítva?
Gyári beállításként 1MHz-en ketyeg csak az AVR...
(#) Ricsi89 válasza zolee1209 hozzászólására (») Júl 11, 2011 / 1
 
Vagy clkdiv8 be van kapcsolva.
(#) zolee1209 válasza Ricsi89 hozzászólására (») Júl 11, 2011 /
 
Ez is egy lehetőség, bár ilyennel még nem találkoztam olyan AVR esetén, amiben van 1, 2, 4 és 8MHz-es belső RC... mega328 esetén 8MHz-es van, és ott alapból be volt kapcsolva a div8, hogy 1MHz-en fusson.
(#) asi válasza asi hozzászólására (») Júl 11, 2011 /
 
Érdekes dolog történt...
Mellékelve a Fuses beállítások.
Nem módosítottam semmit eddig egyszer sem, viszont most rányomtam a "Program"-ra, és jó is lett az időzítés, legalábbis így érzésre

Ezek szerint egy "szűz" kontrolleren ezt mindenképp el kell játszani az elején?

fuses.JPG
    
(#) yoman917 válasza Reggie hozzászólására (») Júl 11, 2011 /
 
Találtam az AVR Stuidoban a beállításoknál, hogy melyik könyvtárakat használja, így már sikerült lefuttatnom a programot.
Köszönöm az ötleteket
Üdv,
yoman
(#) zolee1209 válasza asi hozzászólására (») Júl 11, 2011 /
 
Nem kellene szükségesnek lennie...
De az AVR még mindig 1MHz-en jár, mivel 8MHz van kiválasztva, de be van kapcsolva a CKDIV8, ami 8-cal osztja a rendszerórajelet... Akkor viszont hogyan működik a 8 megára írt időzítésekkel?!
(#) trudnai válasza asi hozzászólására (») Júl 11, 2011 /
 
Idézet:
„Ezek szerint egy "szűz" kontrolleren ezt mindenképp el kell játszani az elején?”


Ez nem auto motorja, hogy be kelljen jaratni

Szerintem valamit modositottal a programon, vagy a fuses lett atallitva es a kep nem arrol szol, vagy a programozaskor hiba tortent es epp a veletlen szerencsebol kifolyolag a fuses CLKDIV/8 bitje allitodott at (ez utobbira nagyon nagyon kicsi az esely...).
(#) zombee válasza asi hozzászólására (») Júl 11, 2011 /
 
A FUSE biteknél a CKDIV8-ról vedd el a pipát, így 8MHz-en fog járni.
VAGY: a programkódban az F_CPU-t állítsd "1000000"-ra.
Ha érzésre jó lett, akkor valamelyiket biztosan meg kellett csinálnod...
(#) Sick-Bastard hozzászólása Júl 11, 2011 /
 
Üdv!

Segítséget szeretnék kérni valakitől, akinek van rendelkezésre álló szabadideje nekem egy programot írni. Dióhéjban egy ATM8535P avr, BG12864DBNHHn grafikus lcd és az SPI-n működő ki-/bemenetek-ből épül fel a vezérlő.

Ha nincs időd rá, de van egy könyved, pdf-ed, linked amit javasolnál, az is jöhet.

Ill. érdekelne, hogy tud e valaki, OKJs képzést ahol ezt megtanulhatnám?

SB
(#) atideath hozzászólása Júl 11, 2011 /
 
Olyan kérdésem lenne hogy, Atmega8-ra programozok Bascomban és olyan hibával találtam szemben magam hogy amikor meg akarok szorozni egy változót 250-el akkor valamikor hibásan számolja ki. Kaptam egy tippet hogy a stackekkel lesz a gond, megpróbáltam kiiíratni hogy van-e valami túlcsordulás és a 2-es számot kapom ami azt jelenti hogy a Soft Stack belelóg a Framesize-ba. Már majdnem a határokig növeltem az értékét.

Jelenleg:
HWStack: 64
Softstack: 768
Framesize: 32

Mi lehet a gond? Vagy valaki tudna mondani egy optimális beállítást? Már kezd kihullani az összes hajam tőle .
(#) zolee1209 válasza Sick-Bastard hozzászólására (») Júl 11, 2011 /
 
Szia!
Mi lenne a feladat? Bár ezt ebben a formában inkább az apróhirdetésekbe kellett volna tenned...
(#) zombee válasza atideath hozzászólására (») Júl 11, 2011 /
 
Hello!

A hiba szerintem nem stack, sokkal inkább kasztolás.
Ugyanis a 250-et "byte" ként(8 bit) értelmezi, és ha szorzol vele, akkor az eredmény is egy byte-os lesz.
Ez stack szempontjából nem olyan vészes hogy túlcsorduljon.
Tipp: próbáld meg 16 vagy 32 bites változókat definiálni, és azokkal végeztesd el a műveletet.

más:
Lehet hogy én vagyok hülye a Bascom-hoz, de az AVR-ekben nincs hardver stack, csak hardveresen támogatott(stack pointer, stack utasítások) szoftver stack van.
De majd TavIR-AVR kolléga úgyis megmondja.
(#) TavIR-AVR válasza atideath hozzászólására (») Júl 11, 2011 /
 
HWStack, SWStack és FrameSize egyszerre növelendő. nem lépésenként (külön).

Programkód látható?


Tpikus stackhibák:
Egymásbaágyazott sok gosub, single/double változók kezelése, format/Fusing kezelés, karakterláncok kezelése, print....

Ezek fogyasztják.

Ja és M8 esetén a memória elég kicsi!
(#) gtk válasza Reggie hozzászólására (») Júl 11, 2011 /
 
Nem nagyon ertem hogy fordulhat elo, hogy a ket lib "utkozik".
(#) asi válasza zombee hozzászólására (») Júl 12, 2011 /
 
Valamit biztosan elkavartam, mert nekem sem logikus a dolog
Valószínűleg az lehetett, hogy közben módosítgattam a
  1. delay_10ms(100);

sort 100-ról, hogy megnézzem mennyivel van elmászva a delay értéke, és ki is jött, hogy kb 7,8 (nem szkóppal mértem), szóval az lehetett a bűnös.

Kivettem a CLKDIV8-at, és hozzáadtam a
  1. #define F_CPU 8000000UL

define-t. Na így most minden szép és jó.
Azt hittem, hogy ha a project options-ben be van állítva a frequency, akkor már nem kell define-olni, de ezek szerint igen (?).

Köszi mindenkinek!
(#) asi válasza asi hozzászólására (») Júl 12, 2011 /
 
Na, az elmúlt fél órában sikeresen életre kelt egy 2*24es LCD modul is ezzel a kóddal
(#) mikrofarad hozzászólása Júl 12, 2011 /
 
Van egy 16F84(A) típusú Pic égetőm.Lehet ezzel AVR égetni?Ha lehet valaki írja le hogy! :help:
(#) atideath válasza TavIR-AVR hozzászólására (») Júl 12, 2011 /
 
De látható a kód. Másolom. Felraktam a pastebin-re mert nagyon hosszú. De ahogy hogy látni lehessen az egész kell szerintem.

Programkód

A probléma a 489 és a 490 sor után következik. Álltalában ha csak a Fordulatjelek-et iratom ki akkor nincs gond, de ha már a két művelet után akkor már ugrál.. 0-65000 között kb..
(#) atideath válasza mikrofarad hozzászólására (») Júl 12, 2011 /
 
Szerintem nem lehet PIC égetővel AVR-t programozni. Tudtom szerint teljesen más architectúra a kettő. De majd jönnek a nagyok és megmondják .
(#) zolee1209 válasza asi hozzászólására (») Júl 12, 2011 /
 
Amennyire én értek a C-hez, tudtommal az órajel definiálása a programban csak az időzítések számításához kell... De majd egy C guru megmondja, hogyan is van ez pontosan.
Következő: »»   339 / 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