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   322 / 840
(#) ciszfejleszto hozzászólása Ápr 22, 2011 /
 
Hello !
Teljesen kezdőnek milyen AVR-t ajánlanátok ? AVRDragon-ról mi a véleményetek ?
Az első kérdést szó szerint gondoltam. Teljesen kezdő vagyok mikrovezérlő témakörben, azért kérdem mit tudnátok ajánlani kezdésnek..

Előre is köszönök minden választ !
(#) TavIR-AVR válasza ciszfejleszto hozzászólására (») Ápr 22, 2011 /
 
AVRDragon: szép, jó, csak az USB 5V vezérlője helyenként elszáll.....
940. AVR-Dragon


Kezdőknek a Arduino készlet javasolt. Mindent ad készen, SW/HW. egyszerű használni, és nem futsz bele az első lépésnél azonnal kudarcba....
(AVR-Duino néven fut itthon)
(#) Csirke hozzászólása Ápr 22, 2011 /
 
Sziasztok!

Egy kérdésem volna a Topi féle AVR programozóval kapcsolatban.
A cikkben azt olvastam, hogy USB-HID módban használható az RXD és TXD vonal.
Ez mit jelent pontosan? Olyan kommunikáció lehetséges vele az MCU és PC között, mint ha egy USB-UART modult használnék?

Előre is köszönöm a válaszokat!
(#) Ricsi89 válasza Csirke hozzászólására (») Ápr 22, 2011 /
 
Az a két kivezetés semmire sem jó. Sehogy sem használható soros kommunikációra. Párszor volt már téma itt, de le lett írva, hogy felejtős a dolog.
(#) H.Boti válasza Fizikus hozzászólására (») Ápr 22, 2011 /
 
Szia!
ATmega8-at használok. Mint írtam, elég kezdő vagyok, ezt nem tudtam. Tudnál segíteni, hogy az M8-hoz milyen regisztereket kell használni?
(#) suhanc hozzászólása Ápr 22, 2011 /
 
Sziasztok.
Építettem egy attiny13-al egy minipov-ot 5 ledest a gondom a következő most kezdek ismerkedni a programozással és a programot is én írtam ,ehhez kérnék segítséget mert biztos van egyszerűbb megoldás is.
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.  
  4. #define ledaa()    PORTB |=  (1<<PB0)
  5. #define ledab()    PORTB &= ~(1<<PB0)
  6.  
  7. #define ledba()    PORTB |=  (1<<PB1)
  8. #define ledbb()    PORTB &= ~(1<<PB1)
  9.  
  10. #define ledca()    PORTB |=  (1<<PB2)
  11. #define ledcb()    PORTB &= ~(1<<PB2)
  12.  
  13. #define ledda()    PORTB |=  (1<<PB3)
  14. #define leddb()    PORTB &= ~(1<<PB3)
  15.  
  16. #define ledea()    PORTB |=  (1<<PB4)
  17. #define ledeb()    PORTB &= ~(1<<PB4)
  18.  
  19. //-------------------------------------
  20. void m_delay_10ms(unsigned long val) {
  21. //-------------------------------------
  22.         while(val--) _delay_ms(10);
  23.       }
  24. //-------------------------------------
  25. int main(void) {
  26. //-------------------------------------
  27. uint8_t state;
  28.                    
  29.                            DDRB = (1<<PINB0)|(1<<PINB1)|(1<<PINB2)|(1<<PINB3)|(1<<PINB4);
  30.                            state = 0;
  31.                    while(1) {
  32.                            switch(state) {
  33.                                 case 0: ledab();
  34.                                                 ledba();
  35.                                 ledca();
  36.                                                 leddb();
  37.                                                 ledea();
  38.                                         m_delay_10ms(20);
  39.                                                 state++;
  40.                                                 break;
  41.                                 case 1: ledaa();
  42.                                                 ledbb();
  43.                                 ledca();
  44.                                                 leddb();
  45.                                                 ledea();
  46.                                                 m_delay_10ms(20);
  47.                                                 state++;
  48.                                                 break;
  49.                                 case 2: ledaa();
  50.                                                 ledbb();
  51.                                 ledca();
  52.                                                 ledda();
  53.                                                 ledeb();
  54.                                                 m_delay_10ms(20);
  55.                                                 state++;
  56.                                                 break;
  57.                                 case 3: ledab();
  58.                                                 ledbb();
  59.                                 ledcb();
  60.                                                 leddb();
  61.                                                 ledeb();
  62.                                                 m_delay_10ms(70);
  63.                                                 state++;
  64.                                                 break;
  65.                                 case 4: ledaa();
  66.                                                 ledbb();
  67.                                 ledca();
  68.                                                 leddb();
  69.                                                 ledea();
  70.                                                 m_delay_10ms(20);
  71.                                                 state++;
  72.                                                 break;
  73.                                 case 5: ledaa();
  74.                                                 ledbb();
  75.                                 ledca();
  76.                                                 leddb();
  77.                                                 ledea();
  78.                                                 m_delay_10ms(20);
  79.                                                 state++;
  80.                                                 break;
  81.                                 case 6: ledab();
  82.                                                 ledba();
  83.                                 ledca();
  84.                                                 ledda();
  85.                                                 ledeb();
  86.                                                 m_delay_10ms(20);
  87.                                                 state++;
  88.                                                 break;
  89.                                 case 7: ledab();
  90.                                                 ledbb();
  91.                                 ledcb();
  92.                                                 leddb();
  93.                                                 ledeb();
  94.                                                 m_delay_10ms(70);
  95.                                                 state++;
  96.                                                 break;
  97.                                 case 8: ledab();
  98.                                                 ledba();
  99.                                 ledca();
  100.                                                 leddb();
  101.                                                 ledeb();
  102.                                                 m_delay_10ms(20);
  103.                                                 state++;
  104.                                                 break;
  105.                                 case 9: ledaa();
  106.                                                 ledbb();
  107.                                 ledcb();
  108.                                                 ledda();
  109.                                                 ledeb();
  110.                                                 m_delay_10ms(20);
  111.                                                 state++;
  112.                                                 break;
  113.                                 case 10:ledab();
  114.                                                 ledba();
  115.                                 ledcb();
  116.                                                 leddb();
  117.                                                 ledea();
  118.                                                 m_delay_10ms(20);
  119.                                                 state++;
  120.                                                 break;
  121.                                 case 11:ledaa();
  122.                                                 ledbb();
  123.                                 ledcb();
  124.                                                 ledda();
  125.                                                 ledeb();
  126.                                                 m_delay_10ms(20);
  127.                                                 state++;
  128.                                                 break;
  129.                                 case 12:ledab();
  130.                                                 ledba();
  131.                                 ledca();
  132.                                                 leddb();
  133.                                                 ledeb();
  134.                                                 m_delay_10ms(20);
  135.                                                 state++;
  136.                                                 break;
  137.                                 case 13:ledab();
  138.                                                 ledbb();
  139.                                 ledcb();
  140.                                                 leddb();
  141.                                                 ledeb();
  142.                                                 m_delay_10ms(70);
  143.                                                 state++;
  144.                                                 break;
  145.                                 default: state = 0;
  146.                  }
  147.                    }
  148.                    return 0;
  149. }

Azt írja ki S3 (és egy szívecske). Valahogy ha rövidebb lenne a kód több karakter is beleférne 1k memória nem valami sok de olcsó ahhoz hogy tönkre tegyem .
Segítséget köszönöm előre is.
Üdv.: Suhanc
ui.: A reset lábat is tudom használni ledhez?

100_6022.JPG
    
(#) Fizikus válasza H.Boti hozzászólására (») Ápr 22, 2011 /
 
Szia!
Az ATMega8-nal a Timer1 es a Timer2 tud PWM-et eloallitani. Olvassad el az alabbi cikkeket, ezek alapjan, es az ott levo peldakodokat megnezve mar nem lehet gond a hasznalatukkal:
ATMega8 PWM Timer1-el
ATMega8 PWM Timer2-vel (szervo)
(#) H.Boti válasza Fizikus hozzászólására (») Ápr 22, 2011 /
 
Szia!
Köszi a segítséget, már nagyjából értem.
(#) sgt válasza suhanc hozzászólására (») Ápr 23, 2011 /
 
Azzal tudsz machinálni, ha nem külön-külön állítod a port biteket hanem egyszerre.

Ebből:
  1. ledbb();
  2. ledca();
  3. ledda();
  4. ledeb();


Ezt:
  1. PORTB=0b0110;


Mert ha jól emlékszem akkor a fordító a fentebbi sorokat külön külön fordítja (nem beszélve az OR, NAD, NOT logikáról, ami szintén plusz terület), míg a lentebbi egy sor és ennyi.
(#) labu01wx hozzászólása Ápr 24, 2011 /
 
Sziasztok!
Elkezdtem írni egy bootloadert, egy nagyon alap verzió már kszen is van, de nem tudom, hogy hogyan fordítsam le, hogy a NRWW memóriaterületre kerüljön és el is induljon.
C-ben írom és avr-gcc vel fordítom. Több helyen láttam, hogy a -WI és a -section-start= paraméterekkel hívják meg a linkert, de nem tudom, hogy pontosan, hogyan kell használni őket. Másik kérdésem, hogy a BOOTLOADER_SECTION attribútumot ilyenkor is használni kell vagy csak akkor, ha nem bootloaderként fordított programot szeretnék a NRWW részbe helyezni?
(#) kovacsj hozzászólása Ápr 25, 2011 /
 
Sziasztok!

Egy olyan kérdés merült fel bennem, hogy egy GSM-modul vajon megkergül-e ha az Rx-Tx vonalon nem AT-parancs jelenik meg, vagy csak egyszerűen figyelmen kívül hagyja?

Ugyanezt a két szálat a számítógép RS232-es portjával is szeretném összekötni, bizonyos adatok adatbázisba történő írása érdekében. Két funkciója lenne az eszköznek, egyrészt SMS-t tudna küldeni, másrészt pedig a fogadott SMS-t írná adatbázisba.

De amikor az adatbázisba írom a soros porton át, ugyanezek a jelek megjelennek a GSM-modulon is.

Nem szeretném a saját káromon megtanulni, ezért abban bízom, hogy valaki itt ezt tudja.

Köszönöm előre is a segítséget!
(#) bedoweb hozzászólása Ápr 25, 2011 /
 
Sziasztok!

Épp egy új projektemet finomítottam, aztán vmiért nem hajlandó programozni a programozó(Topi féle). A program ezt írja ki:
Idézet:
„vrdude: stk500v2_command(): command failed
avrdude: stk500v2_command(): command failed
avrdude: stk500v2_program_enable(): cannot get connection status
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.


Egyszerűen nem tudtam rájönni, hogy mi a baja. Remélem tudtok nekem segíteni. Várom mihamarabbi ötleteket

üdv; bedoweb
(#) labu01wx válasza kovacsj hozzászólására (») Ápr 25, 2011 /
 
Szia!
Próbáltad már lerajzolni?
Ha lerajzolod, akkor látod, hogy a gsm modul tx lába össze van kapcsolva az rs232 tx lábával. És ha az egyik láb +, a másik láb -, akkor az avr fogalmam sincs, hogy mekkora feszt kap, de az biztos, hogy nem fog működni.
Valamivel meg kellene oldanod a leválasztást és akkor nem kell foglalkoznod a jelek szűrésével. A gyakorlati megvalósítást majd valaki hozzáértőbb leírja.
(#) kovacsj válasza labu01wx hozzászólására (») Ápr 25, 2011 /
 
Ezt értem és köszönöm! A leválasztást valahogy meg is fogom oldani, különös tekintettel az eszközök eltérő feszültségére. Már csak azt kell kitalálnom, hogy hogyan? Kapcsolható vonalakat kell alkotnom, melyek szükség szerint csatlakoznak a GSM-modulhoz vagy az RS232-es porthoz, és ezt a csatlakozást a mikrokontrollernek kell vezérelnie. Szempont az is, hogy minél kisebb legyen (furatszerelt azért még belefér, de VMK-64-es mágneskapcsoló nem). Erre esetleg lenne valakinek ötlete?

Előre is köszönöm a segítséget!
(#) suhanc válasza sgt hozzászólására (») Ápr 26, 2011 /
 
Igen. Idő közben megtaláltam én is ezt és jó is, sokkal több fér bele. És valami idő tagot hogy lehet bele fabrikálni? Pl:
time1 kód time 1 vége
time2 kód time 2 vége
És amikor az idő tag lejár ugrik a következőre amíg nem addig ismétli . Valami egyszerű van erre?
(#) TavIR-AVR válasza bedoweb hozzászólására (») Ápr 26, 2011 /
 
- A programozo es az AVR kozt a kapcsolat rossz (kábelszakadás, vezetékcsere...)

- AVR-en tapfesz van?

- A programozon a fesz illesztes megvan?

- Az AVR-t meg nem programoztad eddig semmivel, igaz? az -F kapcsolót remélem nem próbáltad ki!

- A Chip ID visszaolvasása ha nem megy, akkor TILOS a nélkül programozni! Az esetek 90%-ában véletlenszerű biztosítékbit beállás lesz belőle....

- Teljesen szűz ICnél is ezt csinálja?
(#) TavIR-AVR válasza kovacsj hozzászólására (») Ápr 26, 2011 /
 
4066 MUX IC?

A fesz. szintek nem lehetnek az AVR lábán GND-0,7...Vcc+0,7V tartományon kívül. Ez a chip halálát okozná!

Esetleg ellenállásosztó /zeneres megfogás, MAX232, MAX9000 ?
(#) kovacsj válasza TavIR-AVR hozzászólására (») Ápr 26, 2011 /
 
A MAX232 rendben van, azt használom most is a számítógép felé menő kapcsolatban. A másik oldal még kétséges, de van két lehetőség is a kézikönyvben. A tranzisztorossal szimpatizálok, mert a másik IC-ről nincs sok elképzelésem. Mi ezekről a véleményetek?

Köszönöm előre is!
(#) bedoweb válasza TavIR-AVR hozzászólására (») Ápr 26, 2011 /
 
Köszi TavIR-AVR

-akkor átkábelezem
-van tápfesz, de programozásnál az USB-ről jövő 5v-ot használom
-csak ezzel a programozóval programoztam, és nem tudom mi az az -F kapcsoló
-szűz IC-vel nem próbáltam de egy másikkal igen, de annál is ezt irta ki (és eddig gond nélkül müködött)

köszi szépen, és ha ezekből még vmi kiderül akkor írj mindenképp
(#) bedoweb válasza bedoweb hozzászólására (») Ápr 26, 2011 /
 
A kábelekkel semmi gond, újrakábelezve sem működik
(#) Topi válasza bedoweb hozzászólására (») Ápr 27, 2011 /
 
Pontosan írd le, milyen paraméterekkel hívod meg az AVRDude-ot. Na meg persze milyen op.rendszeren.
(#) L_Maqvus hozzászólása Ápr 27, 2011 /
 
Sziasztok!

Uartot akarok pufferelni, mivel protokolszerűen akarom vezérelni!

De valamiért nem müködik! -a hiba hogy a puffer valamiért ürül!

A kód:
  1. #define F_CPU 7372800UL  // rendszer orajel: 7.3728 MHz
  2. #define USART_BAUDRATE 9600  // soros kommunikacio sebessege: 9600 bps
  3. #define UBRR_ERTEK ((F_CPU / (USART_BAUDRATE * 16UL)) - 1)  // UBRR
  4.  
  5. #include <avr/io.h>
  6. #include <avr/interrupt.h>
  7. #include <inttypes.h>
  8. #include <util/delay.h>
  9.  
  10. #define s_kozep 24
  11.  
  12. volatile char buff[16];
  13. volatile int n_b=0;
  14.  
  15. void sendbufer(){
  16.  int i=0;
  17.  for (i=0; i<15;i++) {UARTAdatKuld(buff[i]);}
  18.  UARTAdatKuld('\n');
  19. }
  20.  
  21. void clearbuffer(){
  22.  int i=0;
  23.  for (i=0; i<15;i++) {buff[i]='0';}
  24.  n_b=0;
  25. }
  26.  
  27. void adat_feldolg(){
  28. //PORTC &= ~(_BV(LED_PIN)); // LED be
  29.  int ford=3; // fordulat
  30.  char b[4];
  31.  if(buff[0]=='S'){
  32.    b[0]=(char)buff[1];
  33.    b[1]=(char)buff[2];
  34.    b[2]='\0';
  35.    ford=atoi(b);
  36.    if (buff[3]=='j') {Szervo(s_kozep-ford);}
  37.     else {Szervo(s_kozep+ford);}
  38.   }
  39. }
  40.  
  41.  
  42. ISR(USART_RXC_vect)  // RX interrupt, ezek az utasitasok futak le ha adat erkezik a TX vonalon
  43. {
  44.         char data;
  45.         data = UARTAdatFogad();  // A berekezo bajt fogadasa
  46.         //PORTC &= ~(_BV(LED_PIN)); // LED be
  47.         //_delay_ms(100); // Varakozas 100 ms-ig
  48.  if(data=='C') {Szervo(s_kozep);}
  49.  if(data=='B') {Szervo(b_max);}
  50.  if(data=='J') {Szervo(j_max);}
  51.         if(data == '$') // Ha a fogadott bajt 'b'-vel egyezik meg, bekapcsoljuk a LED-et
  52.         {
  53.          sendbufer();
  54.          adat_feldolg();
  55.          clearbuffer();
  56.          n_b=0;
  57.         }
  58.         else {buff[n_b]=data; n_b++;}
  59. }


A bufferelt adatokat visszaküldtem uarton!

  1. S10s000000000000
  2.  
  3.  
  4. S10s000000000
  5.  
  6.  
  7.  
  8.  
  9. S10s0000
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19. S10s00000000000
  20.  
  21. S10s000000000
  22.  
  23.  
  24.  
  25. S10s00000


A végén meg eltünik! Mi lehet a hiba oka?
(#) bedoweb válasza Topi hozzászólására (») Ápr 27, 2011 /
 
windows xp-m és Windows 7-esem van. Eddig mindkettőn működött. És WinAVR saját programszerkesztőjét, a Programmers Notepad[winavr] nevű progranot használom. Van egy makefile amiben be kell állítani a CPU, és a programozó fajtáját, a hex fájl nevét és mentási helyét. S ezután csak a programon belül a kész programot le kell futtani, hogy átalakítsa hex-é, aztán program gomp, és már csinálja is.
(#) Reggie válasza L_Maqvus hozzászólására (») Ápr 27, 2011 /
 
Lehet, hogy az a problema, hogy megszakitasbol hivod meg az UARTAdatKuld() fuggvenyt, es igy ha az adasi puffer nem ures, akkor eldobja a pufferbe bele nem fero karaktereket.
(#) L_Maqvus válasza Reggie hozzászólására (») Ápr 29, 2011 /
 
Enélkül is ugy müködik ahogy nem kéne....
(#) koncsik03 hozzászólása Ápr 30, 2011 /
 
Nincs véletlen olyan könyv ami avr-ekről szól kezdőknek?
És ha lehetne még egy nagyon egyszerű kérdés:meikhez könnyebb égetőt építeni és meiket könyebb programozni?

Kösz előre.
(#) shield hozzászólása Máj 2, 2011 /
 
Van egy két kapcsolás amit szeretnék megépíteni, ATmega8-al vannak tervezve. Laikusként kérdezem, hogy lehet-e helyettesíteni 8L-el vagy 88-al? 8L esetében akkor ha nincs szükség 8MHz-nél magasabb frekire. Ha esetleg megy a helyettesítés akkor kell-e a szoftveren komolyabban változtatni? Segítséget előre is köszönöm.
(#) TavIR-AVR válasza shield hozzászólására (») Máj 2, 2011 /
 
A M88 és az M8 más belső felépítésű. A programkód újrafordítása és a regiszterek átírása/átnevezése is feladat ekkor (Bascom-AVR alatt csak a chip nevet kellene kicserélni).

Mega8L mellett Mega8A, Mega8-V és egyéb hasonlój jöhetnek számba. Mega8P nem! A "P" másirányú elfajzást jelent....
(#) shield válasza TavIR-AVR hozzászólására (») Máj 2, 2011 /
 
A programkód újrafordítása stb. kilőve, nekem magas. Pl. a Mega8L-t használom akkor semmit sem kell átírni? A PIC megnevezését sem?
Az L-es csak fele annyiba kerül, ami azért számít.
(#) TavIR-AVR válasza shield hozzászólására (») Máj 2, 2011 /
 
A PIC az mikrochip kontrollere. Az AVR az a ATMEL cégé.

M8 - M8L cserélhető, ha az órajel <8MHz. E felett M8 javasolt...>
Következő: »»   322 / 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