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   102 / 840
(#) HERC válasza BlueFox hozzászólására (») Feb 11, 2009 /
 
SMT kemence

Nem az én tollam ugyhogy nem is szeretnék ékeskedni vele.Viszont a választ meg a képletet ott találod a
leírás 3/4-nél.A hőfokfüggés elvonatkoztatható más hőelemre is gondolom.
Mert nem is a nyelven függ szerintem hanem a függvényen.

uiS1820 1Wire eszközzel meg ennél is könnyebb
(jó persze drága darab)

(#) BlueFox válasza HERC hozzászólására (») Feb 11, 2009 /
 
Szia!

Köszi a gyors választ, ezt nézegetve rájöttem a megoldásra, ami egyébként teljesen más, mint ami ott van megvalósítva, de ez most lényegtelen

Szeretem ezt az oldalt, kérdéseimre gyorsan jön válasz, ami vagy a megoldás, vagy valamilyen módon rájövök a válasz miatt a mgoldásra

Köszi mégegyszer!
(#) gtk válasza djhusi hozzászólására (») Feb 11, 2009 /
 
A hangszorot nem kotod be , rendre MISO, MOSI, SCK, GND labakat rakotod az STK200-ra, tapot adsz neki es felprogramozod.
(#) djhusi válasza gtk hozzászólására (») Feb 12, 2009 /
 
Köszönöm a gyors választ
(#) matrix64 hozzászólása Feb 12, 2009 /
 
Sziasztok!
Prellmentesítésre mennyi időt szoktatok késleltetni ?
(#) gtk válasza matrix64 hozzászólására (») Feb 12, 2009 /
 
A nixi oramban a nyomogombokra 60ms-onkent nez ra , es jol mukodik.
(#) gtk hozzászólása Feb 12, 2009 /
 
Mivel tudnam az AVR eeprom-jat kiolvasni megtekintesre?
Programozom csak SKT200 van.
(#) ha7mac válasza gtk hozzászólására (») Feb 12, 2009 /
 
Hali

AVRDUDE:

avrdude -p m32 -c stk200 -v -t
read eeprom 0 1024

-p product -c programmer -v verbose -t terminal.

A terminalba read eeprom kezdő cím vége cím...

73 (Üdv)
(#) gtk válasza ha7mac hozzászólására (») Feb 12, 2009 /
 
Koszi szepen, ez nagyon hasznos !
(#) Grebi hozzászólása Feb 12, 2009 /
 
Üdv mindenkinek!
Valaki tudna nekem segiteni pontosan beállítani az AVR Studi 4-et? A probléma az hogy hiába veszem le a frekvenciát mégis kidobja ezt a hibaüzenetet.Próbálkoztam szinte mindennel de valahogy nagyon nem ment... Kezdő vagyok úgyhogy lehet hogy vlamit elnéztem, de nagyon kellene a segitség...
A hibaüzenet screenshotját feltöltöttem....

error.JPG
    
(#) Grebi hozzászólása Feb 12, 2009 /
 
Tovább próbálkoztam a hiba megoldásával és már a program maradéktalanul bekerül a kontrollerbe, csak az a baj hogy az időzités nem megfelelő ez mindek tudható be
Már komolyan nemtudom hogy mi lehet a baj....
VAlaki segitsen
(#) gtk hozzászólása Feb 12, 2009 /
 
Sziasztok !

Van egy delete_notify() fuggvenyem. Ha a torles visszaellenorzest is benne hagyom, akkor befagy az egesz. Ha kikommentezem jol mukodik.

  1. unsigned char
  2. delete_notify (unsigned char indx)
  3. {
  4.   unsigned char n = 6;
  5.  unsigned char buf[6];
  6.  unsigned char ee_del_val = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; //Ez amugy globalis !
  7.  
  8.   switch (indx)
  9.     {
  10.     case 0:
  11.       eeprom_write ((void *)ee_del_val, (void *) EE_ADDR_0, (size_t) 6);
  12.       //eeprom_read ((void *) EE_ADDR_0, (void *)buf, (size_t) 6);
  13.       break;
  14.  
  15.     case 1:
  16.       eeprom_write ((void *)ee_del_val, (void *) EE_ADDR_1, (size_t) 6);
  17.       //eeprom_read ((void *) EE_ADDR_1, (void *)buf, (size_t) 6);
  18.       break;
  19.  
  20.     case 2:
  21.       eeprom_write ((void *)ee_del_val, (void *) EE_ADDR_2, (size_t) 6);
  22.       //eeprom_read ((void *) EE_ADDR_2, (void *)buf, (size_t) 6);
  23.       break;
  24.  
  25.     case 3:
  26.       eeprom_write ((void *)ee_del_val, (void *) EE_ADDR_3, (size_t) 6);
  27.       //eeprom_read ((void *) EE_ADDR_3, (void *)buf, (size_t) 6);
  28.       break;
  29.     }
  30.  /* do
  31.     {
  32.       if (buf[n] != 0xFF)
  33.         return 1;
  34.     }
  35.   while (--n);*/
  36.   return 0;
  37. }


eprom read write igy nez ki:

  1. void
  2. eeprom_write (const void *src, void *dst, size_t n)
  3. {
  4.   eeprom_busy_wait ();
  5.   eeprom_write_block (src, dst, n);
  6.   eeprom_busy_wait ();
  7. }
  8.  
  9.  
  10. //----------------------------------------------------
  11. void
  12. eeprom_read (void *dst, const void *src, size_t n)
  13. {
  14.   eeprom_busy_wait ();
  15.   eeprom_read_block (dst, src, n);
  16.   eeprom_busy_wait ();
  17. }
(#) ATtiny válasza gtk hozzászólására (») Feb 12, 2009 /
 
Ezt szúrd be az írás után:
eeprom_busy_wait();

A program visszakapja a vezérlést az eeprom író parancs után sokkal hamarabb, mintsem befejezte volna az írást a proci. Ha azonnal olvasni akarsz és még közben ír az AVR na akkor aztán lehet mindenféle vicces dolog.

Vissza vonom tovább kellet volna olvasnom a kódod...
(#) gtk válasza ATtiny hozzászólására (») Feb 12, 2009 /
 
Betartva
Amugy mar nagyon sok vicces dolog volt.

Amugy meg olyan is van, hogy az elso torlesnel -mindegy melyik indexu, vagyis melyik cimtol- idoben visszater a fuggveny. A masodik torlesnel -mas indexu, vagyis mas cimtol- mar sokkal kesobb ter vissza a fv. , nehany masodperc! Terminalba ellenoriztem, torles mindig rendben van.
(#) ATtiny válasza gtk hozzászólására (») Feb 12, 2009 /
 
Amúgy nem látok semmi hibát ránézésre a kódon. Egyedül a tömb dekralálást írnám át:

unsigned char ee_del_val[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
(#) gtk válasza ATtiny hozzászólására (») Feb 12, 2009 /
 
Eredetileg ugy van irva es globalis!
(#) ATtiny válasza gtk hozzászólására (») Feb 12, 2009 /
 
AZ AVR doksiból idézek
Idézet:

static __inline__ void eeprom_read_block(void * __dst, const void * __src, size_t __n)

Read a block of __n bytes from EEPROM address __src to SRAM __dst.


Tehát első paraméter az SRAM buffer címe a második az EEPROM címe, harmadik a darab szám.

Te viszont pont fordítva akrod használni :
eeprom_read ((void *) EE_ADDR_3, (void *)buf, (size_t) 6);

Az első 2 paramétert meg kéne cserélni és szerintem jó is lesz.
(#) gtk válasza ATtiny hozzászólására (») Feb 12, 2009 /
 
Koszi ! 77szer neztem meg, nem lehetek ilyen sotet
(#) gtk válasza gtk hozzászólására (») Feb 12, 2009 /
 
Mostmar nincs fagyas, de valamiert nem 0 ertekkel ter vissza, pedig torles sikeres. Igaz terminalba nem neztem hogy a teljes torles sikeres-e (minden byte-on).
(#) nagy hoho hozzászólása Feb 13, 2009 /
 
Tisztelt Fórum Társak!
Én Poroszlón lakom és egy AT90S2323 AVR-t szeretnék programoztatni. Keresek egy szakembert
aki a segítségemre lenne és a közelben lakik.Előre is köszön a válaszokat.
Üdv nagy hoho
(#) Grebi hozzászólása Feb 14, 2009 /
 
Üdv mindenkinek
Mi lehet a baj akkor ha az időzités az AVR prociban nem megfelelő. Vagyis pontosabban nem a programban leírt értéknek megfelellően dolgozik hanem gyorsabban
(#) gtk válasza Grebi hozzászólására (») Feb 14, 2009 /
 
Milyen idozitesrol van szo? Timer ? _delay_xx ?
(#) Grebi válasza gtk hozzászólására (») Feb 14, 2009 /
 
Igen igen, ez a program a "Nyolc láb I. rész"-ből való a jelzőlámpás...
(#) gtk válasza Grebi hozzászólására (») Feb 14, 2009 /
 
Fuse bitek beallitasa ok?
F_CPU be van az orajelnek megfeleloen allitva?
(#) Sztyopa hozzászólása Feb 15, 2009 /
 
Üdv Mindenkinek!

Egyszerű kérdésem lenne.
A következőt szeretném megcsinálni WinAvr alatt:


int16_t OutData[2];
int16_t Offset;

Offset=OutData[1]/2;


A problémám pedig ezzel az hogy Pl. -4 van a OutData[1] helyén az osztás eredménye pedig nem -2 hanem 32000 körüli érték vagyis az osztásnál nem veszi figyelembe hogy signed típusú változókkal dolgozik, és a kérdésem az lenne hogy ez miért, van és hogyan lehet megoldani. Minden segítséget köszönök előre is.

(#) ATtiny válasza Sztyopa hozzászólására (») Feb 15, 2009 /
 
Ugye nem felejtetted el hogy C-ben a tömbökre 0-ás indextöl kezdve kell hivatkozni? Azaz ha van egy int16_t OutData[2] tömböd, akkor annak az első eleme OutData[0] és a második eleme OutData[1] és OutData[2] pedig már nem értelmezhető, mivel csak 2 elemü a tömb.
(#) ZLED hozzászólása Feb 15, 2009 /
 
Sziasztok!
Írtam egy időzítő programot, nem hiszem hogy ez így jól van megírva. Az időzítés nem pontos, késik. Valaki tud segíteni abban hogy az ilyen programokat hogy a legcélszerűbb megírni, és hogy hogyan lehet pontos 1mp-es időzítést csinálni?
kód:
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. #include <util/delay.h>
  4.  
  5. int characters[11] = {
  6.         0b00111111,
  7.         0b00000110,
  8.         0b01011011,
  9.         0b01001111,
  10.         0b01100110,
  11.         0b01101101,
  12.         0b01111101,
  13.         0b00000111,
  14.         0b01111111,
  15.         0b01101111
  16.         };
  17.  
  18. int disp[4] = {0,0,0,0};
  19. int act_disp = 0;
  20. int data;
  21.  
  22. void Init(void) {
  23.        
  24.         TCCR0 |= (0<<CS02) | (1<<CS01) | (1<<CS00);
  25.  
  26.         TIMSK |= (1<<TOIE0);
  27.  
  28.         sei();
  29.  
  30.         DDRB |= (1<<PINB0) | (1<<PINB1) | (1<<PINB2) | (1<<PINB3);
  31.         DDRC |= (1<<PINC3) | (0<<PINC4) | (0<<PINC5);
  32.         DDRD = 0xFF;
  33.  
  34.         }
  35.  
  36. SIGNAL(SIG_OVERFLOW0) {
  37.         PORTD = 0xFF;
  38.        
  39.         data = characters[disp[act_disp]];
  40.         data = 0xFF - data;
  41.        
  42.         PORTB = (1<<act_disp);
  43.         PORTD = data;
  44.  
  45.         act_disp++;
  46.         if (act_disp>4) act_disp = 0;
  47.         }
  48.  
  49. int main(void) {
  50.  
  51.         unsigned short min = 0;
  52.         unsigned short sec = 0;
  53.         unsigned short tim = 0;
  54.         Init();
  55.         for(;;) {
  56.         PORTC &= ~(1<<PINC3);
  57.         if(PINC & (1<<PINC4)) sec++;
  58.         if(PINC & (1<<PINC5)) tim = 1;
  59.         if(sec>59) {
  60.                 sec = 0;
  61.                 min++;
  62.                 }
  63.  
  64.     disp[0] = min/10;
  65.         disp[1] = min%10;
  66.         disp[2] = sec/10;
  67.         disp[3] = sec%10;
  68.         _delay_ms(50);
  69.         while(tim==1) {
  70.                 PORTC |= (1<<PINC3);
  71.                 if (sec==0) {
  72.                         sec = 60;
  73.                         min--;
  74.                         if (min > 60) {
  75.                                 tim = 0;
  76.                                 sec = 1;
  77.                                 min = 0;
  78.                                 }
  79.                         }
  80.  
  81.                 sec--;
  82.                 disp[0] = min/10;
  83.                 disp[1] = min%10;
  84.                 disp[2] = sec/10;
  85.                 disp[3] = sec%10;
  86.                 _delay_ms(1000);
  87.                 }
  88.         }
  89. }
(#) Grebi válasza gtk hozzászólására (») Feb 15, 2009 /
 
Mármint az a fuse bitek pontos beáálítása mit takar, és mi lenne az F_CPU pontos beáálítása?
Még nagyon kezdő vagyok, és még eléggé ingatag lábakon állok ilyen téren
(#) gtk válasza Grebi hozzászólására (») Feb 15, 2009 /
 
Miert nem adsz egy linket ra hogy melyikrol van szo ?!
(#) Grebi válasza gtk hozzászólására (») Feb 15, 2009 /
 
Következő: »»   102 / 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