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   87 / 840
(#) szilva válasza deguss hozzászólására (») Dec 22, 2008 /
 
Én azt gondolom, hogy az AVR-en nem úgy szokás megoldani a bootloadert, ahogy vázoltad, hogy a user progiban ellenőrzöd a bootloadert kiváltó okot (gombnyomás).

A mega8-ban is van egy olyan fuse bit, a BOOTRST, ami azt határozza meg, hogy reset-kor a programvégrehajtás a megszokott 0-s címtől, vagy a memória tetején elhelyezkedő boot blokk elejétől induljon. A boot blokk mérete is befolyásolható, a BOOTSZ0 és BOOTSZ1 fuse bitekkel.

Ha ezekkel a bitekkel beállítod a mega8-ban a bootloaderes indulást, akkor minden reset-nél oda a bootloaderre kerül a vezérlés, attól teljesen függetlenül, hogy a programmemóriában lévő felhasználói progi foglalkozik-e a bootloader meghívásával vagy sem. Alapvetően a felhasználói programnak semmit nem kell tudnia a bootloaderről, egyedül azt kell a program megírásakor figyelembe venni, hogy a használható kódmemória-méret kisebb a bootloader méretével. Arról nem is beszélve, hogy a felhasználói program lehet akár hibás is, és ilyenkor is kellene tudni aktiválni a bootloadert, hogy a javított progit letöltsd a prociba. Arra sem szép dolog építeni, hogy a programozatlan, üres programterületen végigszalad a végrehajtás, és majd elér a bootloaderig.

Egyébként én pár hete dobtam össze egy próbapanelen mega88-cal egy kis USB-s tesztkapcsolást és én is bootloadert tettem a megába. Így csak egy "bootloader aktív", beakadós nyomógombot kell megnyomnom, majd a reset-et, ha a bootloaderbe akarok kerülni. A program pedig akármi lehet, nem is tud arról, hogy van mellette egy bootloader.
(#) Istike88 válasza Istike88 hozzászólására (») Dec 22, 2008 /
 
Megoldódott a problémám! A mikroelektronika fórumán írták hogy saját ord függvényt kell írni!

így néz ki:
  1. function Ord_(chr:char):byte;
  2. begin
  3.   result:=chr;
  4. end;


hátha valakinek szüksége lesz rá

üdv
(#) vzoole hozzászólása Dec 22, 2008 /
 
Sziasztok.

Egy általános célú 7 szegmenses, 6 digites próba-kijelzőpanelt szeretnél csinálni.

Alul kép.
Ez megteszi mindenféle kisérletezéshez?

Vagy akkor már tervezzek bele inverteres meghajtást, esetleg shift regiszteres léptetést?

Konkrét cél nincs, de olyanra szeretném megcsinálni, hogy későbbiekben "bármihez" jó legyen.

Másik kérdés... itt legjobb esetben is 1/6 időt kap egy kijelző, ami 16%-os kitöltés.
Világít így még rendesen, nem túl halvány?
(#) szilva válasza vzoole hozzászólására (») Dec 22, 2008 /
 
No igen, lehet, hogy érdemes lenne nagyobb áramú meghajtást tervezni a szegmensekhez is. Az 1/6 multiplexelésnél lehet nagyobb csúcsáramot használni, mint amivel statikusan tudna az adott LED világítani. Meg kell persze nézni az adott LED adtlapját, de egy 20mA-ről normálisan világító típusnál nem lehetetlen csúcsban 50-100mA környékére is felmenni.
(#) vzoole válasza szilva hozzászólására (») Dec 22, 2008 /
 
És ez azt jelenti, hogy csökkentsem az ellenállások értékeit?
Vagy ezt már nem szereti az AVR, és tegyek elé invertert, és úgy csökkentsem az ellenállások értékeit?

És mekkora áramot képes az AVR leadni egy lábán (csak kb, vagy -tól -ig)?
(#) szilva válasza vzoole hozzászólására (») Dec 22, 2008 /
 
Vagy teljesítménymeghajtó kapuk, vagy valami tranzisztoros (FET-es) meghajtás, mint ahogy a digiteknél is van. Ja és persze megfelelően kisebb soros ellenállások. Az AVR kimeneteit 20mA-nél nagyobb árammal nemigen illik terhelni.
(#) zoknee válasza vzoole hozzászólására (») Dec 22, 2008 /
 
Szia!

Lehet kapni ULN2003-as tipusú tranzisztor array-t dip tokban. Ez 7db darlington tranyó, ami elbír 500mA-t is, és úgy lehet meghajtani, mint egy invertert, minden szükséges bázis stb ellenállás tokon belül van. Ezzel biztos bármit elhajtasz Nekem kb 64mm-es kijelzők járnak róla, és olyanok mint a reflektor...
(#) vzoole válasza zoknee hozzászólására (») Dec 22, 2008 /
 
Köszönöm a segítséget.
Akkor ilyen lesz ULN2803-al.

ˇˇ
ui.: még nem néztem át a +,- bekötést.

SENKI NE HASZNÁLJA EZT A RAJZOT
még csak elméleti ábra.
(#) Topi válasza vzoole hozzászólására (») Dec 23, 2008 /
 
Én eleve ezt fordítva csinálnám.

Ketté kellene bontani a felhasználási területet. Ha kis kijelzőkről van szó, akkor közös katódú a jó megoldás, mert a processzor tud annyi áramot adni, hogy bekapcsoljon egy-egy szegmens és a közös pontot földre kell húzni, aminél ha NPN-t használsz, ami jobb, akkor nem is kell invertálni a logikát (PNP esetén igen)

Ha nem kis kijelzőket akarsz meghajtani, ahol egy-egy szegmens nem megy el 5V-ról, ott a közös Anódú kijelzőket kell előnyben részesíteni.
Ezesetben a föld felé darlington array-el kell húzni, pl ULN2803, a táp felé meg egy PNP NPN párossal, vagy egy P csatornás FET-el, vagy egy UDN-en ami ugyan olyan nyolcas darlington array, csak nem NPN-ben, hanem PNP-ben.
(#) PWM hozzászólása Dec 23, 2008 /
 
SZIASZTOK!
Ezzel a programozóval tudok olyan 8 lábú avr-t programozni mint amilyen itt az oldalon a kapcsolások között van?
(#) PWM válasza PWM hozzászólására (») Dec 23, 2008 /
 
ja és ha ebben a kapcsolásban is van AVR azt mivel programozom be?
(#) szilva válasza PWM hozzászólására (») Dec 23, 2008 /
 
Ha olvastad a cikket, akkor a 6. oldalon kellett látnod, hogy hogyan lehet más programozó nélkül, "önmagával" felprogramozni a kapcsolásban lévő AVR-t.
(#) kavkar hozzászólása Dec 23, 2008 /
 
Hello, azt szeretném kérdezni valaki tapasztaltabbtól hogy ez a pwm funkció felhasználható arra hogy jelgenerátort (sin négyszög hasonló) csináljunk az avr-ünkből, vagy ilyen célra más a jó, vagy nem is lehet?
Üdv.
szilva: egyébként én voltam aki kérdezett a programozóddal kapcsolatba mailbe, azóta elkészült és tökéletesen működik
(#) deguss válasza Norberto hozzászólására (») Dec 23, 2008 /
 
Norbi:
Köszönöm a részletes instrukciót, a gombot, melynek állapotát a bootloader lekérdezi, természetesen reseteléskor lenyomom. Reset gomra azért nincs szükség, mert mielőtt begudom az USB csatlakozót, ahonnan táplálva van az AVR, akkor már lenyomom.

----
szilva mester:
A csatolmány szerint állítottam be a lock és fuse biteket. Két dolgot nem értek így kapásból.
A Mega8-nak 0x2000 azaz 8192 bájt programmemóriája van. Az én bootloaderem 0x200, azaz 512 bájt-ba elfér, pontosan kicsit kevesebb. Ha a "Boot Flash section size=128 words Boot start address=$0F80"-at állítom be (BOOTSZ=11), akkor hova kell hogy tegyem a bootloadert, a programmemória 0x0F80-as részétől kezdődően (3968. bájt)? De ekkor nem ér a programmemória végéig, a közepén van önmagában a közel 512 bájtom, előtte is hely, utána is.
"Boot Reset vektor" mit takar?
(#) Topi válasza deguss hozzászólására (») Dec 23, 2008 /
 
Frissíts AVR Studiót. Az új AVR Studóban az oszcillátor biteket, a bootloader címet és minden ilyet, ami "többválasztós" egy comboboxból lehet kiválasztani. Gyilkos ez a checkboxos dolog.
(#) deguss válasza Topi hozzászólására (») Dec 23, 2008 /
 
Köszönöm a tanácsot, 4.13-asom van jelenleg, de a 4.15-ös ami a legfrissebb lenne csak valami igen-bonyolult regisztrációval érhető el. Kétszer elküldtem a formot, de értelmetlen hibát írt. Máshol meg nem igen találom, szóval kénytelen leszek ezzel megoldani. Egyébként ha beteszed az egyikbe a pipát, a másikból kiveszi ám.
(#) Topi válasza deguss hozzászólására (») Dec 23, 2008 /
 
(#) szilva válasza deguss hozzászólására (») Dec 23, 2008 /
 
Megtisztelsz a megszólítással, de én azért ettől még elég távol állok

A mega8 doksijában a "table 82"-ben szavakban vannak megadva a memóriacímek. Az 512 byte-os (256 szó) bootloaderhez emiatt célszerű lenne a BOOTSZ=10 beállítást használni, ekkor a bootloader terület a 0xF00 szócímtől (azaz 0x1E00 bytecímtől) fog kezdődni.

A boot reset vector azt a címet jelöli (szintén szavakban), ahonnan a program akkor fog indulni, ha a BOOTRST bitet beprogramozod. Jelen esetben ez a 0xF00 szócím, vagyis a 0x1E00 bytecím, a bootloader terület kezdete. Gyakorlatilag az történik, hogy ilyenkor hardveres reset esetén innen indul a programvégrehajtás és nem a 0-s címtől.

(Mellesleg elég zavarónak tartom, hogy ezek a szavas és byteos címek a doksikban is így keverednek, nagyon oda kell figyelni, hogy épp mikor melyikről beszél. Persze jól hangzik, hogy 8k a programmemória, de az gyakorlatilag 4k uatsításnál sosem több.)
(#) deguss válasza szilva hozzászólására (») Dec 23, 2008 /
 
Köszönöm Topinak a programot, Neked meg a részletes magyarázatot, ez a szentséges szócím, és bájtcím zavart meg, én nagyon hardware orientált (és PIC mániás ) vagyok, és mindent bájtokban számolok.
Szuperül működik, tényleg csak ezen múlott, én simán betettem a "boot size=256 words" pipát, holott a 0x0C00-át kellett volna választani (1024 words), ami byte-ban számolva (×2) tényleg a hiún keresett 0x1800.
Köszönöm a gyorstalpalót!
Mikrokontrollerekben gazdag Karácsonyt, és új évet kívánok!
(#) denon888 hozzászólása Dec 24, 2008 /
 
Sziasztok!
A kapcsolások cikksorozatban a Processzoros, automata NiMH tőltő (ATtiny13)-vel, szertném megépíteni.Csak valahogy sehogyan sem sikerül leforditani a forráskódot.Mindig hibaüzenetet kapok.Próbáltam AVR studioval, és winavr-el is.
Minden segítséget szivesen veszek!
Köszönöm!

Másik kérdés:A cikkben 3 ledről esik szó,de a rajzon csak 2 van.

(#) Istike88 válasza denon888 hozzászólására (») Dec 24, 2008 /
 
Szerintem az a problémád mint nekem!
Először is telepíts WinAVR-t Bővebben: Link

Második, ha szimplán bemásoltad a programkódot a leírásból akkor vedd ki a sorszámokat. Sokat szenvedtem mire rájöttem

A rajzon azért van kettő mert az egy dual led akar lenni amiben zöld és piros színek vannak, és a kettő együtt sárgán világít.

üdv
(#) denon888 válasza Istike88 hozzászólására (») Dec 24, 2008 /
 
Ezt a Winavr leírást végigkövetve megcsináltam.
Hibaüzenet.

(#) Topi válasza denon888 hozzászólására (») Dec 24, 2008 /
 
"Hibaüzenet."

Köszi... Konkrétabban?
(#) denon888 válasza Topi hozzászólására (») Dec 24, 2008 /
 
Ezt az AVRstudioban kapom.De a Winavr-ben is valami hasonló.

make: *** No rule to make target `../../Documents', needed by `akkutolto(2).o'. Stop.
Build failed with 1 errors and 0 warnings...
(#) Topi válasza denon888 hozzászólására (») Dec 24, 2008 /
 
Projektet hozz létre. Így ez semmi. Kell projekt, kell proci típus, kell órajel. Így betéve egy C nem fog lefordulni.

New project... Etc.. Tessék megnézni az első részt, abban ott van leírva hogy kell.
(#) denon888 válasza Topi hozzászólására (») Dec 24, 2008 /
 
Létrehoztam az új projektet.Végigolvastam amit emlitettél.Kiválasztottam a proci tipust.....
Egy párszor végigpróbáltam.Semmi.
(#) denon888 válasza denon888 hozzászólására (») Dec 24, 2008 /
 
Ujratelepítettem az AVRstudiot.Mostmár működik a forditás.
(#) xyz123 hozzászólása Dec 25, 2008 /
 
Sziasztok!
Elovastam az avr-es cikkeket es nagyon tetszenek, gratulalok Topinak es ZsirosDaninak. Azonben felmerult bennem 1-2 kerdes eszrevetrel, melyet ha nem bannatok feltennek

Az akkutolto cikkben a mukodesi elvnel mas van irva mint a programban:
3. Töltőáram ki, sönt bekapcsolása
4. 1mp söntölés
5. Sönt kikapcsolás, mérés, kiértékelés

84. SHUNT_ON(); //sönt be
85. m_delay_10ms(100); //1mp sönt
86. adc = ADConvert(2); //mérés
87. SHUNT_OFF(); //sönt ki

Meg egy dolog. Annyira nem ertek a NiMH toltokhoz de esetleg erdemes volna megcsinalni olyanra hogy toltes elott ki is susse a maradekot ha van (vegulis a sont benne van a kapcsolasban)? Vagy a ratoltes nem okoz gondot az NiMH-nal?


Az RGB ledes hangulatvilagitas cikkben meg egyszeruen nem ertem hogyan mukodhet. Csak elmeletileg neztem meg, nem epitettem utana, elhiszem hogy mukodik de hogy??
A mainben levo ciklus szalad korbe korbe, valtoztatva egyes szinek kitolteset folyamatosan. Viszont az interruptban csak bizonyos idokozonkent (F_CPU/64/255) kapnak uj erteket a szamlalok az aktualis kitoltesi ertekkel. Nem ertem hogyhogy nem egy osszevissza villozzas az eredmeny hanem folyamatos szinvaltozas. Valaki meg tuna magyarazni?
(#) vtnagy hozzászólása Dec 25, 2008 /
 
Sziasztok!
Megrendeltem a HEStore-tól az AVR-ISP-t. Kimértem az alkatrészeket, majd beültettem mindet. Megnéztem, semmi hiba sincs a nyákon, se szakadás, se elrontott forrasztás, semmi, viszont a programozó nem működik. Ismeretlen eszköznek jelzi a rendszer. Mit tudnék tenni, hogy életet leheljek bele?
(Sajnos nincs egyik közeli ismerősömnek sem AVR programozója, így nem tudom leellenőrizni az AVR-t, hogy a kód netán nem sérült-e, vagy hasonló)
(#) Prinner hozzászólása Dec 25, 2008 /
 
Sziasztok!
Timer0 túlcsordulás megszakítással egy 200ms idejű időzítést kell megcsinálnom. A baj az, hogy az 1024-es osztóval 15ms-után megszakad, de ha egy adott értékű globális változót minden megszakításnál csökkentek eggyel, akkor 9 megszakítás után az else teljesülne.
A probléma az, hogy az időzítés max 15ms hosszú, nem tudom "többszörözni".

pelda.txt
    
Következő: »»   87 / 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