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   396 / 840
(#) Kafka válasza 06smici hozzászólására (») Jan 1, 2012 /
 
Hány szubrutint szeretnél használni?
Ötlet 1: If Then-el megvizsgálod a változó értékét és elugrasz a szubrutinra.
Ötlet 2: Select Case-el vizsgálod a változót és szintén elugrasz a szubrutinra.
Mi volna a feladat pontosan?
(#) 06smici válasza Kafka hozzászólására (») Jan 1, 2012 /
 
Eddig if then-el volt megcsinálva csak így elég hosszura sikeredett (a demo bascom le se fordítja). Ezért gondoltam hogy egyszerűb lenne ha a programban csak egyszer hívnám meg a szubrutint, mindig a változó értékének megfelelően. De mostmár kezdek rájönni hogy úgy meg több szubrutin kéne szóval nagyjából ugyanott lennék vele
Amúgy ez egy feszmérő akarna lenni és az adc értékét tárolja a változó amit hétszegmensere kéne kiírni. Van egy olyan érzésem hogy teljesen máshogy kéne csinálni, csak annyira nem értek hozzá...
(#) Tetye válasza Reggie hozzászólására (») Jan 1, 2012 /
 
Meg untam és már nincs több tippem. Úgysem találtam semmit és a szkóp se nagy tudású sajna.
Beraktam a kapcsitáp helyett egy 7805-öt, melegszik is de nem tudok jobbat.
(#) TavIR-AVR válasza 06smici hozzászólására (») Jan 1, 2012 /
 
Select-Case rövidebb, mint az If.

De programkód birtokában többet lehet mondani....
Feszmérő 7szegmenses kijelzése ~ 2-3k alapban....

Format és Fusing sort ne használd - ez viszi a helyet....
És NE single/double tipussal számolj, hanem vedd az érték 100*át. így integer is elég (-32k...+32k).
(#) zolee1209 hozzászólása Jan 1, 2012 /
 
Üdv!

Egy kérdésem lenne a következő kapcsolással kapcsolatosan. Bővebben: Link

A kapcsolási rajzon látható R4-R7-R9 alkotta feszültségosztó. Vegyük az osztóhoz tartozó maximális bemeneti feszültséget 30V-nak. ezután két szélső lehetőség van az osztó kimeneti feszültségét illetően. Trimmer rövidzár, ekkor 6V lesz az osztó kimenetén. Ha a trimmer maximális értéken van, akkor pedig 6.31V lesz az osztó kimenetén. Mindkét érték 5V feletti, ez nekem már nem szimpatikus. Továbbá ATmega8 adatlapjának ADC Characteristics részénél azt olvasom, hogy az ADC lábra jutó feszültség GND- Vref tartományban lehet. A program viszont a 2.56V-os belső referenciát használja. Szóval ez így hogyan működhet?! Vagy én néztem el ennyire valamit?
(#) gtk válasza zolee1209 hozzászólására (») Jan 1, 2012 /
 
Ket reszre osztja a merest (csatlakozo 1. lab). Valoszinuleg ennek megfeleloen van a ket fesz szint beallitva. Tehat ket ADC csatornat hasznal hogy atfogja a merestartomanyt.
(#) gtk válasza gtk hozzászólására (») Jan 1, 2012 /
 
ui: Az R2 agban 2.2V lesz 30V-nal.
Valoszinuleg az R4-es agat csak addig hasznalja amig a bemeno feszultseg a Vref alatt van. Valoszinu, hogy a 6.3V meg belefer az ADC tureshatarba.
(#) elektromoska hozzászólása Jan 1, 2012 /
 
Sziasztok! Keresek olyan kollégát, aki otthon van AVR, vagy PIC programozásban, és vállal bérbe progi írást. Léptető motor vezérlést kéne megoldani. E-mailban írja! Kösz! Tibi
(#) zolee1209 válasza gtk hozzászólására (») Jan 1, 2012 /
 
Régebben belekezdtem egy DC-DC konverterhez készíteni hatásfokmérőt. Ott ugyanezt alkalmaztam volna, hogy adott feszültségszintig adott osztóról olvasok be. Nekem viszont sikerült megsütni néhány ADC bemenet így, mikor a leosztott feszültség 5.5V környékén mozgott. Maga az ADC működőképes maradt, a MUX csatornái haltak ki így. Lehet, kerítek majd egy félholt AVR-t, és kötök rá 6- 10V-ot. :eplus2:
(#) gtk válasza zolee1209 hozzászólására (») Jan 1, 2012 /
 
Legfeljebb le kell kapcsolni az adott csatornarol a feszultseget.
A linkelt kapcsolast epitettek meg tobben, es mukodott.
(#) zolee1209 válasza gtk hozzászólására (») Jan 1, 2012 /
 
Tudom, hogy többen megépítették ezt a kapcsolást, működik is nekik, ugyanakkor nem tudom, mire van alapozva ez a működési feltétel és ez engem zavar.
(#) gtk válasza zolee1209 hozzászólására (») Jan 1, 2012 /
 
Talan atvalt digit. bemenetre, es ugy birja a 6.3V-ot.
(#) sikolymester válasza zombee hozzászólására (») Jan 1, 2012 /
 
Nekem annyi a konkrét tapasztalatom, hogy az AVRTools-szal egy egyszerű üres while loopos program nem fordult le atmega8-ra. Volt részemről nagy csodálkozás, amikor megláttam a furcsa hibaüzeneteket.
Mint kiderült ez azért volt, mert a studio 4.19 nem a WINAvr-t tette be alapértelmezettnek.

További vizsgálódást nem végeztem, hanem szépen beállítottam manuálisan a WINAvr-t, amivel rögtön helyesen fordult.

Avrfreaksen szidják, itt az egyik kolléga azt írta, hogy csak azért, mert a toolchain nem optimalizál jól.

Én az említett tapasztalatom miatt tanácsolom el az embereket tőle és mutatok rá, mint elsődleges hibaforrás lehetőségre.
(#) zombee válasza sikolymester hozzászólására (») Jan 2, 2012 /
 
Nálam eddig nem okozott hibát még a régebbi kódoknál sem, sőt, a Knight Rider vezérlő kódja ~50 bájttal kisebb.
(#) szabi83 hozzászólása Jan 2, 2012 /
 
Segítségeteket szeretném kérni, egy atiny45 program összedobásához.
Cél: Indexet szeretnék, egy gombbal működtetni.
Ok: El van törve kezem, automataváltós a kocsim.

Feladat:
Egy nyomás 2 sec múlva bal relé behúz
Kettő nyomás 2 sec múlva jobb relé behúz
Behúzott relé alatt érkező gombnyomás, pedig ki oldja a relét.

Most nem akarok meg tanulni programozni, hanem a gondomat szeretném megoldani.
(#) zombee válasza szabi83 hozzászólására (») Jan 2, 2012 /
 
Szerintem így elég balesetveszélyes. Nem figyelsz oda, vagy ott a prell-jelenség, és máris másmerre indexelsz mint kéne. Vagy amíg a 2 gombnyomásra koncentrálsz kiléphet eléd egy gyalogos. A folytatást szerintem mindenki tudja, ráadásul ez miatt a műszakit is bukhatja a járműved!

A motorkerékpárokban az indexkapcsoló egy háromállású kis kapcsoló, lásd: KÉP
Ez felszerelhető a kormánykerékre is vagy igazából bárhová, ahol kényelmesebben tudod kapcsolni.
Ezen kívül az ablakmosó és az index egy jó autós műhelyben felcserélhető, így jobb kézzel tudod kapcsolni.

Ha már AVR, én két nyomógombos verziót ajánlanék, ezen kívül a kormányrúdra egy mágnes+hall-generátor páros sem árt, ami a visszafordításkor automatikusan kikapcsolja. Ha egy kis PC-ventiből vételezed a szenzort akkor jobban jársz mert a "memóriás", az állása egy kis szoftveres szűrés után lényegében azt mutatja hogy legutóbb melyik irányba fordult a kormány. De mire ezt megépíted(akár külső segítséggel is) addigra leveszik a gipszet a kezedről...
(#) szabi83 válasza zombee hozzászólására (») Jan 2, 2012 /
 
A kapcsoló nem jó, elfordul a kezembe és a két nyomógomb szintén, ezért nem jó.

Gipsz levétel, eltarthat márciusig, utána műtét és fel lesz kötve a kezem +6hét. Addig legyek otthon?! Problémát szeretném megoldani továbbra is, egyszerűen. Köszi!
(#) zombee válasza szabi83 hozzászólására (») Jan 2, 2012 /
 
Ettől függetlenül az egygombos megoldás balesetveszélyes.

Ha valaki megsérült, az bizony lemondásokkal jár. Nem akarok a tömegközlekedésnek reklámot adni, még akkor sem ha tudtommal ez idő alatt kedvezményes/ingyenes is lenne hiszen mozgássérült vagy.

Egy barátom járt már így, ráadásul zsigulija volt és csak a jobb kezét használhatta. Azt csinálta hogy egyrészt kerülte az indexes manővereket(pl. sávváltás, előzés), türelmesen vezetett és inkább mindenkit elengedett. Kis forgalmú utakon nem is indexelt, a városon belül ha nagy volt a forgalom akkor buszra szállt.
És most jön a trükk - balkanyar! Egyszerűen megállt az autóval, átnyúlt az indexhez, majd kivárta a sorát. Kanyarodás után kikapcsolt az index, azzal nem volt probléma. Jobbkanyarnál is hasonló, csak nem fékezett le annyira kivéve ha gyalogátkelő is volt ott...
(#) szabi83 válasza zombee hozzászólására (») Jan 2, 2012 / 1
 
Számodra balesetveszélyes, Nekem meg nem az.
Nem vezethetnék az számomra a halált jelentené!
Mért kell elkanyarodni a probléma megoldásától..

Kinek mi a balesetveszélyes? Tíz autósból hétnek a kezébe a telefon és vezet, ja, az nem balesetveszélyes? Igazad van!
Kockázatot én vállalom, még mindig. A tömegközlekedés számomra ingyenes, mégsem nem tudok közlekedni vele! Példát hozhatsz, kioktatni nem kellene, mert jelenleg is vezetek, kényelmesebbé szeretném magamnak tenni! Elárulnád, mi a baj a mozgássérült emberrel? Nem lenne jobb, ha inkább segítenél? Manapság az önzetlen segíteni akarás nem létező dolog, elég szomorú, tisztelet annak a pár embernek.
Üdv
(#) Reggie válasza zombee hozzászólására (») Jan 2, 2012 /
 
A Prellt ki lehet kuszobolni akar szoftveres uton is.
(#) Reggie válasza kiborg hozzászólására (») Jan 2, 2012 /
 
Dehogy veszelyeztet mast. Erdekes modon alakitanak at jarmuvet olyanok szamara is, akik egyik karjukat elvesztettek, sot legalisan kapnak vezetoi engedelyt ilyen allapotban.
Kettoig szamolni meg nem nehez feladat 8 altalanos utan es attol meg lehet kinezni az ablakon. En pl. meg az utasommal beszelgetni is tudok menet kozben, nemhogy kettoig szamolni. Sot a radio gombjait is tudom nyomkodni, meg lepkedni a konyvtarak kozott, mikor kivalasztom a kovetkezo szamot.
Kicsit tulspilazzatok a problemat...
(#) zombee válasza szabi83 hozzászólására (») Jan 2, 2012 / 2
 
Én szóltam. Hogy segítsek is, itt egy rövidke program ATTiny13-ra:

  1. #define F_CPU 1000000
  2. #include<avr/io.h>
  3. #include<util/delay.h>
  4. int main(void)
  5. {
  6.   DDRB =  0b00011000;
  7.   PORTB = 0b00000010;
  8.   while(1) //végtelen ciklus
  9.   {
  10.     while(!PINB&2); //felengedésre vár
  11.     _delay_ms(500);  //leállítás után pergés kiküszöbölés
  12.     while(PINB&2); //lenyomásra vár
  13.       _delay_ms(200);
  14.     uint8_t X=0;
  15.     X = (PINB&2) ? (1<<3) : (1<<4);  //200ms-nél rövidebb lenyomásnál PB3, ha hosszabb akkor PB4 fog villogni
  16.  
  17.     while(1)  //a következő lenyomásig villogni fog...
  18.     {
  19.       PORTB ^= X; //átváltás a kiválasztott biten
  20.       for(uint8_t i=0; i<250; i++;)  //várakozás közben figyeli a gombot is...
  21.       {
  22.         _delay_ms(1)
  23.         if(!PINB&2) X=0;
  24.       }
  25.       if(!X) break;  //gombnyomásra kilép...
  26.     }
  27.     PORTB = 2;
  28.   }
  29. }


Magyarázat: PB1-re kerül a nyomógomb ami lenyomáskor a földpontra húzza le a lábat. A két kimenet a PB3 és PB4-re kerül. Hosszú gombnyomás esetén az egyik, rövid esetén a másik fog villogni. Az hogy melyiket kötöd bal vagy jobb oldalra az a Te döntésed. Villogás közben a következő gombnyomásra kikapcsol. Ha a villogást az eredeti áramkör állítja elő akkor még egyszerűbb a dolgod, nem kell villogni csak beállítani a portot:
  1. PORTB ^= X;
  2. //helyett:
  3. PORTB = PORTB |= X;


Nem garantálom hogy hibátlan, de a lényeg benne van. Az ATTiny13 olcsó, kell még egy égető, két relé ami vagy az eredeti kontaktusokat zárja vagy villogtatja az égőket, és egy szakember aki beköti mert fél kézzel nehéz lesz átbarmolni azt a vezetékköteget.
Ja és mielőtt elfelejteném: CSAK SAJÁT FELELŐSSÉGRE! és csak óvatosan...
(#) kiborg hozzászólása Jan 3, 2012 /
 
Akkor kérdeznék: Véleményetek szerint, hogyan lehetne egy AVR-el (Mega16) a legpontosabban mérnem az ADC-vel? Külön tápos megoldás nem lehetséges, egy 5V-om és három csatornán mérnék. LED sor jelenítené meg az eredményt. (3x19 felbontásban, 3 sor multiplexelve).
Üdv Kiborg
(#) zombee válasza kiborg hozzászólására (») Jan 3, 2012 /
 
Figy, ebből nagyon sokat értett mindenki. Ha nincs külön táp akkor nem mérhetsz úgy mint egy multiméterrel,
de ha előre tudod hogy milyen feszültségekre lehet számítani akkor kis trükközéssel mindent lehet!

Javaslom hogy mégegyszer olvasd át az ADMUX leírását, lesz pár érdekes dolog. Például mega16 esetében
már lehetőség van differencia mérésére, és ezeken 10x vagy 200x erősítésed is lehet. Így akár nagyon kis feszültségeket(24ľV lépésköz) is mérhetsz(pl. ellenállásmérő söntjén). Ha a sönt a pozitív ágon van akkor mindkét végét leosztod 1-1 nagy ellenállással a felére, és azt méred 200-szoros differencia-erősítéssel. A leosztással a lépésköz csak kétszeres lesz, ami annyit tesz hogy 48ľV, ez egy 0.1 Ohm sönt esetében 0.48mA ami elég kicsi. Az osztó ellenállások lehetőleg 1%-osak legyenek...
(#) Reggie válasza kiborg hozzászólására (») Jan 3, 2012 / 1
 
1. Az AVCC tapot szurjed akar tobbfokozatu (LC) szurovel. Reszletek: AVR040
2. Az AGND es GND labat valasszad el egymastol a csillagpontban es kulon vezessed oket
3. Hasznalj kulso,pontos feszultsegreferencia forrast es rakjal ra szurokondit
4. A merest "ADC Noise reduction " sleep modban vegezzed
5. A leheto legkisebb orajelet es a legnagyobb ADC osztot hasznald.
6. Kalibrald az ADC-t. Reszletek: AVR120
7. Az ADC bemenetekre adjal szabalyos periodikus zavarjelet es a mereseket atlagold, igy az effektiv felbontast(bitszamot) novelni tudod (a savszelesseg/mintavetelezesi frekvencia rovasara). Reszletek: AVR121
8. A merendo jeleket lehetoleg a legrovidebb uton vezessed es minnel tavolabb egymastol illetve mas vezetekektol.
Tovabbi infok az ADC-rol: AVR127
(#) szabi83 válasza zombee hozzászólására (») Jan 3, 2012 /
 
Köszönöm szépen!

Mázlim volt, találtam egy darab ATtiny13-t.
Összedobtam egy rajzot, táp az egyértelmű szűrt 7805-el van, nincs a rajzon. Ledek helyére majd bc546-t teszek +12v relé diódával a 14vra, akku fesz, kocsiba a be tápot egy pár u tekercsen keresztül fogja kapni, ezzel is szűrve a motor által termelt zavar/zaj-t.

Észrevétel, vagy valami, kell-e rá még?
(#) zombee válasza szabi83 hozzászólására (») Jan 3, 2012 / 1
 
Szerintem így oké, erre gondoltam, de a programot nem próbáltam ki lehet hogy van benne pár hiba.
Azért a nagyja mégis le van programozva, így a javítás már nem lesz nehéz.
Ha a LED-ek már úgy villognak ahogy kell akkor akár szólhatsz is a szerelőnek...
(#) szabi83 válasza zombee hozzászólására (») Jan 3, 2012 /
 
Értem és köszi, a gombra, nem kell felhúzó ellenállás, illetve, olvastam attiny45-nél, be kell kapcsolni? Itt, ez hogyan van?
(#) zombee válasza szabi83 hozzászólására (») Jan 3, 2012 /
 
A DDRB kapcsolásával a felhúzó megvan(~47kOhm), de ha teszel rá egy 4.7k-sat azzal még jobb,
mert a zavarokra kevésbé lesz érzékeny. Megsúgom hogy a kód attiny45-höz is ugyanúgy jó...
(#) szabi83 válasza zombee hozzászólására (») Jan 3, 2012 /
 
Idézet:
„A DDRB kapcsolásával a felhúzó megvan”


Bocsánat, ezt nem tudtam, dobok rá. Köszi.
Következő: »»   396 / 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