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
Sziasztok!
Nos összedugdostam egy 4x4-es mátrixot. Mivel még most kezdtem a programozással foglalkozni, még picit magas amit Zombee írt.. ![]() Annyira jutottam, hogy a mátrix szélén körbe járatom a fényt... Megmutatom, de elég hosszú.
Öhm, hogy lehet lerövidíteni? Mert így már 540 byte. Ha valami szöveget akarok majd kiírni, hát gyorsan megtelik a 8Kbyte. Vagy tévedek?
Ez (szoftver oldalról) még messze nem mátrix kezelés, hiszen mindig 1-1 LED-et gyújtasz ki
és úgy animálsz vele. De kezdésnek bőven megteszi, legalább tanulsz belőle! Egy apróság: változót SOHA nem adunk meg a _delay_ms() függvénynek, használj #define-t! A programra a válasz: mindig algoritmussal kell gondolkodni, leprogramozni hogy mit is akarsz, és azt egy ciklusba rendezni a lehető legegyszerűbb módon és legkevesebb sor felhasználásával. Szóval az én algoritmusom: fogok 2 változót, amelyek a következő lépés irányát adják meg. Az egyik mindig nulla, a másik +1 vagy -1. Ha a léptetett érték(X vagy Y) eléri a határt, akkor le kell nullázni és a másik változónak +1 vagy -1 értéket adni. Ez a lépés fizikailag egy "kanyarodásnak" felel meg. Azért ilyen egyszerű lesz a dolog, mert a specifikáció, tehát a körbehaladás is nagyon egyszerű feltétel! Ha a tied működik, akkor a lenti kód is jó lesz! A végén a sok if/else nem túl szép, de nagyon szépen demonstrálja a "kanyarodás" feltételeit és az ilyenkor szükséges teendőket. Ez még jobban tömöríthető tömbökkel, de azért nem ezt a megoldást írtam le mert több kérdést felvetne mint amennyit megválaszolna...
A hozzászólás módosítva: Aug 10, 2013
Íme a tömbös megoldás:
A hozzászólás módosítva: Aug 10, 2013
Egyenlőre a nem tömbös megoldással szemezek.
Nem tudtam rájönni, hogy miért nem jó. Azt csinálja,hogy szépen kezd a bal felsőben, végig is megy egészen a bal alsóig. De aztán a jobb alsóban folytatódik és megy a bal alsóba. Tehát kimarad a kezdőponthoz való visszatérés. Nem tudtam rájönni, hogy lenne jó.. Illetve a sarkakban kétszer villan. (a tömbös frankón megy) A hozzászólás módosítva: Aug 10, 2013
Az első, "if-es" cucc valóban nem egészen jó, mert ha rendesen működne akkor is 2-szer villan a sarkokban. Ezt rögtön láthatod: ha már túlfutna a cucc valamelyik irányba akkor a túlfutást visszaállítja, majd csak ez után fog irányt váltani - azaz elfordulni.
A tömbös sokkal tömörebb, itt már látszik hogy egy algoritmussal van dolgod. Ennél a megoldásnál az irány megváltoztatása jóval egyszerűbb, mert csak az iránytömb értékeit kell megfordítani, de ügyelni kell az "irany" kezdőértékére is. Az első megoldásnál meg az "if"-es részekbe kell belenyúlni. Van egy harmadik lehetőség. Ez a Te megoldásodat utánozza, tehát nem algoritmus adja az alapját. Kihasználja hogy egyszerre csak egy LED-et gyújtasz ki, így tárolja a lépéseket. Ezzel már bonyolultabb formációkat is ki lehet rajzolni, de minden új koordináta eszi a memóriát!
A hozzászólás módosítva: Aug 10, 2013
Nem árt. Először a mátrix portok kezelését és alap algoritmusokat sajátítsd el, addig ne is törd magad "hasznos" alkalmazáson amíg ez kisujjból nem megy! Anno középsuliban PC-re írtam egy kígyós programot. Az algoritmus pontosan ugyanaz lenne AVR és LED mátrix esetén. De a megjelenítő rész teljesen más, hiszen az AVR kezeli a mátrixot, portokat, multiplexelést, stb., míg a fő algoritmus nem is kezeli a portokat és a nyomógombokat sem. Tehát AVR-nél egy jó interrupt az alap, mert a megjelenítésnek és a gombok kezelésének a "háttérben" kell futnia.
A hozzászólás módosítva: Aug 10, 2013
Akkor gondolom kezdjek egy sima C-s "tanfolyammal"... Van hozzá pár doksim.
Akár. De a nyelv ismerete nem elég ahhoz hogy alkalmazást is tudj írni.
A programozói logikát nem lehet tanulni, azt tapasztalni kell másképp nem megy.
Sziasztok!
Azt szeretném kérdezni, hogy egy Atmega8 chipet le lehet végleg védeni? Mert most vettem egy programozót, az elején szépen tudtam írni olvasni az atmega8-at, aztán meg már nem. Hogy tudnám az ic-t törölni, és alap helyzetbe állítani? Előre is köszönöm a választ! Csaba A hozzászólás módosítva: Aug 13, 2013
Mit értesz levédés alatt?
A biztosítékbitek LockBiotje való erre: - disable read and verify. Ekkor kiolvasni nem lehet a chipet sem SPI, sem nagyfesz paralell/soros módon. Chip Erase-val azomban a flash törölhető és a chip újraírható. De van még plusz trükk a védelemhez: - Disable ISP (csak nagyfesz soros/parhuzamos programozóval programozható utána) - Disable RESET/Enable I/O (resetláb eltűnik, I/O láb lesz helyette!) - Preserve EEPROM (csak akkor pipáld be, ha a törlés után az EEPROM tartalom megmaradjon) - LockBit: ha bootloadert használsz, akkor a fetöltésre ítélt kód is titkosított legyen! A biztosítékbitekről és programozókról... De a chip tetejét lemaradtni és elektronmikroszkóppal ki lehet ettől még olvasni.... És így klónozni a chipet.... ![]() A hozzászólás módosítva: Aug 13, 2013
Szia!
Azt értem, hogy addig kapcsolgatja, és olyan helyzetbe az ember a lockBiteket, hogy nem lehet hozzáférni az IC-hez, és nem is lehet törölni, magyarul el lehet dobni. Én ezt értettem alatta.
Kizárásra gondolsz - több út is van
![]() 1, hibás órajelbeállítás: nincs külső kvarc és arra teszed. Vagy External clockra 2, disable reset (Isp-n nem éred el) 3, disable ISP Törölni _mindig_ lehet. High Voltage programmert nem tudod kitiltani, de a chip tartalma ekkor is védhető (lockbit)
Én zártam le véletlenül szerintem az IC-t, és szeretném újra használhatóvá tenni.
Mit csináljak, nem tudom törölni sem.
High Voltage programmer kell neked. Ebből a legegyszerűbb:
- megépíteni a FuseBit doctor nevű áramkört. Ez a biztosítékbiteket alaphelyzetbe rakja. - keríteni valakit, akinek van ilyenje ![]() - gyári STK500 (nagy, ATMEL-es) vagy a AVR-Dragon is ismeri ezt. De ha szerencséd van csak órajel hiba: Az XTAL1-re adj valami 1 MHz...20 MHz közti órajelet (órajelgenerátor IC, kapuchiből összerakott, másik IC ClkOut engedélyezése) A hozzászólás módosítva: Aug 13, 2013
Nos, egy új IC olyan 600-1500 Ft körül mozog.
Egy HVPP megépítése durván 3-4000 körül lehet, mert kell bele IC, nyák, alkatrész, miegymás... Megfelelő darabszámú elfuserált IC-t össze kell gyűjteni ahhoz, hogy a HVPP megtérüljön. A hozzászólás módosítva: Aug 14, 2013
Nem gazdasági számítás volt a kérdés
![]() Nálam is 2.5 cső halott IC után lett STK500 (eredeti). A halott chipek ára összemérhető lett a programozóval. És csak 1 chip lett a sokból örök vadászmezős. Az 12V-t kapott az ADC bemeneten - azaz nem is fusebit halála volt... Ha 1 chip van csak, azt félre kell tenni és gyűjtenimellé a többit... ![]()
Sziasztok! Kazettás magnóban találok olyan IC-t ami a motrokat előre/hátra mozgatja? Vagy VHS olvasóban?
Másik kérdésem van egy érzékelő, egy motoron ami 33VAC-t ad ha teljesen forog, 1,4-4VAC-t ha pedig a leglassabban. Nos hogyha egyenirányitom akkor az MCU ADC -ével szeretném digitális jellé alakítani, és a keletkező PWM kitöltési sebességét vizsgálni, hogy lehetséges?
Kitöltési sebesség olyan nincs. A motor érzékelője ezek szerint induktív, abból nem lesz PWM jel. Ez szinuszos váltakozó feszültség, aminek a frekijét tudod mérni. A legegyszerűbb egy NPN tranzisztor lesz, jól megválasztott alkatrészekkel és értékekkel.
Sziasztok! Egy ATMEGA328P kontrollerbe szeretnék bootloadert tölteni, hogy utána FTDI adapterrel lehessen programozni. Van egy ilyen AVR-ISP égetőm. Az a kérdésem, hogy mi ennek a folyamata, AVR Studió vagy másik program kell hozzá. A bootloader .hex-et le kell tölteni valahonnan, vagy benne van a programban.
A hozzászólás módosítva: Aug 15, 2013
Szép estét.
![]() Azt szeretném kérdezni, hogy a mega8 használható 16Mhz-es kvarcal? S milyen kerámia kondikkal?
Pontosíts. A bootloader egy általános fogalom.
"A bootloader egy olyan kis szoftver, ami a mikrokontroller külön dedikált programmemóriájában helyezkedik el (ún. BootBlock-ban). Gyakorlatilag a program flash memória egy része. A kommunikáció a kontroller perifériáin keresztül valósul meg, így lehet például RS-232, SPI-busz, I2C-busz is a bootloader külvilági kapcsolata. Feladata pedig a programmemória egyéb területén lévő tartalom megváltoztatása a külső tartalomnak megfelelően" Bővebben: Link Pl. Arduino tartalmaz beépítve ilyet - kötött órajel, sosos sebesség és chipekre. A hardware/arduino/bootloaders könyvtárában van. A Bascom-AVR esetén a samples/bootloaders alatt is van basic-ban jópár minta.
Az adatlap általában csodákat tud mondani.
![]() http://www.atmel.com/images/atmel-2486-8-bit-avr-microcontroller-at...et.pdf 27-28. oldal. De: Milyen mega8? ATMega8? Mega8L? Mega8P Mi a _pontos_ típusazonosítója? Általában beszédes a kódsor. AVR chipek típusazonosító és családsor kódfeloldása
Köszi a linket. Így már tudom, hogy a 16PU az mit jelent...
![]() Illetve lenne még egy kérdésem. Hogy tudom azt megoldani C-ben... Adok egy számot egy változónak, legyen ez most 7. Annyiszor villanjon fel a led, amilyen értéket megadok. A hozzászólás módosítva: Aug 16, 2013
Így gondoltam:
5-ször villanjon fel a led.
Jó szemed van... 20 msec-t meglátsz villanásilag....
|
Bejelentkezés
Hirdetés |