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   446 / 840
(#) sikolymester válasza dc001 hozzászólására (») Máj 25, 2012 /
 
Milyen repoból van az avrgcc?
(#) dc001 válasza sikolymester hozzászólására (») Máj 25, 2012 /
 
(#) szdani hozzászólása Máj 25, 2012 /
 
Valaki nem látott esetleg egy olyan rajzot hogy a kamera képét megjelenítik egy kijelzőn? Mert nem találtam és szeretnék egyet csinálni.
(#) sikolymester válasza kerdes10 hozzászólására (») Máj 25, 2012 /
 
Hogy mi a WinAVR, azt rád és a google -ra bízom.
A parancsot így add ki:

avr-objdump.exe -j .sec1 -d -m avr5 foo.hex
(#) sikolymester válasza szdani hozzászólására (») Máj 25, 2012 / 1
 
Most, ha troll lennék, akkor rajzolnék paintben egy rajzot, ahol van egy kamera és egy kijelző és csatolnám.

Kérlek áruld el nekünk, hogy miért nem mész csak úgy be a boltba és veszel egy ilyen eszközt?

Ha az a válasz, hogy tanulni akarsz, akkor javaslom, hogy rakd lejjebb azt a lécet egyelőre.
(#) sikolymester válasza dc001 hozzászólására (») Máj 25, 2012 /
 
Most nekem nincsen sajna időm alaposabban foglalkozni ezzel, de szerintem a srácokat az avrfreaks fórumon az avr-gcc topikban rettentően érdekelné a dolog.

Ha a hiba tényleg jól lokalizálható és igaznak bizonyul, akkor onnan jó eséllyel tovább is kerül az avr-gcc fejlesztőkhöz is.
(#) szdani válasza sikolymester hozzászólására (») Máj 25, 2012 /
 
Boltban eléggé drága, ennél most nem az lenne a lényeg hogy tanuljak, hanem egy endoszkóp szerű dolgot akarok építeni hogy feltérképezzünk néhány járatot egy barlangban ahova nem férünk be.
(#) sikolymester válasza szdani hozzászólására (») Máj 25, 2012 /
 
Fejemet rá, hogy olcsóbban megkapod boltból, mint ahogyan össze tudod építeni. Nézz körül ebayen, meg az aliexpress.com oldalon.

A hobbista eszközök rendszerint drágábbra sikerülnek, mint a boltban kapható dolgok, kivéve, hogyha valami nagyon ritkát csinálsz. Ez nem hangzik úgy, mintha ne lehetne tele vele az eBay.
(#) Massawa válasza sikolymester hozzászólására (») Máj 25, 2012 /
 
Elvileg minden, még a legocskább telefon is tudja - (melyikban van kamera ).
Ilyen használt telefonnal meg Dunát lehet rekeszteni....
(#) szdani válasza Massawa hozzászólására (») Máj 25, 2012 /
 
Viszont a telefon kamerája általában elmegy készenléti üzemmódba ha nem használod, és feleslegesen eszi az akkumulátort mondjuk a billentyűzet világítása, a térerő keresése.
(#) Massawa válasza szdani hozzászólására (») Máj 25, 2012 /
 
Ezt a komoly problémát szerintem játék megoldani ahhoz képest, amit te akarsz megcsinálni.

Amugy nem sok pénzért kapni endoskopot is, meg tolato kamerát autokba - csak egy kicsit szét kell nézni a kisvilágban.
(#) mzozo95 hozzászólása Máj 25, 2012 /
 
Sziasztok!
Ismét sikerült rosszul beállítani az órajelet külső kvarcra.. ezek a "szemtelen" magas kvarcok nem akarnak együtt működni...

Az avr-t lehet valahogyan reset-elni? Vagyis a programot törölni belőle úgy, hogy az égető(avr-ips-mkII) nem ismeri fel?(mivel jelenleg nincs órajel...)

Valaki tudna segíteni? Életet mentene!

Zoltán
(#) sikolymester válasza mzozo95 hozzászólására (») Máj 25, 2012 /
 
Kénytelen leszel egy órajelet csiholni neki. Ha kvarcra állítottad, akkor kvarc vagy rezonátor kell neki, nincsen mese. De ha külső órajelre állítottad, akkor ha jól rémlik a XTAL1 lábra kell egy négyszögjelet tenned.

Bár nem említed, hogy milyen AVR, de bizton nem Xmegáról van szó. Xmegánál hál isten bevezették a PDI protokolt, ami ad külső órajelet, így az ember nem zárhatja ki magát véletlen.

Amúgy neked nem program reset kell, hanem a fuse biteket kell visszaállítanod olyanra, hogy belső órajelről fusson.
(#) mzozo95 válasza sikolymester hozzászólására (») Máj 26, 2012 /
 
Huh, sikerült megcsinálni, kár hogy ezekben még nincs ez az "önkizárás védelem" funkció... Köszönöm a segítséget!
(#) mzozo95 hozzászólása Máj 26, 2012 /
 
Egyébként több avr, nek lehet 1 közös kristálya? MErt most egy 6avr es panelt tervezek(atmega48), és ha hiba nélkül többre rá lehetne kötni 1 kvarcot az jó lenne, de hanem, akkor kicsit drágább lesz a projekt.

Nos, tehát t az avr-ek nél szabad közös kvarcot használni?

Üdv.: Z
(#) vtsoftware hozzászólása Máj 26, 2012 /
 
Üdv mindenkinek.

Segítséget kérnék... mily fura...

Adott egy AtMega8, 3 gomb és 3 LED.
2-es gomb megnyomására egy "sc" nevezetű változó értéke 1-re változik ("sc"=gombindex-1) és villog a 2-es LED.

Nos, ez lenne az alap történet, de sehogy sem jön össze úgy ahogy én szeretném. Sőt.

Próbáltam Timer-el, de elakadt az egész program és változókat sem tudtam állítani.

Most INT0 interruptal próbálkozok, amivel már tovább jutottam, de mégsem jó.

  1. volatile uint8_t sc = 0;
  2.  
  3. ISR (INT0_vect) {
  4.   if ((PINB & _BV(0)) && sc != 1) { // ha nem az 1. led van kiválasztva
  5.     PORTC = 0xFF; // kikapcsolom a LED-eket
  6.     sc = 1; // változóállítás
  7.   }
  8.   if ((PINB & _BV(1)) && sc != 2) {
  9.     PORTC = 0xFF;
  10.     sc = 2;
  11.   }
  12.   if ((PINB & _BV(2)) && sc != 3) {
  13.     PORTC = 0xFF;
  14.     sc = 3;
  15.   }
  16. }
  17.  
  18. int main(void) {
  19.   InitPorts();
  20.  
  21.   TCCR1B |= ((1 << CS10) | (1 << CS11)); // timer... villogáshoz
  22.   GICR |= (1<<INT0); // INT0 interrupt
  23.   SREG = 0b1000000; // Globális interrupt be
  24.  
  25.   while(1) {
  26.     if (sc != 0) { // itt a bizonyíték, hogy nem marad nulla mert villog
  27.       // viszont mindig az 1. LED (0-számú)
  28.       if (TCNT1 >= 10000) {
  29.         if (sc == 1) {
  30.           PORTC ^= (1<<0);
  31.         } else if (sc == 2) {
  32.           PORTC ^= (1<<1);
  33.         } else if (sc == 3) {
  34.           PORTC ^= (1<<2);
  35.         }
  36.         TCNT1 = 0;
  37.       }
  38.     }
  39.   }
  40. }


A gond az evvel, hogy úgy viselkedik mintha az sc 0 maradna, de mégsem.
A villogás elindul, de akármelyik gombot nyomom meg mindig az 1. villog.
Úgy tűnik mintha az interrupt nem állítaná be az "sc" változót,
ami alapesetben 0, de csak akkor villog ha az "sc" nem 0.
Van egy kis ellentmondás a dologban, de tényleg így működik.
Amint gombot nyomok - függetlenül attól melyiket - vagy az INT0 lábat talajra érintem, a villogás elindul.

Az INT0 láb egyébként 10K-val táp felé van húzva, a kapcsolók talajt kapcsolnak,
és egy-egy 1n4148-al az INT0 láb felé vannak kötve (5V - 10K - 4148 - KAPCS. - GND).
Lehet itt van a baj, de nem akarok játszani vele, nem akarom tönkre tenni az AVR-t...

Valaki esetleg látja-e a hiba okát?
Javaslatok?

Előre is nagyon köszönöm a segítséget
(#) zombee válasza mzozo95 hozzászólására (») Máj 26, 2012 / 1
 
Lehet! Kell egy AVR, ő lesz a master, annak bekötöd úgy ahogy szokás(kvarc+kondik), és beállítod kristályra.
A trükk ezután jön: a CKOPT nevű fuse bitet be kell billenteni. Ezzel erősíted fel a kvarcoszcillátor jelét.

Az órajelet a master XTAL2 lábáról veheted le, míg a többi, slave IC-nél az XTAL1-re vezeted.
A többinél csak simán külső órajelre kell állítani. A slave eszközök száma viszont korlátozott(3-4db.).
(#) TavIR-AVR válasza mzozo95 hozzászólására (») Máj 26, 2012 / 1
 
A master AVR fusebitjén a CKOUT-ot bekapcsolod. Így a órajel erősítve, bufferelve a CKOUT lábon megjeenik és oda fellógathatod az összes slave-t. A Slave-k meg XTAL1 lábukra kapják a jelet és external clock-ról járnak....
(#) sikolymester hozzászólása Máj 26, 2012 /
 
Hehe, na vajon kinek lesz igaza?
Szerintem legjobb, ha megnézed az adatlapot, hogy az általad választott avr képes-e az órajel kiadására, és ha igen ,akkor melyik lábon.
Feltételezem, hogy nem mindegyikben van ilyen periféria.
(#) sikolymester válasza vtsoftware hozzászólására (») Máj 26, 2012 /
 
A bemeneteket lebegni hagyod, vagy fix potenciálhoz vannak kötve?

Egy kapcs rajz esetleg?
(#) vtsoftware válasza sikolymester hozzászólására (») Máj 26, 2012 /
 
Ha nincs gomb nyomva, akkor lebegnek.
Arra gondolsz húzzam táp vagy talaj felé őket?

Kapcsrajzom nincs, mivel még próbapanelen van összerakva, nem utánépítek.
(#) zombee válasza sikolymester hozzászólására (») Máj 26, 2012 /
 
Hát nem mindegyiken van "CLKO" láb, ha van, akkor ez portláb is, amit a júzer talán használni is szeretne...
Pl. ATMega8/16/32-n nincs is ilyen, m48/88/168 vonalon ez a PB0/ICP1 láb ami azért másra is kellhet...
Hogy tiszta legyen, beemelek egy képet egy működő Atmel alkalmazásról: a gyári STK500 kapcsolási rajzából.
(#) zombee hozzászólása Máj 26, 2012 /
 
Közben én is kérdezek. Ismeri/megépítette már valaki az SmaTrig 2.1 nevű eszközt?
Ezzel villámokat is lehet fotózni, pontosabban a fényképezőgépet utasítja exponálásra ha villámlik.

Ebben egy ATMega88V-10AU ketyeg. A cucc egy alacsonyfrekis, 32.768kHz-es kristályt használ,
nem is ez a meglepő, hanem az hogy a FUSE biteknél a CKDIV8 be van pipálva, ergo az AVR 8.192kHz-en jár.

Programozás szempontjából ez max. 2kHz-es ISP frekit jelent amit a programozók nem nagyon szeretnek.
Az AVR Studio már akkor is szól ha 128kHz-es belső RC órajelre állítom: a CKDIV8 legyen kikapcsolva!
Korábban már én is kísérletezgettem, a CKDIV8 nem csak akkor érvényes amikor belső 8MHz-ről megy,
hanem külső kristályos használat mellett is, ezért is érthetetlen számomra hogy miért kéri a CKDIV8-at...
(#) sikolymester válasza zombee hozzászólására (») Máj 26, 2012 /
 
Most az a kérdés, hogy miként tudnád 2kHz-re állítani az ISP sebességét, vagy az, hogy valaki építette-e már meg Smatrig eszközt?
(#) huba válasza zombee hozzászólására (») Máj 26, 2012 /
 
Két kérdés: Biztos vagy benne hogy a 32k- kristály nem csupán RTC szerepet tölt be, közben a processzor a valóságban belső oszcillátororról jár?.
Figyelm a ponyprog nagyon trükkös ám, mintha forditott logikával kell pipálni vagy hasonló rémlik.
(#) zombee válasza huba hozzászólására (») Máj 26, 2012 /
 
Köszönöm szépen, most jöttem rá!
Nem a PonyProg a trükkös hanem az Atmel logikája, azaz egy "bejelölt" funkció nulla, a "kihagyott" pedig 1.
A PonyProg-os képen a legalsó sor "0x52", AVR Studio-ban megnéztem, ez 8MHz-es belső oszcillátort jelent.
(#) Ecku01 hozzászólása Máj 26, 2012 /
 
Sziasztok!

Egy atmega8-al szeretnék időt mérni (32768Hz-es kristállyal). Hogy oldjam meg azt, hogy amikor túlcsordul a timer, akkor pl egy változó értékét megnövelje eggyel?
(#) Hooligan01 válasza Ecku01 hozzászólására (») Máj 26, 2012 /
 
Szia!

Timer overflow megszakítás, abban pedig kezeled a változódat.
(#) dB_Thunder válasza Hooligan01 hozzászólására (») Máj 26, 2012 /
 
Valami ilyesmi kell neked :
  1. ISR(TIMER0_OVF_vect)     //megszakítási vektor TIMER0 értelemszerű, OVF - overflow vagyis akkor fog ide ugrani (megszakadni a program futás) ha túlcsordult a TCNT0 regiszter
  2.         {
  3. b++; // interruptnál, tehát most, 1-el növeljük a b globális változót
  4. }

A teljes minta kódot megtalálod itt:Bővebben: Link
(#) vtsoftware hozzászólása Máj 27, 2012 /
 
Helló...

Továbbjutottam a dologban - köszönet érte "sikolymester"-nek, rávezetett a megoldásra - a gombbal bekapcsolt LED villogtatással, mindennel együtt megvan...
Mivel minden LED egy-egy lábon volt, így egy portot elfoglalt.
AtMega8-on nem maradt szabad port, mert egy láb kapcsol egy relét egy másik pedig villogtat egy LED-et.

Namost. Ennek kiküszöbölésére SPI-vel vezérelve egy HC595-össel hajtom meg a LED-eket.
(A LED-ekkel beüzemelem és továbbmegyek... lehet még az Mega8-as is sok lesz a végére )

A gondom az, hogy nem tudom, hogy lehet az 595-ös lábait úgy vezérelni mint a proci portjait, lábait.
Azaz, portoknál kiadok egy parancsot, hogy kapcsolja be a PB2-t, akkor a PB2-es porton levő LED világít, a többihez nem nyúl és ugyan így a kikapcsolás.

Mivel SPI-vel vezérlem az 595-öst nem tudom, hogy kell ugyanezt megvalósítani.
Amit nem tudok, hogy tudok egy bitet állítani ha így állítom be a lábakat:

send = 0b00011010;

A legjobb lenne valami ilyesmi: (csak összeírom, a lényeg másképpen)
  1. //           0. 1. 2. 3. 4. 5. 6. 7.
  2. var labak = [0, 0, 0, 1, 1, 0, 1, 0]; // portbeállítás, 1:be; 0: ki
  3.  
  4. // led kikapcsolás
  5. labak[1] = 0;
  6. // az első láb kikapcsolása
  7.  
  8. // led bekapcsolás
  9. labak[7] = 1;
  10. // az utolsó bekapcsolása


Nem igazán tudom elmagyarázni, előre is elnézést érte... ha tényleg nem, szóljatok

Előre is köszönöm...
Következő: »»   446 / 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