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   173 / 840
(#) zsuscsinyo válasza zsuscsinyo hozzászólására (») Dec 26, 2009 /
 
Az előzőben sikerült elrontani a kódot, mivel nem zártam le, na mégegyszer:

  1. #define LED_ON   (PORTB |=  (1<<PB3))
  2. #define LED_OFF  (PORTB &= ~(1<<PB3))
(#) labu01wx válasza zsuscsinyo hozzászólására (») Dec 27, 2009 /
 
Külső lehúzó ellenállás nem volt, most a gombot átraktam GND-re és bekapcsoltam a belső felhúzó ellenállást, de így is ugyanaz a hiba.
Az a -jel nem komplementer képzés, hanem logikai tagadás(!) akart lenni.
Amit módosítottam(+#define-ok zárójelben):

  1. 4.sor: #define GOMB_ALL (!(PINB  &   (1<<PB4)))
  2. 16.sor után: PORTB |=(1<<PB4);
(#) vzoole válasza labu01wx hozzászólására (») Dec 27, 2009 /
 
  1. #define LED_ALL  PORTB & (1<<PB3)

helyett inkább:
  1. #define LED_ALL  PINB & (1<<PB3)


Ha ez sem oldaná mag akkor elkezdeném lebontani a programot...

Kezdeném egy sima gombvizsgálattal, ha van gomb, akkor bekapcsolja a LED-et.
Utána építeni vissza... ha van gomb és 3mp múlva is van gomb akkor kapcsolja be a LED-et.
Majd ha van gomb és LED kikapcsolva és 3mp múlva is van gomb, akkor bekapcsolja a LED-et.

Ezután jöhet a kikapcsolás rész... Így meglesz, hogy hol a hiba.
(#) janyjozsef válasza labu01wx hozzászólására (») Dec 27, 2009 /
 
Hali!

Ez a baj!
A logikai tagadás. Ugyanis az if csak true, vagy false-t tud kezelni.

Ezért vagy a
  1. PORTB & (1<<PB3)
-at lesifteled úgy, hogy az eredmény a 0. helyre kerüljön, vagy
  1. if(PORTB & (1<<PB3) != (1<<PB3))

vagy
  1. if(PORTB & (1<<PB3) == 0)


bármelyik jó.
Én is jártam így. Az if logikát néz (sajnos) ezért igaz vagy hamis esetben csak a 0-ás bitet figyeli.
(#) labu01wx válasza janyjozsef hozzászólására (») Dec 27, 2009 /
 
Módosítottam ahogy írtad és működik.
Még érdekelne, hogy mekkora ellenállás ajánlott a gomb elé(ha kell egyáltalán), a resetre kell-e felhúzó ellenállás és a belső jó-e erre a célra?
A segítséget köszönöm.
(#) janyjozsef válasza labu01wx hozzászólására (») Dec 27, 2009 /
 
Szia!

A reset lábra érdemes külső felhúzó ellenállást rakni (már csak azért is, mert, ha nem I/O-nak használod, akkor elvileg a belső felhúzó sem kapcsol be rajta. Elvileg.) kb 10k és egy reset föld közötti 100nF kondit is.

A gombhoz szerintem elég a belső felhúzó ellenállás. Én csak azt szoktam használni. Bár sokan használnak külsőt is. Nekem eddig nem volt problémám abból, hogy csak a belsőt használtam. A gomb és föld közé is érdemes 100nF kondit tenni.
(#) trudnai válasza janyjozsef hozzászólására (») Dec 27, 2009 /
 
Idézet:
„Az if logikát néz (sajnos) ezért igaz vagy hamis esetben csak a 0-ás bitet figyeli.”


Ebben biztos vagy? Ha igy van akkor hibas a fordito, ugyanis C-ben a nulla jelenti a hamisat, es nullatol eltero az igazat. Ha nem igy mukodik akkor nem felel meg egyik altalam ismert C szabvanynak sem (K&R, ANSI C, C99, de akar C++ es C# szabvanyoknak sem).
(#) labu01wx válasza trudnai hozzászólására (») Dec 27, 2009 /
 
Nálam a 0b00001000 -t igaznak fordítja.
(#) Topi válasza janyjozsef hozzászólására (») Dec 27, 2009 /
 
Idézet:
„már csak azért is, mert, ha nem I/O-nak használod, akkor elvileg a belső felhúzó sem kapcsol be rajta. Elvileg.”


Hadd legyek kukacoskodó. Elvileg. Persze gyakorlatilag lekapcsolhatatlanul, huzalozva van minden reseten a belső felhúzó. Erről árulkodik minden AVR "Reset Logic" blokk vázlata.
(#) labu01wx hozzászólása Dec 27, 2009 /
 
A hiba oka az volt, hogy a logikai és(&&) helyett bitművelet ést(&) használtam:
  1. if (GOMB_ALL && LED_ALL)
(#) janyjozsef válasza trudnai hozzászólására (») Dec 27, 2009 /
 
Szia.

If...

Igen én azt tapasztaltam, hogy ha PORT lábat maszkolva teszel be if feltételbe, akkor vagy el kell shiftelni úgy, hogy a legalsó bitre jöjjön ki vagy == vagy != feltételt kell használni.

Szerintem is a fordító a hibás, de melyik fordító hibátlan?

RESET
Nem vitatkozom. Igaz. Bár az ajánlásokon van külső RC. Én szoktam tenni. Sőt van, hogy diódát is teszek. Volt egy alkalom, hogy nem jöttem rá a reset okára és a diódák megoldották. A konkrét ok nem érdeket. Működik.
(#) zolee1209 válasza janyjozsef hozzászólására (») Dec 27, 2009 /
 
Nekem nincs semmi a RESET lábon, és még nem volt vele gondom. Igaz konkrét céláramkör még nem volt, mert csak próbapanelon fejlesztgetek, de eddig nem volt gondom véletlenül fellépő reset-tel...
(#) gtk válasza janyjozsef hozzászólására (») Dec 27, 2009 /
 
Ezt az if dolgot mar kinoztuk. Nekem soha nem volt gond vele. Legtobb esetben "!=", "==" opearotok nelkul hasznalom.
(#) Szobiati hozzászólása Dec 28, 2009 /
 
Sziasztok!
Egy relatíve egyszerű áramkört építek, ami a számítógépről szándékozik állítani egy motor fordulatszámát, természetesen a felhasználó által a számítógépen megadott adatok alapján. A vezérlés kész, csak a géppel kellene végre elkezdenem "beszélgetni". (Gyakorlatilag csak 8 vagy inkább 16 bitet kellene a géptől az AVR ATMega88-omba juttatni)
Pár órát bújtam a Gooogle-t eddig erre jutottam:
Kapok 12V-ot a csatlakozóról, erről elmegy a procim és minden ami kell, mert a motornak saját áramforrása van.
Az RX és TX lábakra rákötve a processzorom, tudok fogadni, illetve küldeni adatot.
A küldés a start bittel kezdődik, majd a baudrate alapján másodpercenként x-szer leolvasom, ill. írom az adott lábakra az adatot.
Ez így helyes? Mert nekem túl egyszerűnek tűnik.
Valamint azt nem tudom, hogy a startbit az egy logikai 1 az addig 0-án álló RX vagy TX lábakon?

A programot a gépre C#-ban írnám. Ő tud byte tömböt küldeni soros portra, ami nekem nagyon megfelel.

Ennyi lenne az egész, vagy valamit félreértek?
Eléggé kezdő vagyok a témában, bár igyekszem.
(#) gallz válasza Szobiati hozzászólására (») Dec 28, 2009 /
 
Hello, én is kezdő vagyok, de hasonló problémákkal birkózok. A soros porti kommunikációt én egy MAX232 -es buszmeghajtóval oldottam meg. Ha jól tudom simán RX TX lábakra rákötve nem működik a dolog.. Itt egy példa a bekötésre.
(#) szepnorbee hozzászólása Dec 28, 2009 /
 
Üdv mindenki! Lenne egy óriási gondom. Most tanulom az AVR programozást Bascom-ban. Egy egyszerű órát szerettem volna építeni mega8-al. A program kész is, de az óra nem jár. Egy fórumon javasolták hogy állítsam át a fuse biteket. Jelenlegi utolsó állapotában most elvileg így van: Ext.Low-Freq. Crystal, Start Up Time 1K CK + 64ms ; CKSEL=1001 SUT=01

De azóta nemhogy a programom nem fut ami eddig legalább ment, bár állt az óra, hanem mostmár a procira se tudok írni/olvasni. Mi lehet szerintetek a megoldás?
(#) zolee1209 válasza szepnorbee hozzászólására (») Dec 28, 2009 /
 
Szia!
A válasz egyszerű, kizártad magad a processzorból! Amikor átállítottad az oszcillátort külsőre (alapból belső RC), nem volt rajta a kavics... Bővebben: Link Ez egy megoldás a problémádra, nekem sokszor segített, igaz én tranzisztorosat építettem!
(#) szepnorbee válasza zolee1209 hozzászólására (») Dec 28, 2009 /
 
Szia! Amikor átállítottam rajta volt egy 32 khz-es kvarc. Gondolod az kicsi lett volna? Most meg már hiába tettem rá a 4 mhz-es kvarcot a két 22p-s kondival, nem indul el. És ezt a pacemaker-t az xtal lábakra kell tenni a kvarc helyére?
(#) kostyalzsolt hozzászólása Dec 28, 2009 /
 
Sziasztok
A segítségeteket szeretném kérni, most kezdtem az AVR-el foglalkozni. Megépítettem a LED-es villogót Attiny2313-al, ami ugye nem egy bonyolult áramkör és a pufferelt programozót. Elvileg mindent jól csináltam, a programot feltölti a kontrollerbe és vissza is olvassa, de mégsem működik. Itt lediferáltam. A kapcsolásokat átnéztem és minden jónak tünik. Ha valakinek van valami ötlete szívesen venném.
Zsolti
(#) zolee1209 válasza szepnorbee hozzászólására (») Dec 28, 2009 /
 
Szia!
A cikkben mindene le van írva részletesen! Az, hogy a 32kHz-es kvarc mennyire kicsi nem tudom, ilyen alacsony frekijű kvarcot még nem használtam. De valahol már olvastam, melyik sebességtartomány melyik megnevezéshez illik; low, medium, vagy high freq...
(#) szepnorbee válasza zolee1209 hozzászólására (») Dec 28, 2009 /
 
Szia! Megépítettem de ezzel sem működik :S Oszciloszkóp nélkül hogy lehetne letesztelni? Sehogy? Amugy elvileg ha ezzel meghajtom a procit akkor az utolsó programnak is el kell indulnia?
(#) zolee1209 válasza szepnorbee hozzászólására (») Dec 28, 2009 /
 
Szia!
Az oszcillátort a megfelelő XTAL lábra tetted? Oszcilloszkóp nélkül hogyan tesztelheted? Ha van esetleg egy bináris számlálód, vagy néhány darab, akkor azzal leosztod a frekvenciáját 20Hz környékére. Ha arra a lábra teszel egy LED-et, amin a legkisebb a frekvencia és azon villog, akkor működik!
Ami a programot illeti, nem vagyok biztos benne, de lehet, hogy az előzőleg beírt program fut. A programozó először a biztosíték biteket írja, majd a program többi részét. De már a programozás elején átállítódik külső oszcira a proci, ami nincs rajta, így a programozás nem fejeződik be. De ez csak egy feltételezés, meg amúgysem tartanám egészségesnek, hogy kétszer volt megírva a proci "félig"...
(#) trudnai válasza Szobiati hozzászólására (») Dec 29, 2009 /
 
Az AVR nem "proci" hanem kontroller -- aminek van processzora is, meg sok mas egysege, pl memoriaja es periferiai pl soros kommunikacios modul.

Masik, hogy ha 12V-rol szeretned taplalni, akkor nyilvan kell tenned egy regulatort vagy valami mas feszultseg csokkentot, mert 3-5V-rol mukodnek ezek a dolgok. Szinten ha RS232-hoz szeretned azt a soros kommunikacios modult kotni, akkor szintillesztest is kell csinalnod, pl olyan max232-set amit gallz is javasolt.

Szoftveresen is megoldhatod a soros kommunikaciot, de nem erdemes. Az UART-ot felprogramozod megfelelo sebesseg/bitszam stb-re, majd az kuldeni fog neked interruptot mikor beerkezett egy teljes byte... Kozben a kontroller csinalhat valami mast is...
(#) Szobiati válasza trudnai hozzászólására (») Dec 29, 2009 /
 
Köszönöm a válaszokat!
Mindenek előtt elnézést a kis fogalmi zűrzavarért, az AVR mivolta körül.
Aztán, amint tudok szerzek egy MAX232-es IC-t és megcsinálom azzal az illesztést, addig pedig utánna nézek az UART-nak is, hogy miként működik ez.
Mégegyszer köszönöm a válaszokat, úgy gondolom sokat segítettek.
(#) szepnorbee válasza zolee1209 hozzászólására (») Dec 29, 2009 /
 
Üdv! Ezzel a kapcsolással próbálom feléleszteni a chipemet: http://www.hobbielektronika.hu/kapcsolasok/seged_orajel_generator.html de néhány dolog nem tiszta a kapcs.rajz alapján, a kimeneti résznél. Szóval az AVR és az órajel generátor testje gondolom legyen közös és a CD4069 IC 4-lába pedig az XTAL1-lábon? A CD4069 4. és 1. lába közös kell legyen, vagy a kimenetnél az az 1.szám nem az IC lábát jelöli már?
(#) IMi válasza szepnorbee hozzászólására (») Dec 29, 2009 /
 
Hello!
Mindent helyesen gondolsz! Az IC 4. lába a kimenet az 1 a csatlakozó egyes lábara utal (így az lesz a kimenet)
(#) szepnorbee válasza IMi hozzászólására (») Dec 29, 2009 /
 
Hiába, nem indul az AVR. Lehet sikerült kiütnöm mindkét CD4069 IC-met mert először úgy próbáltam hogy az 1-4-et összekötöttem. Így már semmi sem biztos. Nem tudsz te, vagy bárki egy olyan kapcsolást ami 555-el stabil 1Mhz négyszögjelet állít elő? Csak ez van készleten. Próbáltam a segédprogramoknál az 555 kalkulátorral, de sehogy nem tudtam 1Mhz-et előállítani, nameg a kitöltést sem tudom milyen lenne jó. Próbált már valaki 555-el meghajtani AVR-t? Életképes ötlet egyáltalán?
(#) edison14 hozzászólása Dec 29, 2009 /
 
HELLO !

Nálam majdnem ugyanez a probléma. Nekem kiolvassa az AVR-t a programozó de írni és törölni már nem akarja. Három ATmega8-al is próbáltam de egyikkel se ment. Vajon miben lehet a probléma ?

EZT a programozót építettem meg és már nagyon sokszor leellenőriztem a kábelezést és az alaktrészek helyes beültetését de semmi hibát nem találtam. Vannak esetleg olyan pontok ahol mérni lehetne feszt ? Eseetleg valami amire ügyelnem kellet volna ?
PONYPROGOT használok az égetéshez.

A választ előre is köszönöm.
(#) szepnorbee válasza edison14 hozzászólására (») Dec 29, 2009 /
 
Hali! Én is ezt használom! A ponyprog-ban Serial I/O-ra tedd ahogy le van írva az általad linkelt oldalon. Ezt a kapcsolást el sem nagyon lehet rontani. Ja meg adj neki 5V-ot
(#) IMi válasza szepnorbee hozzászólására (») Dec 29, 2009 /
 
Hello!
555-(~1MHZ)-tel.
Garancia nincs, nem próbáltam !

555_~1MHz.pdf
    
Következő: »»   173 / 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