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   226 / 840
(#) Axel válasza gtk hozzászólására (») Máj 25, 2010 /
 
Köszi! Tehát akkor helytálló amit elsőre gondoltam?
(#) (Felhasználó 4577) válasza gabi20 hozzászólására (») Máj 25, 2010 /
 
Olvasd el az adatlap Timer részét, ott minden le van írva, mi sem tudjuk máshogy elmondani.
(#) gabi20 válasza (Felhasználó 4577) hozzászólására (») Máj 25, 2010 /
 
Kösz akkor nekiülök
(#) puli122 válasza gabi20 hozzászólására (») Máj 26, 2010 /
 
Hello!
Nemértem pontosan hogy mit szeretnél de ITT le van írva hogy hogyan tudod az 1mp-et beállítani.
(#) toto válasza gabi20 hozzászólására (») Máj 26, 2010 /
 
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.

main.c
    
(#) gabi20 válasza puli122 hozzászólására (») Máj 26, 2010 /
 
Szia! AVR studioban írom a programot, ott egy kicsit bonyolultabb a megoldás.
(#) gabi20 válasza toto hozzászólására (») Máj 26, 2010 /
 
Kösz valószínűleg én is TIMER1 - te fogok használni, átnézem a forráskódot amit küldtél :yes:
(#) trudnai válasza gabi20 hozzászólására (») Máj 26, 2010 /
 
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.
(#) Axel hozzászólása Máj 26, 2010 /
 
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?
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3. int main(void) {
  4. DDRB = (0b00000011);//itt állítanám be PB0-t és PB1-et kimenetként
  5.                                  
  6.                                  while(1){
  7.                                  PORTB = (0b00000010);
  8.                                  if((PINB4==1){//ha PINB4 5V-on van
  9.                                  _delay_ms(2000);
  10.                                  PORTB = (0b00000001);//bekapcsol(ná) a led-et
  11.                                  _delay_ms (5000);
  12.                                  PORTB = (0b00000000);//kioltja a ledet
  13.                                  }
  14.         return 0;}
  15.         }


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
(#) (Felhasználó 4577) válasza Axel hozzászólására (») Máj 26, 2010 /
 
A 9. sort cseréld erre:
  1. if(PINB & (1<<PB4))


Én bekapcsolnám a felhúzó ellenállást a PB4-en és alacsony szintre világítana a LED.
(#) Axel válasza (Felhasználó 4577) hozzászólására (») Máj 26, 2010 /
 
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?
(#) (Felhasználó 4577) válasza Axel hozzászólására (») Máj 26, 2010 /
 
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.
(#) Axel válasza (Felhasználó 4577) hozzászólására (») Máj 26, 2010 /
 
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.
(#) puli122 válasza Axel hozzászólására (») Máj 26, 2010 /
 
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.
(#) trudnai válasza Axel hozzászólására (») Máj 26, 2010 /
 
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...
(#) Axel hozzászólása Máj 26, 2010 /
 
Nos nem hagyott nyugodni a dolog ki akartam deríteni mi a helyzet elrontottam-e vagy sem.
Beégettem a prociba ezt:
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3. int main(void) {
  4. DDRB = (1<<PORTB0)|(1<<PORTB1)|(1<<PORTB2)|(1<<PORTB3)|(1<<PORTB4)|(1<<PORTB5);
  5.                                  
  6.                                  while(1){
  7.                                  PORTB = (1<<PB0);
  8.                                  PORTB = (1<<PB1);
  9.                                  PORTB = (1<<PB2);
  10.                                  PORTB = (1<<PB3);
  11.                                  PORTB = (1<<PB4);
  12.                                  PORTB = (1<<PB5);
  13.                                  }
  14.                                  return 0;
  15.         }


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?
(#) trudnai válasza Axel hozzászólására (») Máj 26, 2010 /
 
Debug nincs beallitva veletlen?
(#) Axel válasza trudnai hozzászólására (») Máj 26, 2010 /
 
Nem tudom mire gondolsz sajnos :no:
(#) Sir-Nyeteg válasza Axel hozzászólására (») Máj 26, 2010 /
 
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.
(#) trudnai válasza Sir-Nyeteg hozzászólására (») Máj 26, 2010 /
 
Hehe, szep talalat! En meg Mega-s adatlapokat neztem, valamiert azt hittem abban matat az OP
(#) Axel válasza Sir-Nyeteg hozzászólására (») Máj 27, 2010 /
 
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!
(#) puli122 válasza Axel hozzászólására (») Máj 27, 2010 /
 
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 )
(#) Axel hozzászólása Máj 27, 2010 /
 
Mondjuk, igen evvel okosabb az 100 Én is olyan 20mA-re gondoltam. Majd kibogarászom a pontos értéket adatlapról.
(#) puli122 válasza Axel hozzászólására (») Máj 27, 2010 /
 
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.
(#) Axel hozzászólása Máj 27, 2010 /
 
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?


  1. int  main (void){
  2.          init_io();
  3.          while (1)                      
  4.         {
  5.                 if (button_is_pressed())
  6.                 {
  7.                         toggle_led();
  8.                         delay_ms(LOCK_INPUT_TIME);
  9.                 }
  10.         }
  11. }

Köszönöm!
(#) levi18 válasza Axel hozzászólására (») Máj 27, 2010 /
 
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).
(#) Axel válasza levi18 hozzászólására (») Máj 27, 2010 /
 
Köszönöm azt egyértelműsítést!
(#) SmithWebster hozzászólása Máj 27, 2010 /
 
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.
(#) SmithWebster hozzászólása Máj 27, 2010 /
 
Még annyi lemaradt, hogy ez a hiba:

WARNING: Fuse bits verification... Failed

Üdv.
(#) SmithWebster hozzászólása Máj 27, 2010 /
 
Sorry srácok, én voltam a béna. Mostmár megy.
Következő: »»   226 / 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