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
É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.
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:
hátha valakinek szüksége lesz rá üdv
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?
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.
É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)?
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.
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...
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.
É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.
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?
ja és ha ebben a kapcsolásban is van AVR azt mivel programozom be?
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.
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
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?
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.
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.
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.)
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!
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.
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
Ezt a Winavr leírást végigkövetve megcsináltam.
Hibaüzenet.
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...
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.
Létrehoztam az új projektet.Végigolvastam amit emlitettél.Kiválasztottam a proci tipust.....
Egy párszor végigpróbáltam.Semmi.
Ujratelepítettem az AVRstudiot.Mostmár működik a forditás.
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?
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ó)
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". |
Bejelentkezés
Hirdetés |