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   148 / 840
(#) Topi válasza vicsys hozzászólására (») Szept 14, 2009 /
 
Hülyeségnek nem hülyeség, de azt nevezzük inkább HW-es pollingnak. Ugyanis ADC ha freerun-ban van, akkor X időközönként beesve az interrupt tudsz gombot olvasni (kiértékelni).
Tehát lényegében még ez is polling.
(#) trudnai válasza vicsys hozzászólására (») Szept 14, 2009 /
 
Nem mondtal, sot, elterjedt megoldas ez. Ilyenkor komparator modban talan lehet megszakitast is generaltatni, de:

A billentyu (es mas mechanikus kapcsolok) eseteben megszakitast csak akkor celszeru alkalmazni ha a debouncing hardveresen van megoldva. Ha nem akkor a bouncing idejere rengeteg interrupt beeshet - ez pedig teljesseggel felesleges es akar nehany tiz ms-nyi idore is gyakorlatilag blokkolhatja (kisajatithatja) a feldolgozo egyseget.

Emiatt elterjedt az a szokas, hogy a timer bizonyos idokozonkent (par ms altalaban) megszakitast csinal es akkor vegeznek el egy pollozast -- es igy meg a szoftveres debouncing is konyebben elvegezheto...
(#) tpeter válasza Topi hozzászólására (») Szept 14, 2009 /
 
Igen, a PCINT jó ötlet csak nem tudom hogy én néztem-e el de az ATMega32-n nem láttam ilyen funkciót, a Tiny2313-on pedig simán van.
(#) tpeter válasza trudnai hozzászólására (») Szept 14, 2009 /
 
Igen, igazából valami hasonlóba futottam bele egy enkóder kapcsán. Az egyik INT-en volt az enkóder egyik csatornája, a másik pedig egy port egy lábán és figyeltem az interrupt rutinban, hogy épp magas v. alacsony szinten van-e a láb.

A gond az hogy hiába állítottam be hogy legyen blokkoló az int. rutin és hogy úgy kezdődjön hogy _delay_ms(10.0) (ez mint sw. debouncing), valahogy sosem akart működni rendesen.

Igazából most sem tudom hogy hogy kéne enkódert használni normálisan pedig szerintem elolvastam az összes ide vonatkozó oldalt az interneten... Végül feladtam.
(#) trudnai válasza tpeter hozzászólására (») Szept 14, 2009 /
 
Ez egy mechanikus rotary encoder? Azoknal mindig csak egy csatorna pereg, igy mindig legfeljebb ket egymas mellett levo allapotok kozott tortenhet atmenet. Az interrupt rutint amugy nem kell blokkolora beallitani. Egy flaget kell betenni, ami az aktualis allapotot figyeli -- azaz a timer interrupt periodikusan bejon, es az elozo allapothoz kepest kell mindig cselekedni.

Ugye van egy stabil allapotod (a legutolso allapot aminel a kapcsolo/encoder allapota valid volt). Van ezen felul egy legutoljara mert allapotod, amivel a kapcsolok/encoder vonalak allasat kell ossze vetni. Ha az encoder allapota az elozo olvasashoz kepest valtozott, akkor csak aktualizalni kell ezt az allapot jelzot. Ha ugyanaz, akkor az allapot stabil tehat a stabil allapotot jelzo regisztert kell aktualizalni.

Nyilvan erdemes az aktualizalas elott ossze vetni, hogy valtozott-e a ket stabil allapot kozott a gombok/ancoder vonalak allapota, es ha igen akkor flaggel jelezni a valtozast ill megoldani a szamlalo leptetest vagy egyeb funkcio aktivalasat.

Ezt meg amugy tovabb is lehet bonyolitani, hogy a forgas iranyat is figyeljuk, igy ha ne adj isten az encoder epp ket erteken all akkor elofordulhat, hogy az encoder egyfolytaban bouncingol es igy veletlen szeruen A vagy B allapotot validnak talalna a fentebb leirt algoritmus. Tehat ha egy tovabbi flaggel eltaroljuk, hogy az elozo lepes felfele vagy lefele tortent akkor a vissza iranyu lepest csak akkor fogadja el, ha legalabb ket utemet lepett vissza (magyaran az ilyesfajta perges kizarhato)

Az egesznek a lenyege amugy az idozites, a timer interruptot celszeru a bouncing idejenel hosszabbra megvalasztani, viszont eleg surunek ahhoz, hogy az encoder maximalis sebessege mellett is meg megfelelo szamu leolvasast tudjunk elvegezni.
(#) TavIR-AVR válasza trudnai hozzászólására (») Szept 14, 2009 /
 
1 interruptos enkóder

Igaz bascom. Az egyik eltekerés iránya INTet vált ki. a másik lába így magas vagy alacsony, így tudom merre csavargattam...

Kb. az oldal közepén a rajz és a Bascom mintaprg is...
(#) TavIR-AVR válasza trudnai hozzászólására (») Szept 14, 2009 /
 
ATMega32 helyett ATMega324? Azon minden láb tudja a PCINT-et...

Funkció és lábkompatibilis felülről a M32vel. De M644, M324, M1284 is szóbajöhet... (Mind DIP40-es)
(#) ReFi hozzászólása Szept 14, 2009 /
 
Megoldható szerintetek 10db 100mA-es fehér LED AVR-el való meghajtása. Vagy inkább tranyókat kössek a kimenetekre mert sok lesz a teljesitmeny?
PWM üzemben hajtanam öket a dimmelhetőség miatt, na meg ugy kevesebbet is esznek.
Lehet hogy agyuval verébre de én igy tudnám csak megoldani.
(#) gtk válasza ReFi hozzászólására (») Szept 14, 2009 /
 
10x100mA-t semmikeppen nem tudsz kivenni az AVRbol. Kimenetekre tranyot, vagy tr.tombot. (UDN, ULN).
(#) tpeter válasza trudnai hozzászólására (») Szept 14, 2009 /
 
Szia!

Bár érteném mit jelent ez... de minden jószándékod benne van, szóval köszi

Szóval:
Igen, mechanikus rotary encoder.

TavIR-AVR: Igen, én is erre gondoltam hogy ez jó lesz. Raktam is egy kis sw. pergésmentesítést az int. rutinba, de nem igazán sikerült a dolog.
(#) TavIR-AVR válasza ReFi hozzászólására (») Szept 14, 2009 /
 
nem. lábanként max 20 mA vehető ki (ökölszabály). Tranzisztormezővel segíts rá. Pl. ULN2308.
(#) _Petya_ hozzászólása Szept 15, 2009 /
 
Sziasztok!

Linux alatt avrdude-al használom az Olimex-féle ISP programozót (stk500v2), és egy 17k-s flash beprogramozása, egy ATMEGA32-be kb 90 másodpercig tart, a visszaolvasás szintén ilyen lassú. Szerintetek mi okozhatja ezt a lassúságot?

Petya
(#) janyjozsef válasza _Petya_ hozzászólására (») Szept 15, 2009 /
 
Ugyan a linux-os formát még nem láttam, de az ISP freki gondolom ott is állítható.
Probáld megkeresni és nagyobbra állítani.
(#) janyjozsef válasza tpeter hozzászólására (») Szept 15, 2009 /
 
IT rutinba prell mentesítés (delay)?
Akkor minek az it?
Nem lenne elég egy main-es vagy egy timer-es pingelés?

Én egyébként 2db ilyet kezelek + 6db szegmens kijelző + SPI-n továbbítja az enkóder adatokat és onnan veszi, hogy mit írjon ki, de ez neked nem igen jó, mert és nem int-el oldottam meg, hanem ping-el.
(#) tpeter válasza janyjozsef hozzászólására (») Szept 15, 2009 /
 
szerintem ebben semmi ellentmondás nincs.
Sajnos timer-rel pollozni nem igazán tudom a fel v. lefutó éleket, egy enkódert mindenképpen él-triggerelten kell vizsgálni -> ezért kell interruptosan kezelni.

Valamit rosszul értelmezek?
(#) szilva válasza tpeter hozzászólására (») Szept 15, 2009 /
 
Nem kell interrupt, elég a poll. Élt tudsz detektálni úgy, hogy az előző állapotot és az aktuális állapotot is figyelembe veszed a poll során. Mitöbb, az egész enkóder lekezelésére elég egy állapotgép egy jól felépített állapotgráffal, az állapotváltozókba bele kell venni az aktuális állapotot, az előéletet meg az aktuális állapot reprezentálja. Ha elég ügyesen építed fel az állapotgráfot, akkor még pergésmentesítés sem kell, legfeljebb oda-vissza ugrál pár köztes állapoton a pergés alatt.
(#) szilva válasza szilva hozzászólására (») Szept 15, 2009 /
 
Idézet:
„az állapotváltozókba bele kell venni az aktuális állapotot, az előéletet meg az aktuális állapot reprezentálja”


Na, ez jó érthetetlen lett... Tehát:

az állapotváltozókba bele kell venni a bemenetek aktuális állapotát, az előéletet meg az állapotgép aktuális állapota reprezentálja
(#) tpeter válasza szilva hozzászólására (») Szept 15, 2009 /
 
értem.

és nem viccelek! megvan a holnapi programom, köszi!
... mondjuk még mindig nem értem hogy interruptokkal megoldva miért nem volt jó a dolog, de végülis mindegy. megnézem ezt a pollos témát.
(#) tpeter hozzászólása Szept 15, 2009 /
 
na, most meg a fránya ISP-m nem akar kommunikálni az AVR-rel...
(#) tpeter hozzászólása Szept 16, 2009 /
 
Egyébként ha az ISP-vel össze van kötve az eszköz akkor az órajelet is onnan kapja, ugye?
Igazából valamiért mindig a jól ismert ablak ugrik fel AVRStudio-ban, pedig az ISP órajele 115kHz. Az AVR tuti hogy működik - amúgy külső kvarcról jár amikor épp a természetes környezetében van.
Persze kipróbáltam úgy is hogy van ott egy kristály meg a két kondi, de úgy sem akart menni... Nem tudom mi lehet.
(#) aquafood hozzászólása Szept 16, 2009 /
 

Sziasztok!

Atmega8-ra szeretnék programot letölteni RS232-n keresztül.
Valaki tudna segíteni, hogy milyen programmal és hogyan csináljam?
köszi!!!
(#) Teng hozzászólása Szept 16, 2009 /
 
Hello.

Egy kis segítségre lenne szükségem, megépítettem az AVR újraélesztőt ami itt van a kapcsolások között, de egy hiba van, nem akar istennek sem életre kelni az avr. ATtiny2313ról van szó, az áramkörbe 4MHz-s kvarcot raktam és 5V-ról táplálom, STK200as íróval próbálom írni. Esetleg 1MHz-sel próbáljam szerintetek, vagy mi lehet a hiba? A fuse biteker állítottam be rosszul, ponsotan a FUSEBIT KLA987-et Bascomban (101111-re) és utána már nemtudtam belépni...
(#) trudnai válasza Teng hozzászólására (») Szept 16, 2009 /
 
Nem inkabb 8-12MHz kristaly kellene oda? En nem azzal az ujraelesztovel kiserleteznek ha igy van beallitva a fuse, hanem, hogy a kristaly az AVR-re van rateve.
(#) Teng válasza trudnai hozzászólására (») Szept 16, 2009 /
 
Rendben. És az stk200 beüzemelésekor hova kössem xtal1 és xtal2 közé a kvarcot? vagy xtal1 és gnd közé?
(#) trudnai válasza Teng hozzászólására (») Szept 16, 2009 /
 
Xtal1-Xtal2 koze ahogy az adatlapban van (lasd mellekelt kep)
(#) Teng válasza trudnai hozzászólására (») Szept 16, 2009 /
 
oké megpróbálom... előre is köszi...
(#) Teng válasza Teng hozzászólására (») Szept 16, 2009 /
 
kiprobáltam 27pF-es kondit raktam be az általad küldött kapcsolásba és 12MHz-s kvarcot de meg sem nyikkan. Egyéb 5let?
(#) trudnai válasza Teng hozzászólására (») Szept 16, 2009 /
 
Kisebb kondikkal sem? 12-22pF-et ajanl az adatlap -- meg hat ez a verzio nyilvan akkor mukodhet ha valoban azok a fuse bitek vannak beallitva (es ha nem neztem el az adatlapot )
(#) Teng válasza trudnai hozzászólására (») Szept 16, 2009 /
 
Most kiprobáltam 22pF-el. Semmi változás. és biztos hogy az lett elállítva mert előtte mindig elállítottam mentettem, és jó volt. Ja 3 ATtiny2313-at is sikerült igy pihenőre rakni szóval még az sem mondható hogy csak egyet gyilkoltam így le
(#) TavIR-AVR válasza aquafood hozzászólására (») Szept 16, 2009 /
 
A kulcsszó a Bootloader.
Következő: »»   148 / 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