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   188 / 840
(#) ixel válasza ATtiny hozzászólására (») Feb 16, 2010 /
 
Szia ATtiny!

Már itt tartok a program átszerkesztésével, most ott akadtam el, hogy a kijelzés benn maradt a gombnézegető ciklusban és így gyors lett z egész. Valahogy ki kellene raknom külön és figyelnem a gombok állapotát csak még nem jöttem rá hogy hogyan. Valahogy megszakítással nem boldogulok.
  1. aProcesszor : ATtiny2313
  2. * Clock      : 8Mhz Kvarc /8-os órajel osztó fuse bit = 1Mhz valós belső órajel
  3. * A program lefordítható AvrStudio4 és WinAvr páros segítségével
  4. *
  5. * Láb kiosztás:
  6. *
  7. * PORTB 0..3 Pinek: BCD percek (lásd a #define -k között)
  8. * PORTB 4..6 Pin: BCD percek tizes
  9. * PORTD 0..3 Pinek: BCD órák (lásd a #define -k között)
  10. * PORTD 4..5 Pinek: BCD órák tizes(lásd a #define -k között)
  11. *
  12. *
  13. * PORTB 4..7 Pinek: Nyomógombok
  14. * PORTD 06 Pin: Csipogó az ébresztéshez
  15. *
  16. *********************************************************************************/
  17.  
  18. #include <avr/interrupt.h>
  19. #include <inttypes.h>
  20. #include <avr/io.h>
  21. #include <util/delay.h>
  22.  
  23.  
  24. //BCD kod kimenet perc egyesek B melyik Pinjére vannak kötve
  25. #define BCD_P_A (1<<PINB0)
  26. #define BCD_P_B (1<<PINB1)
  27. #define BCD_P_C (1<<PINB2)
  28. #define BCD_P_D (1<<PINB3)
  29.  
  30. //BCD kod kimenet perc tizesek B melyik Pinjére vannak kötve
  31. #define BCD_TP_A (1<<PINB4)
  32. #define BCD_TP_B (1<<PINB5)
  33. #define BCD_TP_C (1<<PINB6)
  34.  
  35. //BCD kod kimenet óra egyesek D melyik Pinjére vannak kötve
  36. #define BCD_O_A (1<<PIND0)
  37. #define BCD_O_B (1<<PIND1)
  38. #define BCD_O_C (1<<PIND2)
  39. #define BCD_O_D (1<<PIND3)
  40.  
  41. //BCD kod kimenet óra tizesek D melyik Pinjére vannak kötve
  42. #define BCD_TO_A (1<<PIND4)
  43. #define BCD_TO_B (1<<PIND5)
  44.  
  45.  
  46. //A BCD kód percek kell bekapcsolni, hogy megjelenjenek a számok
  47.  
  48. #define LED_P_0 PORTB &= ~((1<<PINB0)|(1<<PINB1)|(1<<PINB2)|(1<<PINB3))
  49. #define LED_P_1 BCD_P_A
  50. #define LED_P_2 BCD_P_B
  51. #define LED_P_3 BCD_P_A| BCD_P_B
  52. #define LED_P_4 BCD_P_C
  53. #define LED_P_5 BCD_P_A | BCD_P_C
  54. #define LED_P_6 BCD_P_B | BCD_P_C
  55. #define LED_P_7 BCD_P_A | BCD_P_B | BCD_P_C
  56. #define LED_P_8 BCD_P_D
  57. #define LED_P_9 BCD_P_A | BCD_P_D
  58.  
  59.  
  60. //A BCD kód percek tizes kell bekapcsolni, hogy megjelenjenek a számok
  61.  
  62. #define LED_TP_0 PORTB &= ~((1<<PINB4)|(1<<PINB5)|(1<<PINB6))
  63. #define LED_TP_1 BCD_TP_A
  64. #define LED_TP_2 BCD_TP_B
  65. #define LED_TP_3 BCD_TP_A| BCD_TP_B
  66. #define LED_TP_4 BCD_TP_C
  67. #define LED_TP_5 BCD_TP_A | BCD_TP_C
  68.  
  69. //A BCD kód órák kell bekapcsolni, hogy megjelenjenek a számok
  70.  
  71. #define LED_O_0 PORTD &= ~((1<<PIND0)|(1<<PIND1)|(1<<PIND2)|(1<<PIND3))
  72. #define LED_O_1 BCD_O_A
  73. #define LED_O_2 BCD_O_B
  74. #define LED_O_3 BCD_O_A| BCD_O_B
  75. #define LED_O_4 BCD_O_C
  76. #define LED_O_5 BCD_O_A | BCD_O_C
  77. #define LED_O_6 BCD_O_B | BCD_O_C
  78. #define LED_O_7 BCD_O_A | BCD_O_B | BCD_O_C
  79. #define LED_O_8 BCD_O_D
  80. #define LED_O_9 BCD_O_A | BCD_O_D
  81.  
  82.  
  83. //A BCD kód órák tizes kell bekapcsolni, hogy megjelenjenek a számok
  84.  
  85.  
  86. #define LED_TO_0 PORTD &= ~((1<<PIND4)|(1<<PIND5))
  87. #define LED_TO_1 BCD_TO_A
  88. #define LED_TO_2 BCD_TO_B
  89.  
  90. // Gombok Port B-n 4,7K-val sorosan a Föld felé zárnak
  91. // Port B Pinek ahol a Gombok vannak
  92. #define GOMB_H  7       //Órák      
  93. #define GOMB_M  6       //Percek
  94. #define GOMB_SA 5       //Set Alarm
  95. #define GOMB_ST 4       //Set Time
  96.  
  97.  
  98. #define GOMBCIKLUS 60  //Gombok késleltetésére. Minél nagyobb a szám annál lasabban működnek a gombok
  99.  
  100. //A Csipogó melyik Pinre van kötve a PORT D -n
  101. #define BUZZER 6
  102.  
  103. #define ALARM_SEC 59  //max. hány másodpercig ébresszen az óra. A minimum 1 a maximum 59!
  104.  
  105. #define NORMAL 0
  106. #define ALARMSET 1
  107. #define OFF 0
  108. #define ON 1
  109.  
  110. // ----- Globális változók -------
  111. volatile uint8_t hour = 12;
  112. volatile uint8_t min  = 0;
  113. volatile uint8_t sec  = 0;
  114.  
  115. // -------------------------------
  116.  
  117.  
  118.  
  119.  
  120.  
  121. // -------- Késleltetés ---------
  122. void delay(uint8_t wait)
  123. {
  124.  while(wait>0)
  125.  {
  126.   wait--;
  127.  }
  128. }
  129.  
  130. void kijelzes(uint8_t h,uint8_t m)
  131. {
  132. uint8_t kijelzo_P[10]={LED_P_0,LED_P_1,LED_P_2,LED_P_3,LED_P_4,LED_P_5,LED_P_6,LED_P_7,LED_P_8,LED_P_9};
  133. PORTB = kijelzo_P[m%10];//Perc alsó helyiérték
  134. uint8_t kijelzo_TP[6]={LED_TP_0,LED_TP_1,LED_TP_2,LED_TP_3,LED_TP_4,LED_TP_5};
  135. PORTB = kijelzo_TP[m/10] ;
  136. uint8_t kijelzo_O[10]={LED_O_0,LED_O_1,LED_O_2,LED_O_3,LED_O_4,LED_O_5,LED_O_6,LED_O_7,LED_O_8,LED_O_9};
  137. PORTD = kijelzo_O[h%10] ;//óra alsó helyiérték
  138. uint8_t kijelzo_TO[3]={LED_TO_0,LED_TO_1,LED_TO_2};
  139. PORTD = kijelzo_TO[h/10] ;
  140.  
  141.        
  142.                    
  143.                                
  144.          delay(0xff);                                          
  145.  
  146.      
  147. }
  148.  
  149.  
  150.  
  151. int main()
  152. {
  153.  uint8_t ciklus = GOMBCIKLUS;
  154.  
  155.     uint8_t alarm_hour   = 0;
  156.         uint8_t alarm_min    = 0;
  157.  
  158.         uint8_t mode  = NORMAL;
  159.         uint8_t delay = 0xff;
  160.         uint8_t alarm = OFF;
  161.  
  162.  
  163.    
  164.  
  165.    
  166.  // Init port pins
  167.         DDRB = (1<<DDB0)|(1<<DDB1)|(1<<DDB2)|(1<<DDB3)|(1<<DDB4)|(1<<DDB5)|(1<<DDB6)|(1<<DDB7); // B port 0,1,2,3,4,5,6 -es PIN output
  168.         DDRD = (1<<DDD0)|(1<<DDD1)|(1<<DDD2)|(1<<DDD3)|(1<<DDD4)|(1<<DDD5)|(1<<DDD6); // D port 0,1,2,3,4,5,6 -os PIN output
  169.  
  170.  
  171.        
  172.         // Setup timer1 16bites
  173.     TCCR1B |= (1<<WGM12)|(1<<CS11)|(1<<CS10);  // CTC mode,  preselect ratio : 64      
  174.         TCNT1 = 0;            // timer1 szamlaloja legyen 0
  175.     OCR1A = 15625;        // timer1 Compare A (15625) 1Hz ! 0...15624 az pont 15625
  176.         TIMSK |= (1<<OCIE1A); // timer1 Compare Match A megszakitas bekapcsolas
  177.     sei();    //megszakítás bekapcsolás  
  178.  
  179.  
  180.        
  181.        
  182.        
  183.          while(1)
  184.          {
  185.      
  186.         switch(mode)
  187.  
  188.  {
  189.      case NORMAL:   kijelzes(hour,min); break;
  190.           case ALARMSET: kijelzes(alarm_hour,alarm_min);
  191.                          delay--;
  192.                                          if(delay==0) mode = NORMAL;
  193.                                          break;
  194.          }
  195.        
  196.          
  197.          
  198.      //Alarm bekapcsolás
  199.  
  200.          if((alarm_hour == hour)&&(alarm_min == min)&&(sec==0)) alarm = ON; //Ha az óra eléri a beállított ébresztési időpontot akkor bekapcsol az ébresztési funkció
  201.  
  202.      if(alarm == ON) //Ha az ébresztési funkció aktív
  203.          {
  204.           if(sec == ALARM_SEC) alarm = OFF;  //Ha eléri az ébresztés időtartama a beállított max másodpercet, akkor automatikusan kikapcsol
  205.          
  206.           if(sec & 0x1)           //ébresztés másodpercenként ki - be kapcsolgatjuk a csipogót
  207.            PORTD |=  (1<<BUZZER); //itt kapcsoljuk be
  208.       else
  209.        PORTD &= ~(1<<BUZZER); //itt kapcsoljuk ki
  210.          }
  211.      else
  212.       PORTD &= ~(1<<BUZZER); //biztos ami biztos kikapcsoljuk a csipogót ha nem aktív az ébresztés
  213.  
  214.  
  215.          //Gombok nézegetése
  216.          if(ciklus == 0) //Nem kell túl gyakran ránézni a gombokra, mert felesleges.
  217.          {
  218.           PORTB = 0; //Az összes szegmenst kikapcsoljuk
  219.       //DDRB  = (1<<DDB0); // B port 0 -ás PIN output, többi pin input
  220.            DDRB=0x00;
  221.        PORTB = (1<<PORTB7)|(1<<PORTB6)|(1<<PORTB5)|(1<<PORTB4)|(1<<PORTB3)|(1<<PORTB2)|(1<<PORTB1)|(1<<PORTB0); // Felhúzó ellenállások bekapcsolva
  222.  
  223.       if(!(PINB & (1<<GOMB_ST)))        // GOMB_ST -t megnyomták-e?
  224.       {
  225.        alarm = OFF;                                     //Ha megnyomjuk a GOMB_ST -t akkor azonnal kikacsol az ébresztés;
  226.            if(!(PINB & (1<<GOMB_H)))    // GOMB_H -t megnyomták-e?
  227.            {
  228.             hour++;
  229.             if(hour>23) hour = 0;
  230.            }
  231.            else
  232.        {
  233.         if(!(PINB & (1<<GOMB_M)))   // vagy a GOMB_M -t megnyomták-e?
  234.         {
  235.          min++;
  236.              if(min>59) min = 0;
  237.             }
  238.            }
  239.           }
  240.  
  241.  
  242.           if(!(PINB & (1<<GOMB_SA)))    // GOMB_SA -t megnyomták-e?
  243.       {
  244.        alarm = OFF;                                     //Ha megnyomjuk a GOMB_SA -t akkor azonnal kikacsol az ébresztés;
  245.            mode = ALARMSET;                             //Az óra átkapcsol óra kijelzésből ébresztés beállításba
  246.            delay = 0xff;                                //Az ébresztés beállítás milyen sokág maradjon a kijelzőn, ha nem nyúlunk a gombokhoz
  247.            
  248.            if(!(PINB & (1<<GOMB_H)))    //GOMB_H -t megnyomták-e?
  249.            {
  250.             alarm_hour++;
  251.             if(alarm_hour>23) alarm_hour = 0;
  252.        }
  253.        else
  254.            {
  255.         if(!(PINB & (1<<GOMB_M)))       // vagy a GOMB_M -t megnyomták-e?
  256.             {
  257.          alarm_min++;
  258.              if(alarm_min>59) alarm_min = 0;
  259.             }
  260.            }
  261.       }
  262.           PORTB = 0;
  263.           DDRB  = (1<<DDB0)|(1<<DDB1)|(1<<DDB2)|(1<<DDB3)|(1<<DDB4)|(1<<DDB5)|(1<<DDB6)|(1<<DDB7); // B port 0,1,2,3,4,5,6,7 -es PIN output
  264.           ciklus = GOMBCIKLUS;
  265.          }
  266.     ciklus--;
  267.         }
  268.  
  269. }
  270.  
  271.  
  272.  
  273.  
  274.  
  275. // ----------------------- Megszakítás Timer1 Comp A -------------------------
  276. ISR(TIMER1_COMPA_vect)   //1000000Hz/64/15625 = 1Hz -es megszakítás
  277.  
  278.  
  279. {
  280.  sec++;
  281.  if(sec>59)
  282.  {
  283.   sec = 0;
  284.   min++;
  285.   if(min>59)
  286.   {
  287.    min = 0;
  288.    hour++;
  289.    if(hour>23)
  290.    {
  291.     hour = 0;
  292.    }
  293.   }
  294.  }
  295. }
(#) ATtiny válasza ixel hozzászólására (») Feb 16, 2010 /
 
Az optimalizációt vedd le -O0 -ra. Szerintem úgy fordítod a kódot, hogy be van kapcsolva az optimalizáció. Márpedig ez a kód úgy íródott, hogy ki kell kapcsolni.
(#) ixel válasza ATtiny hozzászólására (») Feb 16, 2010 /
 
Ezt hol is kell?
(#) ATtiny válasza ixel hozzászólására (») Feb 16, 2010 /
 
A projekt beállításoknál. Az opciók között ott van az optimalizáció szintje. Ha jók az emlékeim akkor alapból O1-es szinten van, minden új projektnél.
(#) tukko válasza (Felhasználó 4577) hozzászólására (») Feb 16, 2010 /
 
Fogalmam sincs mik azok a fuse bitek!
Az stk200 leírást olvastam,de még a led villogtatót se sikerült megcsinálnom! Ezért kéne valaki aki megmutatja!
(#) vzoole válasza tukko hozzászólására (») Feb 16, 2010 /
 
Az adatlapban a "System Clock and Clock Options" fejezetben, le van írva minden.

(most az jön, hogy nem tudsz angolul?!)
Lehet kéne már egy cikk erről... elég gyakori kérdés.


(#) (Felhasználó 4577) válasza tukko hozzászólására (») Feb 16, 2010 /
 
(#) victorio hozzászólása Feb 16, 2010 /
 
Üdv mindenkinek.

Ne haragudjatok meg ha nagyon láma problémával zaklatlak titeket. Próbáltam keresni a fórumon 8na meg gugli), de igazi megoldást nem találtam. Lehet csak azért mert nem tudom mit kellene igazán keresni.

Kezdő (nagyon kezdő) vagyok AVR programozásban és nem boldogulok egy mega8-assal. Tudom, hogy a fenti idézet poén, de nekem ezt dobja a gép. Sőt minden olvasásra csak csupa 0xFF jön ki.

USB-s AVR ISP programozóm van, opto leválasztással. AVRprog (1.37,1.4) és AVROSP-II .543-al próbáltam. Mindkét progi felismeri és 19600bps-en küldi is át a hex-et, csak vissza már FF jön mindenhonnan.

MISO, MOSI és SCK lábakra raktam LED-et 330-as ellenállásonon keresztül, szépen villognak ha megy a program vagy a read, ezek szerint az optocsatolók átviszik a jelet. Nem tudom számít-e, de a MOSI és RESET láb alapból magasan a MISO alacsonyan van, ha rajta van a programozó. Programozás vagy olvasás alatt a RESET alacsony.

A fuse/lock biteket nem is tudom állítani mert arra is FF jön vissza egyből.

Egyelőre nincs több ötletem, hogy mitől lehet a dolg. Más programozóm nincs így nem tudom kipróbálni. 3db mega8-om van 2-vel próbáltam ki, a 3.-at nem akarom még el..ni, megvárom míg találok valakit aki okosabb a témában.

Előre is köszönöm a segítségeteket.
(#) Melphi hozzászólása Feb 16, 2010 /
 
Sziasztok valaki legyen szives megmondani h mi a külömbség az atmega 32-16pi és pu között nem jövök rá .
Köszönöm
(#) (Felhasználó 4577) válasza Melphi hozzászólására (») Feb 16, 2010 /
 
Az egyik SMD a másik furatszerelt és max 16MHz-en járnak.
A HQ Elektronik keresőjében meg tudod nézni, hogy melyik az SMD.
(#) Melphi válasza (Felhasználó 4577) hozzászólására (») Feb 16, 2010 /
 
Utánna néztem a pi és pu az dip40 nem smd az au smd
(#) Topi válasza Melphi hozzászólására (») Feb 16, 2010 /
 
PI és PU, a hőmérséklettartományt jelenti. Adatlap kitér rá bővebben.
(#) Melphi válasza Topi hozzászólására (») Feb 16, 2010 /
 
Köszönöm
(#) ixel válasza ATtiny hozzászólására (») Feb 17, 2010 /
 
ok, de mivel a kijelzés a te kódodban multiplexer üzemben van még mindig gyors.
(#) ATtiny válasza ixel hozzászólására (») Feb 17, 2010 /
 
Hát akkor növeld meg a GOMBCIKLUS -t. Valahogy így:

A main elején ezt:
  1. uint8_t ciklus = GOMBCIKLUS;


Át kell írni erre:
  1. uint16_t ciklus = GOMBCIKLUS;


És végül a define -k között át kell írni ezt:
  1. #define GOMBCIKLUS 60  //Gombok késleltetésére. Minél nagyobb a szám annál lasabban működnek a gombok


Valami nagyobb számra. Nagyságrendileg 200...400 -at írnék bele próbaképp. Neked kell kitapasztalnod melyik a kényelmes sebességű gomb kezelés.
(#) mario1111 hozzászólása Feb 17, 2010 /
 
Üdv!

Előre elnézést, ha már kérdeztek hasonlót, de nem találtam. Ez valami olyan,h 8 jumperrel lehet majd beállítani egy értéket amit a procinak be kell olvasnia. Atmega 8 lenne a kiválasztott. Az elképzelés az,h a program PC0-ra kirak 5 voltot és ha jumperelve van, akkor PD7-en logikai 1-van. Ezután nagy ellenállású állapotba kapcsol PC0 és PC1-re ad 5 voltot. Megnézi PD7-et. Nagy ellenállásúra kapcsolja PC1-et.... Szóval van erre valami egyszerű módszer,h nagy ellenállásba rakja a kimenetet? Vagy nem tud ilyet? Ha nem akkor lehetne azt,h megfordítani a logikát az ellenállás pedig nem lehúzna, hanem fel és akkor nyitott kollektoros kimenetekkel végig menne minden jumperen,h eldöntse 1 vagy 0. Nyitott kollektoros kimeneteket tud? A lényeg itt 7 db ellenállás megspórolása.

Üdv: Márió

hobbi_1.JPG
    
(#) ATtiny válasza mario1111 hozzászólására (») Feb 17, 2010 /
 
Mivel az AVR-ek esetében minden lábra be lehet kapcsolni a beépített felhúzó ellenállást, így semmilyen külső ellenállásra nincs szükség. Szépen be kell konfigurálni a portot bemenetnek és egyidejűleg bekapcsolni a felhúzó ellenállást. Majd ezt az AVR által 5V-ra felhúzott lábat lehet egy jumperrel a földre kötni. Mivel a port bemenetnek van konfigurálva, így könnyedén ki lehet olvasni a láb állapotát, hogy magas vagy alacsony. Egyszerű, mint a faék. Nem kell elbonyolítani.
(#) mario1111 válasza ATtiny hozzászólására (») Feb 17, 2010 /
 
Kössz!

Ez megkönnyíti az életem
(#) ixel válasza ATtiny hozzászólására (») Feb 17, 2010 /
 
Valahogy nem értem ezt a megszakítást.
erre a próba kódrészletre ezt a jibát kapom:
../sajatnixi.c:214: error: static declaration of '__vector_4' follows non-static declaration
  1. // Setup timer1 16bites
  2.     TCCR1B |= (1<<WGM12)|(1<<CS11)|(1<<CS10);  // CTC mode,  preselect ratio : 64      
  3.         TCNT1 = 0;            // timer1 szamlaloja legyen 0
  4.     OCR1A = 15625;        // timer1 Compare A (15625) 1Hz ! 0...15624 az pont 15625
  5.         TIMSK |= (1<<OCIE1A); // timer1 Compare Match A megszakitas bekapcsolas
  6.     sei();    //megszakítás bekapcsolás  
  7.  
  8.  
  9.          while(1)
  10.          {
  11.      
  12.        kijelzes(min,sec);
  13.          
  14.          }
  15.  
  16.  
  17. // ----------------------- Megszakítás Timer1 Comp A -------------------------
  18. ISR(TIMER1_COMPA_vect)   //1000000Hz/64/15625 = 1Hz -es megszakítás
  19.  
  20.  
  21. {
  22.  sec++;
  23.  if(sec>59)
  24.  {
  25.   sec = 0;
  26.   min++;
  27.   if(min>59)
  28.   {
  29.    min = 0;
  30.    hour++;
  31.    if(hour>23)
  32.    {
  33.     hour = 0;
  34.    }
  35.   }
  36.  }
  37. }
(#) vzoole válasza mario1111 hozzászólására (») Feb 17, 2010 /
 
Szia!

Annyit még hozzátennék, hogy 8 lábon 256 féle állapotot tudsz felvenni!
Ha csak 8 különböző beállítható állapot kell, akkor arra elég 3 láb is.
(#) Ricsi89 hozzászólása Feb 17, 2010 /
 
Sziasztok!
Letöltöttem a gtk cikkében szereplő drivert, de kidob fordításkor pár figyelmeztetést. Ezeket figyelmen kívül hagyhatom, vagy nem? Ezeket a hibákat mindet a driverben találta.
Idézet:
„../simple_driver.c:28: warning: return type defaults to 'int'
../simple_driver.c: In function 'lcd_put_custom_char':
../simple_driver.c:145: warning: initialization discards qualifiers from pointer target type
../simple_driver.c: In function 'lcd_vertical_scroll':
../simple_driver.c:187: warning: initialization discards qualifiers from pointer target type
../simple_driver.c:191: warning: unused variable 'd'
../simple_driver.c: In function 'lcd_putstr':
../simple_driver.c:265: warning: initialization discards qualifiers from pointer target type
../simple_driver.c: In function 'lcd_delay_ms':
../simple_driver.c:33: warning: control reaches end of non-void function

Akkor most én vagyok a béna, vagy tényleg hibás lenne?
(#) labu01wx hozzászólása Feb 17, 2010 /
 
Sziasztok!
Valaki meg tudná mondani, hogy milyen c fordítók és programozó szoftverek léteznek linuxra?
(#) Topi válasza labu01wx hozzászólására (») Feb 17, 2010 /
 
AVR-GCC
Kontrollerlab
AVRDUDE

Ugyan az a GCC használható, mint windows alatt. Csak WinAVR helyett az eredeti nevét kapta: AVR-GCC... Vagy csomagként gcc-avr. Ez a fordító.

Programozó: avrdude. Dragont is kezel, STK-kat is...

Kontrollerlab: Sokszor ajánlott IDE. Én jobban szeretem a külön editort.
(#) lutyii hozzászólása Feb 17, 2010 /
 
Üdv mindenkinek!

Van egy kis problémám: adott egy 20 fordulatos poti, és ennek az poziciójának függvényében kellene állítanom egy változót 0...3000 tartományban. Ez csak egy külső hangolás lenne a sw részére. A problémám az, h síma AD-vel nem tudom egyszerűen leolvasni mert ugye az csak 10bites.

Szerintetek hogyan lehet ezt orvosolni ezt a problémát Atmega8, vagy Atmega16 van itthon) ?

Előre is köszi!

(#) Sir-Nyeteg válasza lutyii hozzászólására (») Feb 17, 2010 /
 
Szoftveresen szorozd meg 3-mal.
(#) lutyii válasza Sir-Nyeteg hozzászólására (») Feb 17, 2010 /
 
Sajnos az nem jó, mert akkor oda a felbontásom.
(#) lutyii válasza lutyii hozzászólására (») Feb 17, 2010 /
 
Ezért van a 20 fordulatos poti, hogy be lehessen lőni a pontos paramétert.
(#) Topi válasza lutyii hozzászólására (») Feb 17, 2010 /
 
Erre megoldás lehet a gyorsulás elvű léptetés.
Lassú változtatás +- 1, gyors változás +-10.

Ez végállásos potméternél elég furcsa lehet, de így még meg tudod valósítani a "lehetetlent". Egyéb módokon nehezebb.

3000 osztást, más módon esetleg mérhetsz oszcillátorral. Csinálhatsz vele egy impulzust, amit teljesen analóg módon állítasz elő. Ha ez az impulzus megfelelően hosszú (pár ms elég) akkor Timer Capture megoldással "bedigitalizálhatod".
A timer 16 bites, a "potméter -> impulzus" átalakítód analóg tehát végtelen felbontású. Így akár még 65000-es felbontást is elérhetsz. Kell egy pontos kristály, és mondjuk egy schmitt triggeres oszcillátor. Vagy egy műveleti erősítős, fűrészjeles generátor. (Fűrészjel komparálási szint = potméter állás... Komparátorod kimenete = Potméter állásnak megfelelő kötöltési tényezőjű négyszögjel.)
(#) edison14 hozzászólása Feb 17, 2010 /
 
Hello !

Valakinek nincsenek meg a C programozásban használatos parancsok és azok leírása? Szeretnék elkezdeni programozni de ha nem tudom a parancsokat és azt hogy hogyan kell őket használni addig nem nagyon tudok hozzáállni. A 8 lábbal c. kapcsolásokat már elolvastam és valamit értettem is belőle mivel már programozok PASCALBAN ami a C elődje. Esetleg nem tudtok valami magyar leírást az AVR studio-ban való C programozásra? Esetleg mit javasoltok hogy tervezzek egy konkrét kapcsolást amit szeretnék megépíteni és ahhoz ahogy tanulok úgy írom a programot vagy először a parancsokat magoljam be próbálgassak ilyen LED villogtató programokat írogatni és csak utána álljak neki bonyolultabb programok írásának?

A választ és a segítséget előre is köszönöm.
(#) trudnai válasza edison14 hozzászólására (») Feb 17, 2010 /
 
A Pascal nem a C elodje! A Pascal Algol alapu nyelv, a C tulajdonkepp teljesen uj -- azota vannak C szeru nyelvek, mint Java, JavaScript, C++, C# es meg egy valag mas.

Erdemes elolvasni a Kernighan & Ritchie konyvet, az a C alapja. Vagy ha meg tudod szerezni, anno a Petho Adam fele konyv is nagyon jo alapot adott C-bol. Meg biztosan talalsz rengeteg C tutorial-t angolul ha ra googlizol...
Következő: »»   188 / 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