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
Szia!
Én is kipróbáltam! Tutifrankó. Egyébként pont most raktam össze. Köszi szépen a segítséget! Egyszer majd megcsinálom panelra, úgy hogy több prockót támogasson, és pl a prockó tartalmát is lehessen vele törölni. Még csak mega8-al próbáltam, a mega8L az SMD, kicsit necces lesz, de majd hétvégén! ![]()
Sziasztok, próbálom a timertbeüzemelni mega48PA-PU mikrokontrolleren, de a compiler a következő hibaüzenetet küldi:
error: 'TIMSK' undeclared (first use in this function) error: 'TCCR0' undeclared (first use in this function) Amint átállítom a mikrokontroller tipusát avrstudioban atmega8-ra máris lefordul, persze igy meg nem fut a program a uc-n. Help plííz! ![]()
Szia, örülök hogy neked is hasznodra vált!
![]()
Na, de mi ebben a furcsa? Az ATMEGA48-nak nincs TIMSK és TCCR0 regisztere, illetve van csak nem ez a nevük. (pl. TIMSK0, TIMSK1, TIMSK2, vagy TCCR0A, TCCR0B). Az ATMEGA8-nak meg léteznek ilyen nevű regiszterei, emiatt az ATMEGA8-ra írt kód nem minden esetben fog működni az ATMEGA48-on, még akkor sem, ha lenne ugyanolyan nevű regisztere, de azok funkcionalitása eltérő. Jó példa erre pont a TIMER0.
Célszerű lenne megnézni a uC leírásában. A hozzászólás módosítva: Márc 3, 2015
Köszönöm a gyors választ! Átböngészem a datasheet-et.
Sziasztok!
Szeretnék megismerkedni az AVR-ekkel, AVR programozással. Neten is olvastam pár leírást, viszont arra nem találtam választ, hogy különböző programmerek melyik típust támogatják. Pl:egy ARDUINO - Mini Pro-val lehet-e ATtiny45-öt programozni? Lehet rossz felé tapogatózom és hülyeséget kérdeztem, ez esetben elnézést kérek. Ti hogyan kezdtétek, milyen kezdő "szettet" ajánlotok?
Szia, az arduino kész fejlesztő boardokat csinál. Van rajta egy mikrokonroller fixen és azt tudod programozgatni. Fejlesztőkörnyezet is van hozzá szóval az arra megírt kódot nem tudod csak úgy átpattintani egy mikrokontrollerre, ha valamibe meg be akarod építeni akkor az egész arduino boardot bele kell tenned. Szerintem jobban jársz ha veszel egy próbapanelt, egy mikrokontrollert (pl atmega8L) egy avr isp mkII égetőt (írj zombee -nak), letöltöd az avr studiót egy avr-gcc compilert, pár led, ellenállás és hadszóljon. A képen láthatod hogyan kell összekötözni hogy lehessen programozni és fusson rajta a megírt kód. Itt az AVR ISP MKII-vel programozható kontrollerek listája (nem kevés
![]() A hozzászólás módosítva: Márc 4, 2015
Ennyi cuccal mint a képen van már lehet játszani, ledeket villogtatni gombnyomkodást felismerni. Az AVR égető nem látszik a képen, az a 6 vezeték felfele ahhoz vezet (MISO, MOSI, SCK, Reset, VCC, GND). KÉP
A hozzászólás módosítva: Márc 4, 2015
Sziasztok, az alábbi kódon mit lehetne változtatni/javítani, hogy a motorok szabályzására használt PWM jel állítása ne kavarjon be a timernek és ezzel együtt az interrupt-nak? (Tudom használjak másik timert..
![]()
Az Arduinora feltöltesz ISP programozó kódot: Fájl-Minták-ArduinoISP, ezzel már tudsz programozni másik AVR-t. Letöltöd az Atmel Studio-t, ebben írod a kódod a kinézett mikrovezérlőhöz (akár ATtiny45-höz is.), majd az elkészült .hex fájlt feltöltöd az avrdude fájl segítségével, az Arduino-n át a mikrovezérlőre. Az Avrdude-t megtalálod az Arduino alkönyvtáraiban, de az a biztos, ha letöltöd az WINAVR-t, mert az tartalmaz minden fájlt, ami kell hozzá. Én Arduino UNO-t használok, Atmega128-at programozok vele.
A hozzászólás módosítva: Márc 4, 2015
Szia.
Külön kellene választani a két dolgot. A motor most milyen PWM jelet kap? Az 1mp-es időzítésből állítasz elő PWM jelet? Tehát mondjuk 0.3mp-ig magas, aztán 0.7mp-ig alacsony a kimenet? Használj egy timer-t a PWM-hez, és ha spórolni akarsz a timer-eken, akkor állítsd be a watchdog-ot 1mp-re. Vagy ami még jobb lenne: írd át a függvényed, hogy ne akassza meg a program futását, biztosan megoldható! Beleraksz egy változót, amit növelsz, és ha elér egy értéket, akkor break;.
A millis() függvényt könnyen lehet implementálni, ha van megszakításod fix időnként. Megnézed, milyen sűrűn fut le, és növelsz egy változót. Készítesz egy millis() függvényt, ami vissszatérési értéke pedig az eltelt idő lesz mS-ban. Nekem nem kell uS-os pontosság, úgyhogy én inkább úgy hívom, hogy kbmillis();
![]() A hozzászólás módosítva: Márc 4, 2015
Szia, a motor olyan pwm jelet kap amire az 1-es timer állítva van, kb 150kHz, a kitöltési tényező pedig OCR1A-tól függ 0-100% között változhat a kapott adattól függően. Ezzel viszont odavágok ennek az 1 seces beállításnak: OCR1A = 0x3D08; Utánanézek mire jó és hogyan működik a watchdog amit javasoltál.
Sziasztok!
AVR-el spi-n keresztül 74hc595-tel kapcsolok ULN 2803-at azzal reléket. Müködik, de néhe bekapcsolnak azok a kimenetek is amiket nem is kapcsolok a programból.Olyan mintha az SPI zavart szedne össze.Valaki esetleg találkozott már ilyen problémával?Segítséget elöre is köszönöm.
Akkor csináld úgy, hogy normál módban használd a timer-t, OCR interrupt-nál billegtesd szoftverből a kimeneti lábat, OVF interrupt-nál növelj egy változót. Ha ez a változó elér egy értéket (1mp alatt ki kell számolni mennyit), akkor leállíthatod a motorokat interruptból. Resetelheted is innen az AVR-t, ha akarod. Ha jön adat, akkor a főprogramból pedig a változót nullázod le, így újraindul az 1mp-es visszaszámlálás.
A hozzászólás módosítva: Márc 5, 2015
Biztosan nem szoftver hiba?
Mellesleg megvennék a helyedben 2300 Ft-ért egy logikai analizátort. Azon látnál mindent. Link: Logikai analizátor Az MR (master reset) láb ne lebegjen, az OE (output enable) se. Nem töltöd fel túl gyorsan? Ahogy emlékszem, az SPDR-ben nincs puffer. Ergo, ha félig elküldted már az adatokat és új értéket állítasz be, akár bele is zavarhatsz az átvitelbe. A hozzászólás módosítva: Márc 5, 2015
Köszönöm a válaszokat!
A másik kérdésem pedig, hogy szeretném Assemblyvel megtanulni ezeket a jószágokat programozni, csak én úgy tudom, hogy az Assemblynek van egy pár változata, hardver függő. Azt is olvastam, hogy a legtöbbet C-vel is lehet. De ha én még is Assemblyvel szeretném, mondjuk mert szeretném megtanulni a nyelvet, akkor hol kezdjem? Van pl. valami általános Assembly? Mint pl. az ANSI C? Vagy ez hogy valósítható meg? A hozzászólás módosítva: Márc 5, 2015
Az Assambley az processzor specifikus nyelv. Minden processzornak mas utasitas keszlete van. Ha most kezdesz el foglalkozni AVR-el akkor inkabb a C-t ajanlom. Egyszerubb megtanulni es bonyolultabb programoknal konnyebb vele dolgozni.
Ha megis Asm mellet dontesz akkor a kovetekezo linken megtalalhatod az 8-bites AVR-ek utasitas keszletet. A hozzászólás módosítva: Márc 5, 2015
Köszönöm a gyors választ ! Nagyon tetszenek a mikrokontrolleres megoldások mindenféle téren, és innen indult az ötlet, hogy jó lenne megtanulni. Még biztos fogok kérdezősködni a közeljövőben.
![]()
Én Commodore 64 assembly-ben kezdtem programozni és évekbe tellett, míg normális C nyelvű programot képes lettem megírni. Szerintem teljes vakvágány volt.
A magasszintű nyelvekben az a jó, nem kell lemenni fusizni, hogy most be van-e a T bit kapcsolva, vagy nincs, hány regisztered van, meg stb. Az a fordító feladata, hogy ezekkel foglalkozzon. Képes vagy magasról szemlélni a dolgokat és a megoldásaidat nem korlátozza le a processzorban lévő regiszterek száma, meg egyéb érdektelen baromságok. Amikor algoritmust készítesz, akkor azt érthetően megtervezed, implementálod, a fordító meg foglalkozik azzal, hogy 3 vagy 32 regisztered van. Hosszú távon a felülről értelmesen elkészített kód nagyobb sebességre képes, mint az assembly fusizás. Nem győzök röhögni az itt olvasott assembly megoldásokon, mert tudom, hogy a gcc simán szétveri jól megírt C kóddal sebességben. A hozzászólás módosítva: Márc 5, 2015
Az termeszetes, hogy C-ben sokkal hatekonyabban lehet progtamozni, pont azert, amit te is elmondtal (a lenyegre tuszd figyelni, nem kell elveszned a reszletekben). De azert az assembly kell ahhoz, hogy fogalmad legyen az egesz alapjarol. Memoria, regiszterek, stack, ilyesmi. Ezen dolgok ismerete nelkul mikrokontrollert programozni sosem lehet jol. Termeszetesen a HW ismeretek is fontosak.
A gcc sokszor elkepesztoen sz@r kodot general, de olyat, hogy betolt valamit egy regiszterbe, onnan atteszi egy masikba, majd semmire nem hasznalja. Szoval ha a gcc nalad jobb kodot general, akkor nem vagy jo az assembly-ben.
> Szoval ha a gcc nalad jobb kodot general, akkor nem vagy jo az assembly-ben.
Ez bizony így van. Annyit azért hozzátennék, hogy az itt olvasott assembly megoldások 90%-a alulmúlja a gcc-t. Tisztelet a kivételnek, aki tényleg tud programozni. Mindig nézem, hogy mit generál a gcc és ha nem Winavr-t használsz, akkor elégedett lehetsz. A Winavr valami 2010-es gcc változatot használ, az meg még gyermekcipőben járt. Idézet: Igen, ez egy hobbi forum.„Annyit azért hozzátennék, hogy az itt olvasott assembly megoldások 90%-a alulmúlja a gcc-t. Tisztelet a kivételnek, aki tényleg tud programozni.” Idézet: En biztos nem hasznalok win akarmit. Viszont a 2010 nem is annyira gyerekcipo, mert en mar 2001-ben gcc-vel (2.95) forditottam AVR-re Linux-on. De teny, hogy azota nagyon sokat valtozott. Az optimalizacioja nagyon sokat javult, viszont a vegso kodgeneratora egyre rosszabb. Programozoi alaphibakat (pl. ugyanazon ertek ciklusban torteno kiszamolasa, index hasznalata pointer helyett, ciklusban felesleges shift-eles (adat & (1 << i)) es hasonlo dolgok) szepen kiszed, de a vegso kodban megis sok felesleges utasitas van. Nagyon rossz (vagy hianyzik) a forditas vegerol az ugynevezett peephole optimalizacio.„Mindig nézem, hogy mit generál a gcc és ha nem Winavr-t használsz, akkor elégedett lehetsz. A Winavr valami 2010-es gcc változatot használ, az meg még gyermekcipőben járt.” Ennek ellenere en sem allnek neki assembly-ben megirni egy komolyabb programot, mert ha nem eleg ra az AVR C-ben, akkor teszek bele komolyabb mikrokontrollert (olcsobban). De volt olyan munka, ahol az AVR adott volt, viszont egyszeru, de idokritikus feladatot jobb volt assembly-ben megoldani.
Én is csak ASM-ben tudok ugy ahogy programozni ( meg basicban de az ma már nem divat
![]() Az AVR Studioban megtalálsz minden segitséget az ASM-hez, a hardwaren viszont magadnak kell mindent megtanulni (minden chiphez van több 100 oldalas kézikönyv). Nem leányálom a dolog, de bele lehet szeretni - a kezdetben rengeteg segitség kell meg némi rutin. Ha tudsz németül vagy angolul vannak elég jo kézikönyvek a témában a neten. Töltsd le és épits meg lépésröl lépésre az áramköröket. Sok sikert! S ne add fell az elsö balsiker után. Lesz még több is.....
Köszönöm a tanácsokat, s főként a segítőkészséget! Így az ember is nagyobb kedvvel vág bele a dolgokba ! : )
Idézet: „Mindig nézem, hogy mit generál a gcc és ha nem Winavr-t használsz, akkor elégedett lehetsz.” Ennyire azért nem profi a gcc.Hirtelen négy fizetős C fordító ugrik be,akik megélnek a piacon,köztük a méregdrága IAR.Igaz a Codevision kivételével a többiek ARM-re is fejlesztenek.
Amitol fizetos meg nem azt jelenti, hogy jobb, mint az ingyenes. Lasd pl. a windows es linux esetet is
Nem szándékom szapulni a gcc-t,szerintem sem rossz,de ki lehet próbálni.Gcc kontra Codevision-t néztem meg többféle,ua. kóddal tiny2313-al.Szignifikáns a különbség.
|
Bejelentkezés
Hirdetés |