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   357 / 840
(#) kovacsj válasza kovacsj hozzászólására (») Aug 31, 2011 /
 
A közel 2A áramerősség csak GPRS burst-ök esetében fordul elő, de ez az eszköz csak SMS-t fog küldeni. Így viszont elég lesz a 317T is - legalábbis én így gondolom.
(#) Reggie válasza kovacsj hozzászólására (») Aug 31, 2011 /
 
Vegulis utolag is le lehet cserelni, ha megsem jo, tehat nagy baj nem lehet belole.
(#) pityu_lite hozzászólása Szept 1, 2011 /
 
Sziasztok!
Egész jól halad ez a TWI-os dolog, köszi nektek.
Próbáltam még bedobni a programba egy külső reset szerű gombot. VCC ellenálláson keresztül egy gomb egyik lábára és az INT1 lábra. Gomb másik lába a földön van. Egyszerűnek tünt meghívni egy interruptot arra az esetre ha a gombot megnyomom, de mégis valami hibádzik.Teljes kódot nem írok le csak amit a gomb miatt beleírtam:
  1. GICR|= 1 << INT1;
  2. MCUCR = 1 << ISC11;
  3.  
  4. ISR (INT0_vect)
  5. {
  6.         while (PIND3==0)
  7.         {
  8.         }
  9.                 flag=1;
  10. }


majd valahol a programban egy ellenőrzés if(flag==1) {...}

Persze az INT1 láb bemenetre van állítva és próbáltam ugy is hogy felhúzó ellenállás aktív illetve nem aktív, de az eredmény : gomb nyomásra nem az előbb írt feltételben lévő ... teljesül hanem teljesen előről megy a program. Ezt mi okozza? hol keressem a hibát? WDT tiltva van már gondoltam erre is de ugyanaz.
(#) aticska válasza pityu_lite hozzászólására (») Szept 1, 2011 /
 
INT0_vect helyett INT1_vect
(#) pityu_lite válasza aticska hozzászólására (») Szept 1, 2011 /
 
Kicsit süllyedek magamban hogy elírtam és INT1 nek olvastam sokadjára is
(#) norbigal hozzászólása Szept 1, 2011 /
 
Üdv!
A PIC-es topicban tettem fel a kérdést, de végül itt kötök ki.
SZóval jelenleg a Kandón tanulok mikrokontroller programozást. (a 8051-es család) AZ elméleti részen elvileg túl vagyunk, idén pedig már gyakorlatban csináljuk a dolgot. ELsősorban pár gyakorlati kérdésem lenne:
EZek csak a bennem lévő felvetések, hogy kicsit jobban el tudjam képzelni, hogy működnek a dolgok.
Például
Hogyan tudom beolvasni egy nyomógomb, LED vagy akármi címét?


Másodsoprban pedig összegyűjöttem néhány számomra érthetetlen dolgot a programozással kapcsolatban. Ezek inkább feladatok voltak, hogy pl. "a 20H és 40H közötti memória értéket töltse fel a 13D értékkel!" Ilyen és ehhez hasonló feladatokban tudnátok segíteni?!?! Vagyis ha megírok egy-két programot, akkor le tudnátok ellenőrizni, hogy valóban azt csinálja-e amit eredetileg akartam? Ha igen, akkor összegyűjtöm ezeket és beíroma fórumba, hátha más is hasznát veszi. Mindenesetre nagyon hálás lennék, ha valaki ismerné a 8051-es utasításkészletét és segítene.
Előre is köszi a választ.
(#) Reggie válasza norbigal hozzászólására (») Szept 1, 2011 /
 
Miert kene a cimet beolvasni? Azt a programozonak kell tudnia, hogy mi milyen cimen van, hiszen az fugg az adott osszerakott hardvertol is.

A memoriafeltoltos dolgokban szinte barki tud segiteni, hiszen csak nehany assembly utasitas.
(#) zombee válasza norbigal hozzászólására (») Szept 1, 2011 /
 
Hello!

Alapvető fogalmi problémáid vannak, de természetesen segítünk.
A LED vagy nyomógomb ha közvetlenül kapcsolódik az uC-hez, akkor valamelyik PORT-on van. A PORT-ok 8 bitesek, és ha C nyelvű progit írsz rá akkor úgy kezelheted mint egy "unsigned short" változót. Így lehet PORTA, PORTB, stb...
8051-el nem sokat foglalkoztam, így a hozzászólásom többi része a mezei AVR-ekre vonatkozik amiből szerintem több dolog is igaz lehet 8051-re:
A LED vagy gomb ennek a 8 bites PORT-nak egyetlen lábán van, így a PORTx változó valamely bitjét kell beállítani LED-nél. Ha nyomógomb, akkor a PINx-et kell lekérdezned, mert ez jelzi vissza(áramkörileg) hogy milyen állapotban van a portláb, míg a PORTx egy regiszter amiből ugyanazt olvasod ki amit bele írsz. A PINx így csak olvasható. Van még a DDRx amivel az irányt határozod meg.LED-nél az adott bit 1, nyomógombnál 0.
(#) kovacsj válasza norbigal hozzászólására (») Szept 2, 2011 /
 
Ne tévesszenek meg, hogy nem ismered az előregyártott függvényeket, amiknek a végéhez hozzáilleszted a saját fájlodat!
Azok a címek nem a nyomógobok és nem a ledek címei. Egyszerű memória címek, ahová/ahonnan az említett függvények be, ill. kiolvassák az értékeket.
Szóval, nincs a nyomógombnak és a ledeknek címük, hanem az említett függvények - a gyakorlatot meggyorsítandó - így teszik neked könnyebbé az iskolában a programozást. Más kérdés, hogy ezt senki nem mondja, és amint ez most is kiderült, időnként zavart okoznak. Tehát mégegyszer: A kapcsolók állapota nem közvetlenül a kapcsolóról van leolvasva amikor megadod a címet, hanem azt egy másik függvény már megtette, és beírta neked arra a címre.
Remélem, érthető!
(#) kovacsj válasza norbigal hozzászólására (») Szept 2, 2011 /
 
Van itt egy 8051-es szimulátor. Ezen tudsz gyakorolni.

edsim51.jar
    
(#) proba válasza norbigal hozzászólására (») Szept 2, 2011 /
 
Ha magad elé veszel egy kontroller rajzát ,akkor a különböző kivezetésekhez különböző nevek vannak rendelve.Ha te egy ledet meg egy gombot rá szeretnél kötni a mikrovezérlőre ezeken a kivezetéseken keresztül teheted meg.Ettől kezdve ,ha TE a lededet a p0.0 címkéjű lábra kötötted ,akkor a led állapotát a p0 regiszter 0. bitjén tudod befolyásolni.
A mikrokontroller csak számokat ismer ezért a kontrolleren belül minden csak számokra való hivatkozással érhető el.Az egyszerűség kedvéért bevezették a 16-os számrendszert.itt minden szám 0-F ig szerepelhet.
A byte két ilyen szám egymás után.Ez a szám egyszerűen átírható kettes számrendszerbe is.
pl 01 =00000001 .Ha te a lededet ki akarod gyújtani ami a p0.0 lábon van akkor a p0 (80H ) regiszterbe ezt a számot kell beírnod.A kioltáshoz pedig 00=00000000 számot. (ez egyben azt is jelenti hogy a port - p0 kezdetű cimkével jelölt - kivezetéseit logikai nullára kapcsolod.
Azt hogy melyik kivezetés változtatásához milyen címet kell használni az adott kontroller adatlapjáról lehet megtudni.
Rádiótechnika évkönyvben egyébként részletes leírást találsz róla 1990-esben a 8048 van az 1992-ben meg a 8031-51 család Madarász László-tól.
(#) norbigal válasza proba hozzászólására (») Szept 2, 2011 /
 
Köszi az eddigi válaszokat mindenkinek! A szimulátort ki fogom próbálni, továbbá sokat segített proba legutóbbi hozzászólása. Nagyon logikus - legalábbis nekem a megfogalmazásod elég felfogható volt.
A Rádiótechnika évkönyvet pedig mindenképp megkeresem, és a keresgélések után jelentkezem hogy mire jutottam. Valahogy csak megvilágosodnak a dolgok...
(#) almacsutka hozzászólása Szept 3, 2011 /
 
Sziasztok!

Megépítettem a Topi féle Avr programozót. Az lenne a kérdésem ,hogy nem tudtok-e olyan nyáktervet linkelni amiben több fajta tokozású avr-t tudnék belerakni és ezt csatlakoztatnám a programozóhoz? Belinkeltem, hogy mire gondolok.(avr dip programmer)


Üdv!Bővebben: Link
(#) zombee válasza almacsutka hozzászólására (») Szept 3, 2011 /
 
Szerintem inkább lyukpanelre építsd, és ha kezdő vagy, nem muszáj 1-nél több fajta AVR-tokot rátenni. Teszel rá inkább LED-eket, gombokat, bővítgeted, stb...
(#) zolee1209 válasza zombee hozzászólására (») Szept 3, 2011 /
 
Én ilyen próbapanelt sosem építettem, nem láttam értelmét. Vagy próbapanelon volt bekötve, fejlesztés közben, vagy már a végleges helyén voltak kihozva a programozólábak...
(#) mikrofarad hozzászólása Szept 3, 2011 /
 
Üdv!
Valaki tudna adni BASCOM 1.11-hez atmega8 kiegészítést adni?Vagy ha nem kell milyen néven állítsam be?
Előre is köszönöm!
(#) Robi98 hozzászólása Szept 3, 2011 /
 
Sziasztok!
Hallottam már arról, hogy ha külső kvarcról szeretnénk üzemeltetni avr-t akkor jól kell megadni Vmilyen biztosíték biteket, mert különben kitiltjuk magunkat az avr-ből.
Ha például 8Mhz-es kristályról szeretnénk vezérelni egy avr-t akkor milyen biztosítékbiteket kell megadnunk?

Köszönöm!
(#) zombee válasza Robi98 hozzászólására (») Szept 3, 2011 /
 
AVR Studio-ban: Ext. Crystal Osc, High Freq.
(#) leglacika válasza krcko hozzászólására (») Szept 4, 2011 /
 
Szia krcko !

Most olvasok csak vissza, Te is ezzel "szenvedsz"...
Jutottál valamire ? Milyen autóba szánod, és milyen ECU-hoz ?
Én egy B4-es Passatba építettem be, Siemens ECU-hoz.
Az élőadat lekérdezés továbbra sem megy. Minden más jó.
Az lehet, hogy nem azonos módon kommunikál a Bosch Mono Motronic és a Siemens Simos ECU ?
Lassan feladom...

Laci.
(#) H2opok hozzászólása Szept 5, 2011 /
 
Üdv
Egy kis segítség kellene. Mellékletben található egy terv, nyák, és a progi állományok (egy eledet villogtat).
Link

ATtiny10 8 lábú smd kontroller kellene az elektronikába, amit itthon nem találtunk. Csak 6 lábú van mindenhol. Helyettesíthető esetleg a 6 lábúval, vagy át kell tervezni a nyákot? Vagy ha mégis jó bele a 6 lábú, a program is jó lesz hozzá?
Vagy ha valaki megtenné, hogy az itthon kapható 6 lábúhoz áttervezné a nyákot, úgy hogy a meglévő programmal is esetleg működjön, azt megköszönném.
A segítséget előre is köszönöm.

Eaglefile.zip
    
(#) zombee válasza H2opok hozzászólására (») Szept 5, 2011 /
 
Érdekes, őszintén szólva én már láttam Attiny10-et 8 lábbal, de az ISP-s volt(nem TPI), lényegében egy butább ATTiny11.
Egy mezei villogóhoz szerintem nem kell feltétlenül AVR, egy astabil multivábrátor is megteszi.
A szükséges alktarészek(2x mindenből: tranzisztor, bázisellenállás, kollektorellenállás, kondi) elérhetők SMD-ben.
A LED-e(ke)t a kollektorellenállással kell sorba kötni. 3-as és 4-es multivibrátor is megépíthető ha pl. szélforgós villogót akarsz.
Ráadásul egy ATTiny10-hez minimum egy AVRISP-mkII vagy kompatíbilis programozó kell(nálam ez 5500Ft),
a multivibrátorhoz pedig csak egy számológép, hogy a villogódnak kiszámítsd a frekvenciát.
(#) Axel hozzászólása Szept 5, 2011 /
 
Sziasztok!

Szöget ütött a fejembe egy gondolat, mégpedig az, hogy mi történik akkor ha két megszakítási kérelem egy időben érkezik. Pl. egy "pin change" interrupt esetén ugyanakkor nyomom le a gombot mikor a timer túlcsordul, vagy egy ADC mérés befejeződik, stb... Tudom, hogy erre az esély minimális, de hogyan kezelné ezt a processzor? Remélem nem kérdeztem nagy hülyeséget.
(#) dB_Thunder hozzászólása Szept 5, 2011 /
 
Hali mindenki!

Nekem is ezzel a interruptal van gondom. Adott agy készülék melynek ki kel(lene) kapcsolni magát kb fél óra inaktivitás után. A program funkcionális része már meg van írva, már csak ezt a kikapcsolás részét kellene hozzá illeszteni, a kikapcsolási időzítésnek akkor kellene indulni mikor az A/D átalakítás után nem haladja meg a 200-as értéket. Ha esetleg az időzítés alatt mégis meghaladja akkor "nullázódnia" kellene az időzítésnek:
  1. if(adc > 1020)   RED();                         //950felett piros
  2.         else  
  3.                 {if(adc > 980)   YLLW();                //700felett sárga
  4.                 else  
  5.                 {if(adc > 900)   GRN();                 //500felett zöld
  6.                 else
  7.                 {if(adc > 740)   CYAN();                //400felett cián
  8.                 else
  9.                 {if(adc > 540)   BLUE();                //300felett kék
  10.                 else  
  11.                 {if(adc > 300)   MAG();                 //200felett magnetta
  12.                 else                    LED_OFF();}}}}} //ha nem éri el a 200at semmi, időzítés indítást ide kell beszúrni a többinél tiltani.


A másik gondom ez a hosszú időzítés elérése ( f_cpu=128kHz, nincs engedélyezve a CLDIV8 mert úgy már túl lassú a program futása.)
Most ezt a teszt kódot próbáltam de nem tökéletes, egyrészt további "osztás" kell, a másik hogy háromszor felvillan fehéren az RGB led azután csak folyamatosan világit pirosan... (itt fáradtam el )
Az egész egy ATiny45-ön fut, a "fő" programrész nem használja csak a AD hardvert, tehát szabadok a Timmerek.
  1. // f_cpu 128kHz,         CLDIV8 ideiglenesen pipálva
  2.  
  3. #include <avr/io.h>        
  4. #include <avr/interrupt.h>  
  5. #include <util/delay.h>    
  6.  
  7. ISR(TIMER1_OVF_vect)     //megszakítási vektor TIMER1 értelemszerű, OVF - overflow vagyis akkor fog ide ugrani (megszakadni a program futás) ha túlcsordult
  8.         {
  9.         PORTB^=1;                     //PORTB^=1 = PORTB=PORTB^1   ^ - kizáró-vagy kapcsolat
  10.         TCNT1= 255;                  //ismét be kell írni a számlálóba mert túlcsordulás után 0x00 érték lesz benne
  11.         }
  12.  
  13. void init(void)   //külső függvény nincs bemenő se kimenő paraméter, csak szimplán lefut
  14.         {
  15.         DDRB= 0b00000111;          // kimenetek definiálása
  16.  
  17.         TCCR1= 0b00001111;               //előosztás elvileg CLK/8/16384= 0.976Hz
  18.  
  19.         TCNT1= 255;                  //feltöltjük a számlálót
  20.  
  21.         TIMSK=(1<<TOIE1);       //engedélyezzük a TIMER1-ról jövő megszakítást
  22.  
  23.         sei();      //engedélyezzük hogy a megszakítás hívást
  24.         }
  25.  
  26. int main(void)
  27.         {
  28.         init();  //a fentebbi külső függvényt meghívjuk, ami lefut és utána megy tovább a program
  29.  
  30.         int i=1;        //int -> szám i nevű lesz a változó aminek az értéke 1
  31.         for(;;)  // végtelen ciklus, ez most csak azért kell hogy soha ne legyen vége a programnak, és így tud majd "megszakadni"
  32.                 {
  33.                 i+=1;   //i+=1 = i=i+1
  34.                 }
  35.         }

Gyanús hogyha magyarul lenne az adatlapja az Tinynek, meg ha tanultam volna programozni, akkor már össze állt volna a kép.
(#) sikolymester válasza Axel hozzászólására (») Szept 6, 2011 /
 
Az adatlapjaban megtalalod a prioritasi sorrendet az interruptoknak. Aszerint fogja feldolgozni.
(#) painkillerperoxi hozzászólása Szept 6, 2011 /
 
Hello mindenkinek!

Tanácsot kérnék: http://www.kmitl.ac.th/~kswichit/avrthermo/avrthermo.html a fenti linken található kapcsolást építettem meg, annyi különbséggel, hogy az AT90S2313-helyett ATTiny2313-ast használtam. A probléma a következő: bekapcsolást követően, kiírja, hogy 34C, aztán 9C és nem reagál a változásokra, olyannyira, hogy ha lecsatlakoztatom a szenzort akkor sem mozdul a kijelző.
Mi lehet a gond?
Előre is köszi a segítséget!
(#) Cavalier válasza Axel hozzászólására (») Szept 6, 2011 /
 
Igazából ezt nem a processzornak, hanem neked kell lekezelni.. Ahogy sikolymester írja, megvan a prioritási sorrend, de emellett te is tehetsz a dolgok megfelelő működése érdekében.
Ha valami fontos műveletet csinálsz egy megszakítás kezelésével kapcsolatban, akkor ki lehet kapcsolni a másik megszakítás figyelését.
A megszakítási rutinok minél rövidebbek legyenek, pl. csak egy-egy "flag"-szerű változó beállítása, amit aztán a főciklusban elintézel.
Tudnak történni érdekes dolgok, ha több megszakítást használsz, érdemes alaposan átolvasni a leírásokat.
(#) zombee válasza painkillerperoxi hozzászólására (») Szept 6, 2011 /
 
A szenzort bekötötted a PD1 lábra? Ha a szenzort egy hosszú vezetékkel kötöd rá,
kell egy kb. 100nF-os kondi is a szenzor oldalán a föld-táp közé.
(#) painkillerperoxi válasza zombee hozzászólására (») Szept 6, 2011 /
 
A pd1 láb helyett a pd6-ra kell kötni a senzort, legalábbis ezt írja a lap alján lévő korrekció. A kábel valóban hosszú, kipróbálom akkor a 100nF-os kondit. Köszi a választ!
(#) TavIR-AVR válasza painkillerperoxi hozzászólására (») Szept 6, 2011 /
 
A 90S2313 külső kvarcot vár automatikusan.
A T2313 belső 8 MHZrol jar 8-as osztóval.
A T2313-at át kell állítani külsó kvarcra és a 8-as előosztót kikapcsolni.

ATTiny2313 használata

Ehhez jó a TavIR STK500 vagy a TavIR MKII programozó is .
(#) zombee válasza TavIR-AVR hozzászólására (») Szept 6, 2011 /
 
Mehet belső RC oszcillátorról(8MHz) is, ekkor csak a CKDIV8-at kell kikapcsolni. Érdekes lenne
ha a HEX programot valamivel be tudta égetni, de a FUSE biteket ugyanazzal már nem lehetne.
Következő: »»   357 / 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