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
Okés, minden hibátlan! Nem földeltem le a nullázó jelet.
Enkóderem még nincs, mivel egy dual rés optót fogok használni. Ahhoz még nincs meg a nyák. Engem érdekel a 4x-es kódolás is! Köszönöm! (Alkatrész-számláló lesz belőle. Így nem kész enkódert igényel. És nincs szükség nullázásra se. Már elég rendesen átírtam a programot, irányváltással, nullázással, és egy osztóval is rendelkezik. Na meg ezek kijelzésével.)
Köszi, akkor beforrasztom, csak nem mertem kipróbálni, mert TQFP tokozású, és azt roncsolás nélkül nem tudnám kicserélni ATMEGA8-ra ha mégsem működne.
Elküldtem. Remélem valamit megértesz belölle. Sajnos egy nagyságrendel bonyolultabb lett mint szerettem volna. Újra kéne írni. Majd talán valamikor rászánom magam.
Tagolt, átlátható. Kicsit bonyi.
Csináltam egyszer egy stepper motor tesztert. És ahhoz egy stepper motor teszter-tesztelőt. Most kapcsoltam, hogy annak a kimenete is (2 tekercs gerjesztés esetén) enkóder jellegű. Sajnos a kód már nincs meg. Mindig az előző állapotot és a következő állapotot hasonlította össze, így ha jól emlékszem, akkor 16db if feltétel volt a programban. (4db előző * 4db jelenlegi kombinációja. De 8db-ból is összerakható.) Sebességet nem számoltam. Ha lesz időm, akkor utána gondolok, hogy hogyan is volt. Azt tudom, hogy goto-val ugrottam ki az if-halom elejére, és 10nF-os kondival prell mentesítettem. Kijelző nem volt, egy hibát engedélyeztem, méghozzá a bekapcsolás utánit, hiszen ott nem lehet tudni, hogy hol áll.
Van valakinek ötlete?
Szerintem nézegesd tovább, hogy mi az ami nulla.
Pl: TCNT0, f_avg, stb. Rengeteg változó van a programban. Én ennyit tudtam segíteni. Jobban nem látom át.
Sziasztok! AT90S2313 mikrovezérlőt programozok BASCOM AVR - ben. A PORTB felhúzóellenállásokat szeretném bekapcsolni, de nem tudom milyen utasítás van erre. Valaki tud erről valamit? Előre is kösz
A lábat bemenetként konfigurálod (DDRB regiszter), és ezután magas állapotra állítod a PORTB-vel (mintha kimenet lenne, pl. PORTB=&HFF).
Köszi szépen...nem gondoltam hogy ilyen egyszerű
Sziasztok! Kezdő vagyok a témában átnyálaztam a cikkeket és a kapcsolásokat is, de egy olyan problémával találkoztam amit nem tudok rájönni! írtam egy ilyen kis progit atmega8-ra:
#include #include #include #define F_CPU 1000000UL #define SEI() asm("sei") #define CLI() asm("cli") int init_io(void); int init_timer16bit(void); int init_all(void); uint16_t egy=0, tiz=0, szaz=0, ezer=0, kij=0, i=0, b; int main (void) { init_all(); SREG=0b10000000; while(1) { if(b) { for(kij=0; kij<30000; kij++) { PORTD=0xFF; } b=0; } } } ////////////////////////////////////////////// ////////////////////////////////////////////// ////////////////////////////////////////////// ////////////////////////////////////////////// int init_io(void) { DDRD |= 0xFF; DDRB |= (1< PORTB=0x00; return 0; } int init_timer16bit(void) { TCCR1B |= (1< OCR1A=100; return 0; } int init_all(void) { init_io(); init_timer16bit(); return 0; } ////////////////////////////////////// ///////////////////////////////////// ISR(TIMER1_COMPA_vect) { i++; if(i==10) b=1, i=0; //return 0; } De ebben az a problémám hogy nem jön meg az ISR()-ben végrehajtandó változó növelés és a while()-ban nem csinál semmit! A megszakítás megjön csak nem ugrik az ISR-re! mi a hiba? >>>>>>>>>>>>>>>
Az i és a b változót igy deklaráld:
Sreg regiszterben az I bit 1-es akkor van nem? :O
Sziasztok, megin én vagyok! Ismét "megöltem" az avr-em az orajel állítással, most már megépítem az avr visszahozot az oldalról!
Most azt szeretném megkérdezni, hogy mit kell szoftveresen és hardveresen csinálni, hogy tudjam az avr-em egy 3.27 mhz-es (nem tudom pontosan mennyi) kvarcról működtetni ? (attiny2313, avrstudio, bascom, avr-isp égető) Vagy egy leírása ahol le van írva az sokat segíteni, a 3. chipem nem akarom elrontani ! Köszi a választ előre is!
A kódod olvashatatlan. Máskor jó lenne ha normálisan illesztenéd be. Esetleg csatolhatod is.
Igazából semmit sem kell tudnod, csak angolul olvasni. Az AVR Studio Fuse bit-eknél az Extarnal crystal-t kell kiválasztanod, azt hogy hány MHz-től hány MHz-ig pedig Te is el tudod dönteni.
A gond csak ott van, hogy már elcsavargattad azokat a biteket. Kis szerencsével ha rákötöd a 3.27MHz-es kvarcot 22pF-os kondenzátorokkal működni fog, ha nem akkor meg kell próbálni 1MHz-essel és 8MHz-essel is. Miután felismerte az AVR Studio korrekt módon be kell állítani a megfelelő kvarchoz.
Esetleg vki elmondhatja hogyan kell "normálisan" beilleszteni és akkor átszerkesztem mert nem találtam sehol...
Kód beillesztés. Ott van külön gomb.
Ahogy "aticska" is írta lemaradt a sei() a main-ból;
Köszi a válaszokat linkeket, megnézem majd őket hétvégén, elöbb nem lesz rá idő!
Ám addig igen eljutottam, hogy external crystal oscillator-t beállítom a nekem megfelelő mhz-re, de a vadiúj chipemet ezzel meg is öltem, rajta a kvarc és meg se nyekken, lehet félre nyomtam valamit, és még valamit elállítottam ? No mind1, hétvégén okosabb leszek
Az ilyen nagyobb terjedelmu kodot szerintem mellekeld.
Sziasztok! Valaki nem tudna nekem ajánlani egy mikrovezérlőt (nem feltétlen az atmeltől) ami alkalmas lenne ennek a genius hangfal mikrovezérlőjének a helyettesítésére (SN8P2714S)?link
Hali Mindenkinek!
Készítettem egy kis segítséget, remélem csökkentem egy kicsit azoknak az éhségét, akik magyar doksikra vágynak AVR assemblyvel kapcsolatban. Véleményt kérnék, hogy melyik a jobb illetve használhatóbb és hogy kinek milyen észrevétele van a jobbá/szebbé tételére. Illetve az esetleges hibákat is jelezzétek. Köszi Kiborg
Ok! Elnézést, hogy ennyire idiót vagyok, de nem sokat szoktam itt fórumozni és nem tudom mik a szokások!
A probléma ugyan az nem működik és most már sei()-t írtam be!
Próbáld meg, hogy a megszakítás rutinban ne legyen más csak az i változó növelése. Így a b változót is elhagyhatod. Természetesen ekkor a fő ciklusban (i==10) a feltétel.
Aztán, amíg a for ciklus dolgozik kikapcsolhatnád a megszakítást cli(). ITT találsz leírást a timer használatról. |
Bejelentkezés
Hirdetés |