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   105 / 840
(#) djhusi hozzászólása Feb 21, 2009 /
 
Szevasztok szép estét. A helyzet az, hogy van egy stk200-asom amit rákötöttem egy attiny45-re (HE-Kit Egyszerű Dallamcsengő) és fityisz mutat.
Még gtk írta hogy hangszóró nélkül Miso Mosi Sck Gnd-t kell rákötni... rá van kötve de nem csinál semmit.
Van rajta táp is, az össze láb a helyén, a kábel össz vissz 10 centi és rá is mértem tűtől-tűig működik. A kábel sincs fordítva mert a 4 Gnd láb a helyén van...
A PonyProg device not foundot ad vissza (test OK calibration OK), az AVRISP device not respondingot, az AVRDUDE meg simán megkért hogy ellenőrizzem a kábelt kétszer mert non responding van itt is...
Mindegyikszer olvasni próbáltam a chipet (próbaképp, előre be van programozva) de egyszer se jött össze.
Mindent kipróbáltam két gépen (egy laptop és egy asztali).
Az áramkör amúgy alapbeállításokkal működik csak neke ugye ez nem sokat ér. Már 40-szer végighallgattam a rózsaszín párduc zenéjét és kezd az agyamra menni.
Valaki adjon valami támpontot, hogy hol bökhettem el.
(#) tpeter hozzászólása Feb 21, 2009 /
 
Sziasztok!
Rotary enkódert szeretnék használni egy Tiny 2313-mal, és az alábbi kódot alkottam hozzá:
  1. ...
  2.  
  3. volatile int val = 128;
  4.  
  5. ISR(INT1_vect) {
  6.         if(PIND2) //enkóder másik lába itt
  7.                 val--;
  8.         else
  9.                 val++;
  10. }
  11.  
  12. int main(void) {
  13.         MCUCR = 0b00001100; // int1 felfutoélre triggerelve
  14.         GIMSK = 0b10000000;
  15.  
  16.         sei();
  17.  
  18.         //set portB to output
  19.         DDRB=0xFF;
  20.  
  21.         //set portD to input
  22.         DDRD=0x00;
  23.  
  24.         while (1) {
  25.                 PORTB=val;
  26.         }
  27.         return 0;
  28. }


Igazából elég érdekesen (sz@rul) működik. Sajnos hiába tekergetem az enkódert a "val" értéke mindig csak csökken, a tekerés irányától függetlenül. A kérdésem az, hogy hol lehet a hiba a kódban / elvben?

Leírom szavakkal is hogy mit kéne csinálnia:
-felfutó élre triggerelve Int1. A kezelő kódban megvizsgálom az enkóder másik lábát (PIND2-n). Ha "magas" akkor az egyik irányba van tekerve, ha "alacsony" akkor a másikba.

Van még egy nagyon érdekes dolog: Igazából csak minden második "kattanásra" reagál, továbbá ha izomból tekerem akkor a kimeneten néha nagyon furcsa értékek jelennek meg. Lassú tekerésnél nincs ez a gond. A kimenet amúgy egy LED soron látszik.

Valami ötlet?
Előre is köszönöm!
(#) Sir-Nyeteg hozzászólása Feb 22, 2009 /
 
Kettő kérdésecske:
1: nem tud valaki egy olyan oldalt, ahol összehasonlítják az AVR-eket, hogy mi van bennük, mivel rendelkeznek, stb? (PIC-nél láttam már pár ilyen táblázatot)

2: Szeretnék egy többszálú időzítőt, aminél ha megnyomom a gombot, akkor elkezd visszaszámolni, és ahányszor megnyomom, annyi szálon kezd egy új számlálást. Ha a a legkésőbb indított nullához ér, akkor riaszt, míg a többivel folytatja a számlálást, és azoknál is ugyanez lesz a riasztás módja. Nah most ezt vagy változókkal lehetne megoldani, vagy kellene bele kb 10 timer (emiatt vetődött fel első kérdésem is).
Ebben kérnék segítséget!
Köszönöm!
(#) Istike88 válasza Sir-Nyeteg hozzászólására (») Feb 22, 2009 /
 
Bővebben: Link

itt az első kérdésedre a válasz

üdv!
(#) ATtiny válasza Sir-Nyeteg hozzászólására (») Feb 22, 2009 /
 
Többszálú programozást AVR esetében elég bonyolult megoldani, de ha mindenképpen ilyesmire akarod adni a fejed, akkor vannak már kész megoldások erre. Keresgélj a googlen Keresés De amit te akarsz ahoz egyáltalán nem kell valódi több szálas programot írni. Kell egy Timer és ehez kell egy megszakítás. A megszakítás mondjuk 0.1Sec -enként hívódik meg. A megszakítás rutinban meg összesen anyi a feladat, hogy növelni kell egy változó értékét. Ha 16biteset használsz, akkor maximum 6553.5Sec -et képes mérni az időzítőd és a maximális pontossága 0.1 Sec. A főprogramban pedig ezt a változó értékét kell figyelni. Az már csak egy egyszerü kivonás, hogy visszafelé számoljon. És annak sincs semmilyen akadálya (vagyis csak az SRAM mérete az akadálya), hogy akár 20 szoftveres timert építsél erre a megoldásra.
(#) Sir-Nyeteg válasza Istike88 hozzászólására (») Feb 22, 2009 /
 
cockero: ez AVR & PIC összehasonlítás... Én AVR & AVR-re gondoltam, azaz pl az attiny2313-attiny45-atmega8-at lenne jó látni egy táblázaton belül.

ATtiny: igazad van! (Mint mindig!) Nekem elég a legegyszerűbb megoldás, pontosság meg akár plusz minusz 5mp is lehet. Munkahelyemre akarok a reflow kemence elé egy időzítőt, ami jelez, ha a berakott panel hamarosan jönne ki a túloldalon. Ha több panelt tennénk bele, akkor jó volna mindhez egy "riasztó", emiatt kéne a többszálas megoldás.
A timerben a túlcsordulás-újrakezdés jelentene számomra problémát. Esetleg ha 1mp-re venném az osztást, akkor 18 óráig is mehetne az időzítő, ami annyit jelentene, hogy naponta kellene nullázni a timert. Ez már megoldást jelentene. (2műszakban mennek a gépek, ez 16-17 órányi munka/nap)
Hmm, ez jó lehet!
(#) Istike88 válasza Sir-Nyeteg hozzászólására (») Feb 22, 2009 /
 
Akkor félre olvastam a hsz-od! Bocsi
(#) ATtiny válasza Sir-Nyeteg hozzászólására (») Feb 22, 2009 /
 
Most nem számolok utánna, de nagyságrendileg jók a számításaid. Azért azt hozzáteszem, hogy bár nem szerencsés, de megoldható 32bites változók használata is. Kicsit ugyan megszenved vele a 8bites AVR, de működik. És ha 1Sec-es alapjelet egy 32bites változóban tárolod, akkor 4294967295 Sec-et lehet mérni egyhuzamban. Ami 49710 Nap.
(#) Sir-Nyeteg válasza ATtiny hozzászólására (») Feb 22, 2009 /
 
Jaj, hát addig el sem tudok számolni Elég nekem egy 16bites is, és akkor atmega8-am van bőven itthon, és azzal a kijelzést is meg tudom oldani.
Köszi
(#) djhusi hozzászólása Feb 22, 2009 /
 
Ne haragudjatok hogy türelmetlenkedek, de valaki adna végre valami tanácsot az előző oldalon felvetett kérdésemre? Ma estére kész kéne legyek ezzel a szutyokkal. :no:
(#) tpeter válasza tpeter hozzászólására (») Feb 22, 2009 /
 
Sziasztok megint!

Annyi kiegészítés a #380193-hoz, hogy azért számolta csak minden másodikat mert nem érintkezett a legalsó LED , fel sem tűnt hogy legjobb esetben is csak 7 világít.

Viszont továbbra sem értem hogy miért csak az egyik irányra jó ez. Valami ötlet? A kód jónak tűnik egyáltalán?
(#) killbill válasza djhusi hozzászólására (») Feb 22, 2009 /
 
ISP programozáshoz nem kell a RESET jel is egész véletlenül???
(#) vzoole válasza Sir-Nyeteg hozzászólására (») Feb 22, 2009 /
 
Itt van eyg összehasonlító táblázat, igaz fotdítva.
Tehát nem az, hogy mibe mik vannak, hanem hogy mik melyik prociba vannak.

http://www.nongnu.org
(#) djhusi válasza killbill hozzászólására (») Feb 22, 2009 /
 
Atomász -.- ezért szívok három napja.
Idézet:
„A hangszorot nem kotod be , rendre MISO, MOSI, SCK, GND labakat rakotod az STK200-ra, tapot adsz neki es felprogramozod.”

így már megy köszi.
(#) killbill válasza djhusi hozzászólására (») Feb 22, 2009 /
 
Nincs mit! Az ilyen szivasok elkerulhetoek a felhasznalt eszkozok dokumentacioinak tanulmanyozasaval.
(#) gtk válasza tpeter hozzászólására (») Feb 22, 2009 /
 
Idézet:
„A kezelő kódban megvizsgálom az enkóder másik lábát (PIND2-n).”


Nem igazan.

  1. if( PIND & (1 << PIND2) )

(#) gtk válasza djhusi hozzászólására (») Feb 22, 2009 /
 
Ha mar visszaidezted;
Az nem egyertelmu, hogy ha az STKn van RESET, valahova kotni kell azt is??
(#) tpeter válasza gtk hozzászólására (») Feb 22, 2009 /
 
Köszi!

Megkérdezhetem hogy, hogy miért? Sajnos most még nem tudom kipróbálni...
Eddig már majdnem azt hittem hogy értem, leszámítva persze az apró bibit hogy működni nem nagyon akart
(#) gtk válasza tpeter hozzászólására (») Feb 22, 2009 /
 
PIND2 egy konstans ertek ami megmondja, hogy hanyadik bitrol van szo.
Ezzel elkeszul a maszk:
  1. (1 << PIND2) vagyis 0b00000100

PIND regiszterben figyeled az adott bitet:
  1. if( PIND & MASZK )

(#) tpeter válasza gtk hozzászólására (») Feb 22, 2009 /
 
igen, ezt értem.
Azt nem értem hogy miért nem jó az amit én akartam.

Vagy amit akartam az jó, csak nem úgy kell lekódolni hanem úgy ahogy mutattad?
(#) tpeter válasza tpeter hozzászólására (») Feb 22, 2009 /
 
ááá! leesett.
köszi! megnézem
(#) tpeter hozzászólása Feb 22, 2009 /
 
továbbra is enkóderes kérdés:
ez a pergésmentesítés mennyire jó? Persze mindkét INT lábra megcsináltam.
katt ide
(#) FElici hozzászólása Feb 22, 2009 /
 
Hi!
Előre is bocsesz, hogy ilyen kérdést teszek fel, de nem igazán találtam rá választ.
Már egy pár éve foglalkozok PIC-ekkel, először assembly-ben programoztam, majd áttértem C-re, de itt egy kicsit tököm tele lett Microchipékkel... no de mindegy, nem ez a lényeg, hanem hogy most szeretnék elkezdeni foglalkozni AVR-el, de egyből szeretnék valami jó programozót építeni. PIC-hez volt ICD2-m és ezzel egyenrangú AVR programozó kéne.
Olvastam Topi egyik cikkében, hogy van az AvrDragon. De ha jól látom, ez elsősorban nem "in circuit programozó".
Mit javasoltok? Mit lehet megépítni, ami tud rendesen debuggolni? (Nah igen, és mi az a JTAG?)
elpre köszi a segítségért, remélem majd én is tudok hamarosan jönni mint segítő erre a fórumra.
(#) Sir-Nyeteg hozzászólása Feb 22, 2009 /
 
Jáj nekem
Lehetséges, hogy a Topi féle AVR-ISP meghal?
Pl ha a miso-mosi-clk kimeneteket rövidre zárom programozás közben?
Azóta kicsinykét melegszik a benne levő atmega8... és sebességi hibára hivatkozik, hogy csökkentsem a írási sebességet.
Olyan rettentően ügyes vagyok
(#) FElici válasza Sir-Nyeteg hozzászólására (») Feb 22, 2009 /
 
Hmm... Topi féle ISP? Mindjárt utána is nézek. Köszi!
(#) Sir-Nyeteg válasza FElici hozzászólására (») Feb 22, 2009 /
 
(#) FElici válasza Sir-Nyeteg hozzászólására (») Feb 22, 2009 /
 
Üdv!
Végigolvastam a cikket, már csak egy kérdés maradt bennem. Ez tud debuggolni? (Programot pausolni, és regisztereket kiolvasni?)
Köszi!
(#) kiborg válasza FElici hozzászólására (») Feb 23, 2009 /
 
Hali!

Én ezt fogom kipróbálni.
VAn már egy JTAG-om, nem panaszkodok rá, lehet vele frankón lépésről lépésre debugolni.
Amióta kerestem hozzá egy mobiltelefonhoz való USB-soros átalakítót, nagyon megszerettem, mert nem kell külön tápfesz, mobil, USB általában minden gépen van elől is, stb,stb....

Üdv Kiborg

(#) gtk válasza tpeter hozzászólására (») Feb 23, 2009 /
 
Itt kulso felhuzo ellenallast hasznal. AVRnel bekapcsolhatod a belso felhuzo ellenallast, igy kulso nem kell.
A belso erteke sokkal nagyobb (100k koruli? pontosan nem tudom), igy 1-10 nf koruli kondival probalkozz. Amig nem probalod ki nem derul ki hogy mennyire mukodik.

(#) Paso hozzászólása Feb 23, 2009 /
 
Sziasztok !

TQFP Atmega8 -at használok, ha jól tudom alapból a belső órajelet használja.
Az én kapcsolásomban külső 11.059200 MHz kristály van beépítve, rákötve a 7 - 8 lábakra és kondin keresztül testre.
A kérdésem az lenne hogy mire állítsam a Bascomban a Fuse bitet , hogy a külső kvarcot használja rendesen ?

Most ezen áll

100001:Int. RC Osc. 1 MHz; Start-up time: 6 CK + 64 ms; [CKSEL=0001 SUT=10]; default value
Következő: »»   105 / 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