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   355 / 840
(#) zombee válasza Robi98 hozzászólására (») Aug 27, 2011 /
 
Sikolymester már válaszolt helyettem, a "Fuses" nevű fülön találod.
Ott próbáld, de egyelőre csak az "Internal RC Osc." beállításokat használd!
(#) vagnerjazon hozzászólása Aug 27, 2011 /
 
Üdv.!

A Topi féle AVR-programozóval van egy kis gondom. Már régóta megvan, eddig tökéletesen működött, most meg amikor csatlakoztatom a géphez, jön, hogy "Az USB-eszközt nem lehet felismerni". Nem látok a nyákon semmi ráesett darabkát, ami rövidzárlatot okozna. Próbáltam másik USB portba, és másik gépen, továbbá három kábellel is, de egyik kombinációval sem jó.
Van erre valami magyarázat? Pár napja még használtam, most meg nem működik.
(#) Robi98 válasza sikolymester hozzászólására (») Aug 27, 2011 /
 
Igen,AVRStudio4-ben írtam.Köszönöm a csatolt képet.
(#) Robi98 válasza Robi98 hozzászólására (») Aug 27, 2011 /
 
Ja,és még egy kérdés, ha nem baj.Miért írják azt hogy ha például ATmega 8 8PU-t szeretnénk külső kristályról üzemelni akkor 8Mhz-es kvarcot használjunk?
(#) zombee válasza Robi98 hozzászólására (») Aug 27, 2011 /
 
A kristály pontosabb. Időzítésre érzékenyebb eszközöknél(óra, kommunikáció, mérések, de a VGA vezérlőm is) kell.
(#) vagnerjazon válasza vagnerjazon hozzászólására (») Aug 27, 2011 /
 
Elnézést kérek, már tárgytalan. Azóta semmit nem csináltam vele, most meg hirtelen működik. Furcsa.
Mégegyszer elnézést a felesleges kérdésért.
(#) Reggie válasza leglacika hozzászólására (») Aug 27, 2011 /
 
Hat elotted masnak is volt meretbeli problema az adott forrassal.
A cseh tudasodra csak tippeltem, azt hittem, hogy megvetted az ujsagot.

A szerzo nem tudom mivel forditott, de szerintem nem realis, hogy egy masik fordito 20%-al kisebb kodot keszitsen. Sokkal elkepzelhetobbnek tartom, hogy mega16-ra keszult, csak el lett nezve es rossz tipust irt a rajzra.
(#) zombee válasza Reggie hozzászólására (») Aug 27, 2011 /
 
Azt a kapcsolási rajz is tökrözné, pl. az analóg port az a PORTA-n lenne...
(#) Reggie válasza zombee hozzászólására (») Aug 27, 2011 /
 
Igen, kivetel, hogyha mega16-al fejlesztette, aztan a labkihasznaltsag lattan gondol egyet es atrajzolja mega8-ra, a kodnal meg elfelejtette leellenorizni, hogy belefer-e. Lattam mar ilyet
(#) leglacika válasza sikolymester hozzászólására (») Aug 27, 2011 /
 
Szia !

Ezek az eredeti fájlok. De gyakorlatilag mindegy, mert az ECU kiolvasó részéhez nem nyúltam.
Éppen azért, mert azt szerettem volna meghagyni.
A KW1281 LCD.c fájl a lényeges, mert ez a "főprogram".
A KW1281.c és a KW1281.h a protokoll lekezeléséhez kell. Tehát a program hibátlanul fut, egészen a KW1281 LCD.c fájl 460. soráig ( LcdChr('.'); ).
Ekkor 4 db pontot ír ki sorban egymás után, mintegy folyamatjelzőként. Ezután kéne következnie a vett adatok kiírásának (ha jól gondolom), de csak egy nullát kapok. Nem tudom, hogy ez a nulla mit akar jelenteni, és hová ugrik ilyenkor a program.

Üdv.: Laci.
(#) leglacika válasza Reggie hozzászólására (») Aug 27, 2011 /
 
A kód valószínűleg Mega8-ra lett írva, minden stimmel.
A ki-bemenetek definiálása, a fuse-bitek beállítása, stb... Azonnal elindult a Mega8-on.
Ha gondoljátok, hogy segít, csatolom az eredeti projectet az újságból.

Laci.
(#) Reggie válasza leglacika hozzászólására (») Aug 27, 2011 /
 
Az " OK!" es "get data" szovegek kiirasra kerulnek?

(Egyebbkent szerintem a kw1281.c -t megtartva sajat magad leprogramozod a megjelenitest, akkor hamarabb megleszel. Wikipedian fent van a leiras a regiszterekrol)
(#) Reggie válasza Reggie hozzászólására (») Aug 27, 2011 /
 
Sot itt is van egy jo leiras.
(#) leglacika válasza Reggie hozzászólására (») Aug 27, 2011 /
 
Igen kiírja az "O.K."-t és a "Get data..." -t.
Itt, a Get data után van az a bizonyos négy pont, ami a program 460. sorát jelenti.
Ezután kijelző törlés, majd egy nulla az alsó sor 20. helyén.
Ezután normálisan ki is tudok lépni ebből a funkcióból, tehát a program fut tovább.
Ismerem ezt a német oldalt, a protokoll kezelése innen származik. A cseh szerző simán beágyazta a projectjébe .
Laci.
(#) Reggie válasza leglacika hozzászólására (») Aug 28, 2011 /
 
Az also sor 20. helyen valoban erdekes az a nulla. Az 1. sor 20. helyere kerulhetne(437. sor), ha a mod_kw1281==1 es chyby==0.
Sajnos nehez kovetni, hogy az init utan mi tortenik, mert sok valtozo hatarozza meg az aktualis allapotot es van amelyik megszakitasbol is valtozik, raadasul egy vegtelen ciklusban van, ugyhogy lehet, hogy a sokadik futas utan kerul ki az a 0 es elotte meg sokminden megjelenik csak rogton letorlodik.

(Nekem mar csak 2146 byte-al log tul a leforditott kod. Szerintem ki kell venni a double valtozokat es fix pontos tortekkel kell helyettesiteni. Ugy sincs sok ertelme, maximum kenyelmesebb volt a program irojanak igy megirni.)
(#) Reggie hozzászólása Aug 28, 2011 /
 
Esetleg ha valakinek van tapasztalata AT32UC3L032-vel: egy olyan erdekes hibaba botlottam, hogy ha a userpage-be elhelyezek egy konstanst, akkor a uC megbolondul, allandoan resetel stb. Viszont ha csak a userpage-et torlom a programozoval akkor rendesen mukodik. Ha a konstansnak beallitom a used attributumot es a kodban sehol sem hivatkozok ra, valamint kikapcsolom a garbage collectort (ekkor bekerul a konstans a flash-be de sehol sem hasznalja a program), akkor is ez a hiba. Ha a valtozo erteket 0xFFFF-nek vagy akar 0x0000-nak adom meg, akkor is ez a hiba(annak ellenere, hogy az egyik biztos a flash alapallapota, azaz gyakorlatilag nem tortenik programozas).
Ha csak 1 bajtot helyezek el a userpage-ben, akkor viszont a bajt erteketol es hasznalatatol fuggetlenul jol mukodik minden.
Valakinek van otlete?
(#) leglacika válasza Reggie hozzászólására (») Aug 28, 2011 /
 
Szia !
Én is valami hasonló méretre emlékszem.
Már elég régen fordítottam, az utóbbi pár hétben a hardveres résszel voltam elfoglalva.
Te mivel fordítottad? Én egy VMLAB nevű free programmal.
Ha a "számba rágod" hogyan kell a double változókat fixpontos számokkal helyettesíteni, megcsinálom és kipróbálom...
Laci.
(#) krcko válasza leglacika hozzászólására (») Aug 28, 2011 /
 
Az a nulla a hibák számát jelenti amit az ECUból olvasot ki a program. Ha más számot ír ki, akkor annyi hiba van. Utána kiírja a hibák kódjait.
(#) Ricsi89 hozzászólása Aug 28, 2011 /
 
Sziasztok!
GSM modemmel szórakozok, sms küldés ami valamiért nem megy. Szerintem a gond a parancs kiküldéssel lehet. nem tudom, hogy kettős idézőjelet hogy rakjak, mivel ez nem tetszik a C fordítónak. Így kellene kinéznie a parancsnak, de erre hibát ír ki az avrstudio.
  1. const char ATCMGS_P[25]   = "AT+CMGS="+36301234567"";

Az a gond, hogy a parancs után idézőjelbe kell tenni a számot is, így összeakad a tömb értékadásával. Mit lehetne tenni?
(#) lokátoros válasza Ricsi89 hozzászólására (») Aug 28, 2011 /
 
Szia
Próbáld ki ezt: \"
vagy ezt: \0x22 (ez a " Ascii kódja hexában)
mindenhol a stringek belsejében a sima idézőjel helyett.
Ez a szekvencia más speciális karakterek esetén is alkalmazható.
(#) lokátoros válasza lokátoros hozzászólására (») Aug 28, 2011 /
 
Közben kipróbáltam egy HiTech PIC16 C forditóval is.
A hexadecimálisként megadott karaktert nem fogadta el. Az Ansi C specifikáció még csak oktális számot engedett meg itt. H a a szám 0-val kezdődik ez jelzi a forditónak hogy 8-as számrendszerben kell értelmeznie.
A \042 (34 dec.) szekvenciának minden compiler esetén működnie kell.
(#) Ricsi89 válasza lokátoros hozzászólására (») Aug 28, 2011 /
 
Köszi, most már nem szól érte a fordító. Már csak arra kell rájönnöm ,hogy ezen felül miért nem megy el az sms. Elvileg ennek a parancssornak működnie kellene, nem?
  1. UART_send_string("AT+CMGS = \"+36301234567\"") ;
  2.                 _delay_ms(100);
  3.                 UART_send_string("Hello, haliho!");
  4.                 USART_Transmit(0x1a);
  5.                 USART_Transmit(0x0d);

valamikor ilyen módon gépről, terminálban már sikerült küldenem egyszer sms-t. A lezáró karakterek után megnézem, hogy mit küld vissza a modem, kiíratom lcd-re és ott csak egy A és pár hülyeség jelenik meg.
(#) Ricsi89 válasza Ricsi89 hozzászólására (») Aug 28, 2011 /
 
Most pedig mindig errort kapok vissza.
Régebben, amikor még gépről próbáltam küldeni, akkor is volt error, de akkor azért, mert nem volt a kártyán pénz. Most viszont vodás előfizetéses kártyával sem megy és T-s feltöltőssel sem. Legalább valami normális hibaüzenet lenne.
(#) Reggie válasza leglacika hozzászólására (») Aug 28, 2011 /
 
Siman avr-gcc -vel forditottam -Os -fno-inline-functions -finline-functions-called-once -fno-inline-small-functions kapcsolokkal.
Az LcdStr(texte1) hivast atraktam egy parameterek nelkuli fuggvenybe, es ezzel a fuggvennyel helyettesitettem mindenhol, igy tovabbi 44byte-ot lehetett nyerni.
  1. LcdChr((cit_tim2<64 && mod_nast>3 && mod_nast<8) ? ' ' : 'I');
  2. LcdChr((cit_tim2<64 && mod_nast>7 && mod_nast<12) ? ' ' : 'I');

sorokra irtam egy fuggvenyt, ahol a mod_nast ellenorzesere az eltolast egy uint8_t valtozokent, a hamis eredmeny eseten kikuldo karaktert char valtozokent paremeterben kapja. Ezen 6 bajtot sporoltam.

Nehany valtozo teljesen feleslegesen volatile-kent volt deklaralva, de csak a main()-ben kerultek felhasznalasra. Ezeket atirtam static-ra.

Tobbet nem volt kedvem optimalizalni, mert kicsit hanyadek volt a kod formazasa(ez nem a te feltoltesed, az meg nem neztem meg), bar tegnap megformaztam, de meg nem volt kedvem neki esni

A fix pontos tortet ugy kell kezelni, hogy mondjuk minden tort szamot felszorzol 1000-rel es egeszre kerekited. Igy kiiraskor az x/1000 lesz az egesz resz, majd kiirsz egy pontot es utana x%1000 lesz a tort resz. A veluk vegzett muveleteknel csak a szorzasnal es osztasnal kell figyelni. Ket ilyen szam szorzasakor a szorzatot osztani kell 1000-rel, osztaskor az osztandot szorozni kell ezerrel. Ha egy valtozot (tort) konstanssal kell szorozni vagy osztani, akkor a konstanst celszeru szetbontani es atrendezni. Tehat x*0.12378 eseten, ha 3 decimalis tizedes jegyet tarolsz, akkor x*12378/100 -ra kell atirni. A tulcsordulasra fokozottan figyelni kell.
(#) leglacika válasza krcko hozzászólására (») Aug 28, 2011 /
 
Szia krcko !

Érdekes amit mondasz, erre még nem gondoltam...
Lehet, hogy végig tévúton jártam, és jól működik a program ?
Holnap generálok egy hibát, majd kiolvasom !
De akkor hogyan lehet belépni az élőadat lekérdező funkcióba...?
Esetleg bele tudnál még nézni a programba, hátha számodra egyértelmű lesz a dolog...
Az utolsó 50-100 sor tartalmazza ezt a kódrészt.
Ha valami "normális" nyelven lenne a szöveg, már lehet, hogy rég túl lenné(n)k az egészen.

Köszönöm a közreműködésed !

Laci.
(#) leglacika válasza Reggie hozzászólására (») Aug 28, 2011 /
 
Szia !

Köszönöm, hogy foglalkozol a dologgal !
Jó lenne, ha az eredeti kód beleférne végül a uC-be.
Közben krcko kolléga más oldalról közelítette meg a problémát. Lehet, hogy nincs is baj a módosított kóddal. Holnap teszek egy próbát a dolog ellenőrzésére.
Mindettől függetlenül az útmutatásod alapján megpróbálom optimalizálni az eredeti progit is, jó lenne ha minden funkció működne.

Üdv.: Laci.
(#) koncsik03 hozzászólása Aug 28, 2011 /
 
Helló!
A nyolc lábbal avr 4-edik részében topi attiny13-at használ.Azt szeretném kérdezni hogy attiny45-el is működne?
(#) Hurka válasza zombee hozzászólására (») Aug 28, 2011 /
 
Hali!
Köszönöm a hozzászólásodat, te is sokat segítettél. A HEstore-os adatlap sokkal bővebb, mint amivel én találkoztam a neten, és abban nem volt benne az írási/olvasási cím . Mostmár majdnem készen vannal a rutinok, úgyhogy bele is húzok...

Köszönöm Neked és TavIR kollégának is a segítséget!

Üdvözlettel: Hurka
(#) zombee válasza koncsik03 hozzászólására (») Aug 28, 2011 /
 
Elvileg igen. A tiny45 ugyanazokkal a perifériákkal (is) fel van szerelve, és a portok is ugyanott vannak.
(#) koncsik03 válasza zombee hozzászólására (») Aug 28, 2011 /
 
Kösz!
Következő: »»   355 / 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