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
Köszönöm az érthető magyarázatot.Majd kipróbálom.
Egyébként olvastam a cikkeidet nagyon tetszik mindegyik, rendkívül érthetően magyaráz.Az egész AVR programozást onnan tanultam(0-ról).
Bocs, hogy kérdezek. Hol találhatók az emlitett cikkek?
Az oldal tetejen levo menuben valasszad ki a Kapcsolasok-at, utana meg az AVR-t.
Bővebben: Link
Sziasztok még új vagyok itt. És máris egy komoly kéréssel fordulnék hozzátok. Van egy feladatom amit sürgősen meg kellene csinálnom de nem nagyon megy A feladat a következő lenne: adot egy atmega 128as mikroprocesszor egy 4*40 karakteres lcd kijelző (pqc4004aw-syl-2) és WinAvr (programmers notepad) nevű programmal kellene életet lehelni bele.. egyszerűbb programokat már tudok kezelni a mikroprocin de a hozzá csatlakoztatott lcd-t nem nagyon sikerül feléleszteni... ha valaki tudna egy egyszerű progit amivel kiiratni tudnék az szuper lenne..
Hát lehet, hogy ráfaragtál, mert splc780d kontroller van benne, ami nem biztos, hogy kompatibilis a HD44870 kontrollerrel, amire viszont sok meglévő avr program van.
Amire neked keresgetned kell ez a splc780d varázsszó. Ha bármilyen C-ben megvalósított drivere van neki, bármilyen uC -re, akkor nyeregben vagy, mert azokat pofon egyszerű már portolni, ha nem akkor viszont kösd fel a gatyád. Jobb híján túrd át ezt az Adatlapot aztán hajrá
Köszi a segítséget..
Hogyan lehet c-ben megvalósítani az alábbi pseudo-assemblyben bemutatott részletet:
org 0 dw label db nn, xx, yy, zz, stb... label: stb. stb. A kérdés sokkal összetettebb, de a végletekig egyszerűsítettem, így a "miért c-ben" meg "miért nem használok inline assembly-t" kérdéskör csak hosszas mellékvágányokra vinne, így mellőzzük, ha kérhetem. A kérdésem az, hogyan lehet ezt c-ben megvalósítani.
A tisztánlátás kedvéért: Azt szeretnéd, hogy konkrétan ez a pár sor forduljon C-ből assemblybe?
Melyik C fordítót használod? AVRGCC?
Szia, a pointerekre vagy mas neven mutatokra keress ra es a tombokre a kedvenc C konyvedben. Tenyleg nem bantasbol irom, de ezek annyira alap kerdesek, hogy nem latom ertelmet itt kitargyalni -- kiveve ha konkret kerdesed van, mint pl csinaltal egy C kodot az olvasottak alapjan es nem mukodik vagy nem ugy ahogy szeretned es vegkepp nem erted hol a problema...
Szervusztok !
AVR Studio 4-ben miért van az, hogy a uC órajelét tudom állítani a "Current Configuration Options"-nál, meg amikor megnyitom a programozó ablakot akkor a"Fuses" fül alatt is ? Két különböző értékre is tudom tenni őket...szóval nem értem ezt a dolgot. Köszönöm szépen a segítő válaszokat.
A config options-nál a szimulátor órajelét állítod be úgymond, így láthatod/számolhatod/ellenőrizheted a programod működését, míg a FUSE biteknél már a mikrovezérlő órajelét állítod be, mint órajel forrás helye, típusa, vagy frekvenciatartománya. Én ennyit tudok ehhez hozzáfűzni.
És az normális, hogy a 8Mhz-en beállított egyszerű delay késleltetések 1Mhz-en nyolcszorosára nőnek a panelen ?
Elvileg logikus, de azért furcsállom mert így egy megírt 10ms-os késleltetés a valóságban 80ms.
Annyival még kiegészíteném, hogy az a F_CPU compiler switchet is állítja a Makefileban. Magyarra fordítva: Ha van egy delay függvényed, aminek kell tudni fordítási időben, hogy mennyi az órajele az AVR-nek, akkor az ebből a compiler switch-ből fogja tudni. Nagyjából olyan ez, hogy onnan tudja a fordító azt is, hogy a "kötelező" #include
Na már most, hogyha a fordító azt hiszi, hogy 1MHz-en jár az AVR, mert te a project optionsban ezt mondtad neki, de te viszont a fuseoknál 8MHz-re állítod, akkor a delayed 8-szor gyorsabban fog lefutni. Ha egy led villogód van, akkor tehát 8-szor gyorsabban fog villogni.
Nah ez volt az én gondom. Most már vágom, köszönöm.
Én csináltam egy ilyen kapcsolást attiny45-el, fényerőszabályozással, alvó üzemmóddal, automata kikapcsolással. Egy mini lámpát csináltam belőle, 3,6V-os akkuval megy és egy nyomógomb van rajta.
Üdv!
Segítséget szeretnék kérni tőletek. Egy olyan cuccot készítek, ami feszültség és áram értékeket loggol SD kártyára. A proci egy ATMGA324A. Először azzal szenvedtem,h túl régi volt az AVR Studio-m és nem ismerte ezt a procit. A listából így nem ezt hanem a P-s verziót (ATMEGA324P) választottam. Ez volt a projectnél is beállítva. Bár panaszkodott rá mégis működött az sd kártya, az lcd kijelző is és az uart is. Aztán frissítettem a stúdiót és az mkII-t is. Ekkor a delay.h -ra panaszkodott, h integert kap.... az is megoldódott. Most már lehet A-végződésűt választani, de mint kiderült azzal nem megy. Ha azt választom, akkor minden hülyeséget ír az lcd-re és nem megy semmi sem rendesen. Visszaállítva a projektet P-re megint jó lesz. Van valakinek valami ötlete azon kívül,h programozzam P-ként? Márió
A P-s és a sima nem ugyanaz! mas az ICk belso felepitese reszben...
Az AVRstudio Free. Mi tart vissza, hogy frissites (4.19 a regebbi sorozat, 5.0 az ujabb) Kod nelkul eleg necces... a header es egyeb allomanyokat nem piszkaltad? ott is lehet hiba igy...
Frissítéssel csak óvatosan, mert nagyon sok gyári AVR ISP mkII és AVR Dragon verzió teljesen működés képtelen a jelenlegi AVR Studio 5 verzióval.
Ha követed a bugreport és fejlesztési naplókat, akkor látható, hogy dolgoznak a problémán.
Eddig 4.17-est használtam (asszem) ott nem volt gond, de nem ismerte a procit. Erre frissítettem, aminek következtében szinte semmi sem működött. Tool chain frissítés... Aztán el kezdett kötekedni a delay.h miatt. Ha csak egy szimpla alverzió frissítés ekkora szenvedés, akkor vajon mi történhet majd ha 4-esről 5-ösre váltok
A delay header-t cseréltem, mert neten rákerestem és más is volt így már. Amit letöltöttem az meg '@' karaktert tartalmazott, akkor meg arra kiabált :S Amikor az is megoldódott, akkor meg jött ez,h p-ként megy a-ként meg meghal.
Melyik WinAVR verziót használod amúgy?
Javaslom ott is a legfrissebb használatát.
Üdv!
WinAVR-20100110-est. De nem találtam újabbat.
Sikerült megoldani. A win-avr make-jére és gcc-re kellett állítani az external toolsnál. Ezt már próbáltam korábban is de nem ment, mert nem a megfelelő gcc.exe volt beállítva :S A toolchainre állítva pedig a korábban említett hibákat produkálta.
Kösz a helpet! Márió
Sziasztok!
Írtam egy nagyon egyszerű programot,(hogy kipróbáljam magam a PWM-ezésben) aminek az lenne a célja, hogy erősíti egy led fényét, majd elhalványítja. A végeredmény kicsit eltérő lett:A led egyfolytában világít. Nem tudom, hogy mi lehet a hiba. Íme a kód:
Namost több hiba is van.
A while ciklus az akkor zajlik le, ha a megadott változó nem nulla. Tehát te alapból nullát adsz meg, ezzel az első while nem csinál semmit, ugyanígy a másodiknál. A másik.
Ezt hogy? Ez nem 8, hanem 128. Tehát a while-os sorokat gondolt végig még egyszer. Akkor hajtódik végre a while, ha az utána írt változó értéke nem nulla. Használd egy kicsit az agyadat.
A 17. sor sosem fog vegrehajtodni, mert OCR1A=0 eseten a while-ban levo kif. hamis lesz, igy folytatodik a 20. sornal.
A while fuggvenyekbe nem artana valami delay is, mert hiaba irod at az OCR erteket, ha nem tud odaig elszamolni a szamlalo.
Akkor, hogy ha nincs 0-ás kezdőérték a while ciklusoknál, akkor milyen módszerrel oldjam meg?
Köszi!
Hali Mindenkinek!
Egy számomra érthetetlen problémával fordulnék a társaság felé. A rendszerem azt a tünetet produkálja, hogy ha egy darab vezetékkel hozzáérek a GND-hez (a vezeték másik fele a levegőben lóg) akkor kihal az egész. Az egész egy 12V-os kapcstápról megy, után egy 7805 (előtte-utána kondi) egy ATMega16 5V-ról és hozzá kapcsolódik egy VFD ami ugyan 12V-s, de a vezérlője 5V-s. (a GND közös) A protoboardon 4-5 db elszórt 100nF kondi.A vezérlő SPI-n tartja a kapcsolatot a kijelzővel. Mi okozhatja a tünetet? Üdv Kiborg
Egy olyan feltétel kell a while-ba, ami akkor lesz nulla, amikor azt szeretnéd, hogy lépjen ki a while-ból. Például:
Tehát amíg a változó nem egyenlő 128-al, addig benne marad a while-ban, mert addig 1 az érték. |
Bejelentkezés
Hirdetés |