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
Attól még nem biztos, hogy jó a 2 x 47pF !.
Az IC. adatlapja sem mond többet 22pF-nél, 16MHz esetén. 2 db fix 22pF-el ki kellene próbálni.
Trimmer??? Mióta?
47pF már "megfogja" a kristályt, nem tud berezegni. Nézd csak meg jobban az adatlapot, vagy keress rá guglin hogy kell bekötni a 2x22pF kondikat!
Ez csak frissítés kérdése bármely Atmega típusú processzor gyári adatait be lehet írni a műveletet végző jelen esetbe Atmega8 ba , és ettől kezdve tudni fogja azt is.
De egyébként volt rá példa , hogy az említett órajel generátor sem segített , de a fuse bit doktor igen .
Tévedsz.
Támogatja. HVPP fusebit doctor
Sziasztok!
Van egy 128x64-es kijelzőm. Szeretném tárolni a kijelző képet egy Mega16 memóriájában, elméletileg ugye az SRAM pont elég is lenne a célra. Viszont ugye elég nagy probléma, hogy az SRAM végén tárolja a visszatárási címeket. ![]() Lehetőleg nem szeretnék külső memóriát használni. A programmemóriát lehet ilyen tárolási célra használni? Tudja írni/olvasni a saját programmemóriáját? Kiborg A hozzászólás módosítva: Márc 6, 2013
Gondolom nem tükrözni szeretnéd a kijelző képpontjait az SRAM-ba, hanem előre elmentett képeket akarsz kitenni AVR-ről a kijelzőre. Ha az utóbbi igaz, akkor nézz itt körül: Progmem
A hozzászólás módosítva: Márc 6, 2013
Az lenne a célom, hogy adott képet megrajzolok gyorsan a memóriában, (pl: sok vonal, kör, stb), majd egyszerre kirajzolom a kijelzőre (tehát tükör lenne) , mivel egy-egy gyorsan megvan, de egy alakzatnak viszont sok pontja vagy, így sok időbe kerül, amíg ki tudom rajzolni. Remélem érthetően fejeztem ki magam.
ui: közben meg rájöttem, hogy ilyenre a program memória nem használható a véges írási ciklusszám miatt, tehát maradna az SRAM, de hát ott meg a verem.... ![]() A hozzászólás módosítva: Márc 6, 2013
Hát igen, a programmemóriát hamar lerongyolnád.
Ha jól értem, akkor 1024 byte SRAM -od van összesen, és minden byte-ra szükséged lenne, hogy grafikát generálj benne. Röviden: Lehetetlen. Hosszabban: Ha a linker scriptet átírod, nem használsz egyáltalán függvényhívásokat, akkor esetleg megoldható. Persze assemblyben kellene megírnod a programod.
Akkor jól gondoltam sajnos.
Assemblyben nyomom, szóval el nem gond. Na de hogy ne használjak függvényhívást, ne legyen szubrutinom, és MEGSZAKÍTÁSOM sem, az már viszont túl sok áldozat ![]() Valami kici occó SPI-s memóriát tudsz ajánlani ? (úgy néz ki, hogy nincs más megoldás)
Nem érdemes LCD kijelző tartalmat az SRAM-ban tárolni.
Én az SRAM-ban nem a tartalmat tárolom, hanem hogy hogyan kell azt reprodukálni. Vannak callback függvények, amik egymás után meghívódnak és felépítenek egy 8x8-as cellát. Ha kiraksz egy sprite-ot/szövegdobozt/keretet valahova, akkor az összes 8x8-as cella, ami érintve van, újra lesz számolva. Több callback is van: az egyik grafikát rak ki, a másik keretet, a harmadik szöveget,... Ha érvénytelenítesz egy cellát, akkor az összes callback egyesével meghívódik. Kb. 0 memóriafogyasztással csináltam ablakozást. ![]() A program memóriára 10.000 írás van garantálva, az EEPROM-ra 100.000. Relatíve gyorsan haza fogod vágni, ha erre használod. És arról még nem is beszéltünk, hogy ez mennyire lassú lenne... A hozzászólás módosítva: Márc 6, 2013
Egyébként a Mega32 pin kompatibilis a Mega16-tal és 2k memóriája van. Elfér benne 128x64 és még 1k marad is.
Szia!
Ez is megoldás, bár sajnos ilyen chipem nincs itthon ![]() Az a gond, hogy a kijelzőn nem egyesével lehet kapcsolni a pontokat, hanem 16-osával. Ergó ha csak egy pontot kapcsolok be (mondjuk a 15.-t a többi meg 0) és be szeretném kapcsolni a 12. pontot, akkor tudnom kell, hogy a 15. is be van kapcsolva, ezt vagy kiolvasom a kijelző memóriájából(ami sok idő) vagy csak memóriában írom át (így megspórolok egy olvasást). Egyébként egy ST7290-es vezérlővel dolgozom. Nem túl gyors jószág ![]()
Ha van olyan része a képnek, ami mindig ugyanaz, akkor azt nem kell letárolnod (logo, üres rész,...). Ezzel nyersz annyit, amennyi a stacknek elég lesz. A globális változókat meg regiszterekben tárold.
Az r2-r15-ig lehet regisztereket használni változónak, r2-től indulj felfelé.
Univerzálisat szeretnék, amit csak egyszer kell jól megírni, a teljes területet lefedi.
ASM-ben programozok, mindent regiszterekben tárolok ![]() Tudsz esetleg valami jó kis RAM-ot, ami kici occó 5V-os és SPI-s. Elég kritérium ![]()
Most univerzális, vagy egyedi megoldást akarsz?
![]() Ha univerzálisat, akkor felejtsd el az Atmega16-ot. Ha egyedit, akkor meg Atmega16-ra optimalizáld szét az egészet, hogy 1k-ba beférjen 1k + stack. Atmega16 (DIP-16Mhz) - 1225 Ft Atmega32 (DIP-16Mhz) - 1525 Ft A teljes különbség DIP esetén árban 300Ft, más tokozásnál még ennél is kevesebb! Ha már vásárolni kell, akkor az Atmega32 legyen RAM helyett, legalábbis szerintem. A hozzászólás módosítva: Márc 6, 2013
Mitől lehet, hogy winavr-rel az alábbi hiba üzenetet kapom, úgy hogy minden h fájl be van includolva?
main.c: In function 'main': main.c:10: error: 'DDRA' undeclared (first use in this function) main.c:10: error: (Each undeclared identifier is reported only once main.c:10: error: for each function it appears in.) main.c:11: error: 'PORTA' undeclared (first use in this function) make.exe: *** [main.o] Error 1 Process Exit Code: 2
Rossz MCU define van valahol, valszeg a makefileban. Emiatt nincsen DDRA, mivel olyan ioxxx.h filet includeolt a precompiler, amiben nincsen DDRA.
Az mcu jól van beállítva, olyan mintha egyáltalán nem látna h fájlokat.
Sziasztok!
Adott egy attiny2313 ami felprogramozásra került, és a fusebit-ek úgy lettek beállítva, hogy külső kvarcról kapjon órajelet. Ez azt jelenti, hogy kvarc nélkül nem tudom újraprogramozni, sem pedig a "chip id"-jét kiolvasni a programozómmal? (A régi kapcsolás, panel már nincs meg, szeretném másra használni a uC-t.)
Igen, azt jelenti.
És ha sejtelmem sincs, hogy mekkora kvarc volt eredetileg, akkor mekkorát tehetek oda biztonsággal?
Legegyszerűbb ha betartod amit az adatlap mond.
Szerintem 1Hz -től 16MHz -ig mehet minden. A hozzászólás módosítva: Márc 6, 2013
Köszönöm a segítséget, működésre bírtam! (5Mhz kvarc/10p kondikkal)
Akkor valami elérési gond lesz.
PATH meg lett adva helyesen? Szóköz van a WINAVR telepítési útvonalában?
Hali,
írtam egy olyan programot amiben egy atmega 168 3 pwm csatornáját szabályozom, és kiírom egy 3310-es kijelzőre. Proteusz szimulátorban tökéletesen működik, de a megépített hardverben nem csinál semmit. A hardver tuti működik, ha kitörlöm a progiból a másik 2 csatorna szabályozását akkor jó. Mi lehet a hiba?
Igen az elérési út volt a gond. Köszönöm a segítséget.
Az E-bay kínálatában figyeltem fel a Meduino Nano Enhancement kártyára, amely dugaszolós próbapanelhez ideális. Van ATMega 168 és 328-as változata is (természetesen benne van a bootloader).
Jellemzői közül kiemelésre érdemes, hogy 3,3 V és 5 V között átkapcsolható. Van az alján egy FTDI USB-UART protokol konverter is, amellyel a programletöltés egy kattintással végezhető (az #RTS kimenet egy 100 nF-os kondival rá van kötve a RESET lábra, így nem kell nyomkodni a RESET gombot.) A PWR, RX, TX ledek mellett a D13-as lábra is csatlakozik egy negyedik LED. Kezdéshez szerintem kitünő (és viszonylag olcsó) eszköz. Arduino IDE beállításánál "Arduino Nano" nevet kell kiválasztani a Tools/Board menüben. A hozzászólás módosítva: Márc 7, 2013
Egy avr-gcc kérdésem lenne:
Logikai jelanalizátoron dolgozom és minden órajelciklus számít. Minél gyorsabban fut le az interrupt, annál gyorsabb jelváltozásokat is észlelni tudok. A jelenlegi interrupt 32 ciklus alatt lefut, amiből 7 ciklus az interrupt meghívása. 4 ciklus az interrupt hívás, amit egy 3 ciklusos JMP követ (atmega328P) az interrupt táblában. Ha ez JMP helyett RJMP lenne, akkor nyernék egy órajelet. A kérdés, hogy el lehet-e érni, hogy a fordító az interrupt táblában RJMP-t használjon JMP helyett?
ahova a jmp megy, oda tégy rjmp-t, és utána egy nop-ot.
Az elvet én is tudom, csak ezt az avr-gcc-nek eddig nem sikerült elmagyaráznom.
![]() Ha bővebben ki tudod fejteni, hogy az interrupt vektor tábla allokálását hogyan vehetem át a C-től, jó lenne. A hozzászólás módosítva: Márc 9, 2013
|
Bejelentkezés
Hirdetés |