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   285 / 840
(#) Reggie válasza boomerang hozzászólására (») Nov 26, 2010 /
 
Akkor mar csak szoftveres problema lehet. Ellenorizd, hogy jo orajelrol jar-e az ic, a clkdiv8 fuse ki van-e kapcsolva. Ha ezek is rendben vannak, akkor mar csak a koddal lehet gond. Ha esetleg nem bizol az ic-ben akkor rakj be helyette egy ujat, de szerintem nem ez lessz a gond.
(#) Suncorgo hozzászólása Nov 26, 2010 /
 
Sziasztok!

Az lenne a kérdésem ha az Atmega8 Timer2-jét fast PWM módba állítom akkor megy a tulcsordulás megszakítás is?

Üdvözlettel:
Suncorgo
(#) zsuscsinyo válasza Suncorgo hozzászólására (») Nov 27, 2010 /
 
Elvileg mennie kell.
(#) boomerang válasza Reggie hozzászólására (») Nov 27, 2010 /
 
Lehet hogy hülye kérdés, de az adatirány regiszterben az uC Rx lábát bemenetként, a Tx lábat kimenetként kell beállítani ugye ? Én így csináltam...
(#) boomerang válasza Reggie hozzászólására (») Nov 27, 2010 /
 
NAH végre működik ! Baud rate-t kellett levinni nagyon alacsonyra (2400). Nem is gondoltam hogy ilyen kicsi érték kell hozzá. Köszönöm a segítségedet, üdv.
(#) Reggie válasza boomerang hozzászólására (») Nov 27, 2010 /
 
Az erdekes. Nekem FTDI-vel 230400 baudig menni szokott.
(#) Robi98 hozzászólása Nov 28, 2010 /
 
Sziasztok!
Sajnos ( mivel még csak kezdő vagyok) nem sokat tudok a programozók fajtájáról.
Nemtudom ,hogy melyiknek mi a hátránya,előnye.
Például
avr dragon,
avr jtag,
avr doper: HID mód,CDC mód,
MK(kettő) (nem találtam római számokat a billentyűzeten ),
avr jtag ice,
STK 500,
STK 200,
avr simulator,
STK 500 v2
és még rengeteg programozófajtát nem ismerek ,legaláb is,hogy mi köztük a különbség.


Előre is köszi!
(#) kovacsj hozzászólása Nov 29, 2010 /
 
Sziasztok!

LCD-re szeretnék kiíratni float vagy double számot!

A kiírató függvény LCDstring(uint8_t* data, uint8_t byte) alakban várja a paramétereket.

Hogyan tudnám átalakítani egy analóg bemenet értékét, hogy itt megjelenjen? A jelenlegi fordítási hibaüzenet 'LCDstring' differ in signedness. Amikor a függvényt átírtam LCDstring(char* data, uint8_t byte) -ra , akkor ez megszűnt, de a kijelzőn ugyanúgy csak egy kérdőjel jelenik meg, mint amikor nem volt átírva.

  1. char buffer[10];
  2. int16_t eredmeny;
  3. double volt;
  4.  
  5. eredmeny =convertanalog(0);
  6. volt = (eredmeny/1024)*5;
  7.  
  8. sprintf(buffer,"%2f",volt);
  9.  
  10. LCDGotoXY(1,1);
  11. LCDstring(buffer,strlen(buffer));


Ez az a kód ami csak kérdőjelet eredményez.
Ha az eredmenyt akarom kiíratni itoa(eredmeny,buffer,10) után szépen kiíródik, de nem ezt szeretném, hanem a tizedes tört alakot!

Előre is nagyon köszönöm a segítséget!
(#) gtk válasza kovacsj hozzászólására (») Nov 29, 2010 /
 
A lebegopontossal vigyazni kell. 1. sok helyet foglal. 2 . nincs beforditva alapbol az sprintf-be a lebegopontos tamogatas.
(#) kovacsj válasza gtk hozzászólására (») Nov 29, 2010 /
 
És akkor mit tudok tenni?
Most eljutottam odáig, hogy egy 0.00 megjelenik, de nincs értéke.
Miközben az alatta kijelzett itoa(eredmeny,buffer2,10) értéke most éppen 536, aminek éppen 2,61 voltot kellene jelenteni.
(#) gtk válasza kovacsj hozzászólására (») Nov 29, 2010 /
 
Hat kellene kovetkezzen, hogy meg kell keresni az avr-libc dokumentaciojaban pl. hogy milyen libraryt kell beforditani az sprintf-hez. Vagy egesz szamokkal dolgozni, majd a vegen felbontani.
(#) kovacsj válasza gtk hozzászólására (») Nov 29, 2010 /
 
-Wl,-u,vfprintf -lprintf_min
Ennyit találtam. Erre gondolsz?
Az előbb már volt 0.00 de azt is elveszítettem. A volt nem adott értéket. Azt hiszem, kezdem elölről.

Ezt : -Wl,-u,vfprintf -lprintf_min hová kell beilleszteni? Compiler vagy linker opció?
Mert nekem volt már mindkettőben is, mégsem reklamált.

Ja, AVR Studio 4.
(#) gtk válasza kovacsj hozzászólására (») Nov 29, 2010 /
 
Valami olyasmi, pontosan nem tudom a lib nevet.Bővebben: Link
(#) kovacsj válasza gtk hozzászólására (») Nov 29, 2010 /
 
Innen vettem én is az ötletet.
Eddig még a legjobb eredmény a 0.00.
Hogyan lehetne ennek pontosabb értéket adni?
Most kiírja a felső sorban a 0.00-t alatta pedig az 536-ot.
Az első a volt a második az eredmeny értéke. A kettőnek összhangban kellene lennie!
(#) kovacsj válasza kovacsj hozzászólására (») Nov 29, 2010 /
 
Megküzdöttem vele.
Ez kell a linker opciókhoz: -Wl,-u,vfprintf -lprintf_min .
A libm.a és a libprint_flt.a fájlokat pedig hozzá kellett adni a "Link with These Objects"-hez a projekt opcióknál.

Aztán nem utolsósorban így kellett módosítani a kódot:
  1. volt = (float)eredmeny/1024;
  2. volt = (float)volt*5;


És innen már tizedes törtet ír. Csak valóban nagynak tűnik a kód, így írhatom az integeres felbontását máris.

Jut eszembe, az adatlap szerint 1024-gyel kell osztani, máshol meg 1023-at láttam. Melyik az igaz? És nem pontos a mérésem sem, van vagy három tized eltérés.
Ez mitől lehet?
(#) Robi98 válasza Ricsi89 hozzászólására (») Nov 29, 2010 /
 
A gond az volt ,hogy akármilyen ISP frekvrenciát adtam meg mindig kiírta,hogy az órajel 1/4-ed részénél kisebbnek kell lenni,pedig kisebb volt.Az ISP freki :115,2 Khz,az órajel 1Mhz volt.És sajnos még így is kiírta. :no:
(#) Riccsusz hozzászólása Nov 29, 2010 /
 
Sziasztok!

Egy egyszerű kérdésre keresek választ. Az Mjoy16 nevezetű projectben szereplő USB-s joystickot szeretném megépíteni. Amely ATmega16 -16PI AVR-t használ. Sehol nem találtam megegyező típust. A kérdés az lenne, hogy esetleg tudjátok-e hol tudnám beszerezni vagy ha nem lehetséges akkor helyettesíthető-e valamivel ? Előre is köszönöm válaszotok.
(#) Reggie válasza Riccsusz hozzászólására (») Nov 30, 2010 /
 
mega16-16PI nincsen csak PU vegu. Valoszinuleg erre gondoltak, de attervezheted AU vegure is (annyi a kulonbseg, hogy TQFP a tokozas es nem DIP). Megfelelo helyettesito meg a mega16A-PU(/AU) is. Realis bolti ara ezeknek kb 1000 Ft.
(#) Fish hozzászólása Nov 30, 2010 /
 
Sziasztok!

Kísérletezek AVR-el, egész jól megy, most már tudok küldeni karaktereket az AVRnek soros porton, Hála üldözze Fizikus-t örök hála érte. De vajon hogy lehet neki sztringet küldeni? Ilyenkor a záró karakter az ENTER kódja, és a feltolgozást akkor kell elkezdeni amikor megkapja ezt a karaktert? Vagy hogyan kezdjek hozzá? Köszönöm a segítségeteket
(#) Riccsusz válasza Reggie hozzászólására (») Nov 30, 2010 /
 
Köszönöm válaszod. Ha lesz időm megnézem a két adatlapot és meglátom mire jutok. Ha akadna probléma írok.
(#) Reggie válasza Fish hozzászólására (») Nov 30, 2010 /
 
Igen, igy celszeru. A buffertulcsordulasra figyelj.
(#) Tomi_Bp hozzászólása Nov 30, 2010 /
 
Sziasztok! Hogy tudnem ezt a void-ot úgy megcsinálni, hogy String-et tudjak küldeni uart-on
  1. void UARTKuldSTR( ??? )
  2. {
  3. //char msg[] = "teszt uzenet";
  4. int i;
  5. for(i = 0; msg[i]; i++)
  6. UARTAdatKuld(msg[i]);
  7. }
  8.  
  9. ...
  10.  
  11. UARTKuldSTR("a küldeni kívánt szöveg (string)");

Tehát mit írjak void UARTKuldSTR( ide ) ? Estleg azt, hogy void UARTKuldSTR( char msg[] ) ? Előre is köszi!
(#) Tomi_Bp hozzászólása Nov 30, 2010 /
 
Megoldottam! Köszi
(#) gtk válasza Tomi_Bp hozzászólására (») Dec 1, 2010 /
 
Eloszor kerdezel, aztan gondolkodsz
(#) Fizikus válasza Tomi_Bp hozzászólására (») Dec 1, 2010 /
 
Azert a megoldast ide is kirakhatnad, hatha mast is erdekel (pl engem szemely szerint igen).
(#) Fizikus válasza Reggie hozzászólására (») Dec 1, 2010 /
 
Ha nem nagy keres, ezt picit reszletesebben is kifejthetned.
Probaltam fejleszteni egy soros LCD vezerlopanelt, es ott akadtam el, hogy hogyan fogadjak szoveget UART-on, hogyan buffereljem, meddig olvassam be a karaktereket, utana ezekben hogyan keressek adott karaktereket/szamokat, hogyan valasszam szet a kiirando szoveget az LCD parancsoktol stb..
A C tudasom ehez keves.
Ezert inkabb (szamomra) erdekesebb projectekbe keztem...
(#) gtk válasza Fizikus hozzászólására (») Dec 1, 2010 /
 
Szerintem:
  1. void UARTKuldSTR(unsigned char *msg ){/*...*/}
(#) Fizikus válasza gtk hozzászólására (») Dec 1, 2010 /
 
Kozben rajottem, hogy en is hasznaltam mar egy hasonlot az egyik kodomban:
  1. void UARTSzovegKuld( char *p)
  2. {
  3.            while(*p)
  4.            {
  5.              UARTAdatKuld( *p++);
  6.            }
  7. }

De maig nem vilagos hogy a C-ben mit jelent a *p, es hogyan tortenik a karakterek indexelese (miert eppen *p++ ?)
Ha valaki tud valamilyen jo weboldalt/irodalmat stb, ahol ez erthetoen (lehetoleg peldakkal) le van irva, azt megkoszonnem
(#) huba válasza Fizikus hozzászólására (») Dec 1, 2010 /
 
A char *p deklarálás p-ből char-ra mutató memóriacímet deklarál. ha *p-t írunk a programban akkor megkapjuk azon a címen szereplő karaktert. Ha a következöt akarjuk megkapni, akkor növeljük a p-t. *(p++).

Viszont a p kezdöcimű karaktertömbként is kezeli a C. tehát p[0] a tömb elsö eleme és megfelel *p-nek. p[1] a tömb második eleme és megfelel jelen esetben *(p+1)-nek. Ha a tömb elemei nagyobbak pl 2byte akkor értelemszerűen hosszabbat kell lépni a következő elemig.

Továbbá ha van egy c karakterünk és annak meg akarjuk tudni a memóriacímét akkor használjuk az & jelet p=&c. így *p a c karaktert fogja adni.

Kicsit megkavartam. Remélem valamennyire érhető.
(#) huba válasza huba hozzászólására (») Dec 1, 2010 /
 
Akkor kicsit a karakterláncokról. A karakterláncok valójában char típusú tömbök. A tömb minden eleme egy egy karakter. A karakterlánc végét a karakterlánc lezáró karakter jelzi '\0'.
A karaktertömbünk mindig egy elemmel hosszabb kell legyen mint a valós karakterlánc, hogy legyen hely a karakterlánc vég jelző karakternek.
  1. char s[10];  //10 elemü karaktertömb, max 9 karaktert lehet tárolni
  2.  
  3. //pl
  4. s="123456789";///igy az idezojeles megfeleltetes miatt magatol beteszi a sorvegjelzo karaktert maskulonben manualisan kell beszurjuk
  5.  
  6. s[0]='a';
  7. s[1]='l';
  8. s[2]='m';
  9. s[3]='a';
  10. s[4]='\0';
Következő: »»   285 / 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