Fórum témák
» Több friss téma |
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
Az előzőben sikerült elrontani a kódot, mivel nem zártam le, na mégegyszer:
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):
helyett inkább:
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.
Hali!
Ez a baj! A logikai tagadás. Ugyanis az if csak true, vagy false-t tud kezelni. Ezért vagy a
vagy
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.
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.
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.
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).
Nálam a 0b00001000 -t igaznak fordítja.
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.
A hiba oka az volt, hogy a logikai és(&&) helyett bitművelet ést(&) használtam:
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.
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...
Ezt az if dolgot mar kinoztuk. Nekem soha nem volt gond vele. Legtobb esetben "!=", "==" opearotok nelkul hasznalom.
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.
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.
Ü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?
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!
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?
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
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...
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?
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"...
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...
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.
Ü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?
Hello!
Mindent helyesen gondolsz! Az IC 4. lába a kimenet az 1 a csatlakozó egyes lábara utal (így az lesz a kimenet)
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?
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.
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
Hello!
555-(~1MHZ)-tel. Garancia nincs, nem próbáltam ! |
Bejelentkezés
Hirdetés |