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
Sztem időzítés problémád lehet vagy az init-et szurtad el.
Ha már meg lettem szólítva. Ha megnézed az én régi programom ciklus részét, akkor látod, hogy először inkrementáltam a ZL-t és csak utánna olvastam be a memóriából a byte-t amit ki kell írni. A te ciklusodban először olvasol, és csak utánna növelsz, ezért nem kell az a -1. De ettől még a kiírásnak mennie kellene. Nem lehet, hogy a kiíró részben van valami gond? A megszakítás le van tiltva? A watcdog sem megy? Ha feltennéd az egész forrást megnézném, de sajna csak hétfőn, mert a hétvégén meló van
Szia! Sok sikert!
Bascom AVR-ben dolgozott-e valaki AVR-DOS-szal?
Állítólag a gyógyított Bascom-okban nem lehet lefordítani a programot, ha AVR-DOS-t is tartalmaz. Igaz ez?
Hello!
Arra lennék kiváncsi, hogy AVR-ek esetében (konkréten AtMega88-nál), hogyan lehet levédeni, hogy a program memóriát ne lehessen kiolvasni, legfeljebb csak új programot tölteni fel rá. Nézegettem a fuse biteket, de nem igazán volt érthető... Valaki tudna segiteni?
Üdv mindenkinek! AT89C2051-hez keresek programozót, tudna valaki segíteni?
Bővebben: Link
Vagy a BLOW IT névre hallgató legegyszerűbb programozó. (Kapcsolási rajzhoz keress rá a gogliban) Egyébként itt, ebben a fórumban volt már erről szó, írd be a keresőbe, és nézd meg, mert nem akarom mégegyszer leírni.
Üdv! Köszönöm a választ, átnéztem a fórumot, ezt a kapcsolást néztem is. 89C52-nek nem szabad a progija, 6500Ft meg kicsit húzós....
Szia!
Egyser régen nekem is kellett ilyet programozni (kapacmérőt építettem) a linken láthatót raktam össze egy "csupalyuk" panelre. Nekem működött.Bővebben: Link
Üdv! Köszi, és az égető programot hozzá nem találom... Zoli
Ott van az. Szedd le és bontsd ki a py2051.zip nevű filet. Mindent meg fogsz találni benne.
Senki nem tud válaszolni az előző kérdesemre???
Sziasztok!
A segítségeteket szeretném kérni. Kb 1hete kezdtem el foglalkozni AVR microcontroller-ek kódolásával. Tehát még nagyon gyerekcipőben járok e téren. Most éppen 1 idözítőt szeretnék kódolni (csupán gyakorlás képpen) A mellékeltben maga az asm kód, vagyis csak egy része. Maga az időzitő tökéletesen működik, nem is ezzel lenne a gond, hanem Szeretném kicsit "felturbózni" a progit pár effektel. Pl azt szeretném megvalósítani hogy bekapcsolás után 4 darab 0 villanjon ki egymásután 3szor majd az EEPROM-ba mentett utolsó idözités adatai jelenjenek meg a kijelzőn. Illetve mialatt állítom az idözítést villogjon a másodperc (ha épp azt állítom) Remélem elég érthetően foglalmaztam meg hogy mit is szeretnék megvalósítani. A kijelzéshez meg annyit fűznék hozzá hogy a 4 darab led kijelző multiplex-módon van meghajtva. Előre is köszönöm a segítőkész figyelmeteket.
Ehhez mar en szerintem kell egy kis idoosztasos technika.
Pontosan ahogy mondod
Sikerült megoldanom a problémát és tökéletesen müködik
Hello!
Azt tudom, hogy .db-vel lehet stringet létrehozni asm-ben, tömböt lehet valahogy?
Bocs, rájöttem, ugyanúgy .db kell, csak stringhez 2 idézőjel közé teszem a szöveget, idézőjel nélkül pedig tömb lesz.
Azt viszont nem értem, hogy amikor a pointert a tömbre állítom, akkor miért így kell írni, miért kell a *2, csak így jó, enélkül nem ment nekem. ldi zl,low(TOMB*2) ldi zh,high(TOMB*2)
Szia Zeusz!
Azért kell megszorozni 2-vel, mert a programmemória 16 bit széles. Az utasítások cimkéjénél ez azért nem baj, mert az utasítások maguk is 16 bite hosszúak. A tömb (vagy string) pedig csak 8 bites szavakból áll. Így egy utasítás helyére a string 2 byte-ja fér el
Különös dologba botlottam.
Van egy kicsit hosszabb programom, ami tökéletesen működik. Hozzá írtam még egy szubrutint, amiben szerintem nincs hiba, de ha le akarom fordítani, akkor a program a már eddig meglévő részébe beleköt és azt mondja, hogy "relative branch out of reach". Túl sok relatív ugrást raktam bele? Van ilyen? Az új szubrutin csupa cpi temp,"vmi szám"majd breq elágazásból áll, de csak az első ilyet tudom hiba nélkül lefordítani. Mi lehet?
Szia!
Most lehet hülyeséget írok, de úgy rémlik, hogy a szubrutinok egymásba ágyazása maximum 8 lehet. De lehet, hogy ez a PIC nél van. Kérlek benneteket, ne szidjatok, inkább egy hozzáértő javítson ki ha nerm így van. A te esetedben az a hibaüzenet nem a fenti dolgot jelenti, hanem azt hogy túllépted a relatív ugrás határát. Tudod előre max 128 byte-t hátra max 127 byte-t ugorhatsz. Ez abból adódik, hogy az ugróutasításban a cim hossza 1 byte. Ezt ha elfelezed előre 128, vissza 127, mert az utolsó (128.) értéket az előjelbit lefoglalja (hátra ugrás mínusz)
A 16F sorozatú piceknél van a 8 szintes korlátozás, mert a hardveres stack 8 címet tud tárolni. 18F-nél 32 szint van.
AVR-nél viszont nincs külön stack a visszatérési címek tárolására, hanem az adatmemóriában történik a cím tárolása. Így elvileg az adatmemória mennyisége szab határt a szubrutinok egymásba ágyazásának. A program elején kell az SPH és SPL (Stack Pointer High/Low) regisztereket beállítani, hogy hol legyen a stack a memóriában (ajánlatos a memória utolsó címére állítani), és utána a mutató csökken, amikor valami belekerül, illetve növekszik, ha valami kimegy a stack-ből.
A program elején a stack így van beállítva:
ldi temp,0xdf out SPL,temp Ezesetben mit tudok tenni, hogy működjön a programom? Azért annyira nem hosszú és bonyolult a programom, szóval fura, hogy túlléptem volna a 2313 kereteit.
Helo sziasztok!
Én mégelég kezdő vagyok a mikroprocik terén, bár már van működő fejlesztőkörnyezetem. De sajnos nem tudok rájönni, hogy hogyan lehet az EEPROM-ot szoftveresen írni/olvasni. Tudnátok nekem segíteni? Konkrétan az érdekelne, hogy hogyan lehet címezni, írni, olvasni. Üdv: Zsolt
Az adatlapokban benne van az ilyesmi. AVR esetén keresd a void EEPROM_write kulcsszót. Ott lesz a környékén az eeprom olvasás is.
Annyira nem értek az AVR-hez, csak az utóbbi időben van egy áramkör, amiben van egy AVR is, azért nézegettem az adatlapját, és onnan tanultam meg ezt-azt...
Amennyibben C nyelven programozod es avr-libc-t hasznalsz:
sajnos a C nem játszik... csak az asm!
viszont az adatlapból már sikerült kihámoznom az eljárást, de azért THX!!! Üdv: Zsolt
még egy furcsa kérdés: a bemenetek hogy működnek? (hardver/szoftver)
|
Bejelentkezés
Hirdetés |