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   385 / 840
(#) sikolymester válasza norbigal hozzászólására (») Dec 1, 2011 /
 
  1. void LCDString(char *str)
  2. {
  3. uint8_t i = 0;
  4. while(*(str+i)) LCDChar(*(str+i)); //az LCDChar viszi ki a string elemeit
  5. i++;
  6. }


Azért javaslom nézd át a mutatók működését: Mutatók és tömbök
(#) norbigal válasza sikolymester hozzászólására (») Dec 1, 2011 /
 
Ez über állat működik!! Köszöntem! Mindenképp átnézem a C-t mert a jelek szerint eléggé elhomályosodtak a dolgok tavaly óta mikor utoljára foglalkoztam vele.
(#) zombee válasza sikolymester hozzászólására (») Dec 1, 2011 /
 
Én SOHA nem használok mutatókat AVR-ben, mindig csak tömböt.
Megszokás kérdése, egyébként nincs különbség.

  1. void LCDString(char str[])
  2. {
  3. for(uint8_t i=0; str[i]; i++) LCDChar(str[i]); //az LCDChar viszi ki a string elemeit
  4. }
(#) norbigal válasza zombee hozzászólására (») Dec 1, 2011 /
 
Na én pont ilyen megoldást akartam és írtam is, de a jelek szerint valamit mégis elrontottam mert az én megoldásommal tudom, hogy nem ment.

Egyébként kitérnék egy kicsit a kijelzzőre amit sikerült működő állapotba hoznom. 4bitesen van vezérelve, és ilyen esetben normális, hogy a 16x4-es kijelzőbe úgy kerülnek ki a szövegek, hogy először az első sorba, majd a harmadikba, majd a másodikba és végül negyedikbe. Vagyis, hogy széttördeli a szöveget bitenként?!?!? Továbbá megfigyeltem, hogy az első 32 kivitt karakter után 8 karakter a "semmibe vész", vagyis ha egy jólnevelt szöveget akarok kiíratni akkor a kiírandó string 32 karaktere után be kell iktatnom 8 karaktert ami nem jelenik meg majd folytatom a kiíratást.

Ez a jelenség a program miatt van, vagy pusztán az LCD kijelző hardveres megoldása az oka?!?!
(Egyébként a segítségetekkel már 64 karaktert olvashatóan ki bírok íratni, tehát használni bírom, csupán a kiváncsiság hajt, hogy mégis miért így működik) :S
(#) UbiLinux válasza zombee hozzászólására (») Dec 1, 2011 /
 
Idézet:
„Én SOHA nem használok mutatókat AVR-ben, mindig csak tömböt. Megszokás kérdése, egyébként nincs különbség.”

Az esetek többségében a pointeres és a tömbös megközelítés felcserélhető, bár a compiler minden tömbös kifejezést pointeresre alakít át.
DE:
Nem teljes körű a felcserélhetőség, a pointeres megközelítés a lehetőségek teljes tárházát adja, a tömbös csak egy részletét. És a dolog nem oda-vissza: Nincs olyan, hogy a tömbös megközelítés ami olyan lehetőséget adna, amit pointerrel nem lehet megvalósítani.
Egy darabig megy ez a "csak tömböt használok", de előbb-utóbb falba fogsz ütközni.
(#) dc001 válasza norbigal hozzászólására (») Dec 1, 2011 /
 
Idézet:
„... az első 32 kivitt karakter után 8 karakter a "semmibe vész", ...


Én úgy emlékszem nem vész semmibe csak nem jelenik meg. A teljes soron mint egy ablakot el lehet csúsztatni a kijelzőt ekkor a sor eleje fog a "semmibe veszni". Érdemes átnézni az LCD adatlapját.

Egyébként meg lehet adni a kurzor pozícióját (DD RAM address) ekkor adott a sornak adott oszlopába fog írni.
(#) norbigal hozzászólása Dec 1, 2011 /
 
SOS Néhány perce mikor az órajelet középfrekvenciás, külső kristályra állítottam ezt az üzenetet kaptam.


"The OCD JTAG adapter was detected, but the target device did not return a valid JTAD ID."

Nagyon remélem nem zártam ki magam :| Már csak azért sem tudom elképzelni mert már régebben is állítottam külső kristályra és akkor ment
Ha beszart akkor jól nézek ki..... Pont mikor mér értelmes látványos dolgokat csinálok hirtelen meghal minden xD Ha nem lehet feltámasztani akkor tuti nem foglalkozok többet mikrokontrollerrel.... Végülis mégiscsak 10.000 votl ez a nyomorult T-Bird.

Olvastam olyanról, hogy ha órajel miatt zárom ki magam akkor van egy áramkör amivel újra bírom éleszteni ha az XTAL lábára adom a jelet. BÁr nem értem mert ittt is van rajta kristály szal elvileg mennie kellene :S Ötlet, meglátás, vélemény?!?!?!?!
(Teljesen kiábrándultam a mikrokontrollerekből :|)
(#) norbigal hozzászólása Dec 1, 2011 /
 
Időközben gondolkoztam és írt olyat h ellenőrizzem hogy a JTAGEN fuse be van-e programozva. Ez akkro azt jelentheti, hogy csak JTAG-gel nem megy?!?! Mert van egy TAVIR féle MKII klónom amivel elvileg az SPI csatlakozón keresztül belepiszkálhatnék a fuse bitekbe és beállíthatnám ezt a bitet - bár elképzelhetetlennek tartom, hogy ez a baj mert csak órajelhez nyúltam:S
(#) sikolymester válasza norbigal hozzászólására (») Dec 1, 2011 /
 
Nem külső kristályra állítottad, hanem külső órajelre. Ez azt jelenti, hogy az egyik XTAL lábon (így fejből szerintem XTAL1) vár egy négyszögjelet órajelnek.

Ehhez lehet olyan áramkört építeni, ami gyakorlatilag annyit tesz csak, hogy egy órajelet ad.
(#) zombee válasza norbigal hozzászólására (») Dec 2, 2011 /
 
Ugye tudod hogy mit írtál? Ha az órajelet állítottad át, JTAG-en akkor is lehet kapcsolódni, SPI-n nem.
Volt már olyan hogy egy elállított ATMega32-t így tettem helyre, és nem kellett bekötögetni a 12V-os cuccra...
Persze mindez csak addig jó amíg a JTAGEN be van kapcsolva. Az AVR Studio mindig figyelmeztet ha kikapcsolod.
(#) norbigal válasza zombee hozzászólására (») Dec 2, 2011 /
 
Érdekes. Sőt szinte már ellentmodásos, hiszen a JTAGENhez tuti, hogy nem nyúltam - amit 100%-osan megerősít az, hogy az AVR Studio abszolút semmire nem figyelmeztetett mikor a Fuse bitet megváltoztattam.

sikolymester!

Az áramkört ismerem (itt az oldalon lévő "műszív"-et) és hétvégén össze is dobom. Deeee ha esetlegesn mégsem az órajel a baj, és ráadom a külső négyszögjelet, akkor abból lehet valami baj?!?!


Egyébként nem tudom lehet-e szerepe a dolognak, deee tegnap programozgatás közben lemerült a laptop akksiija volt, éppen azidő alatt amikor a programozó ment és ezt a Fuse-bitet állítottam át. Esetleg a kettőnek lehet valami köze egymáshoz?!?!? Mármint hogy nem bírta befejezni a programozást, mert a laptoppal együtt a programozó is lekapcsolt...

Bár régen is volt ilyen eset, csak akkor nem programírás közben szakadt meg a feszültség, hanem 1-1 már beprogramozott program futása közben. :S
(#) Reggie válasza Gery hozzászólására (») Dec 2, 2011 /
 
Jah lehet. En irtam assemblyben egy fejlettebb megszakitas kezelot, es az mar sima fuggvenyeket hiv meg, ugyhogy szamomra nem ismert ez a problema
(#) sikolymester válasza norbigal hozzászólására (») Dec 2, 2011 /
 
Ha az IC feszültsége kívűl esik a működési tartományon, akkor nem definiált állapotok jöhetnek létre az áramkörökben. Tehát elméletileg bármi lehet a fuse-okkal most.

A külső órajel miatt nem aggódnék, tegyél az AVR és az órajel kimenete közé 10k ellenállást. Ha nem vagy benne biztos, hogy éppen mi futhat az AVR-en, akkor az is lehet, hogy az XTAL láb bemenetnek van konfigolva, ráadásul mondjuk földre húzva. Túl nagy áramot pedig nem tud elnyelni károsodás nélkül. Az ellenállás tesz róla, hogy ne legyen gond.
(#) zombee válasza sikolymester hozzászólására (») Dec 2, 2011 /
 
Egyrészt programozás közben a RESET le van húzva így tökmind1 hogy minek van konfigolva.
A másik, hogy mintha JTAG-et is említett volna, ezeknél pedig az XTAL1/2 dedikált láb, nem lehet port...

Ja, és külső órajelnél mindig az XTAL1-et használjuk.
(#) norbigal hozzászólása Dec 2, 2011 /
 
Fejlemények: Próbáltam rácsatlakozni az atmegára ISP-n keresztül(TAVIR AVR MKII-vel) , de sajnos kilőve. Ugyanúgy gyíkja van vele. A konkrét hibaüzeneteket képben csatoltam a hozzászóláshoz, hátha valaki tud hozzá mit szólni.

Ennek köszönhetően garantáltan nem a JTAGEN fuse bittel van a baj. Holnap vagy azután próbálok rajta segíteni egy műszívvel, mint utolsó próbálkozás.

Bár egyre reménytelenebbnek tűnik a dolog... Próbáltam elkönyvelni magamban, hogy nem nekem való ez az egész, de már ma rendesem depis voltam, hogy nem indult be az LCD kijelzőm... nem villogtak a ledek... stb. :no: Ha meghalt szegény T-Bird-öm akkor keresek valami jólelkű marhát aki műnyomópapírra kinyomtat nekem egy atmega128-as header kapcsolást, amit szerintem a legrosszabb esetre számítva már a hétvégén megtervezek. Ehhez kapcsolódva: esetleg valaki Pesten a Stadionok környékén vagy Óbudán tud olyan papírboltot, ahol FÉNYES műnyomómapírra nyomtatnak - akár azonnal is?!?!? Óbudán eddig 4 helyen próbálkoztam reménytelenül... szóval inkább Stadionok közelében kellene valami .
(#) zombee válasza norbigal hozzászólására (») Dec 3, 2011 /
 
Könnyen lehet hogy a JTAGEN és az órajel is elment. Ahogy leírták, határesetes fesznél minden lehetséges!
Tehát: JTAG-es programozáshoz JTAGEN bekapcsolva, más nem kell, még órajel sem!
ISP: RSTDISBL ki, SPIEN be, és legyen órajele az AVR-nek ami az ISP órajelnek legfeljebb a negyede.

Az RSTDISBL az ATTiny-k és kisebb(lábszámú) ATMega procikba van, a JTAG-es ATMegákba nincs.
Az SPIEN kényesebb. Ha ezt sikerült lelőnöd akkor hiába adsz neki bármekkora külső órajelet,
csakis nagyfeszes programozóval(HVPP) lehet kiütni. Ilyen a Fusebit-Doctor, STK500(gyári), és a Dragon.
Az első kettőt már sikeresen megépítettem, sajnos az AVR-Dragon csak gyári változatban érhető el(~20-25k).

Műnyomóval nem próbálkoznék TQFP-64 tokot megoldani. Nekem nem sikerült, azóta fotózok.
Műnyomót egy boltban vettem legutóbb(először és utoljára), amit a Rákóczi térről lehet megközelíteni.
A nevét/címét nem tudom. Ha a Petőfi híd felől jössz a 4/6 villamossal, akkor jobbra kell bemenni egy utcába,
a hídhoz közelebbi oldalon. Ha a vásárcsarnok ezen a kis utcában baloldalon lesz akkor jó helyen jársz,
az üzlet is baloldalt lesz ugyanezen a kis utcán néhány sarokkal odébb.
Elég nagy bolt, meg lehet találni, csak figyelj mert könnyen el is lehet menni mellette...
Itt ívet adnak, amit kis felárért felvágnak. Könnyű, 90g-osat vegyél, a vastag nehezen ázik fel.
(#) sikolymester válasza zombee hozzászólására (») Dec 3, 2011 /
 
Ja, már kevertem a reset disable-t a serial programming enabled-del.
RSTDISBL != SPIEN
(#) vagnerjazon hozzászólása Dec 3, 2011 /
 
Azt szeretném kérdezni, hogy egy AVRISPmkII gyorsabban tölt rá egy adott programot egy AVR-re, mint egy ilyen?
(#) huba válasza vagnerjazon hozzászólására (») Dec 3, 2011 /
 
Szerintem igen. Én Bővebben: Link ezt építettem. Sokkal gyorsabb és sokkal stabilabb is. Ami meg pláne jó benne hogy még a benne levő AVR-t USB-n lehet programozni mert van benne gyárilag bootloader.
(#) zombee válasza vagnerjazon hozzászólására (») Dec 3, 2011 /
 
Az AVRISP-mkII (vagy kompatíbilis utánépített változatai) még a gyári STK-500-nál is gyorsabb lehet.
Én már csak tudom, jópár AVRISP-mkII programozót megépítettem már...
Amit a HEStore-n árulnak az a Doper, talán az egyik leglassabb USB portos programozó.
Ilyet is építek, de nem 4100Ft-ért kínálom mert annyit nem ér, ennyiért már egy gyors STK-500-ast is építek...

Bár ennek lehet hogy a másik, AVR égetők fórumban lett volna a helye, de most már mind1.
(#) vagnerjazon válasza zombee hozzászólására (») Dec 3, 2011 /
 
Köszönöm a választ mindkettőtöknek!
Jelenleg az a lassú fajtám van, de még meggondolom, és lehet hogy veszek egy mkII-t.
Bocsánat a témáért, nem is gondoltam, hogy van rá külön, ezért is nem kerestem.
(#) kovacsj válasza zombee hozzászólására (») Dec 3, 2011 /
 
Zombeee, amit én tőled vettem, az a világ legjobb programozója! Örök hála érte!
(#) zombee válasza kovacsj hozzászólására (») Dec 3, 2011 /
 
Ennek csak örülni tudok hogy megelégedéssel(és nem megelégeléssel) használod lassan két éve.
A GSM panel is működik rendesen?
(#) adamtui_93 hozzászólása Dec 3, 2011 /
 
Sziasztok
Hogyan tudnám megoldani atmega 32ben hogy minden megszakításnál megvizsgálja a PC0 protot és az állapotát hozzátegye egy karakterlánchoz pl 10 megszakítás után a karakterláncban 10 nulla legyen hogyha nem volt jel de a 11. megszakításnál már előröl kezdje. Mint a kódban látszik a megszakítás működik meg is vizsgálja a pc0portot de nem tudom onnan hogyan tovább.

main.c
    
(#) kovacsj válasza zombee hozzászólására (») Dec 3, 2011 /
 
Igen, az is nagyon jó lett.
Már kész vagyok a programozásával is, és kezdek kacsintgatni 32-bites AVRek irányába. Ahhoz vajon milyen programozót lenne érdemes beszerezni?
(#) sikolymester válasza adamtui_93 hozzászólására (») Dec 3, 2011 /
 
  1. ISR(INT0_vect)
  2. {
  3. static int b = 0;
  4. static char beolvasott[12];
  5. char a;
  6. if( PINC & (0b00000001)) a='0';
  7.     else a='1';
  8. beolvasott[b]=a;
  9. b++;
  10. if(b==11)
  11. {
  12. beolvasott[b] = '\0';
  13. b=0;
  14. USARTWriteString(beolvasott);
  15. }
  16. KEK_BE;
  17. }


A "beolvasott" tömböt minden interruptba lépéskor újból létrehozta. Ha static-nak deklarálsz valamit, akkor az minden hívás után megmarad. Persze a tömb esetében ez lehet, hogy mindegy is lett volna, hiszen nem inicializáltad újra, tehát csak címet szerzett neki a fordító, ami amúgyis mindig ugyanott volt, de ez így jobban jelzi a szándékod.

Ennek mennie kell. Javaslom neked is a szimulátorral való barátkozást.

Egyetlen egy karaktert pedig így teszed be helyesen 'x', persze ekkor ügyelni kell rá, hogy a végén legyen '\0' lezáró karakter. De szerintem kicsit nézd át az avrlibc string.h fájlját, fogsz ott jó dolgokat találni.
(#) zombee válasza kovacsj hozzászólására (») Dec 3, 2011 /
 
Az AVR32-nek tudtommal JTAG programozófelülete van, ehhez a JTAGICE-mkII-t ajánlja a gyártó.

Ennek az utánépített változatai nem terjedtek el, főként kompatibilitási problémák miatt.
Bezzeg az STK500!!! - ebből már 4 féle változatot megépítettem, mind működik!

A másik AVR32 programozó amire most kacsintgatok, az az USBPROG nevű összeállítás, talán lesz belőle valami.
(#) adamtui_93 válasza sikolymester hozzászólására (») Dec 3, 2011 /
 
Hali köszi de ez nekem valahogy nem akar működni 22db karaktert kapok és azt se normálisan ( csak hogy értsd a végcélom az az hogy at billentyűzeten leütött karaktert elküldjem rs232ön )

rs232.JPG
    
(#) sikolymester válasza adamtui_93 hozzászólására (») Dec 3, 2011 /
 
A pergést természetesen meg kell oldanod még.
(#) vagnerjazon hozzászólása Dec 3, 2011 /
 
Jól látom, hogy az ATMega32-16PU-nak, illetve az ATMega644PA-PU-nak ugyanaz a lábkiosztása, mint az ATMega8535-16PU-nak?
Tehát ha van egy panelem ATMega8535-re tervezve, akkor a másik kettő közül bármelyiket bele lehet tenni, ugye?
Vagy esetleg van valami különbség, amit nem vettem észre?
Következő: »»   385 / 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