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   238 / 840
(#) echo11 válasza Ideiglenes hozzászólására (») Jún 20, 2010 /
 
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?
(#) edison14 válasza trudnai hozzászólására (») Jún 20, 2010 /
 
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
(#) ISF79 hozzászólása Jún 20, 2010 /
 
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.
(#) Sir-Nyeteg válasza ISF79 hozzászólására (») Jún 20, 2010 /
 
Felhúzóellenállás!
Jelenleg határozatlan a bemeneted, azaz lebeg.
(#) ISF79 válasza Sir-Nyeteg hozzászólására (») Jún 20, 2010 /
 
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?
(#) edison14 válasza ISF79 hozzászólására (») Jún 20, 2010 /
 
Helló!

Ha minden igaz ennek működnie kell.

main.c
    
(#) vagnerjazon válasza ISF79 hozzászólására (») Jún 20, 2010 /
 
Igen, van neki beépített, de azt be kell kapcsolni, így:
  1. PORTB |= _BV(PB4);
Ha az adatirány kimenet, akkor ez magas szintre teszi azt, ha viszont bemenet, akkor bekapcsolja a belső felhúzóellenállást. És ha külső felhúzóellenállást használsz, akkor azt nem a gomb és a bemenet közé kell tenni, hanem a bemenet és a +5V közé.
Szerk.: Látom közben megelőztek...
(#) ISF79 válasza edison14 hozzászólására (») Jún 20, 2010 /
 
../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?
(#) ISF79 válasza vagnerjazon hozzászólására (») Jún 20, 2010 /
 
köszi, ez a sor hova jön?
(#) gtk válasza ISF79 hozzászólására (») Jún 20, 2010 /
 
Ez nem jo _BV ( 1 << PB4 ). Vagy _BV, vagy siman maszk...>>
(#) FlyR válasza Ideiglenes hozzászólására (») Jún 20, 2010 /
 
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?
(#) Reggie válasza echo11 hozzászólására (») Jún 21, 2010 /
 
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.
(#) Reggie válasza FlyR hozzászólására (») Jún 21, 2010 /
 
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.
(#) vagnerjazon válasza ISF79 hozzászólására (») Jún 21, 2010 /
 
A cikluson kívül a main-be, így:
  1. #include <avr/io.h>
  2.  
  3.  
  4.         int main(void)
  5.         {
  6.  
  7.                 DDRB = (1<<PINB3)|(0<<PINB4);
  8.                 PORTB |= _BV(PB4);
  9.  
  10.                 while(1) {
  11.                        
  12.                         if (!(PINB & _BV(PB4)))
  13.                                 PORTB |= _BV(PB3);
  14.  
  15.         }
  16. }
Ennek már működnie kell elvileg.
(#) ISF79 válasza vagnerjazon hozzászólására (») Jún 21, 2010 /
 
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?
(#) vagnerjazon válasza ISF79 hozzászólására (») Jún 21, 2010 /
 
Szívesen! Igen, a kapcsoló jó helyen van.
(#) Ideiglenes válasza FlyR hozzászólására (») Jún 21, 2010 /
 
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.
(#) trudnai válasza ISF79 hozzászólására (») Jún 21, 2010 /
 
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.
(#) echo11 válasza Reggie hozzászólására (») Jún 21, 2010 /
 
Köszi a választ!
(#) szilva válasza trudnai hozzászólására (») Jún 21, 2010 /
 
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.
(#) deguss hozzászólása Jún 21, 2010 /
 
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".
  1. while (!timer_f) ;
  2. timer_f = 0;



Viszont az alábbi sem:
  1. while (!timer_f) {
  2. _delay_ms(1);
  3. }
  4. timer_f = 0;

Holott önmagában minden működik, a delay_ms is.

Csak így működik, de hogy miért, azt nem értem.
  1. while (!timer_f) {
  2. uart_putc('q');
  3. }
  4. timer_f = 0;
(#) gtk válasza deguss hozzászólására (») Jún 21, 2010 /
 
volatile tipus timer_f;
(#) ISF79 válasza szilva hozzászólására (») Jún 21, 2010 /
 
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:
(#) vagnerjazon válasza ISF79 hozzászólására (») Jún 21, 2010 /
 
Szívesen, de ne csak nekem köszönd, más is írt itt megoldásrészletet.
(#) deguss válasza gtk hozzászólására (») Jún 21, 2010 /
 
Igen, timer_f globális változó.
(#) krkic hozzászólása Jún 21, 2010 /
 
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.
(#) Bigya hozzászólása Jún 21, 2010 /
 
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!
(#) (Felhasználó 4577) válasza deguss hozzászólására (») Jún 21, 2010 /
 
Megmutatod nekünk a deklarációt?
(#) krkic hozzászólása Jún 21, 2010 /
 
Bocs most nézem fele lemaradt.

#
unsigned char i;
for(i=0;i < val;i++) { ->mire szolgál?
_delay_ms(10);
(#) vagnerjazon válasza krkic hozzászólására (») Jún 21, 2010 /
 
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.>>
Következő: »»   238 / 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