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   241 / 840
(#) Axel hozzászólása Jún 23, 2010 /
 
Sziasztok!

Azt szeretném kérdezni, hogy milyen hátrányokkal jár ha egy AVR-alapú áramkört külső oszcillátor nélkül építek meg? Mely alkalmazásokban van fokozott jelentősége a külső oszcillátorok használatának illetve milyen jellegű kapcsolásokban kerülendő határozottan a belső oszcillátort használni?

Köszönöm!
(#) (Felhasználó 4577) válasza Axel hozzászólására (») Jún 23, 2010 /
 
Szia!

A beépített RC oszcillátor nem olyan pontos, nem pont a beállított frekvencián fog rezegni, és ez függ a hőfoktól is, de ne arra gondolj, hogy pl 20 fokon megy, 25-ön már nem, ennél azért egy kicsivel nagyobb hőfokkülönbség kell hozzá.
Ahol fontos a stabil frekvencia (pl frekvenciamérés, PID szabályzás és más szabályzások, óra, stb.) oda külső kvarc kell.
(#) Axel válasza zeemut hozzászólására (») Jún 23, 2010 /
 
Szeva!

Magam is ilyen programozót használok és emlékeim szerint az elején éppen ez a problémám volt vele. A megoldás az volt, hogy a 8. lábbal c. cikk első(?) részében található videó alapján alaposan beállítottam mindent az AVR Studio-ban, ezt követően már működött. Javaslom próbáld ki te is, természetesen az Attiny2313-hoz tartozó beállításokkal. Ha ezt már megtetted akkor nem szóltam.
(#) Axel válasza (Felhasználó 4577) hozzászólására (») Jún 23, 2010 /
 
Hello!

Köszi a választ!
A kapcsolás -rendeltetéséből adódóan- tartósan hideg (téli) körülmények közt is fog üzemelni kültéren. Különösebben precíz időzítésekre ugyan nincsen szükség de érdekelne, hogy rábízhatom-e magam a belső oszcillátorra mondjuk -10 Celsius fokban? Vagy biztos ami biztos alapon tegyek be ez esetben inkább valamilyen kristályt?
(#) (Felhasználó 4577) válasza Axel hozzászólására (») Jún 23, 2010 /
 
Hát hogyha elárulod miről van szó, mit kell csinálnia, akkor nagyjából körvonalazódik bennem a program és meg tudom mondani.
Én inkább külső kvarcot használnék az óriási hőingadozás miatt, de csak mert biztosra szoktam ilyenkor menni és egy kvarc meg a két kondi nincs 100Ft, azon meg ne múljon.
(#) Axel válasza (Felhasználó 4577) hozzászólására (») Jún 23, 2010 /
 
Sima kódalapú beléptetőrendszer lesz ami egy mágneszárat nyit. A legprecízebb időzítés benne néhány 50ms-os delay Ha semmi kompromisszummal nem jár a külső kvarc használata akkor inkább beleteszem.
(#) (Felhasználó 4577) válasza Axel hozzászólására (») Jún 23, 2010 / 1
 
Én belső oszcillátort használnék.
(#) Axel hozzászólása Jún 23, 2010 /
 
Ok, ha valóban fölösleges a külső akkor maradok a belsőnél.
(#) TavIR-AVR válasza Axel hozzászólására (») Jún 24, 2010 / 1
 
A beléptetőrendszernél ha nyomógombokat kell megadni, akkor a belső maradhat (nem kell precíz időzítés).

Ha van soros kommunikációd (Tx/Rx), akkor _mindenképp_ kell kvarc, ha nem akarsz az osztási hiba és a hőfokváltozás miatti hibával (sebességbeli eltéréssel a névleges 9600 bpstől) megküzdeni....

ugyanez igaz, ha 1Wire eszközt használsz. azaz minden olyan kommunikáció esetén, ahol a jellel nem megy együtt az órajel...
(#) krkic hozzászólása Jún 24, 2010 /
 
Hello Topi programozóját smd-ben szeretném megépíteni ez az AVR jó bele?
(#) (Felhasználó 4577) válasza krkic hozzászólására (») Jún 24, 2010 /
 
(#) zeemut hozzászólása Jún 24, 2010 /
 
Kedves Mindenki! Kedves Topi, Alex, és Ideiglenes!

Köszönöm szépen a tanácsokat. Ezeket megválaszolnám sorjában:
1,nem volt külső kvarc az AVR-en,
2,igen, már beállítottam mindent egy a HE-n talált videó alapján az AVR Studio-ban,
3,igen, a programozóról kapja a tápot, és rajta van a tüske, a lábak is jól voltak bekötve.

Sajnos most kicsit pihire megy a projekt, mert A Tiny2313-as megsült. Megkértem az egyik kollégámat, hogy az ő égetőjével próbáljunk már rá, és gyakorlatilag "Bricked" . Így most előbb majd veszek egy másik Tiny2313-ast, aztán utána újra megpróbálom a programozót.

Köszönök minden helpet!!!

Üdv Zeemut

ui: ha esetleg valakinek lenne AVR C könyve/jegyzete/e-book-ja, akkor megköszönném, ha elküldené/megmondaná, honnan lehet letölteni, mert ugyan programozni tudok, de ez az első próbálkozásom uC-vel, illetve AVR-ekkel.
(#) (Felhasználó 4577) válasza zeemut hozzászólására (») Jún 24, 2010 /
 
Idézet:
„valakinek lenne AVR C könyve/jegyzete/e-book-ja”

Ha visszaolvasol pár oldalt, akkor valakinek lesz. A csatolmányok közt keresd.
(#) Reggie válasza zeemut hozzászólására (») Jún 24, 2010 /
 
(#) Horv válasza zeemut hozzászólására (») Jún 24, 2010 /
 
Sziasztok!

Nekem is ugyan az a problémám mint zeemutnak. Topi AVR-Doperét használom. Tiny45-t próbálok meg programozni. A videó alapján állítottam be én is mindent, Rá kötöttem egy led-t a vcc lábra, s amikor akarom olvasni felvillan, de az AVRStudio azt írja"Entering programming mode: FAILED" Mi lehet még baj?
(#) Axel válasza Horv hozzászólására (») Jún 24, 2010 /
 
A programozó vezetéke milyen hosszú kb.? Ha 20 centitől jóval több akkor elvileg az is okoz(hat) hasonló problémát.
(#) Horv válasza Axel hozzászólására (») Jún 24, 2010 /
 
Kb 15cm. De sikerült megoldanom! valamelyik vezeték rosszul csatlakozott. Már sikerült működik! Villogtatja a ledeimet
(#) Axel válasza Horv hozzászólására (») Jún 24, 2010 /
 
Na megmondom őszintén erre gyanakodtam én is leginkább Előferdül az ilyesmi.
(#) zeemut válasza (Felhasználó 4577) hozzászólására (») Jún 24, 2010 /
 
Köszönöm, már lesem is
(#) Axel válasza TavIR-AVR hozzászólására (») Jún 24, 2010 /
 
Köszi a választ! Azt még elfelejtettem hozzátenni ,hogy elvétve az eeprom-ot is újra kellhet írni. Ez a művelet ahogy az adatlapból kivettem kényesebb lehet a precíz órajelre. Még ilyenkor is bízhatok is a belső oszcillátorban szélsőségesebb hőmérsékleti körülmények közt?
(#) (Felhasználó 4577) válasza Axel hozzászólására (») Jún 24, 2010 /
 
Idézet:
„Még ilyenkor is bízhatok is a belső oszcillátorban szélsőségesebb hőmérsékleti körülmények közt?”
Igen.
(#) szoto hozzászólása Jún 24, 2010 /
 
Az Atmega16 ugyan az mint az Atmega32, csak kevesebb memóriával? Az adatlap szerint a lábkiosztása ugyanaz és különösebb eltérést nem találtam.
Kinőttem a 16-ost, felprogramoztam a 32-est, de ezzel nem működik. Kihagyhattam valamit?
(#) krkic válasza (Felhasználó 4577) hozzászólására (») Jún 24, 2010 /
 
A lefordított, HVSP-re is képes HEX:

avr_isp.hex (ATmega8-ra)

avr_isp_88.hex (ATmega88-ra)


Ebből gondoltam hogy az hogy az is jó amit linkeltem.
(#) szoto válasza szoto hozzászólására (») Jún 24, 2010 /
 
Na megoldódott!
A Fuse biteknél a JTAG kikapcsolása segített.
(#) Topi válasza krkic hozzászólására (») Jún 24, 2010 /
 
Jó is! Készítettem egy változatot pár hete ATmega88-ra is, aminek már itt volt az ideje az atmega8 válság miatt.
Viszont itt valaki kérdezte előbb (Lehet hogy Te voltál) hogy Atmega8L-re jó-e.

Jó lenne, ha nem lenne sebesség gond. Atmega8L max 8M-s, míg az USB időzítése miatt fix 12M kell.
(#) (Felhasználó 4577) válasza Topi hozzászólására (») Jún 24, 2010 /
 
Idézet:
„Készítettem egy változatot pár hete ATmega88-ra is, aminek már itt volt az ideje az atmega8 válság miatt.”

Akkor azért emlékeztem úgy, hogy csak az Atmega8 jó.
(#) krkic válasza (Felhasználó 4577) hozzászólására (») Jún 24, 2010 /
 
Most az egyszer megbocsátok.
(#) (Felhasználó 4577) válasza krkic hozzászólására (») Jún 24, 2010 /
 
(#) novarobot hozzászólása Jún 24, 2010 / 1
 
A tegnap problémát sikerült végül megoldanom, de íme itt egy újabb és ez komolyan kifogott rajtam.

Itt a HE-n lévő FIZIKUS által írt "WILL-I THE-END" című cikkből néztem egy kódot a megszakítások kezelésére, de nem tudom WIN-AVR -el lefordítani.

A kód:
(Az eredeti kódhoz képest annyit módosítottam rajta, hogy nem a PORTC hanem a PORTB 0BIT-jére tettem a ledet, és ezt kapcsolgatom ki be.)

  1. //A belső RC-t használom, de ettől a sortól fügétlenül fenn ál a hiba.
  2. #define F_CPU 1000000UL  // 1 MHz CPU clock
  3.  
  4. #include <util/delay.h>        // Idozito, keslelteto rutinokat tartalmazo fajl
  5. #include <avr/io.h>            // AVR konstansokat, baallitasokat tart. fajl
  6. #include <avr/interrupt.h>    // Megszakitasokat kezelo rutinokat tart. fajl
  7.  
  8. ISR (INT0_vect)    // INT0 megszakitas kiszolgalo rutin utasitasai
  9. {
  10.         PORTB ^= (1<<PB0);     //  PCB lab allapotat megcsereli (LED be/ki)
  11.         GICR &= ~(1<<INT0);    //  INT0 letiltasa (nyomogomb perges megakadalyozasa erdekeben)
  12. }
  13.  
  14. int main (void)        // Program eleje
  15. {
  16.         // portok beallitasa
  17.         DDRB |= (1<<PCB);        //  PC0 kimenet
  18.         PORTD &= ~(1<<PD2);    //  PD2 bemenet
  19.         PORTD |= (1<<PD2);    //  PD2-hoz tartozo felhuzoellenallas be
  20.         // az INT0 kulso interrupt beallitasa
  21.         GICR |= (1<<INT0);        // INT0 engedelyezese (PD2-es lab)
  22.         MCUCR |= (1<<ISC01);     // a lab lefuto elre adjon megszakitast
  23.         sei();         // megszakitasok bekapcsolasa
  24.         while (1)
  25.         {    
  26.                 // Ha INT0 megszakitas ki van kapcsolva, akkor egy kis varakozas utan bekapcsoljuk
  27.                 if((GICR & (1<<INT0)) == 0)
  28.                 {
  29.                         // varakozas nehany szaz ms-ig, amig a nyomogomb befejezi a pergest
  30.                         _delay_ms(250);
  31.                         // minden tovabbi varakozo megszakítás torlese, majd a megszakitasok engedelyezese
  32.                         GIFR |= (1<<INTF0);        // INT0-hoz tartozo jelzobit torlese
  33.                         GICR |= (1<<INT0);        // INT0 megszakitas engedelyezese
  34.                 }
  35.         };
  36. }


A hiba ablak tartalma:

  1. > "make.exe" all
  2.  
  3. -------- begin --------
  4. avr-gcc (WinAVR 20100110) 4.3.3
  5. Copyright (C) 2008 Free Software Foundation, Inc.
  6. This is free software; see the source for copying conditions.  There is NO
  7. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  8.  
  9.  
  10. Compiling C: main.c
  11. avr-gcc -c -mmcu=atmega88 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./main.lst  -std=gnu99 -MMD -MP -MF .dep/main.o.d main.c -o main.o
  12. main.c:1:1: warning: "F_CPU" redefined
  13. <command-line>: warning: this is the location of the previous definition
  14. main.c: In function '__vector_1':
  15. main.c:10: error: 'GICR' undeclared (first use in this function)
  16. main.c:10: error: (Each undeclared identifier is reported only once
  17. main.c:10: error: for each function it appears in.)
  18. main.c: In function 'main':
  19. main.c:16: error: 'PCB' undeclared (first use in this function)
  20. main.c:20: error: 'GICR' undeclared (first use in this function)
  21. main.c:31: error: 'GIFR' undeclared (first use in this function)
  22. make.exe: *** [main.o] Error 1
  23.  
  24. > Process Exit Code: 2
  25. > Time Taken: 00:01



Az én értelmezésem szerint (bár angolul nem tudok) nem találja a "GIFR" és "GICR" regisztereket.

Átfutottam az általam használt AVR (ATMEGA20-20PU) adatlapját, de ilyen nevű regisztereket nem találtam. De az adatlapon van INT0 és INT1 -es láb és biztosan kezeli ez az AVR is a megszakításokat.

Mi lehet a baj

Kérem a tisztelt fórumtársakat segítsenek a probléma megoldásában

Köszönettel: novarobot
(#) vzoole válasza novarobot hozzászólására (») Jún 24, 2010 /
 
Szia!

Gondolom Atmega88-at akartál írni.
Ennél máshogy hívják a dolgokat.
GIFR és GICR helyett EICRA és EIMSK kell.
(adatlap 67. oldal-External interrupts)
Következő: »»   241 / 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