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   309 / 840
(#) Reggie válasza kovacsj hozzászólására (») Feb 18, 2011 /
 
Sosem kotelezo, de akkor celszeru, ha azt szeretned, hogy valami a flash-ben tarolodjon el(mert mondjuk nagy a merete, es nem kell megvaltoztatni. Ilyenek pl. a felhasznalonak LCD-re kiirando uzenetek, stb) . Viszont innen sima valtozokent nem tudod kiolvasni, erre a celra kulon fuggvenyeket kell meghivni. (mint eepromnal)
(#) kovacsj válasza Reggie hozzászólására (») Feb 18, 2011 /
 
Tudom, hogy alap, de megkérdezhetem, melyek azok a függvények? Mutatnál egy egyszerű példát mondjuk egy LCD-s stringre?

Köszönöm előre is!
(#) JOCO10 válasza Reggie hozzászólására (») Feb 18, 2011 /
 
Tudnál valami megoldást adni az alábbi kódban
  1. #define F_CPU   12000000L    /* evaluation board runs on 4MHz */
  2.  
  3. #include <avr/io.h>
  4. #include <avr/interrupt.h>
  5. #include <avr/pgmspace.h>
  6. #include <avr/wdt.h>
  7.  
  8. #include "usbdrv.h"
  9. #include "oddebug.h"
  10.  
  11. /* ----------------------- hardware I/O abstraction ------------------------ */
  12.  
  13. /* pin assignments:
  14. PB0     Key 1
  15. PB1     Key 2
  16. PB2     Key 3
  17. PB3     Key 4
  18. PB4     Key 5
  19. PB5 Key 6
  20.  
  21. PC0     Key 7
  22. PC1     Key 8
  23. PC2     Key 9
  24. PC3     Key 10
  25. PC4     Key 11
  26. PC5     Key 12
  27.  
  28. PD0     USB-
  29. PD1     debug tx
  30. PD2     USB+ (int0)
  31. PD3     Key 13
  32. PD4     Key 14
  33. PD5     Key 15
  34. PD6     Key 16
  35. PD7     Key 17
  36. */
  37.  
  38. static void hardwareInit(void)
  39. {
  40. uchar   i, j;
  41.  
  42.     PORTB = 0xff;   /* activate all pull-ups */
  43.     DDRB = 0;       /* all pins input */
  44.     PORTC = 0xff;   /* activate all pull-ups */
  45.     DDRC = 0;       /* all pins input */
  46.     PORTD = 0xfa;   /* 1111 1010 bin: activate pull-ups except on USB lines */
  47.     DDRD = 0x07;    /* 0000 0111 bin: all pins input except USB (-> USB reset) */
  48.         j = 0;
  49.         while(--j){     /* USB Reset by device only required on Watchdog Reset */
  50.                 i = 0;
  51.                 while(--i); /* delay >10ms for USB reset */
  52.         }
  53.     DDRD = 0x02;    /* 0000 0010 bin: remove USB reset condition */
  54.     /* configure timer 0 for a rate of 12M/(1024 * 256) = 45.78 Hz (~22ms) */
  55.     TCCR0 = 5;      /* timer 0 prescaler: 1024 */
  56. }
  57.  
  58. /* ------------------------------------------------------------------------- */
  59.  
  60. #define NUM_KEYS    17
  61.  
  62. /* The following function returns an index for the first key pressed. It
  63.  * returns 0 if no key is pressed.
  64.  */
  65. static uchar    keyPressed(void)
  66. {
  67. uchar   i, mask, x;
  68.  
  69.     x = PINB;
  70.     mask = 1;
  71.     for(i=0;i<6;i++){
  72.         if((x & mask) == 0)
  73.             return i + 1;
  74.         mask <<= 1;
  75.     }
  76.     x = PINC;
  77.     mask = 1;
  78.     for(i=0;i<6;i++){
  79.         if((x & mask) == 0)
  80.             return i + 7;
  81.         mask <<= 1;
  82.     }
  83.     x = PIND;
  84.     mask = 1 << 3;
  85.     for(i=0;i<5;i++){
  86.         if((x & mask) == 0)
  87.             return i + 13;
  88.         mask <<= 1;
  89.     }
  90.     return 0;
  91. }
  92.  
  93. /* ------------------------------------------------------------------------- */
  94. /* ----------------------------- USB interface ----------------------------- */
  95. /* ------------------------------------------------------------------------- */
  96.  
  97. static uchar    reportBuffer[2];    /* buffer for HID reports */
  98. static uchar    idleRate;           /* in 4 ms units */
  99.  
  100. PROGMEM char usbHidReportDescriptor[35] = { /* USB report descriptor */
  101.     0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
  102.     0x09, 0x06,                    // USAGE (Keyboard)
  103.     0xa1, 0x01,                    // COLLECTION (Application)
  104.     0x05, 0x07,                    //   USAGE_PAGE (Keyboard)
  105.     0x19, 0xe0,                    //   USAGE_MINIMUM (Keyboard LeftControl)
  106.     0x29, 0xe7,                    //   USAGE_MAXIMUM (Keyboard Right GUI)
  107.     0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
  108.     0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
  109.     0x75, 0x01,                    //   REPORT_SIZE (1)
  110.     0x95, 0x08,                    //   REPORT_COUNT (8)
  111.     0x81, 0x02,                    //   INPUT (Data,Var,Abs)
  112.     0x95, 0x01,                    //   REPORT_COUNT (1)
  113.     0x75, 0x08,                    //   REPORT_SIZE (8)
  114.     0x25, 0x65,                    //   LOGICAL_MAXIMUM (101)
  115.     0x19, 0x00,                    //   USAGE_MINIMUM (Reserved (no event indicated))
  116.     0x29, 0x65,                    //   USAGE_MAXIMUM (Keyboard Application)
  117.     0x81, 0x00,                    //   INPUT (Data,Ary,Abs)
  118.     0xc0                           // END_COLLECTION
  119. };
  120. /* We use a simplifed keyboard report descriptor which does not support the
  121.  * boot protocol. We don't allow setting status LEDs and we only allow one
  122.  * simultaneous key press (except modifiers). We can therefore use short
  123.  * 2 byte input reports.
  124.  * The report descriptor has been created with usb.org's "HID Descriptor Tool"
  125.  * which can be downloaded from http://www.usb.org/developers/hidpage/.
  126.  * Redundant entries (such as LOGICAL_MINIMUM and USAGE_PAGE) have been omitted
  127.  * for the second INPUT item.
  128.  */
  129.  
  130. /* Keyboard usage values, see usb.org's HID-usage-tables document, chapter
  131.  * 10 Keyboard/Keypad Page for more codes.
  132.  */
  133. #define MOD_CONTROL_LEFT    (1<<0)
  134. #define MOD_SHIFT_LEFT      (1<<1)
  135. #define MOD_ALT_LEFT        (1<<2)
  136. #define MOD_GUI_LEFT        (1<<3)
  137. #define MOD_CONTROL_RIGHT   (1<<4)
  138. #define MOD_SHIFT_RIGHT     (1<<5)
  139. #define MOD_ALT_RIGHT       (1<<6)
  140. #define MOD_GUI_RIGHT       (1<<7)
  141.  
  142. #define KEY_A       4
  143. #define KEY_B       5
  144. #define KEY_C       6
  145. #define KEY_D       7
  146. #define KEY_E       8
  147. #define KEY_F       9
  148. #define KEY_G       10
  149. #define KEY_H       11
  150. #define KEY_I       12
  151. #define KEY_J       13
  152. #define KEY_K       14
  153. #define KEY_L       15
  154. #define KEY_M       16
  155. #define KEY_N       17
  156. #define KEY_O       18
  157. #define KEY_P       19
  158. #define KEY_Q       20
  159. #define KEY_R       21
  160. #define KEY_S       22
  161. #define KEY_T       23
  162. #define KEY_U       24
  163. #define KEY_V       25
  164. #define KEY_W       26
  165. #define KEY_X       27
  166. #define KEY_Y       28
  167. #define KEY_Z       29
  168. #define KEY_1       30
  169. #define KEY_2       31
  170. #define KEY_3       32
  171. #define KEY_4       33
  172. #define KEY_5       34
  173. #define KEY_6       35
  174. #define KEY_7       36
  175. #define KEY_8       37
  176. #define KEY_9       38
  177. #define KEY_0       39
  178.  
  179. #define KEY_F1      58
  180. #define KEY_F2      59
  181. #define KEY_F3      60
  182. #define KEY_F4      61
  183. #define KEY_F5      62
  184. #define KEY_F6      63
  185. #define KEY_F7      64
  186. #define KEY_F8      65
  187. #define KEY_F9      66
  188. #define KEY_F10     67
  189. #define KEY_F11     68
  190. #define KEY_F12     69
  191.  
  192. static const uchar  keyReport[NUM_KEYS + 1][2] PROGMEM = {
  193. /* none */  {0, 0},                     /* no key pressed */
  194. /*  1 */    {MOD_SHIFT_LEFT, KEY_A},
  195. /*  2 */    {MOD_SHIFT_LEFT, KEY_B},
  196. /*  3 */    {MOD_SHIFT_LEFT, KEY_C},
  197. /*  4 */    {MOD_SHIFT_LEFT, KEY_D},
  198. /*  5 */    {MOD_SHIFT_LEFT, KEY_E},
  199. /*  6 */    {MOD_SHIFT_LEFT, KEY_F},
  200. /*  7 */    {MOD_SHIFT_LEFT, KEY_G},
  201. /*  8 */    {MOD_SHIFT_LEFT, KEY_H},
  202. /*  9 */    {MOD_SHIFT_LEFT, KEY_I},
  203. /* 10 */    {MOD_SHIFT_LEFT, KEY_J},
  204. /* 11 */    {MOD_SHIFT_LEFT, KEY_K},
  205. /* 12 */    {MOD_SHIFT_LEFT, KEY_L},
  206. /* 13 */    {MOD_SHIFT_LEFT, KEY_M},
  207. /* 14 */    {MOD_SHIFT_LEFT, KEY_N},
  208. /* 15 */    {MOD_SHIFT_LEFT, KEY_O},
  209. /* 16 */    {MOD_SHIFT_LEFT, KEY_P},
  210. /* 17 */    {MOD_SHIFT_LEFT, KEY_Q},
  211. };
  212.  
  213. static void buildReport(uchar key)
  214. {
  215. /* This (not so elegant) cast saves us 10 bytes of program memory */
  216.     *(int *)reportBuffer = pgm_read_word(keyReport[key]);
  217. }
  218.  
  219. uchar   usbFunctionSetup(uchar data[8])
  220. {
  221. usbRequest_t    *rq = (void *)data;
  222.  
  223.     usbMsgPtr = reportBuffer;
  224.     if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS){    /* class request type */
  225.         if(rq->bRequest == USBRQ_HID_GET_REPORT){  /* wValue: ReportType (highbyte), ReportID (lowbyte) */
  226.             /* we only have one report type, so don't look at wValue */
  227.             buildReport(keyPressed());
  228.             return sizeof(reportBuffer);
  229.         }else if(rq->bRequest == USBRQ_HID_GET_IDLE){
  230.             usbMsgPtr = &idleRate;
  231.             return 1;
  232.         }else if(rq->bRequest == USBRQ_HID_SET_IDLE){
  233.             idleRate = rq->wValue.bytes[1];
  234.         }
  235.     }else{
  236.         /* no vendor specific requests implemented */
  237.     }
  238.         return 0;
  239. }
  240.  
  241. /* ------------------------------------------------------------------------- */
  242.  
  243. int     main(void)
  244. {
  245. uchar   key, lastKey = 0, keyDidChange = 0;
  246. uchar   idleCounter = 0;
  247.  
  248.         wdt_enable(WDTO_2S);
  249.     hardwareInit();
  250.         odDebugInit();
  251.         usbInit();
  252.         sei();
  253.     DBG1(0x00, 0, 0);
  254.         for(;;){        /* main event loop */
  255.                 wdt_reset();
  256.                 usbPoll();
  257.         key = keyPressed();
  258.         if(lastKey != key){
  259.             lastKey = key;
  260.             keyDidChange = 1;
  261.         }
  262.         if(TIFR & (1<<TOV0)){   /* 22 ms timer */
  263.             TIFR = 1<<TOV0;
  264.             if(idleRate != 0){
  265.                 if(idleCounter > 4){
  266.                     idleCounter -= 5;   /* 22 ms in units of 4 ms */
  267.                 }else{
  268.                     idleCounter = idleRate;
  269.                     keyDidChange = 1;
  270.                 }
  271.             }
  272.         }
  273.         if(keyDidChange && usbInterruptIsReady()){
  274.             keyDidChange = 0;
  275.             /* use last key and not current key status in order to avoid lost
  276.                changes in key status. */
  277.             buildReport(lastKey);
  278.             usbSetInterrupt(reportBuffer, sizeof(reportBuffer));
  279.         }
  280.         }
  281.         return 0;
  282. }
  283.  
  284. /* ------------------------------------------------------------------------- */



ha pinb.5=0 akkor a "MOD_SHIFT_LEFT" =0 legyen
előre is köszönettel:
joco10
(#) Reggie válasza kovacsj hozzászólására (») Feb 18, 2011 /
 
A topic kiirasnal van 6. pont es alatta AVR-libc FAQ. Na itt talalod meg peldakkal egyutt.
(#) Reggie válasza JOCO10 hozzászólására (») Feb 18, 2011 /
 
Szerintem ennyi forras keves hozza, hogy erdemben segiteni tudjak.
Az egyik lehetseges megoldas, hogy kiveszed progmem-bol es atirod a tobbi fuggvenyt is, amelyek ezeket a valtozokat hasznalnak, hogy ne a progmemben keresse. Ekkor te feltetel nelkul tudod valtoztatni a tartalmat egy egyszeru iffel.
A masik megoldas, hogy csak azokat a fuggvenyeket irod at, amelyek hasznaljak ezt a tombot, megpedig ugy, hogy ha ezt az elemet akarja kiolvasni, akkor megnezi a pb5 allapotat, es aszerint adja vissza az erteket.
(#) kovacsj válasza Reggie hozzászólására (») Feb 18, 2011 /
 
Köszönöm szépen!
Már el is olvastam. És el fogom a többit is.
(#) gabi20 hozzászólása Feb 18, 2011 /
 
Sziasztok az lenne a kérdésem hogy az AVR - ben miért van külön kivezetve AVCC és AGND kivezetések, amikor azok tokon belül össze vannak kötve a GND és VCC vel (multiméterrel kimértem őket)
(#) szepnorbee hozzászólása Feb 18, 2011 /
 
Üdv! Van vagy 3 mega8-am amit vissza kéne hozni az életbe. (hibás órajelbeáll..) Valaki nem csinálná meg nekem ha elpostáznám neki? Nem sürgős, csak gondoltam rákérdezek. Köszi
(#) Reggie válasza gabi20 hozzászólására (») Feb 18, 2011 /
 
Az AVCC biztos nincs osszekotve a VCC-vel. A GND nem pusztan a tokon belul van osszekotve a masik GND-vel, hanem a szilicium csippen belul. Azert van tobb belole, mert ha csak egy oldalon lenne bevezetve, akkor a felvezeto kulonbozo reszen elterne a GND potencialja, mivel nem 0 az ellenallasa es nem 0 aram folyik rajta.
(#) szepnorbee hozzászólása Feb 19, 2011 /
 
Nincs véletlenül valakinek egy atmega8-ra (DIP) tervezett demó panele megtervezve? Eagle vagy bármi. Nincs erőm tervezni :S
(#) Reggie válasza szepnorbee hozzászólására (») Feb 19, 2011 /
 
Itt talalsz parat.
(#) Massawa hozzászólása Feb 19, 2011 /
 
Sziasztok Dragon használok!

Én csak nemrégen álltam át az AVR-re, igy most gyüjtöm csak a tapasztalatokat.

Azt szeretném kérdezni, hogy a Dragonnal hogyan szoktátok a prototipus áramkör müködését szimulálni. A prototipus panelen van néhány nyomogomb meg LED, és ezeket szeretném valahogyan szimulálni még mielött beprogramoznám az AVR-t. Lehet ilyesmit csinálni az ISP-n keresztül? Vagy mindig csak beprogramozott AVR-rel lehet a probát elvégezni?
A valamikori PIC programozon voltak már elev ilyen LED-ek meg nyomogombok.

Kösz a segitséget.
(#) sikolymester válasza Massawa hozzászólására (») Feb 19, 2011 /
 
"Lehet ilyesmit csinálni az ISP-n keresztül?"

Szerintem keversz valamit. ISP-n keresztül ilyet biztosan nem csinálsz, mivel az a soros programozót takarja.
Két lehetőség van a szimulálásra:

Vagy ténylegesen szimulálsz az AVR Simulatorban, amit az AVRStudio4 programban tehetsz meg. Ekkor a nyomógombokat úgy tudod szimulálni, hogy manuálisan nyomkodod a portok bemeneti regisztereit (Az Avrstudio simulatorban).

A másik lehetőség az, hogy a Dragonnal tudsz debuggolni, és akkor "valós időben" látod, hogy mi zajlik az AVR-en.
(#) Massawa válasza sikolymester hozzászólására (») Feb 20, 2011 /
 
Kösz,

A Studio4-t csak most tanulom, nem egészen értem, hogy rajta hogyan "nyomkodhatom" a portok bemeneti regisztereit, illetve ne adj isten pl. egy poti állását hogyan tudom igy bevinni?

A többivel még el kell játszadoznom.
(#) kovacsj válasza Massawa hozzászólására (») Feb 20, 2011 /
 
Rákattintasz. Aztán vagy fekete lesz (5V) vagy fehér. (0V).
Auto step üzemmódban látod az eredményét.
Analóg jelet nem tudsz szimulálni.
(#) Massawa válasza kovacsj hozzászólására (») Feb 20, 2011 /
 
Kösz! Megyek probálgatni!
(#) kiborg hozzászólása Feb 21, 2011 /
 
Hali!
TWI-t be lehet úgy állítani, hogy ne akarjon START-ot küldeni és ne várjon vissza semmilyen értéket/ellenőrzést/ACK/NACK-ot? Hanem csak beleteszek egy adatot a TWI data regiszterbe és elküldi.
Ha beállítható, akkor hogyan?
Üdv Kiborg
(#) kovacsj hozzászólása Feb 21, 2011 1 /
 
Sziasztok!

Ismeri valaki a Tinymenu-t? A problémám az vele, hogy mindig csak a két végállását hajlandó felvenni, a közbeeső menüket mindig átlépi. Mi lehet ennek a baja?
  1. menu_t sub1_menu = {
  2.         .top_entry = 0,
  3.         .current_entry = 0,
  4.         .entry =  {
  5.                 {.flags = 0,
  6.                  .select = my_select,
  7.                  .name = "sel_2",
  8.                  .value = 0,
  9.                 },
  10.                 {.flags = 0,
  11.                  .select = my_select,
  12.                  .name = "sel_3",
  13.                  .value = 0,
  14.                 },
  15.                 {.flags = 0,
  16.                  .select = my_select,
  17.                  .name = "sel_4",
  18.                  .value = 0,
  19.                 },
  20.                 {.flags = 0,
  21.                  .select = my_select,
  22.                  .name = "sel_5",
  23.                  .value = 0,
  24.                 },
  25.                 {.flags = 0,
  26.                 .select = my_select,
  27.                 .name = "sel_6",
  28.                  .value = 0,
  29.                 },
  30.         },
  31.         .num_entries = 5,
  32.         .previous = NULL,
  33. };


Ebben az esetben csak a sel_2 és a sel_6 között ugrál a léptetés hatására. A main_menu-nél is ugyanez a helyzet.
(#) zolee1209 válasza kiborg hozzászólására (») Feb 21, 2011 /
 
Nekem gyanús, hogy SPI-t kellene használnod, amennyiben lehetséges.
(#) kiborg válasza zolee1209 hozzászólására (») Feb 21, 2011 /
 
Egy Nokia 3310 kijelzőről van szó. SPI buszos ha jól tudom. De a kijelzőnél csak 2 láb van adatkapcsolatra(clk és DataIN).Az SPI-nél meg 4 láb. Melyiket válasszam ?(SCK tiszta, de a másik?)
Kiborg
(#) zolee1209 válasza kiborg hozzászólására (») Feb 21, 2011 /
 
3310 LCD-vel csak futólag foglalkoztam. Az SPI-ból a következőkre lenne szükség. MOSI, ez lesz az LCD adat bemenete, LCD-n elvileg SDIN jelölés adatlap szerint. SCK az órajel, LCD-n SCLK. A /SS láb megy az LCD /SCE lábára, ez engedélyezi a vezérlőt. Erre a három lábra van szükséged az SPI perifériából. Illetve még másik két láb a kijelzőhöz, valamelyik portról. (D-/C ; /RES)
(#) kiborg válasza zolee1209 hozzászólására (») Feb 21, 2011 /
 
Aha, köszike.
Viszont hogyha több SPI-s cuccot akarok rátenni (mindegyiknek saját /SCE lába van, akkor hogyan oldjam meg ? Egyszerűen kihagyom és egy-egy portlábat kap engedélyezőnek?
Üdv Kiborg
(#) edison14 hozzászólása Feb 22, 2011 /
 
Hali.
Megépítettem a fusebit doctort és remekül működik is. Viszont egy gondom van vele hogy a terminál programban össze vissza karaktereket ír ki. A sebességet beállítottam 4800-ra de úgy is ugyan az. Esetleg aki megépítette tudna segíteni a terminál program beállításában mert szerintem ott rontottam el valamit.
Köszi.
(#) huba válasza edison14 hozzászólására (») Feb 22, 2011 /
 
Ha hazamegyek megpróbálom. Igazából nem volt rá szükségem. Attiny2313 be, zöld led, örül. Kutat keres, fél éve félretett ATmega16 megkerül betesz, zöld led örül.
(#) trudnai válasza kovacsj hozzászólására (») Feb 22, 2011 /
 
Idézet:
„Ebben az esetben csak a sel_2 és a sel_6 között ugrál a léptetés hatására. A main_menu-nél is ugyanez a helyzet.”


En nem ismerem ezt a tinymenut, csak felmerult bennem, hogy nem "visszafele" lepkedsz-e -- tehat ami gombrol azt hiszed, hogy a "lefele nyil" az valojaban a felfele, es amirol, hogy "felfele", az valojaban a lefele. Tehat mikor "lefele" akarnal lepegetni akkor felfele lep valojaban, de mivel mar a legelso menun allsz, az atcsorog a legutolso menupontra (es utana megnyomod a masik gombot amivel az vissza csorog a legelsore) -- de ez mint csak egy eshetoseg merult fel bennem.

UI: Masik lehetoseg, hogy nincs perges metesitesed es az mindig le ill fel fog szaladni a perges miatt a legelso ill. legutolso pontra...
(#) kovacsj válasza trudnai hozzászólására (») Feb 22, 2011 /
 
Nem visszafelé lépek, de azt hiszem, meglesz a hiba.
Egy végtelen ciklusban van a léptetés úgy, hogy bizonyos feltételek teljesülése esetén lépjen ki a ciklusból. Este majd megnézem alaposabban, mert az a gyanúm, hogy az egyik feltétel nem teljesül, a másik feltétel pedig a menü végének elérése. (Ez teljesül.)

Az első teljesülése esetén csak egyet lépne, és kilépne a ciklusból. Ez nem teljesül, és a számláló így végig pörög a második feltételig. Legalábbis most így gondolom, de este ellenőriznem kell.

A második felvetésed viszont elgondolkodtató. Megnézem oszcilloszkóppal ezt is.
(#) edison14 válasza huba hozzászólására (») Feb 22, 2011 /
 
Ebben igazad van. Az egyik haverom kért meg hogy csináljak és törjem fel neki a procijait és sikerült is feltörni őket. Igazából nekem sincs szükségem erre a funkcióra de ha már egyszer van akkor próbáljam ki .
(#) samu003 hozzászólása Feb 23, 2011 /
 
Sziasztok!

atiny45 AVR memoriájába szeretnék írni egy 16 bites számot. Kérdés: Hogy tudom megtenni programbol. AVR studioval programozok. AZ AVR memoria tartalmát hogyan tudom kiolvasni? AVR működés közben lehetőség van a memoria adott címének kiírása vagy ellenörzése?
(#) kovacsj válasza kovacsj hozzászólására (») Feb 23, 2011 /
 
Meg is van a hiba. Developer error a neve.

Nem nulláztam a feltétel meghívását végző számlálót, és mivel ciklusban volt az a függvény is, mindig meghívódott, léptetve így a számlálót a végpontig.
Úgy tudtam csak rájönni, hogy lelassítottam a végtelen ciklust a main függvényben egy _delay_ms(500)-zal.
(#) Axel hozzászólása Feb 23, 2011 /
 
Hello!

Valaki légyszi mondja már meg miért nem hajlandó működni a PWM Atmega8-ason az alábbi beállításokkal!
Nekem lövésem sincs már... LED-del tesztelgettem, katód a földre anódja a PWM lábra csatlakozik.
Attiny 45-nél 1 perc és simán működött ugyanezen szisztéma szerint beállítva.

  1. #include <avr/io.h>
  2.  
  3. int main(){
  4.  
  5. DDRB=(1<<PB3)//PB3 PWM kimenet(OC2)
  6.  
  7. while(1){
  8. TCCR2=(0<<FOC2)|(1<<WGM21)|(0<<WGM20)|(1<<COM21)|(0<<COM20)|(1<<CS22)|(1<<CS21)|(1<<CS20);
  9.  
  10. OCR2=255;}} //Csak példa, akármit írok be, nem világít a led.
Következő: »»   309 / 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