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   82 / 840
(#) huba válasza Damian666 hozzászólására (») Nov 24, 2008 /
 
Órajel forrása, órajel előosztása, fordíto optimizálása megfelelően be van állítva? Ami még esetleg lehet programozáskor nem megfelelő proceszortipus van beállítva.
(#) Damian666 válasza huba hozzászólására (») Nov 24, 2008 /
 
Az az igazság hogy nem rég kezdtem még csak elkezdeni programozni, és nem igazán tudom mit hogy kell beállítani. a régebbi avr studió-ba könnyebbnek találtam.
(#) huba válasza Damian666 hozzászólására (») Nov 24, 2008 /
 
Proceszortipustól függöen vélaszthatsz különböző belső órajelek közül. Egyes procikba vagy egy olyan biztosítékbit hogy divide clock by 8. Ezzel nyolcadára esik az órajeled.
Ha a programodba használsz delay-eket és az optimizálások ki vannak kapcsolva akkor a fordító csinálhat nagy ökörségeket.

Nemtudom mással megtörtént e de helytelen optimizálás miatt egy megszakításban változtattam egy globális változó értékét a megszakításba meg is változott de a főprogramba nem adódott át.
(#) ReFi válasza Damian666 hozzászólására (») Nov 25, 2008 /
 
Akkor nagy valoszinuseggel nem csinaltad vegig ezeket a beallitasokat:
video
(#) trudnai válasza zsuscsinyo hozzászólására (») Nov 25, 2008 /
 
Normalis forditonal ez a "valtozo.4" nem mukodik, de deklaralhatsz bitfieldeket - nezz utana a neten mi az...

Amugy meg bitmanipulacios operatorokkal tudsz dolgozni. Pl.:

PORTC |= 1<<4; // 4. bit magasba allitasa
PORTC &= ~1<<4; // 4. bit alacsonyba allitasa

PORTC = (PORTC & ~1<<4) | (PINB & 1<<4);

Na kb ez az amit legeloszor kezeltel - bonyas leirni, de a rohej, hogy az avr-gcc ebbol eleg ertelmes kodot general. Pl probalkoztam bitfieldes portokat definialni ami sikerult is, de a fordito borzalmas kodot allitott elo belole...>>>>>>>>
(#) zsuscsinyo válasza trudnai hozzászólására (») Nov 25, 2008 /
 
Szia! Köszi utána néztem már és egy részletes leírást vagy példát sem találtam A bitmanipulációval semmi gondom nincs csak épp a hivatkozásokkal, hogy az egyik változónak az x-edik bitje hivatkozzon egy másik változó x-edik bitjére.

Idézet:
„PORTC = (PORTC & ~1<<4) | (PINB & 1<<4);”

Ezt még nem ismerem de nemsokára kiderül mit takar
(#) deguss válasza zsuscsinyo hozzászólására (») Nov 25, 2008 /
 
Ez a
Idézet:
„PORTC = (PORTC & ~1<<4) | (PINB & 1<<4);”
annyit takarm én szerintem, hogy:
Ha PIN_B4 (PORTB 4. bitje) magas szinten van, VAGY a PORTC 4. bitjébe már magasat írtak (a kimeneti regiszterbe), akkor a PORTC bitje a 0 értéket vesznek fel a 4 bit kivételéve, ami 1 értéket vesz fel ha PIN_B4 1, vagy ha PORTC_4 0!.
Szerintem nyugodtan lehet több sorba írni, mert így tényleg nem látható át elsőre, és a hibakeresés is nehézkes.
(#) trudnai válasza deguss hozzászólására (») Nov 28, 2008 /
 
tenyleg igy nehez atlatni, lehet egyszerubb lenne makrokat radobni (nem tudom leteznek-e ilyenek mar eleve, most nem tudok utana nezni)

Ilyesmire gondoltam:
  1. #define bitMsk(bit) (1<<(bit))
  2. #define bitSet(var,bit) (var) |= bitMsk(bit)
  3. #define bitClr(var,bit) (var) &= ~bitMsk(bit)
  4. #define bitGet(var,bit) ((var) & bitMsk(bit)) >> (bit)
  5. #define bitCpy(v1,b1,v2,b2) bitClr(v1,b1) | (bitGet(v2,b2) << (b1))

...esatobbi esatobbi...
Meg mielott valaki megkergetne, ezeket NEM teszteltem le, sot meg sem probaltam leforditani, szoval mielott felhasznalnad teszteld le!

Na, es ezekutan, ha a makrok mukodnek akkor:
  1. bitCpy(PORTB,1,  PORTC,3);

PORTC,3 bitet atmasolja PORTB,1-be... Sok sikert!
(#) zsuscsinyo válasza trudnai hozzászólására (») Nov 28, 2008 /
 
Előreis köszi! Holnap meglássuk mi sül ki belőle, de most szundi van mert nem látok ki a fejemből :idiota:
(#) IMi válasza trudnai hozzászólására (») Nov 28, 2008 /
 
Hello!
Aaz Atmel már leírta:Bővebben: Link.
A pdf 16. oldalán megtalálható.
(#) gunter86 hozzászólása Nov 29, 2008 /
 
Udv mindenkinek. Nem akartam uj temat nyitni,mert itt mindenki Atmellel foglalkozik, ugyhogy segitseget szeretnek kertni.
Van egy AT89c51-esem (tudom hogy nem mai cucc), es fel szeretnem programozni, csak az a problema, hogy nem tudok hozza egetot kesziteni (minnel egyszerubb annal jobb). Rengeteg kapcsolas kering a neten, nem tudom mit lehetne ebbol hasznalni, ami biztosan mukodik. ezt megepitettem, de nem akar mukodni.
(stk 200-al menne? es ha igen, akkor milyen lableosztasba, mert az adatlapjaban nincs benne hogy kompatibilis vele)

ckt3[1].GIF
    
(#) szilva válasza gunter86 hozzászólására (») Nov 30, 2008 /
 
Nem fog menni, mert a C51 nem tud még ISP-s programozási módot. Mindenképpen párhuzamos programozó kell hozzá (én egyszer építettem ilyet, 2db 89S51 dolgozott benne, hogy legyen elég portláb a programozandó IC párhuzamos eléréséhez).

Ha esetleg megoldható, talán érdemesebb lenne egy 89S51-est venni, amit már lehet ISP-n keresztül is programozni, és ha jól emlékszem, egyébként minden más tekintetben betehető a 89C51 helyére.
(#) gunter86 válasza szilva hozzászólására (») Nov 30, 2008 /
 
Kosz az infot.
(#) gtk válasza huba hozzászólására (») Nov 30, 2008 /
 
Idézet:
„Nemtudom mással megtörtént e de helytelen optimizálás miatt egy megszakításban változtattam egy globális változó értékét a megszakításba meg is változott de a főprogramba nem adódott át.”

  1. volatile
??
(#) dino05 hozzászólása Nov 30, 2008 /
 
Sziasztok!

AVR-re szeretnék JTAG-en programot letölteni, de sehogy sem sikerül. Minduntalan a mellékelt képen látható hibaüzenetet dobja, majd lefagy és bezáródik az avrstudio. Ebben valaki légyszi segítsen, mert semmi ötletem sincs. A beállítások jók, a fejlesztőkörnyezetet is újrainstalláltam már. Egy egyszerű led kigyújtó programnál is ez a hiba... Előre is köszi!

Üdv, dino

(#) trudnai válasza IMi hozzászólására (») Nov 30, 2008 /
 
Valoban Jo ez a doksi, koszonom!
(#) ArBalya hozzászólása Nov 30, 2008 /
 
Sziasztok! Én egy grafikus lcd háttérvilágítását szeretném vezérelni a szoba fényerejének megfelelően. Konkrétabban kifejtve minél sötétebb egy szoba annál kisebb intenzitása lenne a kijelző háttérfényének. Jelenleg a birtokomban van egy LSL100 LIGHT SENSOR , egy NORPS12 fotoellenállás, és egy BPW21 fotodióda. Ezekkel próbálkoztam megvalósítani a tervemet de sajnos nem nagy sikerrel A megoldáshoz legközelebb a fotoellenállással jutottam, de számomra zavaró hogy nem lineárisan változtatja az ellenállás értékét. Tehát az én elképzelésem az volna hogy egy "fényérzékelő áramkörből" amely tartalmazza az általam felsorolt fényérzékelők valamelyikét egy feszültségértéket kapnék amit az AVR mikro A/D átalakítójával digitalizálnék. Maga az AVR vezérli az egész grafikus kijelzőt és menüből szabályozni lehet a kontrasztot és háttérfényt, de még az automata háttérfény szabályozást szeretném megvalósítani. Ebben szeretném a segítségeteket kérni . Tehát ha valakinek lenne számomra hasznos tanácsa amin eltudnék indulni, illetve egy működő kapcsolási rajza és azt megosztaná velem, hálásan megköszönném. :worship:
(#) trudnai válasza ArBalya hozzászólására (») Nov 30, 2008 /
 
Most ezt nem ertem, azzal van gond, hogy nem tudod felrajzolni a jelleggorbet es egy kepletet felallitani hozza, vagy akar egy korekcios tablazatot felepiteni amivel a nem-linearis gorbebol kapnal egy megkozelitoleg linearis gorbet?

Amugy sok hattervilagitas sem linearis a raadott feszultsegre vonatkoztatva, ill a szem is maskepp reagalhat, maskepp erzekelhet kulonbozo fenyeroket, tehat linearisnak latszo megoldast eleg nehez talalni.
(#) ArBalya válasza trudnai hozzászólására (») Nov 30, 2008 /
 
Nem, egyenlőre ilyeneken még nem is gondolkodtam. Már nagyon régen tanultam az elektronika alapjait és bizony sajnos rengeteget felejtettem belőle. A problémám az hogy egy fényérzékelő áramkört szeretnék összerakni és az abból nyert feszültség értéket szeretném feldolgozni egy AVR micro segítségével. Már régóta keresgélek a neten fényérzékelős illetve fényerősség mérésére alkalmas kapcsolásokat de még nem találtam semmi használhatót. lehet hogy csak rosszul keresem. Ezért beszereztem 3 fajta fényérzékelő ezközt ( az előző hozzászólásomban említettem őket) és azokkal kísérleteztem, csak sajnos hiányosak az elektronikai ismereteim és ezért nem értem el használható eredményt. Tehát nekem a fényérzékelő megépítésében kellene segítség, a többit software-sen megoldom. A segítség alatt pedig tanácsokat esetleg kapcsolási rajzokat értek.

Az AVR belső referencia feszűltség forrása 2,56 volt. Tehát az elképzelésem szerint olyan érzékelőt szeretnék építeni aminek a kimenetén pl. 0V-tól 2.5V- ig változna a feszültség érték. A fényintenzitást pedig egy átlag emberi szemhez viszonyítanám, tehát ami egy átlag emberi szem számára már sötét (esetleg vaksötét) akkor lenne az érzékelő kimenetén a legkisebb feszültség érték. De ha ez fordítva történne az sem lenne baj. Ebben kérném a segítségeteket. előre is köszönöm.
(#) moha21 hozzászólása Nov 30, 2008 /
 
van egy ilyen kütyüm:
http://wiki.mai.kando.hu/images/thumb/7/78/Nanobeultetes.JPG/730px-...es.JPG

http://wiki.mai.kando.hu/images/thumb/b/be/111.JPG/800px-111.JPG

Na most a kérdésem az az, hogy ezek az Atmega 88-asban gyárilag van-e Bootloader vagy azt nekünk "beleégették" Ezt én vmilye terminálon tudom programozni ( Com 9600 baud). És ha van bootloader azt honnan tudom, hogy néz ki. esetleg ki lehet menteni belőle? Elnézést ha rossz a kérdés, de valahol el szeretném kezdeni a megértését.
(#) Norberto válasza moha21 hozzászólására (») Nov 30, 2008 /
 
Gyárilag teljesen steril az ATMEGA88. Azaz nincs rajta semmi. A bootloader-t azt utólag beleégették, így lehet megvásárolni a NanoBoard-dal (későbbiekben NB) együtt.

Ha van bootloader benne, azt olyasformán tudod ellenőrizni, hogy összerakod a NB-ot, összekötöd a géppel soros porton, a Terminált bekonfigurálod megfelelően; mindezt követően, ha a NB-on megfelelő sorrendben megnyomod a Reset, és az amelletti gombokat, akkor a soros porton egy jelzést küld a számítógép felé, amit a Terminál ablakában látni fogsz mindenképpen. Ha egyáltalán semmi nem érkezik a Terminálba, megfelelő soros port-beállítások mellett, akkor nagy valószínűséggel üres az ATMEGA88.
(#) moha21 válasza Norberto hozzászólására (») Nov 30, 2008 /
 
Köszönöm a választ. Van benne Bootloader ezt tudtam csak a működését nem, hogy hogyan. Esetleg ki lehet olvasni vmi érthető formába? Bascom-ot szeretném használni, de egyelőre nem sikerült. Avr Studióval tudom használni, csak nem sok példaprogram van amit értenék.
http://wiki.mai.kando.hu/index.php/Targyak/programozas_II/labor/ora_8
itt van egy példaprogram az előbb belinkelt Nb-re, de nem értem hiába néztem át töbször is. Az utasítások te teljesen tiszták. Nem tudom találok-e olyan oldalt ahol ezeket részletesen taglalnák.
(#) joda01 hozzászólása Dec 3, 2008 /
 
Sziasztok!

Lenne egy megoldandó feladatom, amihez segítséget keresek. A feladat lényege egy Atmega88 programozása.
Feladat: Az R0-R15-ig terjedő regiszterekbe betölteni 3-tól a 3-al osztható számokat.
G0-ás olvassa be ezeket R0-R15 ig sorrendbe,
G1-es gomra fordítva olvassa be R15-R0-ig,
G2-es gombra adja össze a szomszédos regiszterek összegét (R0-R1,R2-R3,stb...)
G3-ra szorozza össze a szomszédos regisztereket.
Forráskód C.
Ha valaki tudna, segítsen légyszíves!
Köszönöm!
(#) Topi válasza joda01 hozzászólására (») Dec 3, 2008 /
 
Le kell ülni és megírni.

Nagyon korrekt, ha kapsz egy feladatot, kiadod itt a fórumon másoknak. És van olyan, aki önszántából szívességként megírná (amúgy max 5 perc) csak az a baj, hogy miután ilyen szépen behatároztad: "Forráskód: C" gyanítom hogy nem az elméletére lenne szükséged.

Ám ha tévedtem, és nem mással akarod megiratni a feladatodat akkor egy kis segítség:

16 elemű tömb.
G0: for(i=0;i<15;i++) { ..beolvasás i. elembe.. }
G1: for(i=0;i<15;i++) { ..beolvasás (15-i)-edik elembe.. }
Utóbbit lehet helyettesíteni egy korrektebb megoldással:
i = 15; do { beolvasás i.-be } while(--i);

G2: for(i=0;i<15;i+=2) { eredmény: (i) elem+ (i+1)-edik elem }

G3: for(i=0;i<15;i+=2) { eredmény: (i) elem* (i+1)-edik elem }

Ennek, ha nem mással akarod megiratni, maximálisan elégnek kell lenni, ugyanis ez a feladat 99%-a.>>>>
(#) trudnai válasza joda01 hozzászólására (») Dec 3, 2008 /
 
Idézet:
„G1: for(i=0;i<15;i++) { ..beolvasás (15-i)-edik elembe.. }
Utóbbit lehet helyettesíteni egy korrektebb megoldással:
i = 15; do { beolvasás i.-be } while(--i);”


Bar ez izles dolga, de igy is meg lehet csinalni:

G1: for(i=15; i; i--) { ..beolvasás (i)-edik elembe.. }

Amugy ha R0 - R15-ig kell olvasni, akkor 'i<=15' kellene az osszehasonlitasokhoz (tehat Topi peldaihoz). Ugyanakkor ahol 'i+1' hivatkozas van oda jo a 'i<15' kifejezes, mivel akkor 'i' maximalis erteke 14 lehet es 'i+1' ugye helyesen 15 lesz.
(#) kocici17 válasza Topi hozzászólására (») Dec 3, 2008 /
 
Szia Topi.
Nagyon tetszettek az AVR-el kapcsolatos szerintem hiánypótló anyagaid. /Tekintettel arra, hogy nem nagyon találni hozzá magyarnyelvű tananyagot/.
Ezért szeretnén tudni, hogy hogyan tudnám letölteni, és merre található magyarnyelvű leírás hozzá.
(#) Topi válasza (») Dec 3, 2008 /
 
Hát nem bizony. És azt sem véletlen, hogy --i és nem i--. Meg hogy nem while-do hanem do-while.

Kis programozási trükk... Optimalizáció. Legalább 2x-es sebesség különbség van a do-while (--i) és egy for ciklus között.

Szerk: Közben akí írta, törölte is.
(#) ReFi hozzászólása Dec 3, 2008 /
 
Egy ATTiny45-el jatszadozok, meghozza most az AD konverterével.
A felbontas 10bites, vagy lehet ezt allitani valahogy?
Nekem az kellene hogy egy 8bites szamot tudjak kiolvasni az ADC registerebol hogy majd ezt az erteket tudjam alkalmazni mas 8bites regiszterekhez.
AZ ADCL és az ADCH-ba regiszerbe tarolodik a mért eredmény ha jol vettem ki.
Az ADCL-be lenne az első 8 az ADCH-ba a maradek 2bit? Vagy ezt hogy kell elkepzelni?
Bocs ha hülyeséget kérdeztem volna, de épp csak elkezdtem vele foglalkozni.
(#) tibi0531 hozzászólása Dec 3, 2008 /
 
Tiny45-el még nem foglalkoztam, de a többi típusnál lehet állítani, hogy melyik oldara legyenek rendezve a bitek (ADMUX regiszter ADLAR bit)
(#) ReFi hozzászólása Dec 4, 2008 /
 
Topi vagy bárki,

Lenne pár sor amit nem ertek az RC szervos cikkben.

1. (ADCL | (ADCH<<8))
Itt ez azt jelentene hogy gyakorlatilag 8bittel eltolja balra az erteket, egy 16bites (10bit) szam lesz 8nullaval a vegen, igy összevagyolható a regiszter alsó felével?

2. adc = ReadADC(1)>>1;
Ez itt mit csinalna a vegen?


Következő: »»   82 / 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