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   630 / 837
(#) Suncorgo válasza Suncorgo hozzászólására (») Nov 25, 2014 /
 
Közben megleltem a választ és INT2 lábat is.

INT2 aszinkron külső megszakítás bemenet. Minden sleep módban az IOclock leáll így INT1 és INT0 nem kerül olvasásra. Viszont amit észrevettem és eddig megszakításoknál nem találkoztam ilyesmivel de, még csak az AVR doksijában sincs az az hogy ha ISR függvénye nincs megírva (akár üresen is) a programba akkor a proci INT2 megszakításra újraindul mint ha reset lett volna.
A hozzászólás módosítva: Nov 25, 2014
(#) csabeszq hozzászólása Nov 26, 2014 / 1
 
Érdekességként: programból ki lehet olvasni a chip fuse +lock bitjeit (Atmega328P)

A következő függvény a lo + hi fuse biteket adja vissza:

  1. uint16_t action_read_fuses()
  2. {
  3.   uint16_t result = 0;
  4.  
  5.   uint8_t sreg = SREG;
  6.   uint8_t tmp1, tmp2 = (1 << BLBSET) | (1 << SELFPRGEN);
  7.   asm volatile ("cli                   \n\t"
  8.                 "mov r30, r1           \n\t"
  9.                 "mov r31, r1           \n\t"
  10.                 "in  %[tmp1], %[spmcsr]\n\t"
  11.                 "or  %[tmp1], %[tmp2]  \n\t"
  12.                 "out %[spmcsr], %[tmp1]\n\t"
  13.                 "lpm %A[res], Z        \n\t"
  14.                 "ldi r30, 3            \n\t"
  15.                 "out %[spmcsr], %[tmp1]\n\t"
  16.                 "lpm %B[res], Z        \n\t"
  17.   : [tmp1]       "=r" (tmp1),
  18.     [res]        "=r" (result)
  19.   : [spmcsr]     "I" (_SFR_IO_ADDR(SPMCSR)),
  20.     [tmp2]       "r" (tmp2)
  21.   );
  22.   SREG = sreg;
  23.   return result;
  24. }
A hozzászólás módosítva: Nov 26, 2014
(#) TavIR-AVR válasza csabeszq hozzászólására (») Nov 26, 2014 /
 
LPM helyett SPM-et használva írni is lehet?
(#) csabeszq válasza TavIR-AVR hozzászólására (») Nov 26, 2014 /
 
Csak a lock biteket. Legalábbis a specifikáció ezt írja.
(#) Suncorgo hozzászólása Nov 26, 2014 /
 
Hogyan tudok AVR studio 6 alatt egy mikrovezérlőről letöltött EEPROM tartalmat szerkeszteni?
Mert ha csak a *.eep fájlt hozzáadom a projecthez és megnyitom a studioval akkor úgy jön be mint egy szövegszerkesztőben.
A hozzászólás módosítva: Nov 26, 2014
(#) rolandgw hozzászólása Nov 27, 2014 /
 
Mi a legcélszerűbb megoldás C-ben,ha egy függvénynek több visszatérési értéket szeretnék?
Cím szerinti átadás,struktúra,tömb?
(#) csabeszq válasza rolandgw hozzászólására (») Nov 27, 2014 /
 
Attól függ:
- ha az átadott értékek szervesen összetartoznak: struktúra (ilyen például a név-cím-telefonszám esete, egy telefonbejegyzés különböző mezői)
- tömböt kizárólag akkor, ha ugyanabból a dologból (nevek) többet adsz vissza.
- totál különböző dolgokat külön függvénnyel adj vissza: szabad memória méretét és telefonbejegyzések számát
- két visszatérési értékre ritkán van szükség, ha jól programozol. Ilyenkor cím szerinti átadás kell.

Ami a legfontosabb: akár milyen kis vacak egy mikrokontroller, mindig próbáld logikailag tisztán tartani a kódot, hogy 2-3 év után is ránézésre megértsd, hogy mit csinál. Ha a telefonszámot akarod tudni, akkor ne tömb[2]-t írj, mert abból ki nem fog derülni 3 év múlva, hogy mit csinál.
(#) rolandgw válasza csabeszq hozzászólására (») Nov 27, 2014 /
 
Konkrétan 3 sorba kötött HC 589-ből olvasok értéket,de nincs még fordítható állapotban a teljes program,nem tudom megnézni melyik a legoptimálisabb megoldás,legkisebb fordított kód.Egyben gondoltam kezelni,mert más is van az SPI-n.
(#) Droot hozzászólása Nov 27, 2014 /
 
Sziasztok!

Az AVR ISP mkII-met fogta a gépem és egyszercsak nem telepítette fel a driver-t. (Újra lett telepítve.)
Ha bedugom megkerese a jungo drivert a windows update webhelyen majd telepítéskor azt írja ki hogy sikertelen.
Eszközkezelőben felismeri, hogy AVR ISP mkII, egy felkiáltójel van az ikonja mellett.
Megnyitva ezt a hibát írja ki:
"Az eszköz nincs megfelelően konfigurálva. (Kód: 1)

Az INF-fájl szolgáltatástelepítési szakasza érvénytelen.


Az eszköz illesztőprogramjának megkereséséhez kattintson a Frissítés gombra."

Másik gépre duga másik kábellel ugyan ez a helyzet. Ez a második programozóm ami meghalt!

Esetleg van valamilyen ötletetek, hogyan lehetne bele életet lehelni?
PDIUSB12 chip van benne, szerintem csak ezzel van gond, mert ha az ISP csatit bedugom egy panelba akkor zölden világít, ha lehúzom pirosan, úgy gondolom hogy a bennelévő mikrokontroller agya ép.

Kipróbáltam a libusb driver-t is (csak a drivert raktam fel) az felment és felismerte, azt írta hogy rendben van. Ez a driver nem tudom mihez jó, talán avrdude? Viszont az usb csatija melletti zöld lednek kéne világítani ha rá van dugva a gépre, na ez nem világított.
A hozzászólás módosítva: Nov 27, 2014
(#) kapu48 válasza Droot hozzászólására (») Nov 28, 2014 /
 
Az újabb FTDI driverek már kiszűrik a klón gyártmányokat és nem működnek velük!

Ezért a klón HW-val rendelkező olcsó kínai cucoshoz nem szabad frissíteni, vagy lekel gyalulni és vissza rakni a régi drivert, vagy megkeresni az adott gyártó saját driverét.
(#) rolandgw hozzászólása Nov 28, 2014 /
 
Üdv! Jó ez a bcd átalakítás (0..99)így ,vagy máshol kell keresnem a hibát a programban ? Kösz !
  1. unsigned char  pos_digit[2];
  2. .
  3. BinToBcd(pos_digit,position);
  4. .
  5. void BintoBcd(unsigned char *s,unsigned char bin){
  6.         unsigned char c=0;
  7.         *s=0;
  8.         *(s+1)=0;
  9.         while(bin=>10){
  10.         bin-=10;
  11.         ++c
  12.         }
  13.         *s=c;
  14.         *(s+1)=bin;
  15. }
(#) Droot válasza kapu48 hozzászólására (») Nov 28, 2014 /
 
A pdiusbd12-höz nem találtam drivert, eddig mindig ment az avr studio jungo driverrel. Semmi gond nem volt.
(#) killbill válasza rolandgw hozzászólására (») Nov 29, 2014 /
 
Szia!
Elvileg jo A 7. es 8. sor felesleges. De van valami oka annak, hogy egy ciklusban osztasz tizzel?
Igy egyszerubb a forras:
  1. void BinToBcd(unsigned char *s, unsigned char bin)
  2. {
  3.   s[0] = bin / 10;
  4.   s[1] = bin % 10;
  5. }
(#) rolandgw válasza killbill hozzászólására (») Nov 29, 2014 /
 
Kösz,ez tényleg elegáns ! Pár, asm-ben írt programomat próbálom átírni C nyelvre,azért ez a "dadogás"
(#) lajtosali hozzászólása Nov 29, 2014 /
 
Sziasztok!Szeretnék segítséget kérni ATmega128 programozásához.Aki egy kicsit komolyabban benne van a témában az fel tudná velem venni a kapcsolatot?(nagyon kezdő tudással rendelkezem).A segítség témája:menü létrehozása,érték beállíthatósága.E-mail en bármikor elérhető vagyok.Köszi a segítséget!
(#) Primary hozzászólása Nov 30, 2014 /
 
Milyen megoldással lehet AVR-rel a legolcsóbban vezeték nélkül kommunikálni?
1-2 bájtot kellene átküldenem egy irányban pár percenként. Tizenmétert kellene áthidalni téglafalakon keresztül.
Kényelmesebb lenne vezeték nélkül, ráadásul tanulnék is belőle.
Hőmérsékletet, meg egy-két logikai állapotot kellene begyűjteni néhány mérőhelyről.
(#) killbill válasza Primary hozzászólására (») Nov 30, 2014 /
 
A ChipCad-nel lehet kapni HopeRf radios modulokat 433 meg 868 MHz-re. Van sokfele, biztos talalsz benne neked megfelelot. Nem tudom, hogy mennyire legolcsobban gondolod, de ezekkel a modulokkal legalabb jogszeruen jarsz el. Ezek szabad frekvenciasavokban mennek.
(#) Primary válasza killbill hozzászólására (») Nov 30, 2014 /
 
Köszi!
Van választék bőven.
Ebay-en nézelődtem eddig, de a ChipCad-nél sem annyival drágább.
Bővebben: Link
Bővebben: Link

valamiért nem tudtam linket beszúrni
A hozzászólás módosítva: Dec 1, 2014
(#) rasty hozzászólása Dec 2, 2014 /
 
Sziasztok.
Attiny 45-tel akarok kísérletezni és az lenne a kérdésem, hogy a "PB5" ami a "RESET" láb, azt is ugyanúgy lehet használni ki és bemenetnek mint például a "PB0" lábat.
(#) gabi20 válasza rasty hozzászólására (») Dec 2, 2014 /
 
Szia igen, a fuse biteknél lehet beállítani a RESET láb funkcióját. De ha ISP programozód van akkor szükséged lesz a RESET bemenetre, mert másképp nem tudod átprogramozni a processzort.
(#) rasty válasza gabi20 hozzászólására (») Dec 2, 2014 /
 
Köszi, így már világos.
(#) rolandgw hozzászólása Dec 2, 2014 /
 
Egy kezdő kérdésem lenne,van egy függvény, ami így van deklarálva:
  1. void lcd_puts( void *s );

a hívás így néz ki:
  1. lcd_puts( "Valami " );

A string nincs sehol megadva,definiálva. Ez esetben a flash-be kerül fordításnál és a memóriába másolja a fordított program,majd onnan kerül kiolvasásra ?
(#) killbill válasza rolandgw hozzászólására (») Dec 2, 2014 /
 
Igen.
(#) rolandgw válasza killbill hozzászólására (») Dec 2, 2014 /
 
Köszi !
(#) rolandgw hozzászólása Dec 3, 2014 /
 
Ajánlott a __flash használata a pgmspace.h helyett ?A hivatalos oldalon nem találom dokumentálva,más helyeken viszont igen.
(#) csabeszq válasza rolandgw hozzászólására (») Dec 3, 2014 /
 
Mi a baj a pgmspace.h-val? A legtöbb program ezt használja, __flash-t sehol sem láttam idáig.
A hozzászólás módosítva: Dec 3, 2014
(#) csabeszq válasza csabeszq hozzászólására (») Dec 3, 2014 /
 
Röviden beleolvastam, hogy mi az a __flash.

GCC alatt PROGMEM-et használnak, IAR fordító alatt __flash-t. Egyik sem szabványos, gondolom szórakozhatsz vele míg IAR-ról AVR-GCC-re portolsz egy programot.

Itt rengetegen avr-gcc-t haszálunk, ezért tűnt a __flash kínainak.
(#) rolandgw válasza csabeszq hozzászólására (») Dec 3, 2014 /
 
(#) Koleus hozzászólása Dec 4, 2014 /
 
Sziasztok.

Nemrég kezdtem az AVR-rel és C-vel foglalkozni. Alapjában PLC-ket programozok, meg frekiváltókat. Eldöntöttem, hogy tanulóprojekt gyanánt összedobok egy saját PLC-t, aminek a lelke m16@16MHz. Az elképzelésem az, hogy a projektet kb. 3 C file-ra bontom:
-main.c (itt van a keret, interrupt rutinuk, fizikai IO írás, stb)
-func.c (klasszikus PLC függvények, Timer, Counter, stb)
-app.c (ez lenne maga az aplikáció, két függvénnyel -setup() és core(), hasonlóan mint az Arduino)

Kicsit elakadtam a globális változókkal, mert nem történik meg az értékátadás a függvények között.

Létrehoztam egy saját tipust:

  1. typedef struct {
  2.         char EN,Q;
  3.         int PV,EV,MOD;
  4. }TIMER;


meg egy időzítő függvényt: void tim(TIMER time)

Deklaráltam egy változót TIMER T0 = {0,0,2000,0,0}

A tim(T0) híváskor, a függvény nem ad vissza semmit. Ezután a függvényt átdeklaráltam TIMER tipusra, és T0 = tim(T0) hívtam. Ez már működött.
Milyen jó megoldásokat tudtok javasolni globális változók deklarálására/írására/olvasására, ami bombabiztos.
Atmel Studio 6.2 használok...
(#) Jaedong válasza Koleus hozzászólására (») Dec 4, 2014 /
 
Szia!
A probléma azzal volt, hogy c függvényeknél minden paraméternél értéket ad át/másol, (és nem referenciát). Ezt úgy képzeld el, hogy amikor a tim függvényednek megadtad a Timer time paraméterként a T0-át, akkor az szépen létrehozott egy másik Timert átmásolta oda a T0-át, és a függvényen belül a másolaton dolgozott, majd amikor a függvény végére ért, akkor szépen "ki is törölte" a másolatot. Ezt úgy tudod kiküszöbölni, hogy a struktúrád memória címét másolod át, amin keresztül hivatkozol majd a példányodra:
  1. void tim(Timer *time){
  2. time->Q = 'A'; // amikor egy struktúra mutató  valamely tagjárak szeretnél hivatkozni, akkor -> at kell használni pont helyett!!
  3. }
  4. ...
  5. TIMER T0 = {0,0,2000,0,0};
  6. tim(&T0); // & operátorral a T0 címét adod át
  7. ...

Remélem valamennyire érthető a válaszom, ajánlom figyelmedbe valami C-s könyv vagy legalább valami hosszabb tutoriál elolvasását, mivel sajnos olyan hibákat lehet ejteni programozás közben (főleg ha nem vagyunk tisztában alapvető dolgokkal), amiket később baromi nehéz megtalálni (főleg egy nagyobb projektben).
Következő: »»   630 / 837
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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