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
Köszi! Tehát akkor helytálló amit elsőre gondoltam?
Olvasd el az adatlap Timer részét, ott minden le van írva, mi sem tudjuk máshogy elmondani.
Hello!
Nemértem pontosan hogy mit szeretnél de ITT le van írva hogy hogyan tudod az 1mp-et beállítani.
Itt az én programom, ebben a Timer1-et PWM-ként használva állítom elő az 1 másodpercet 4MHz-es kvarccal
A PWM_init() függvényben.
Szia! AVR studioban írom a programot, ott egy kicsit bonyolultabb a megoldás.
Kösz valószínűleg én is TIMER1 - te fogok használni, átnézem a forráskódot amit küldtél :yes:
Az AVR Studio csak egy keret rendszer - ugy erted Assembly-ben?
Igazandibol 3 tipusu megoldas letezik: 1. Aktiv varakozas - ciklus meghatarozott ideig porog szamlalok segitsegevel; Neked kell kiszamolni hany utasitasbol all a ciklusod ill azok vegrehajtasa mennyi idobe telik. Ez alapjan allitod be a szamlalo kezdeti erteket, hogy a vegen a szukseges hosszusagu idot veszitsd el. 2. Passziv varakozas - ciklus kilepesi feltetele a timer interrupt pollozasaval mert ido eltelte; Elonye, hogy nem kell szamolgatni utasitasokat, kesobb konnyebb tovabb fejleszteni, hogy mas dolgokat is pollozzgasson, ne csak tetlenkedjen. 3. Megszakitasos - timer megszakitas adja a varakozast, kozben a fo ciklus vagy nem csinal semmit sem; Elonye, hogy a nagy semmit tevest nagyon konnyu atalakitani tevekeny dolgokra, es kozben meg csak nem is kell figyelgetni (pollozgatni) az eltelt idot.
Sziasztok!
Egy attiny45-össel kísérletezgetek éppen. A cél az volna, hogy a PB0-ra kötött LED világítson ha PB4 magas logikai állapotban van. Úgy csináltam, hogy a PB1-et kimenetként használom és az azon lévő 5 V-ot kötöm vissza a PB4-re Ezt a "programot" írtam meg hozzá és nem működik, nem világít a LED sehogysem. Mi lehet a baj?
A 2000ms-os delay-t azért tettem bele, mert gondoltam amíg bedugom a vezetéket addig a kapcsolókhoz hasonló "pergés" lép fel. Nagyon ciki megoldás ez a drótozgatós tudom de nincs itthon semmi kapcsoló. Még azt hozzátenném, hogy a PB4-et 5kohm-os ellenállással földre kötöttem. Köszönöm a segítséget és a türelmet
A 9. sort cseréld erre:
Én bekapcsolnám a felhúzó ellenállást a PB4-en és alacsony szintre világítana a LED.
Hello!
Megpróbáltam de így sem megy. Ugyanakkor kipróbáltam az ominózus portot (a 4-est) mint kimenet de a led nem világít már. Sőt az összes többi "bal oldali" port sem. Ellenben jobb oldalon minden okés (PORT 0 ,1, 2 kifogástalan azokon világít a led). Olyan lehet, hogy tönkretettem a procit mert ellenállás nélkül egy sima dróttal kötöttem rá a kimenetként konfigurált port 5 voltját egy bemenetként konfigurált portra? Idézet: „Olyan lehet, hogy tönkretettem a procit mert ellenállás nélkül egy sima dróttal kötöttem rá a kimenetként konfigurált port 5 voltját egy bemenetként konfigurált portra?” Lehetséges, de ezzel egyébként is nagy hülyeséget csinálsz, tök felesleges, nem is értem, hogy mi értelme van ennek. A regisztereket címezd rendesen, ne bináris értékeket adj meg, hanem inkább shiftelj.
Hát sok értelme nincsen persze csak próbálgatni akartam hogy úgy kell-e a portokat bemenetként használni ahogy gondoltam. Mátrixbillentyűzeteknél is éppen hasonló módon történik a dolog avval akarnék egy kapcsolást építeni, azért tesztelgettem ezt. Mondom gombbal akartam én csak nem volt itthon semmi én meg türelmetlen voltam. A shiftelésre át fogok szokni.
Ez így eléggé rövid zár, és valószínűleg tönkreteszi a vezérlőt. A billentyűzeteknél is van bent ellenállás.
Idézet: „Olyan lehet, hogy tönkretettem a procit mert ellenállás nélkül egy sima dróttal kötöttem rá a kimenetként konfigurált port 5 voltját egy bemenetként konfigurált portra?” Dorot a keritesnel hasznalnak, elektronikaban vezetekeket es kabeleket hasznalunk En amugy nem hinnem, hogy bemenetkent hasznalva tonkre menne ha egy masik kimenetet siman rakotsz, mivel a bemenetnek magas impednancian kell lennie. De pl ha kimenet-re kotsz kimenetet ugy, hogy egyik magas masik alacsony (akar par nanosecundumra is), akkor mar lehet megszokhet az aram annyira, amit mar nem visel el. Magyaran a vedo ellenallast soha sem szabad elhagyni, mert barmikor csinalhat az ember egy hibat a firmware-ben es akkor annak a hardver latja a karat...
Nos nem hagyott nyugodni a dolog ki akartam deríteni mi a helyzet elrontottam-e vagy sem.
Beégettem a prociba ezt:
A portokra ledeket kötöttem ellenállással. Nagyon érdekes és számomra megmagyarázhatatlan dolgot tapasztaltam. Ha PORTB5-re is ledet kötök akkor az összes többi eddig normálisan világító led kialszik és a PORTB5-ön a led alig láthatóan világít. Amint lehúzom a PORTB5 ledjét az összes többi ismét elkezd világítani. Ez mitől lehet?
Jesszus ember!
A PB5 az 1-es láb. Ha megnézed a proci ábráját, akkor oda is van írva, hogy RESET. A reset egy felhúzó ellenállással van ellátva, ha beledezed, akkor ezen keresztül kap tápot a led, és a procit reseteled, emiatt a program nem fut, így a többi nem világít.
Hehe, szep talalat! En meg Mega-s adatlapokat neztem, valamiert azt hittem abban matat az OP
Hello Sir-Nyeteg!
Először is köszi a választ! Másodszor pedig most hülyeségeket kérdezgetek itt olyan emberek szemével nézve akiknek már van rálátása ezekre a dolgokra ezt belátom. De emiatt kérlek ne törj pálcát felettem nem vagyok annyira műszaki analfabéta mint amennyire a kérdéseimből gondolnád. Egyelőre nem értek túl sokat a mcu programozáshoz, kevés rálátásom van azért kérdezek hasonlókat a témában. De célom, hogy képbe kerüljek mert érdekel a vezérléstechnika és szeretnék evvel is foglalkozni. Mindezt nem szemrehányásnak szántam csak a helyzet tisztázása végett szögeztem le. Volna még kérdésem: hogyan használhatnám az 5-ös portot is hagyományos portként mint a többit kikapcsolható-e az ellenállás? Illetve hány mA annak a jelnek az áramerőssége ami a mikrovezérlő portjára érkezhet? A szükséges előtétellenállás megválasztása miatt kérdezem. Köszi szépen!
Hello!
Szerintem szörnyeteg kolléga sem "beszólni" akart, csak a meglepetés erejével hatott a felfedezése. Én is meglepődtem, pedig olvastam a kérdésed előtte. Ebből tanul az ember, ha minél többet csinál, gyakorol, és kérdez, az pedig természetes hogy elsőre nem megy. A RESET lábat hagyd ki a portok használatából. Valójában lehet azt is használni portként, viszont akkor ki kell kapcsolni a reset funkciót, és ez után többet nem tudod programozni a kontrollert ( hagyományos programozóval ). Az áramerősség tekintetében, 10-15mA-t képes leadni a vezérlő, ezt érthetjük akkor is, ha ez az áram "befelé folyik". ( Nem néztem pontos adatlapot, sacc érték fejből )
Mondjuk, igen evvel okosabb az 100 Én is olyan 20mA-re gondoltam. Majd kibogarászom a pontos értéket adatlapról.
Ha szinteket akarsz figyelni, L vagy H ( alacsony, magas ) akkor egy 10K-s felhúzó ellenállás és kész. De ebböl is van beépített. Itt nem számít az áram.
Egy AVR-es oldalon láttam az alábbi kódrészletet. A "button is pressed" függvény eggyel tér vissza akkor ha gomb le van nyomva. Az if-nél látszólag miért nem vizsgálja valamilyen feltétel teljesülését(<,>,=, stb...)?
Amennyire én emlékszem C-ben mindig használni kellett ilyet. Vagy esetleg ilyenkor automatikusan egyes visszatérési érték esetén hajtja végre az if-ben lévő utasításokat?
Köszönöm!
Az if() törzsében lévő utasítás akkor hajtódik végre, ha a fejében lévő feltétel igaz.
Minden nullától különböző érték igaznak minősül. Lehet egy darab változó is benne, ha az nem nulla, akkor végrehajtódik a törzsben lévő utasítás(sorozat).
Sziasztok!
Nagyon új vagyok itt a fórumon és az avr-t is csak most kezdtem. Rendeltem egy Topi féle avr programozót a hestore -ból. Összeraktam, felment a driver, felismerte az avr studio minden frankó. Vettem egy attiny45 procit is. Ezt próbálom felprogramozni, de sehogy se akarja az igazat. Mindent úgy csináltam, ahogy le volt írva, illetve, ahogy a videón is látható. Annál a lépésnél akadok el, amikor az ISP frekvenciát át kell lőni 57.60 kHz-re és a Fuses fülnél ki kell szedni a CKDIV8 pipát aztán verify. Na, nekem erre azt írja ki, hogy failed. Már átnéztem az isp csatit, a kontaktokat, de semmi. Fórumon is néztem, hátha valami megoldás van, de nem találtam. Tudnátok valamit segíteni, hogy mi lehet a gond? Előre is köszönöm a segítségeket. Üdv.
Még annyi lemaradt, hogy ez a hiba:
WARNING: Fuse bits verification... Failed Üdv.
Sorry srácok, én voltam a béna. Mostmár megy.
|
Bejelentkezés
Hirdetés |