Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
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
Lapozás: OK   31 / 840
(#) matrix64 válasza zeusz7 hozzászólására (») Aug 10, 2007 /
 
Sztem időzítés problémád lehet vagy az init-et szurtad el.
(#) PLaci válasza zeusz7 hozzászólására (») Aug 10, 2007 /
 
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!
(#) 7kaz hozzászólása Aug 14, 2007 /
 
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?
(#) andrewforest hozzászólása Aug 14, 2007 /
 
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?
(#) imbra hozzászólása Aug 14, 2007 /
 
Üdv mindenkinek! AT89C2051-hez keresek programozót, tudna valaki segíteni?
(#) vegyészmérnök válasza imbra hozzászólására (») Aug 14, 2007 /
 
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.
(#) imbra válasza vegyészmérnök hozzászólására (») Aug 14, 2007 /
 
Ü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....
(#) PLaci válasza imbra hozzászólására (») Aug 14, 2007 /
 
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
(#) imbra válasza PLaci hozzászólására (») Aug 14, 2007 /
 
Üdv! Köszi, és az égető programot hozzá nem találom... Zoli
(#) PLaci válasza imbra hozzászólására (») Aug 14, 2007 /
 
Ott van az. Szedd le és bontsd ki a py2051.zip nevű filet. Mindent meg fogsz találni benne.
(#) vegyészmérnök válasza PLaci hozzászólására (») Aug 14, 2007 /
 
Ez a BLOW IT programozó amit írtam. A BASCOM-8051 programmal lehet használni. Letöltheted a netről: ITT vagy ITT.
(#) andrewforest hozzászólása Aug 15, 2007 /
 
Senki nem tud válaszolni az előző kérdesemre???
(#) ArBalya hozzászólása Aug 16, 2007 /
 
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.
(#) gtk válasza ArBalya hozzászólására (») Aug 17, 2007 /
 
Ehhez mar en szerintem kell egy kis idoosztasos technika.
(#) ArBalya hozzászólása Aug 17, 2007 /
 
Pontosan ahogy mondod
Sikerült megoldanom a problémát és tökéletesen müködik
(#) zeusz7 hozzászólása Aug 19, 2007 /
 
Hello!

Azt tudom, hogy .db-vel lehet stringet létrehozni asm-ben, tömböt lehet valahogy?
(#) zeusz7 válasza zeusz7 hozzászólására (») Aug 19, 2007 /
 
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)
(#) PLaci válasza zeusz7 hozzászólására (») Aug 19, 2007 /
 
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
(#) zeusz7 válasza PLaci hozzászólására (») Aug 20, 2007 /
 
Sokadszorra kösz
(#) zeusz7 hozzászólása Aug 20, 2007 /
 
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?
(#) PLaci válasza zeusz7 hozzászólására (») Aug 20, 2007 /
 
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)
(#) potyo válasza PLaci hozzászólására (») Aug 20, 2007 /
 
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.
(#) zeusz7 válasza potyo hozzászólására (») Aug 21, 2007 /
 
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.
(#) digimann hozzászólása Aug 21, 2007 /
 
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
(#) potyo válasza digimann hozzászólására (») Aug 21, 2007 /
 
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.
(#) potyo válasza zeusz7 hozzászólására (») Aug 21, 2007 /
 
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...
(#) gtk válasza digimann hozzászólására (») Aug 22, 2007 /
 
Amennyibben C nyelven programozod es avr-libc-t hasznalsz:
  1. //szukseges header
  2. #include <avr/eeprom.h>
  3.  
  4. //lehetosegek
  5.  
  6. //olvasas
  7.  
  8. uint8_t eeprom_read_byte(const uint8_t *addr)
  9. uint16_t eeprom_read_word(const uint16_t *addr)
  10. void eeprom_read_block(void *pointer_ram, const void *pointer_eeprom, size_t n)
  11.  
  12. //iras
  13. void eeprom_write_byte( uint8_t *addr, uint8_t value)
  14. void eeprom_write_word( uint16_t *addr, uint16_t value)
  15. void eeprom_write_block(const void *pointer_ram, void* pointer_eeprom, size_t n)
(#) digimann válasza gtk hozzászólására (») Aug 22, 2007 /
 
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
(#) gtk válasza digimann hozzászólására (») Aug 22, 2007 /
 
Okszi.
(#) digimann hozzászólása Aug 22, 2007 /
 
még egy furcsa kérdés: a bemenetek hogy működnek? (hardver/szoftver)
Következő: »»   31 / 840
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem