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   283 / 840
(#) Reggie válasza Ricsi89 hozzászólására (») Nov 23, 2010 /
 
Rosszul tudod. Az usb-soros konverter (kabel es nem IC) RS-232 szabvanynak megfelelo jelet ad ki, ami azt jelenti, hogy a magas szint -3V es -15V kozott, az alacsony szint +3 es +15V kozott van. Tehat kell a max232.
(#) Reggie válasza kovacsj hozzászólására (») Nov 23, 2010 /
 
Erdekes, azt a kodot az adatlap alapjan irtam es a nalam levo kijelzovel mukodik Lehet hogy az idozitesseknel van a problema. De mar latom, hogy sikerult egy libbel megoldanod.
Azert visszsakerem a masik kijelzomet es kiprobalom megint
(#) Tony válasza boomerang hozzászólására (») Nov 23, 2010 /
 
AVR-be még nem vagyok otthon most kezdem.
Ha cserélsz Kvarcot akkor is ugyanaz jön át, vagyis stabil a rezgő?
Esetleg néztél a neten olyat amit már teszteltek? Amúgy AVR nek küldhetnél valamit ha egyezik a betű akkor villan egy led.
->A gombon van késleltetés? Biztos hogy nincs megszakítás ami bezavar küldésnél? A bittek (darab, paritás, invertálás stb) protokollja rendben?
(#) chaos89 hozzászólása Nov 23, 2010 /
 
Sziasztok,

Van egy ATMEGA32 meg egy RS372A típusú RTC-m. a probléma az I2C. Csináltam egy egyszerű write ciklust, de sehogy sem akar működni. Nézegettem netes kódokat, de nem látok benne hibát.

Az alábbi kódban csak a legfontosabbakat hagytam. Van egy LCD is még, amire kiírok dolgokat.

A probléma:

A startbit rendben elmegy
az address-t is elküldöm, azonban utána egy TW_MT_NACK (0x20)-t kapok, azaz nem kapok acknowladge-t az adatküldésre. Úgy emlékszem hiba esetén nem kell stopbitet küldeni. Így mindenesetre érdekes, hogy az SCL és SDA vezetékek is 0-ban maradnak ezután végig,úgy hogy még startbitet sem tudok később küldeni. Ráadásul úgy vettem ki hogy a uC húzza földre le. Mégis kéne stopbit? kipróbáltam úgy is, de úgy sem ment. Mindig NACK-t kapok mindig. Próbálkoztam READ ciklus írásával is, de az sem ment. Változtattam az SCL frekvenciáját is, szinte már minden tartományban. Lehet hogy HW-rel van a baj? Maga az IC lábai ott és úgy vannak becsatlakozva, ahogy kell. Azonban lehet hogy a forrasztás során annyit szórakoztam az SSOP tokkal, hogy tönkrement az RTC-m?

hobbi2.c
    
(#) Langoler hozzászólása Nov 23, 2010 /
 
Sziasztok!

Tudtok olyan programról, ami az AVR C-t befordítja AVR assemblyre?
(#) trudnai válasza Langoler hozzászólására (») Nov 23, 2010 /
 
avr-gcc
(#) Reggie válasza trudnai hozzászólására (») Nov 23, 2010 /
 
Elviszed a konnyu kerdeseket
(#) kovacsj válasza Reggie hozzászólására (») Nov 23, 2010 /
 
Lehet, hogy csak én rontotam el valamit,de nem volt türelmem megkereseni a hibát. Ezzel a libbel elégedett vagyok, ám sokat segítettél te is, mert a te példádon keresztül értettem meg az egészet, így köszönöm szépen a segítséget!
(#) Reggie válasza kovacsj hozzászólására (») Nov 23, 2010 /
 
Engem az zavar, hogy nem megy amit irtam es nem merek arra megeskudni, hogy nem az en hibambol. De majd ellenorzom.
(#) trudnai válasza Reggie hozzászólására (») Nov 23, 2010 /
 
Pedig hagytam neked 40 percet, hogy megvalaszold
(#) BazsiBacsi hozzászólása Nov 23, 2010 /
 
Üdv!

Szeretnék egy kis segítséget kérni, ha lehetséges. Találtam egy kapcsolást, miszerint 2 BC547, és 5 darab 10kOhm ellenállás segítségével ISO9141-2 szabványú OBD-II diagnosztikát lehet ATmega8-hoz (12MHz kavccal) illeszteni soros kommunikáció segítségével C nyelven.

Források:
OBD illesztő
ISO9141-2 protokol (#2. hsz).

Ha jól veszem ki, akkor elősször létesíteni kell a kapcsolatot az OBD-vel:

0x33-at küldeni start bittel, stop bittel 5 baudon. Váltani 10400 baudra, majd várni a válaszra (55 08 08). Ezután küldeni 0xF7-et, melyre érkezik egy 0xCC válasz. Ezután már lehet küldeni a PID-eket (a lekérdezni szánt adatokat), és várni a válaszokat.

Nos tehát ahogy én elgondoltam. A fennt megjelölt illesztőt csatlakoztatom az m8 2-3-8 lábaihoz. Ezután a dokumentációban található USART mintaprogramot átírom 8N1-re. Először az USART_init()-et meghívom 5 bauddal, elküldöm a 0x33-at, majd USART_init() 10400 bauddal, és várom a választ. Ha jön 55 08 08, akkor küldöm a 0xF7-et, ha nem újrapróbálom. Ha 0xCC-t kapok, akkor küldöm a PID-et, amire kapom az értékeket.

Vagy a másik verzió, amin törtem a fejem, hogy az inicializáláshoz felhasználok egy másik portot (pl.: PD2/pin4, amit párhuzamosan kötök a TXD lábbal (nem tudom, kell így 1-1 dióda a PD1 és PD2 lábakhoz, vagy csak úgy simán összeköthetem?) és azzal megvalósítom a 0x33 elküldését start-stop bittel együtt (0 11001100 1, 200ms delay-ekkel), és utána USART_init(), várok, stb.

A következő dolog, ami még nem tiszta, hogy ugyebár az adatlapban lévő mintaprogramot át kell írnom, hogy a megfelelő módon fogadja az adatokat (az adatlapban unsigned char-ral tér vissza, de ugyebár nekem majd hexadecimális tömb kell). Azt szeretném még megkérdezni, hogy mi a hexadecimális változó neve C-ben (mint pl.: az előjeles egésznek int).

Üdvözlettel:
BazsiBácsi
(#) Reggie válasza BazsiBacsi hozzászólására (») Nov 23, 2010 /
 
Felesleges parhuzamosan kotnod ket portot, hiszen a port inicializalas nehany utasitassal megvan azaz nehanyszor 50ns. Addig tuti nem kapsz valaszt.

Olyan hogy hexadecimalis valtozo(mint ahogy binaris/decimalis/oktalist/stb), nincsen mivel az csak egy szamabrazolasi mod. Csak siman csinalj egy tombot unsigned char-bol es abba dobald be az erkezo adatokat es kesz, majd a tomb tartalmanak elemzesere kell csinalnod egy kodot.
(#) Tomi_Bp hozzászólása Nov 23, 2010 /
 
Sziasztok! Újból felmerült egy probléma! Van két változóm, amik közül most a teszt kedvéért az egyik (xx) állandóan 0 értéket vesz fel, a másik (yy) pedig -1 -től 1-ig 0.1-enként vesz fel értékeket és van egy if feltétel, mely szerint, ha yy < 0 ... inkább itt a kódrészlet:
  1. void azimuth_(int param1, char v)
  2. {
  3.  float tmp;      
  4.  tmp = (float) ( ( atan ( alfa) ) * 180 / M_PI );
  5.  if (v == 0)
  6.     azimuth = (float) param1 - tmp;
  7.   else
  8.     azimuth = (float) -1 * tmp;  
  9. }
  10.  
  11. ...
  12.  
  13. if( xx == 0 )            
  14. {
  15.     if( yy < 0 )         //Ha xx = 0 és yy < 0
  16.     {
  17.         azimuth = 90;    
  18.     }
  19.     if (yy > 0 )         //Ha xx = 0 és yy > 0
  20.     {
  21.         azimuth = 270;  
  22.     }
  23. }
  24. if( xx < 0 )             //Ha xx < 0
  25. {
  26.     azimuth_(180, 0);
  27. }
  28.  
  29. if( xx > 0 )
  30. {
  31.     if( yy < 0 )          //Ha xx > 0 és yy < 0
  32.     {
  33.         azimuth_(0,1);
  34.     }
  35.     if (yy > 0 )          //Ha xx > 0 és yy > 0
  36.     {
  37.         azimuth_(360,0);
  38.     }
  39. }

viszont azimuth nem 90 és 270 értékeket kap, hanem 7,856 és 24,464 értéket. Nem értem miért... Légyszi segítsetek! Előre is köszi!
(#) Tomi_Bp válasza Tomi_Bp hozzászólására (») Nov 23, 2010 /
 
Bocsika, megvan a hiba!
(#) Reggie válasza Tomi_Bp hozzászólására (») Nov 23, 2010 /
 
Kitalaljam? az yy==0 eset valahogy kifelejtodott es akkor az azimuth nem kap erteket, hanem bennemarad vmi szemet?
(#) BazsiBacsi válasza Reggie hozzászólására (») Nov 23, 2010 /
 
Köszönöm szépen, nagyjából kezd összeállni bennem a kép.

A következő dolog, amin most még töprengek, és keresek utána a neten:

Az ISO9141-2 a szabvány szerint 12 byte-on kommunikál.

Kérelemnél:
68 6A F1 (MODE) (PID) (CS)

Válasz:
48 6B 13 (MODE) (PID) (K1)...(Kn) (CS)

ugye ezek közül egyik sincs meg 12 byte. a végén van a checksum byte, azt majd valahogy számoltatni kell. A maradékot töltsem ki 00-kal?

Gondolom küldeni úgy kéne, hogy eltárolom ezt egy 12 elemű tömbben, for ciklussal kipörgetem, és minden iterációban egy USART_Transmit(); függvénnyel küldöm, fogadásnál meg egy tömtöt töltök fel, ugyanígy for ciklusban, és addig töltögetem, míg meg nem jön a 12 elem?

Soha nem programoztam még soros kommunikációt (pláne nem AVR-en), szal bevallom lövésem sincs, hogy hogy működne ez.

Üdv:
BazsiBácsi
(#) Robi98 válasza Reggie hozzászólására (») Nov 23, 2010 /
 
Sajnos sehogy se sikerült mert fájlcsatolásnál nem lehet BMP-t beilleszteni, ha pedig csak simán beillesztem a szövegtérbe akkor egyszerűen nem képes beilleszteni.
(#) Reggie válasza Robi98 hozzászólására (») Nov 23, 2010 /
 
PNG-t is tud menteni.
(#) Reggie válasza BazsiBacsi hozzászólására (») Nov 23, 2010 /
 
Talaltam neked egy jo leirast a kommunikaciorol: Bővebben: Link
Itt van wikipedias leiras is, ill itt talalsz tovabbi linket a kulonbozo PID-ekrol stb: Bővebben: Link

A vetelnel a keretszerkezetet kell detektalnod. FIX, hogy milyen karakterrel kezdodhet, illetve hogy mivel vegzodhet. A csomag hossza 12 byte-ban van korlatozva, de ennel rovidebb lehet.
(#) Robi98 válasza Reggie hozzászólására (») Nov 23, 2010 /
 
Köszi! A hiba megoldódott! A kódot sikeresen lefordította.Kiderült,hogy programhoz tartozó fájlokban is ki kellet javítani a hibát.
(#) Tomi_Bp válasza Reggie hozzászólására (») Nov 23, 2010 /
 
Neeem Reggie! A kiirtásnál szoroztam az értéket ezerrel, hogy látszódjon a tized, század, ezred és emiatt túlcsordult. a ~ -32ezertől +32ezerig tartó signed int-be nem fért bele a 90 000 és a 270 000
(#) Reggie válasza Tomi_Bp hozzászólására (») Nov 23, 2010 /
 
Jah, azt nem volt eselyem kitalalni
(#) Tony hozzászólása Nov 24, 2010 /
 
Sziasztok szeretnék egy kis segítséget kérni:
Van itt a HE oldalon egy villogó
Bővebben: Link
nos sikerült végre lefordítanom ATMega32u2 –re a C kódot, 16Mhz-re kérdéseim:
ha jól sejtem a hexa file nem tartalmaz semmilyen Fuse bit beállítást?
A make-el meglehet adni az STK500 programozót, az akkor állítja hozzá a Fuse biteket automatikusan(ezt még nem próbáltam meg hogy mi is a menete?).
Sajnos csak PIC-be vagyok otthon és az AVR-en nem akar villogni a PORTD-n. 5V-ot kap érdekes a HWBE láb ad kifele 5V-ot. Kell itt inicializálni hogy ki a kimenet és bemenet?
Nem emlékszem de azt hiszem így van a fuse bealítva

Bővebben: Link
Low: 5E High: D9 Extend: talán F6 majd este megnézem csak nyugtalanít.

Még egy kérdés menyire érzékeny az AVR ha pl HWBE-et a GND-vel rövidre zárom met a PIC sok mindent kibírt nálam.
(#) vadkacsas hozzászólása Nov 24, 2010 /
 
Sziasztok ! Szeretnék segítséget kérni :
ATMEGA8 áramkörrel szeretnék megépíteni egy áramkört, de nem tudom mivel lehetne felprogramozni. A HEX állomány meg lenne, de mivel imátkozzam bele a dobozba ?
Eddig amit találtam, az minden az LPT portot használta, a gépemen meg sajnos nincs. Bővítőkártyát sem tudtam szerezni az üzletben, szerintük az már elevult sz... .
PIC et minden gond nélkül programozom PICKIT 2 vel, de az AVR talány .
Előre is köszönöm ! :puszis:
István
(#) zacc hozzászólása Nov 24, 2010 /
 
Hello.
Atmega16 SMD-t használok az lenne a kérdésem hogy, az összes vcc-t és gnd-t be kell e kötni? Vagy elég csak egyet használni? Egy vcc-láb el birja a terhelest vagy nem ?
kösz.
Üdv zacc.
(#) Reggie válasza Tony hozzászólására (») Nov 24, 2010 /
 
Tiltsad le a JTAG-et (JTAGEN), valoszinuleg azert nem villog, mert nincs letiltva es ekkor ez az alternativ funkcio el folyamatosan.
Amugy a HEX fajlok nem tartalmaznak fuse biteket, a coff vagy elf allomanyok tartalmazhatnak.
(#) Reggie válasza vadkacsas hozzászólására (») Nov 24, 2010 /
 
Programozo 1: Bővebben: Link
Programozo 2: Bővebben: Link
(#) Reggie válasza zacc hozzászólására (») Nov 24, 2010 /
 
Osszeset be kell.
(#) Ricsi89 válasza vadkacsas hozzászólására (») Nov 24, 2010 /
 
Mintha valahol lett volna róla szó, hogy lehet Pk2-vel is avr-t programozni valamilyen módon. Keresgélj, mert tuti volt róla szó valamelyik témában.
(#) Tony válasza Reggie hozzászólására (») Nov 24, 2010 /
 
hát a Webes fuse állítón nem látok JTAGEN -t otthon megnézem mit olvas / ajánl az AVRStudio.
Következő: »»   283 / 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