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
Hello! És ha tegyük fel, gonoszak voltak az eladóbácsik és azt gondolták, hogy jól megszivatnak és átállították külső oszcillátorra én meg kvarc nélkül felprogramoztam (bár kétlem, hogy sikerült valamit is eljuttatni az AVR-hez) akkor elcsesztem? Amúgy azért is nem raktam oda kvarcot, mert nem rendeltem (és mert az a hír járja, hogy először nem is kell) ezért guberáltam otthon, és találtam egy TV-panelon egy 4,4MHz-es kvarcot az jó, az attiny45-höz?
Köszönöm a segítséget. Tudod még csak most barátkozom az AVR GCC-vel mivel eddig mikroc-ben programoztam amiben minden le volt butítva valamint a pascalt nyomtam és ott ezt procedúrának hívják. Ez van ha az embert több nyelvre kényszerítik (pascal, assembly) és mellette akar valami más jól használható nyelvet tanulni és mindent összekever.
Mindenesetre köszönöm a felvilágosítást és ezentúl SPACE
Hali!
Attiny45-el szeretném megoldani, hogy ha megnyomok egy mikrókapcsolót (PB4) , akkor bekapcsolja a ledet(PB3) és az égjen is folyamatosan. jelenleg azt értem el, hogy ha megérintem a kapcsoló lábát, vagy a PB4-es lábat akkor máris világít a led... Mellékelem a progit, mi lehet a gond, mi hiányzik még belőle? Köszi előre is.
Felhúzóellenállás!
Jelenleg határozatlan a bemeneted, azaz lebeg.
De a 45-ös rendelkezik belső felhúzóval nem?
ha nem, akkor azt a mikrokapcsoló és a PB4 láb közé kellene raknom? jelenlegi mikrókapcsoló egyáltalán jól van úgy bekötve ahogy a rajzon van?
Helló!
Ha minden igaz ennek működnie kell.
Igen, van neki beépített, de azt be kell kapcsolni, így:
Szerk.: Látom közben megelőztek...
../main.c:12: warning: left shift count >= width of type
ezt a hibaüzenetet kapom, és ha feltöltöm a led egyből világít. az első hsz-ben csatolt képen lerajzoltam, hogy van bekötve a led és a mikrókapcsoló. biztos, hogy jó az úgy?
köszi, ez a sor hova jön?
Ez nem jo _BV ( 1 << PB4 ). Vagy _BV, vagy siman maszk...>>
Igen, már megtaláltam utólag, csak vak vagyok...
Az lenne még a kérdésem, hogy a MOSI, MISO, SCK vonalakat is használhatom I/O portként, programozás után? Például a MOSI-ra kötnék egy LED-et, és a felprogramozás után villogna a LED. Esetleg azonnal le kell rántani a programozót róla, vagy a pufferelt programozóval nincs ilyen gond?
Ha gyarilag kulso kvarc lenne beprogramozva, akkor te semmit sem tudnal vele kezdeni kulso kvarc nelkul. Programozni sem tudnad, meg a fuse biteket sem. Amugy igazan elcseszni sosem tudod az AVR-t ugyanis parhuzamos programozoval mindik lehet programozni. Az ATtiny45 maximalis orajele 16MHz, ugyhogy jo lesz hozza az a 4.4MHz-s kvarc.
Igen hasznalhatod, mivel csak aktiv reset allapotban lep eletbe ezen labakon az ISP funkcio. Viszont arra ugyelni kell, hogy a labakon levo aramkor ne befolyasolja a jelszintet, azaz ha pl az SCK labat bemenetkent hasznalod, akkor ugye a kulso aramkor hajtja meg, igy a programozoval osszehajtanak. Ilyenkor azt szoktak javasolni, hogy az I/O lab es az elektronika koze 100 Ohmot kossel, es a programozo csatit kozvetlen az I/O labakra kossed. Ha ez nem megoldhato, akkor az elektronika es a lab koze ne ellenallast, hanem jumpert rakjal.
A cikluson kívül a main-be, így:
Köszönöm, délután kipróbálom, most sajnos melóhelyen vagyok.
A kapcsolóm (így, hogy a belső felhúzót használom) jó helyen van a föld és a PB4-között?
Szívesen! Igen, a kapcsoló jó helyen van.
Ajánlom figyelmedbe ezt az adatlapot. Ha figyelmesen elolvastad a válasz kézenfekvő lesz.
A lényeg mindjárt ott lesz a Motorola felirat alatt. 3-state output. Ha megnézed a programozód kapcsolási rajzát, akkor látni fogsz rajta két darab G betűvel jelölt pontot, amik szintén a printer port felől mennek. Ezek a vezérlőjelek teszik át a 74ls244 kimeneteit nagy ohm -os állapotba. Mindez csak feltétlezés, soha nem használtam és nincs is ilyen programozó eszközöm.
Mivel nem kuldtel kapcsolasi rajzot, nehez megmondani. Az a kis abra csak egy fekete pottyot tartalmaz, ha az a fold akar, akkor meg jo is lehet, DE...
De en nem sporolnek ellenallasokkal, az ellenallas a legolcsobb alkatresz! Ha igy kotod be, es barmi gond van a firmware-eddel, akkor konyen lefoldelheted az AVR kimenetet (gomb megnyomasakor, ha ne adj Isten a bemenetet veletlen kimenetnek konfiguralod, es utana "bekapcsolod a belso felhuzast" -- ugyanis az ugyanaz a muvelet, mintha kimenetnek hasznalva aktiv magasba kapcsolnad a port labat). Emiatt szoktak aramkorlatozo ellenallast betenni meg akkor is, ha belso felhuzot hasznalsz. De ha mar ugyis beteszel egy ellenallast, akkor siman rakhatnal kulso felhuzot is... Javasolnam azonban, hogy rendesen rajzoldd meg az aramkorod, mielott megepitened! Ezt a munkahelyeden is megteheted ha van egy kis szabadidod, csak fel kell telepitened pl az Eagle-t.
Ebben tökéletesen igazad van, bár én még ennél is nagyobb bajnak érzem azt, hogy a LED-del sorban nincs ellenállás. Tényleg filléres alkatrész, ennyire nem szabadna spórolni.
Teljesen érthetetlenül állok az alábbi probléma előtt.
Várnom kell egy függvényben egy flag-re, amit egy timer kapcsol 1-re. Az alábbi részlet nem működik, mondhatni "beragad".
Viszont az alábbi sem:
Holott önmagában minden működik, a delay_ms is. Csak így működik, de hogy miért, azt nem értem.
van ellenállás a lednél, mikróhoz nem tettem, csak a rajzon nem jelöltem.
Vagnerjazon: így már működik köszi szépen :worship:
Szívesen, de ne csak nekem köszönd, más is írt itt megoldásrészletet.
Hello most keztem el foglalkozni az avr ekkel. És volna egy kérdésem.
# void m_delay_10ms(unsigned char val) { ->ez a sor mit csinál? # //------------------------------------- # unsigned char i; és ez mire szolgál? for(i=0;i Válaszotokat előre is köszönöm.
Sziasztok!
Kis segítségre lenne szűkségem. Atmel egyik digit portján szeretnék megvalósítani egy bistabil nyomógombot, ami felváltva adna 1/0 értéket. Csak az arretálásra írjatok programkódot plz! Bascom alatt csinálom. Köszi!
Megmutatod nekünk a deklarációt?
Bocs most nézem fele lemaradt.
# unsigned char i; for(i=0;i < val;i++) { ->mire szolgál? _delay_ms(10);
A void kezdetű sor az arra való, hogy egy függvényt hozzon létre, aminek a neve m_delay_10ms, és a feldolgozandó érték (a zárójelben) pedig egy val nevű, előjel nélküli érték. Amikor meghívod ezt a függvényt pl. így: m_delay_10ms(2), akkor létrehoz egy i válozót, és a for ciklus addig fut, ameddig i kisebb, mint az érték (jelen esetben 2), amit a zárójelbe írtál, és mindig hozzáad egyet. Tehát a _delay_ms(10); parancsot, ami az util/delay.h fájlban van meghatározva, annyiszor futtatja, amennyi
a zárójelbe írt szám. És mivel pl. kettőt írtál oda, lefut egyszer a _delay_ms(10), mert 0<2, de közben az i már 1, és lefut megint, mert 1<2, de többször nem, mert 2 nem kisebb mint 2. És az eredmény az, hogy vár 2*10, azaz 20 milliszekundomot.>> |
Bejelentkezés
Hirdetés |