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   340 / 840
(#) TavIR-AVR válasza atideath hozzászólására (») Júl 12, 2011 /
 
A kód:

Fordulat = Fordulatjelek * 250
Fordulat = Fordulat - 500

Fordulatjelek és fordulat WORDként definiált. Szerintem túlcsordulás. Definiáld Word helyett Integerként!
(#) Hp41C válasza mikrofarad hozzászólására (») Júl 12, 2011 /
 
Szia!
Milyen programozód van? Sok programhoz (icprog, ponyprog, stb) ajánlanak avr és pic illesztést is. A pickit2 -vel is lehet avr -eket programozni ...
Bővebben: Link
(#) Andras0 hozzászólása Júl 12, 2011 /
 
Sziasztok!

Vasaroltam egy atmega16A microcontrolelrt, elkeszitettem a panelt, hala Istennek minden mukodik csak nincs meg a szugseges MHz...

Hozzacsatoltam az oszcillatort(16Mhz) de semmi kulombseg.
Kell meg valamit allitani?
(#) TavIR-AVR válasza Andras0 hozzászólására (») Júl 12, 2011 /
 
Igen. A Fusebiteknél kell még molyolni:

- External Clock/Quartz
(#) Andras0 válasza TavIR-AVR hozzászólására (») Júl 12, 2011 /
 
Nem foglalkoztam sajnos meg ezzel, azt hogy tudom megcsinalni?

Atprogot hasznalok
(#) Andras0 válasza Andras0 hozzászólására (») Júl 12, 2011 /
 
ponyProg2000-re is jo
(#) zombee válasza Andras0 hozzászólására (») Júl 12, 2011 /
 
PonyProg-nál a SUT_CKSEL nevű checkboxokból vedd ki a pipát(az összesből), majd írd át az AVR-be.
Ezzel átkapcsolod kvarckristályra. AVR Studio és Bascom alatt ugyanúgy beállíthatod, de ott látod is hogy éppen mit állítasz. A Bascom ismeri a nyomtatóportos programozót.
(#) Andras0 hozzászólása Júl 12, 2011 /
 
kosz szepen sikerult
(#) yoman917 hozzászólása Júl 12, 2011 /
 
Sziasztok
Hogyan tudnék egy bitet 0-ra állítani? Hőmérséklet mérés, ha a Tvalos változóm 273, vagy kisebb értéket vesz fel, akkor a led kigyullad. Eddig semmi problémám nincs, viszont ha a Tvalos 273, vagy nagyobb, akkor nem kéne világítania a lednek. Ezt nem bírom elérni
(#) zombee válasza yoman917 hozzászólására (») Júl 12, 2011 /
 
Hello!

Ha 273 akkor gondolom már nem 8 bites változóval dolgozol. C nyelven(WinAVR) így tudod beállítani:

  1. valtozo &= ~(1<<X);


A "valtozo" X. bitje le fog nullázódni. A WinAVR ezt optimalizálni fogja a megfelelő 8 bites műveletsorra, hiszen a változónak csak egyetlen bájtját kell megpiszkálni.
(#) yoman917 válasza zombee hozzászólására (») Júl 12, 2011 /
 
Nem nagyon értem mire gondolsz, belinkelem a programomban a megfelelő sort:
  1. if (Tvalos<273)
  2.                 {
  3.                 PORTA|=0x10;
  4.                 }
  5.                 if (Tvalos>273)
  6.                 {
  7.                 PORTA^=0x10;
  8.                 }


A Tvalos uint32_t
Át tudnád írni nekem ha szépen megkérlek?
(#) zombee válasza yoman917 hozzászólására (») Júl 12, 2011 / 1
 
Elrontottad a relációt az elsőnél: "ha a Tvalos változóm 273, vagy kisebb" - azaz "kisebbegyenlő" jel kell.
Mivel a másik feltétel ennek pont az ellenkezője, nem kell újabb "if", elég egy "else", de ez inkább praktikusság kérdése.
A másik dolog amit elrontottál, a "^=" jel, ez csak "átváltja", negálja az adott bitet.
Azaz villogni fog a LED, ha elég sűrűn fut le ez a kód akkor folyamatos világítást fogsz látni.
Kioltani másképp kell, ezt láthatod az else-t követő kódban.

  1. if (Tvalos<=273)
  2.                 {
  3.                 PORTA|=0x10;
  4.                 }
  5.                 else
  6.                 {
  7.                 PORTA &= ~0x10;
  8.                 }
(#) yoman917 válasza zombee hozzászólására (») Júl 12, 2011 /
 
Köszönöm
Üdv,
yoman
(#) dancsa hozzászólása Júl 13, 2011 /
 
Üdv!

Ismerkednék az AVR-ekkel, de van egy kis problémám. Hestore-ból megrendeltem a Topi-féle programozót, összeraktam, de nem bírom működésre bírni... Szerintem jól raktam össze, mert a gép érzékeli, de Win7 alatt a nem aláírt driver miatt folyamatosan problémázott, úgyhogy feldobtam virtualbox-ra egy WinXP-t, ott fel megy a driver, de utána a "Az eszköz nem indítható el. (Kód: 10)" hibaüzenet fogad...
Mit ronthattam el?
(#) Ricsi89 válasza dancsa hozzászólására (») Júl 13, 2011 /
 
Itt az oldalon van a programozóról egy cikk. Ott ha jól tudom van hozzá win7-het driver. Azt nézd meg. Ha azzal sem megy, akkor tovább lehet keresni a hibát.
(#) tothlevo hozzászólása Júl 13, 2011 /
 
Megértő segítségeteket kérem!

Feltelepítettem az AVRStudio4-et, a WinAVR-t, és a libusb-Win32-őt is. A programozómat a Hestoreban vettem, ez az. A PC felismeri, és most Target_VCC tüskén van a jumper.

  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.        
  4. //-------------------------------------
  5. void m_delay_10ms(unsigned char val)
  6. {
  7.  
  8. //-------------------------------------
  9. //a _delay_ms max 65.535 ms-et képes sleepelni,
  10. // tehát nagyobb időzítést többől lehet "összerakni"
  11.             unsigned char i;
  12.             for(i=0;i<val;i++) {
  13.                 _delay_ms(10);
  14.             }
  15.     }
  16.        
  17. //-------------------------------------
  18. int main(void) {
  19. //-------------------------------------
  20.         DDRB = (1<<PINB3)|(1<<PINB4); //csak a PB3 és a PB4 kimenet
  21.         PORTB = (1<<PINB3);    //egyiket bekapcsol
  22.         while(1) {
  23.             if(PORTB & (1<<PINB3)) PORTB &= ~(1<<PINB3);
  24.                                else PORTB |=  (1<<PINB3);
  25.             if(PORTB & (1<<PINB4)) PORTB &= ~(1<<PINB4);                                       else PORTB |=  (1<<PINB4);
  26.             m_delay_10ms(100); //100*10ms = 1s
  27.         }
  28.     return 0;
  29. }


És ez a kód amit bele szeretnék égetni egy Attiny45-20PU-ba. Néztem hozzá ezt a videót is. És egészen addig működik is minden, amikor is a 13. másodpercnél... Ahol ki kell választani a programozót, a felsorolásban nekem nem szerepel benne az "STK500 or AVRISP" csak külön az STK500 meg külön az AVRISP.

A gondom az, hogy bármelyiket is választom, nem tudom tovább folytatni úgy ahogy a videó is mutatja. Pedig nagyon szeretném. Szóval mit rontok el, mi az amit nem veszek észre? Előre köszönöm ha valaki segít nekem.
(#) Ricsi89 válasza tothlevo hozzászólására (») Júl 13, 2011 /
 
Meg kellene nézni eszközkezelőben, hogy melyik portot használja a programozó. AvrStudio-ban az STK500-at kell kiválasztani. Mint látod a program csak 1-4-ig számozott com portokat ismer fel, így ha a programozó ennél magasabb portszámot használ, akkor azt át kell állítani, hogy az első 4-ben legyen.
(#) tothlevo válasza Ricsi89 hozzászólására (») Júl 13, 2011 /
 
Eszközkezelőben nézem: libusb-win32 devices >> Communications Port (COM4)

Van itt egy Jungo nevű driver is ez nem az én gépemhez tartozik... az jó hogy ott van?

STK500 kiválasztva, COM4 kiválasztva, Connect... és ugyanúgy nem történik semmi
(#) vagnerjazon válasza dancsa hozzászólására (») Júl 13, 2011 /
 
64 bites a W7? Mert ha az, akkor valószínűleg az a gond. Nekem ugyanez volt, végül lett megoldás, de azóta 32 bitest használok. 64 bitesen talán ez segít, nekem működött: Bővebben: Link
(#) dancsa válasza Ricsi89 hozzászólására (») Júl 13, 2011 /
 
A drivert Topi cikkjében lévő linkről szedtem...

@vagnerjazon:

De aztán kipróbáltam virtualboxos Winxp (32 bit) környezetben is, és ott se müködött... virtual com portként futtatáshoz is fel kell tenni a libUSB-t? (bár sztem úgy is próbáltam már)
(#) zombee válasza tothlevo hozzászólására (») Júl 13, 2011 /
 
Csak hogy a második kérdésre is legyen válasz:
A Jungo driver többek közt az AVRISP-mkII, illetve JTAGICE-mkII drivere.
(#) vagnerjazon válasza dancsa hozzászólására (») Júl 14, 2011 /
 
Hát nem tudom, hogy kell-e. Nem értek az ilyen virtuális op. rendszer dolgokhoz, de nem lehet, hogy az nem ugyanúgy éri el a portokat, mintha rendesen lenne fönt? Ez csak tipp, nem tudom. Szerintem próbáld ki amit írtam, hátha jó lesz.
(#) mikrofarad válasza Hp41C hozzászólására (») Júl 14, 2011 /
 
Üdv!

Közben találtam valamit!
Szerintetek működne?
(#) vagnerjazon válasza mikrofarad hozzászólására (») Júl 14, 2011 /
 
Ez nagyon hasonlít erre. Csak azon amit Te linkeltél, nincsenek összekötve a GND-ok, és a 14-es lábról veszi a VCC-t, meg nincs összekötve az a két-két láb. (Nem tudom, hogy ez lényeges-e, én azt csináltam meg régebben ami az én linkemen van.) És igen, működik, egy ilyennel kezdtem az AVR-ezést. (Azt azért hozzáteszem, hogy nem megy AVRStudio-val, csak közvetlenül WinAVR-ből, de ott külön kell beállítani a makefile-t, a fuse biteket meg mondjuk ponyprog-ban lehet állítani, de elég kockázatos -> egyszóval egy kicsit bonyolult a használata) Most egy HEStore-os Topi félét használok, ezzel megy az AVRStudio, és nem utolsó sorban USB-s, így bármelyik mai gépen használható.
Remélem tudtam segíteni.
(#) tothlevo hozzászólása Júl 14, 2011 /
 
Letiltottam a Jungot, kipróbáltam úgy is. Az összes lehetőséggel, egyikkel sem történt semmi még mindig.

Ha az áramkört rosszul raktam össze (két ellenállás meg két LED) akkor csinálhat ilyet?
(#) sikolymester válasza dancsa hozzászólására (») Júl 14, 2011 /
 
A 64 bites win7-nek szüksége van a driverek digitális aláírására. Mivel nem volt erre egy zsák pénze annak, aki ezt az eszközt ingyenesen hozzáférhetővé tette, ezért nincsen a driver aláírva microsoft által.
Amit tudsz tenni: a PC indításánál nyomkodod az F8 billentyűt, mielőtt a windows elkezdene tölteni. Ott pedig kiválasztod azt, ahol valami olyasmi áll, hogy: a driverek digitális aláírásának megkövetelésének letiltása (vagy valami hasonló). Ezután működni fog a driver. Természetesen minden windows indításnál ezt el kell játszani.
(#) Reggie válasza gtk hozzászólására (») Júl 14, 2011 /
 
Ugy, hogy mind a kettoben volt azonos nevu fuggveny. De amugy a libek nem utkoznek, csak nem tudja a linker, hogy melyikbol valassza ki es linkelje.
(#) domokosf hozzászólása Júl 15, 2011 /
 
Szevasztok!

Kb. egy éve kezdtem el az AVR-ekkel való ismerkedést, tudatos választás alapján (többek között AVR vs. PIC cikk), AVR Dragonnal. Még nem nyafogtam a fórumban egyszer sem, hanem vért izzadva utánajártam a dolgoknak, de most más módon akadtam el. Marhára megtetszett az "Első AVR programozóm" c. cikk, gondoltam megépítem a programozót második darabnak (kontroll). A kapcsolási rajzot böngészve arra a következtetésre jutottam, hogy az Atmel féle ISP 6 pines csatlakozó 1-es pontja (ami a MISO) a tiny2313-as kontroller 17-es lábára van kötve, ami a MOSI illetve fordítva is igaz (18-as láb MISO-ra). Nem vettem volna észre, ha nem elleznkezne ez a dolog egy görög csákó programozó leírásával, (Bővebben: Link), valamint az Atmel AVR910: In System Programming Application Note-jával. Kinek mi a véleménye? Működik ez így? Vagy pedig a firmware lett úgy módosítva, hogy működik ugyan, de ugyanakkor a csatlakozó kiosztása nem felel meg a szabványos ISP6 kiosztásának?
(#) zombee válasza domokosf hozzászólására (») Júl 15, 2011 /
 
Hello!

Őszintén szólva én annak idején az FTDI miatt végig sem olvastam, ma pedig azért nem állnék neki mert már a cikk megjelenésekor is elavult programozótípusról volt szó, az AVR910-ről. Kicsit anyáztam is hogy sűrű lábú FTDI miatt nem biztos hogy sokak "első AVR programozója" lesz, hacsak nem tart otthon profi maratólabort. A sebességét illetően nincsenek információim, csak a gyári STK500 frissítési idejére tudok hivatkozni, mert azon is AVR910-es rendszer végzi a frissítését: r*hadt lassú!

Pár nappal előtte vagy utána megjelent egy cikk a Doperről, és bár az sem egy sebességbajnok, de az addig nyomtatóportos(és még lassabb) programozóról végre áttérhettem USB-re!

A kérdésedre válaszolva: a kiosztás valóban rossz, a programozó megépítéséhez ITT megtalálsz mindent, tudtommal ez az eredeti cikk. Igaz, nem USB-s, de egy MCP2200 vagy FTDI csodákra képes...

Ha mindenképp USB kell, akkor már az AVRISP-mkII megépítését ajánlom, abba is "csak" egy darab SMD csip kell...
(#) edison14 hozzászólása Júl 15, 2011 /
 
Helló. Most dolgozgatok a panelműszeremen de a program valamiért nem úgy működik ahogyan kellene.
Itt a program de már nincs ötletem hogy mi lehet vele a gond pedig már számtalanszor átnéztem. Kérem segítsetek.
  1. #define F_CPU 12000000UL
  2. #include <avr/io.h>
  3. #include <util/delay.h>
  4. #include "simple_driver.h"
  5. #include "adc.h"
  6.  
  7. unsigned char AU[]="00.00";
  8. unsigned char AI[]="0.000";
  9. unsigned char BU[]="00.00";
  10. unsigned char BI[]="0.000";
  11.  
  12. unsigned long a_fesz;
  13. unsigned long a_aram;
  14. unsigned long b_fesz;
  15. unsigned long b_aram;
  16.  
  17. unsigned long Ashunt_fesz;
  18. unsigned long Bshunt_fesz;
  19.  
  20. volatile int Afesz_kalib=5.60//ezeket majd nyomógombokkal fogom beállítani
  21. volatile int Aaram_kalib=0.60;
  22. volatile int Bfesz_kalib=5.60;
  23. volatile int Baram_kalib=0.60;
  24.  
  25. void _delay_100ms(char del)                     //másodperces várakozás
  26. {
  27.         while(0<del)
  28.         {
  29.                 _delay_ms(100);
  30.                 del--;
  31.         }
  32. }
  33.  
  34. int main(void)
  35. {
  36.         DDRD=0x90;                              //PORTD bemenet
  37.         PORTD=0x6F;                             //felhúzók bekapcsolva
  38.                
  39.         lcd_init();                                                             //lcd nicializálás   
  40.         lcd_control(1, 0, 0);                   //lcd bekapcsolva, kurzor és villogtatása kikapcsolva
  41.         lcd_cls();                                                              //lcd törlés
  42.         lcd_putstr("Labortapegyseg v2.0", 0x00);                //szöveg kiiratás
  43.         lcd_putstr("Nagy Tamas- edison14", 0x40);               //szöveg kiiratás
  44.         _delay_100ms(20);                                                                                                               //2 másodperc várakozás
  45.         Konfig10bitADC();                                                                                                               //adc konfigurálás
  46.         lcd_cls();                                                                                                                                      //lcd törlés
  47.         lcd_putstr("A U=00.00V  I=0.000A", 0x00);               //szöveg kiiratás
  48.         lcd_putstr("B U=00.00V  I=0.000A", 0x40);               //szöveg kiiratás
  49.  
  50.         for(;;)
  51.         {
  52.                 Ashunt_fesz=Beolvas10bitADC(2);                                                 //mérés
  53.                 a_aram=(Ashunt_fesz*5000/1023)/Aaram_kalib;     //áram értékének meghatározása
  54.                 AI[0]=(a_aram/1000)+48;                                                 //X.000A                X- az éppen számított érték
  55.                 AI[2]=((a_aram%1000)/100)+48;                           //0.X00A               
  56.                 AI[3]=(((a_aram%1000)%100)/10)+48;      //0.0X0A
  57.                 AI[4]=(((a_aram%1000)%100)%10)+48;      //0.00XA
  58.        
  59.                 a_fesz=Beolvas10bitADC(3);
  60.                 a_fesz=((a_fesz-Ashunt_fesz)*5000/1023)*Afesz_kalib;
  61.                 AU[0]=(a_fesz/10000)+48;                                                                                //X0.00V
  62.                 AU[1]=((a_fesz%10000)/1000)+48;                                                 //0X.00V
  63.                 AU[3]=(((a_fesz%10000)%1000)/100)+48;                   //00.X0V
  64.                 AU[4]=((((a_fesz%10000)%1000)%100)/10)+48;      //00.0XV
  65.  
  66.                 Bshunt_fesz=Beolvas10bitADC(4);
  67.                 b_aram=(Bshunt_fesz*5000/1023)/Baram_kalib;
  68.                 BI[0]=(b_aram/1000)+48;                                                 //X.000A
  69.                 BI[2]=((b_aram%1000)/100)+48;                           //0.X00A
  70.                 BI[3]=(((b_aram%1000)%100)/10)+48;      //0.0X0A
  71.                 BI[4]=(((b_aram%1000)%100)%10)+48;      //0.00XA
  72.  
  73.                 b_fesz=Beolvas10bitADC(5);
  74.                 b_fesz=((b_fesz-Bshunt_fesz)*5000/1023)*Bfesz_kalib;
  75.                 BU[0]=(b_fesz/10000)+48;                                                                                //X0.00V
  76.                 BU[1]=((b_fesz%10000)/1000)+48;                                                 //0X.00V
  77.                 BU[3]=(((b_fesz%10000)%1000)/100)+48;                           //00.X0V
  78.                 BU[4]=((((b_fesz%10000)%1000)%100)/10)+48;      //00.0XV
  79.  
  80.                 lcd_putstr(AU, 0x04);           //értékek kiiratása
  81.                 lcd_putstr(AI, 0x14);           //értékek kiiratása
  82.                 lcd_putstr(BU, 0x44);           //értékek kiiratása
  83.                 lcd_putstr(BI, 0x54);           //értékek kiiratása
  84.         }
  85. }

Csatolom a proteusban összeállított kapcsolást. Ha esetleg van valami ötletetek hogy mit lehetne még javítani a programon kérem írjátok le. A segítségeteket előre is köszönöm.
Következő: »»   340 / 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