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   535 / 840
(#) DJ Szabcsa válasza TavIR-AVR hozzászólására (») Máj 9, 2013 /
 
Lényegében erre. Még annyi, hogy programozni simán az RX-TX-en keresztül soros porton lehet így?
(#) tomipap válasza Robi98 hozzászólására (») Máj 9, 2013 /
 
Milyen programozo? Nekem az AVR-Doper STK500V2 kompatibilis programozommal volt ilyen gondom a napokban. Windows7 alatt nem volt jo a gyari Doper driver. Ez a driver megoldotta a problemat azonnal. De annyi lenyegi kulonbseggel, hogy en 32biten csinaltam. Win8 alatt nekem az AVR doper 64 bit-en eddig sehogy sem kelt eletre.
(#) TavIR-AVR válasza DJ Szabcsa hozzászólására (») Máj 10, 2013 /
 
Nem jellemző. Belső órajel esetén a soros kommunikáció bizonytalan...
(#) szel.balazs válasza TavIR-AVR hozzászólására (») Máj 10, 2013 /
 
Huh, ez a 60 nap alatt arduino ez nagyon csábító és valószínűleg összeszedem magam pár napon belül és elkezdem. Köszönöm szépen.
(#) DJ Szabcsa válasza TavIR-AVR hozzászólására (») Máj 10, 2013 /
 
Esetleg tudnál tippet adni hogyan lehet megoldni a programozást a lehető legegyszerűbben?
(#) kapu48 válasza DJ Szabcsa hozzászólására (») Máj 10, 2013 /
 
És most mit értesz programozás alatt?
(#) DJ Szabcsa válasza kapu48 hozzászólására (») Máj 10, 2013 /
 
Jelenleg egy Arduino kitem van. Ezen van USB-RS232 átalakító alapból. Szeretnék több ilyet készíteni ipari felhasználásra. Azt nem tudom hogy kéne majd az IC-kbe a programot tölteni? Mindegyik panelre tervezzem rá az USB-RS232 átalakítót?
(#) Robi98 válasza tomipap hozzászólására (») Máj 10, 2013 /
 
Köszi, kipróbáltam de sajnos így sem akar sikerülni.
Legalábbis az avrcdc_inf.zip az nem.
A számítógép kiírja, hogy a driver naprakész, csak hát ugye nincsennek elektronikus aláírások.
Ez eddig a windows xp-nél nem volt követelménx és sikerült is.
(#) TavIR-AVR válasza DJ Szabcsa hozzászólására (») Máj 10, 2013 /
 
Külső STK500-assal és Arduino 1.x...
(#) TavIR-AVR válasza DJ Szabcsa hozzászólására (») Máj 10, 2013 /
 
Ipari felhasználás? Maga az Arduino szoftverkörnyezet alkalmatlan a 24/7 üzemre. A Hardware -ről nem is beszélve... .
(#) DJ Szabcsa válasza TavIR-AVR hozzászólására (») Máj 10, 2013 /
 
PLC programozó vagyok. Sok olyan "gépet" készítek ahova sok esetben nagyon drága és felesleges a PLC, bőven elég volna egy arduino. Itt maximum heti 5 napot üzemelne és max 12órát naponta.
(#) TavIR-AVR válasza DJ Szabcsa hozzászólására (») Máj 10, 2013 /
 
Hát határeset. De mind a HW, mind a szoftver elég jelentős átdolgozást igényelne....
_nem_ ilyen feladatra találták ki...
(#) Ami hozzászólása Máj 11, 2013 /
 
Atmega8-cal szeretnék egy kivezérlés jelzőt. Ami működik is, csak a "peak" funkciót nem tudom valahogy megoldani. Már sok mindennel próbálkoztam. Hogyan lehet megoldani, hogy az utolsó led égve maradjon pár másodpercig.
Mellékelve a X akarhanyadik verzió kódja.

  1. // Kivezérlés jelző. ATMega8
  2.  
  3. #define F_CPU 8000000UL
  4.  
  5. #include <avr/interrupt.h>
  6. #include <inttypes.h>
  7. #include <avr/io.h>
  8. #include <util/delay.h>
  9.  
  10. #define LEDH (1<<PIND7)
  11. #define LEDG (1<<PIND6)
  12. #define LEDF (1<<PIND5)
  13. #define LEDE (1<<PIND4)
  14. #define LEDD (1<<PIND3)
  15. #define LEDC (1<<PIND2)
  16. #define LEDB (1<<PIND1)
  17. #define LEDA (1<<PIND0)
  18.  
  19. #define TCNT1 _SFR_IO16(0x2C)
  20.  
  21. int val = 0, var = 10, adc = 0, peak_on = 1, dot_on = 0;
  22.        
  23. // =============================================================
  24. void kesleltet(unsigned char val)
  25. {
  26. for(uint8_t i=0; i<var; i++)
  27. {
  28. _delay_ms(val);  
  29. }
  30. }
  31. // =============================================================
  32. unsigned char Beolvas8bitADC(unsigned char csatorna)
  33. {
  34. ADMUX = (ADMUX & 0b11110000) | csatorna;   // ADC csatorna kivalasztasa
  35. ADCSRA |= (1<<ADSC);    // ADC konverzio elinditasa
  36. while (ADCSRA & (1<<ADSC));    // varas az atalakitasra
  37. ADCSRA |= (1<<ADSC);         // konverzió elindítás
  38. while (ADCSRA & (1<<ADSC));    // varas az atalakitasra
  39. return (ADCH);     // ADC ertek visszaadasa (csak a felso 8 bit (ADCH), az also 2 zajos bit elhagyasa)
  40. }
  41. // =============================================================
  42. void kijelez(unsigned int adc)
  43. {
  44. int level=0x00, dot=0x00, peak=0x00;
  45. // Timer
  46.         TCCR1B |= (1<<WGM12)|(1<<CS11)|(1<<CS10);  // CTC mode,  preselect ratio : 64  
  47.  
  48.         //TCNT1 = 0;            // timer1 szamlaloja legyen 0
  49.     OCR1A = 31249;        // timer1 Compare A (31250) 1Hz ! 0...31249 az pont 31250
  50.        
  51.         TIMSK |= (1<<OCIE1A); // timer1 Compare Match A megszakitas bekapcsolas
  52.  
  53.    
  54.         sei();    //megszakítás bekapcsolás
  55.  
  56. if ( adc < 1 )            { level=0b00000000; dot=0b00000000; }
  57. else if ( adc < 32 )  { level=0b00000001; dot=0b00000001; }
  58. else if ( adc < 64 )  { level=0b00000011; dot=0b00000010; }
  59. else if ( adc < 96 )  { level=0b00000111; dot=0b00000100; }
  60. else if ( adc < 128 ) { level=0b00001111; dot=0b00001000; }
  61. else if ( adc < 160 ) { level=0b00011111; dot=0b00010000; }
  62. else if ( adc < 192 ) { level=0b00111111; dot=0b00100000; }
  63. else if ( adc < 224 ) { level=0b01111111; dot=0b01000000; }
  64. else                              { level=0b11111111; dot=0b10000000; }
  65.        
  66.  
  67. if ( peak<dot ) { peak=dot; }
  68. if ( TCNT1>5 ) { peak=dot; TCNT1=0; }
  69.  
  70. if ( dot_on == 1 ) { PORTD = dot; } else { PORTD = level; }
  71. if ( peak_on == 1 ) { PORTD |= peak; }
  72. //PORTD &= ~0b11111111-peak;
  73.        
  74. }
  75. // =============================================================
  76. int main(void)
  77. {
  78. DDRD=0xFF;      // Összes D port Kimenet (Függőleges 8)
  79. DDRB=0XFF;      // Összes D port Kimenet (Vízszintes 6)
  80.  
  81. DDRC &= ~(1<<PC0);    // PC0-as lab bemenet ADC
  82. /*DDRC &= ~(1<<PC1);    // PC1-es lab bemenet ADC
  83. DDRC &= ~(1<<PC2);    // PC2-as lab bemenet ADC
  84. DDRC &= ~(1<<PC3);    // PC3-as lab bemenet ADC
  85. DDRC &= ~(1<<PC4);    // PC4-as lab bemenet ADC*/
  86. //DDRC &= ~(1<<PC5);    // PC5-as lab bemenet ADC
  87.  
  88. PORTC = 0x00;    // PORTC osszes laban a felhuzoellenallasok kikapcsolva
  89. PORTB = 0x00;    // PORTC osszes laban a felhuzoellenallasok kikapcsolva
  90. PORTD = 0x00;    // PORTC osszes laban a felhuzoellenallasok kikapcsolva
  91. // 8 bit ADC beallitas lefuttatasa
  92.     ADMUX |= (1<<REFS0)|(1<<ADLAR);    // Vcc mint referencia, balra rendezett ADC eredmeny
  93.     ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);  // ADC engedelyezese, ADC eloosztas = 8 (125 KHz)
  94.  
  95. while(1)
  96. {
  97.  
  98. adc = Beolvas8bitADC(0); PORTB=0x01; kijelez(adc);
  99. /*
  100. adc = Beolvas8bitADC(1); PORTB=0x02; kijelez(adc);
  101.  
  102. adc = Beolvas8bitADC(2); PORTB=0x04; kijelez(adc);
  103.  
  104. adc = Beolvas8bitADC(3); PORTB=0x08; kijelez(adc);
  105.  
  106. adc = Beolvas8bitADC(4); PORTB=0x10; kijelez(adc);
  107. */
  108. //adc = Beolvas8bitADC(5); PORTB=0x20; kijelez(adc);
  109. /* */
  110.  
  111. }
  112.  
  113. return (0);
  114. }
(#) kapu48 válasza Ami hozzászólására (») Máj 11, 2013 /
 
Én valahogy így csinálnám:
  1. int old_dot = 0         // előző érték tárolása
  2. ….
  3. // =============================================================
  4.  
  5. void kijelez(unsigned int adc)
  6.  
  7. {
  8.  
  9. int level=0x00, dot=0x00, peak=0x00;
  10.  
  11. // Timer
  12.  
  13.         TCCR1B |= (1<<WGM12)|(1<<CS11)|(1<<CS10);  // CTC mode,  preselect ratio : 64  
  14.  
  15.  
  16.  
  17.         //TCNT1 = 0;            // timer1 szamlaloja legyen 0
  18.  
  19.     OCR1A = 31249;        // timer1 Compare A (31250) 1Hz ! 0...31249 az pont 31250
  20.  
  21.        
  22.  
  23.         TIMSK |= (1<<OCIE1A); // timer1 Compare Match A megszakitas bekapcsolas
  24.  
  25.  
  26.  
  27.    
  28.  
  29.         sei();    //megszakítás bekapcsolás
  30.  
  31.  
  32.  
  33. if ( adc < 1 )      { level=0b00000000; dot=0b00000000; }
  34.  
  35. else if ( adc < 32 )  { level=0b00000001; dot=0b00000001; }
  36.  
  37. else if ( adc < 64 )  { level=0b00000011; dot=0b00000010; }
  38.  
  39. else if ( adc < 96 )  { level=0b00000111; dot=0b00000100; }
  40.  
  41. else if ( adc < 128 ) { level=0b00001111; dot=0b00001000; }
  42.  
  43. else if ( adc < 160 ) { level=0b00011111; dot=0b00010000; }
  44.  
  45. else if ( adc < 192 ) { level=0b00111111; dot=0b00100000; }
  46.  
  47. else if ( adc < 224 ) { level=0b01111111; dot=0b01000000; }
  48.  
  49. else                  { level=0b11111111; dot=0b10000000; }
  50.  
  51.  if (old_dot > dot) {dot += old_dot; old_dot = dot}       // Régi Max érték hozzáadása, Új érték tárolása.
  52.  
  53.  
  54.  
  55. if ( peak<dot ) { peak=dot; }
  56.  
  57. if ( TCNT1>5 ) { peak=dot; TCNT1=0; }
  58.  
  59.  
  60.  
  61. if ( dot_on == 1 ) { PORTD = dot; } else { PORTD = level; }
  62.  
  63. if ( peak_on == 1 ) { PORTD |= peak; }
  64.  
  65. //PORTD &= ~0b11111111-peak;
  66.  
  67.        
  68.  
  69. }
  70.  
  71. // =============================================================
(#) karika200 hozzászólása Máj 11, 2013 /
 
Üdv!

MEgoldottam a korábbi "morse kódolás" problémát zombee javaslata alapján. PC-n működik is az elgondolás, ATmega8-on viszont az istenért sem... Azt vettem észre, hogy ott borul a dolog, hogy a cw_chars tömbből való adatkinyerésnél mindig 0xff jön, bármelyik elemre. Mi okozhatja ezt szerintetek? Így próbáltam ellenőrizni UART-on és soros porton keresztül. Az 'A' betű helyett pedig a soros terminálon csak egy 0xff jelenik meg. A soros beállítások biztos, hogy jók, mert ha UARTDataSend('A'); -t írok az szépen átmegy. Hol lehet a hiba?
(#) PoC_Zoli hozzászólása Máj 11, 2013 /
 
Hali

Szeretnék segítséget kérni. Atmega 128-on kódolok. Már egy létező könyvtárat is használok. Így sajnos szükségem lett olyan változóra ami átjárást biztosít két C file között. Erre tudtok nekem ajánlani valami megoldást?

main-ből szeretnék elérni egy másikat.
A hozzászólás módosítva: Máj 11, 2013
(#) PoC_Zoli válasza PoC_Zoli hozzászólására (») Máj 11, 2013 /
 
már megoldódott
(#) Ami válasza kapu48 hozzászólására (») Máj 11, 2013 /
 
Sajnos nem úgy működik ahogy kellene. 6 oszlop van. mindegyiknek külön peak-ja van. De egysoron sem úgy működik, ahogy szeretném. amúgy a dot, és level mód jól megy csak a peakkal van gond. 5-10 másodpercig tartani kéne a legfelső led-et. tud valaki valami hasonló linket vagy ötletet?


  1. // Kivezérlés jelző. ATMega8
  2.  
  3. #define F_CPU 8000000UL
  4.  
  5. #include <avr/interrupt.h>
  6. #include <inttypes.h>
  7. #include <avr/io.h>
  8. #include <util/delay.h>
  9.  
  10. #define TCNT1 _SFR_IO16(0x2C)
  11.  
  12. int val = 0, var = 10, adc = 0, peak=0, peak_on = 1, dot_on = 0;
  13.        
  14. // =============================================================
  15. void kesleltet(unsigned char val)
  16. {
  17. for(uint8_t i=0; i<var; i++)
  18. {
  19. _delay_ms(val);  
  20. }
  21. }
  22. // =============================================================
  23. unsigned char Beolvas8bitADC(unsigned char csatorna)
  24. {
  25. ADMUX = (ADMUX & 0b11110000) | csatorna;   // ADC csatorna kivalasztasa
  26. ADCSRA |= (1<<ADSC);    // ADC konverzio elinditasa
  27. while (ADCSRA & (1<<ADSC));    // varas az atalakitasra
  28. ADCSRA |= (1<<ADSC);         // konverzió elindítás
  29. while (ADCSRA & (1<<ADSC));    // varas az atalakitasra
  30. return (ADCH);     // ADC ertek visszaadasa (csak a felso 8 bit (ADCH), az also 2 zajos bit elhagyasa)
  31. }
  32. // =============================================================
  33. void kijelez(unsigned int adc)
  34. {
  35. int level=0, dot=0;
  36.  
  37. if ( adc < 1 )            { level=0b00000000; dot=0b00000000; }
  38. else if ( adc < 32 )  { level=0b00000001; dot=0b00000001; }
  39. else if ( adc < 64 )  { level=0b00000011; dot=0b00000010; }
  40. else if ( adc < 96 )  { level=0b00000111; dot=0b00000100; }
  41. else if ( adc < 128 ) { level=0b00001111; dot=0b00001000; }
  42. else if ( adc < 160 ) { level=0b00011111; dot=0b00010000; }
  43. else if ( adc < 192 ) { level=0b00111111; dot=0b00100000; }
  44. else if ( adc < 224 ) { level=0b01111111; dot=0b01000000; }
  45. else                              { level=0b11111111; dot=0b10000000; }
  46.        
  47. if ( peak<dot ) { peak=dot; }
  48. if ( TCNT1>10 ) { peak=dot; TCNT1=0; }
  49.  
  50. if ( dot_on == 1 ) { PORTD = dot; } else { PORTD = level; }
  51. //if ( peak_on == 1 ) { PORTD = peak; }
  52.        
  53. }
  54. // =============================================================
  55. int main(void)
  56. {
  57. DDRD=0xFF;      // Összes D port Kimenet (Függőleges 8)
  58. DDRB=0XFF;      // Összes B port Kimenet (Vízszintes 6)
  59.  
  60. DDRC &= ~(1<<PC0);    // PC0-as lab bemenet ADC
  61. DDRC &= ~(1<<PC1);    // PC1-es lab bemenet ADC
  62. DDRC &= ~(1<<PC2);    // PC2-as lab bemenet ADC
  63. DDRC &= ~(1<<PC3);    // PC3-as lab bemenet ADC
  64. DDRC &= ~(1<<PC4);    // PC4-as lab bemenet ADC
  65. DDRC &= ~(1<<PC5);    // PC5-as lab bemenet ADC
  66.  
  67. PORTC = 0x00;    // PORTC osszes laban a felhuzoellenallasok kikapcsolva
  68. PORTB = 0x00;    // PORTB osszes laban a felhuzoellenallasok kikapcsolva
  69. PORTD = 0x00;    // PORTD osszes laban a felhuzoellenallasok kikapcsolva
  70.  
  71. // 8 bit ADC beallitas lefuttatasa
  72.     ADMUX |= (1<<REFS0)|(1<<ADLAR);    // Vcc mint referencia, balra rendezett ADC eredmeny
  73.     ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);  // ADC engedelyezese, ADC eloosztas = 8 (125 KHz)
  74.  
  75. // Timer indítása
  76.         TCCR1B |= (1<<WGM12)|(1<<CS11)|(1<<CS10);  // CTC mode,  preselect ratio : 64  
  77.         TCNT1 = 0;            // timer1 szamlaloja legyen 0
  78.     OCR1A = 31249;        // timer1 Compare A (31250) 1Hz ! 0...31249 az pont 31250
  79.         TIMSK |= (1<<OCIE1A); // timer1 Compare Match A megszakitas bekapcsolas
  80.         sei();                          //megszakítás bekapcsolás    
  81.  
  82. while(1)
  83. {
  84.  
  85. adc = Beolvas8bitADC(0); PORTB=0x01; kijelez(adc);
  86. adc = Beolvas8bitADC(1); PORTB=0x02; kijelez(adc);
  87. adc = Beolvas8bitADC(2); PORTB=0x04; kijelez(adc);
  88. adc = Beolvas8bitADC(3); PORTB=0x08; kijelez(adc);
  89. adc = Beolvas8bitADC(4); PORTB=0x10; kijelez(adc);
  90. adc = Beolvas8bitADC(5); PORTB=0x20; kijelez(adc);
  91.  
  92. }
  93.  
  94. return (0);
  95. }
(#) Ami válasza Ami hozzászólására (») Máj 12, 2013 /
 
"TCNT1" Nem működik jól. Vagyis nem tudom beállítani. Kell neki valami külső órajel? Hogy kell használni? Mit kell bekötni? Atmega8
(#) csabeszq válasza Ami hozzászólására (») Máj 13, 2013 /
 
A kóddal kapcsolatban lenne néhány kérdésem:

  1. #define TCNT1 _SFR_IO16(0x2C)


Miért nem bízod a gcc-re, hogy beállítsa a TCNT1-et, miért kell felüldefiniálni, ahelyett, hogy TCNT1L-t használnál?

  1. TIMSK |= (1<<OCIE1A)


Miért kapcsolod be a megszakítást, ha ISR nincs hozzá definiálva? A viselkedés C fordító függő, de akár a RESET-re is ugorhat definiálatlan interruptnál.

  1. //if ( peak_on == 1 ) { PORTD = peak; }


Ez ki van kommentezve, így nem fog működni.
Egyébként valamikor nullázni is kellene, mert beáll maximumra, utána szevasz. Az sem teljesen világos, hogy a 6 ADC-re egy peak-et akarsz-e, vagy 6-ot? A hardvert nem ismerjük. Jelenleg a 6 ADC közül a legnagyobbra rááll és úgymarad.
A hozzászólás módosítva: Máj 13, 2013
(#) Ami válasza csabeszq hozzászólására (») Máj 13, 2013 /
 
A "TCNT1"-et még nem nagyon ismerem, mert még nem használtam.
Végül kihagytam a kódból. Másképp oldottam meg.
  1. int n = 0, val = 0, var = 1, adc = 0, peak=0, peak_on = 1, dot_on = 0;
  2. int peak0 = 0, peak1 = 0, peak2 = 0, peak3 = 0, peak4 =0, peak5 =0;

Lejebb a kijelezben:
  1. if ( peak<dot ) { peak=dot; }
  2. if ( n>10 ) { peak=dot; n = 0; }
  3.  
  4. if ( dot_on == 1 ) { PORTD = dot; } else { PORTD = level; }
  5. if ( peak_on == 1 ) { PORTD |= peak; }


Aztán a mainban:
  1. if ( i < 320 ) { i = i++; } else { n = n++; i = 0; } // 8Mhz-nál kb 1 másodperc


A 320 Kb 1 másodperc n értéke mondjuk 5 akkor az kb 5 másodperc. Nem pontos, de az itt most nem is fontos.
egyel mostmár működik Sőt a többivel is csak még a peak nincs szétválasztva 1 peak van az egészen a legmagasabb érték.

A hardver egyszerű: 1db ATmega8 6db bc549c (Bázisra záró nyitó ellenálás.) az oszlopoknak, a Bport vezérli. Sorokat a dport vezérli ellenáláson keresztül. 6x8as Led mátrix. egyszerre 1 oszlop világít, de folyamatosnak látszik még kamerán is. Bemenet DRC=PC0-PC5 Persze még kell gomb a módváltáshoz. Ja meg a peakok szétválasztása.
(#) Ami válasza Ami hozzászólására (») Máj 13, 2013 /
 
A kód azért össze vissza mert sok kisérletezés benne maradt.
(#) csabeszq válasza Ami hozzászólására (») Máj 13, 2013 / 1
 
Úgy látom, a C-vel is vannak gondjaid.

  1. int peak[6];
  2.  
  3. void kijelez(unsigned int adc, unsigned char peakIndex)
  4. {
  5. ...
  6. peak[peakIndex]
  7. ...
  8. }
  9.  
  10. kijelez(adc,0);
  11.  
  12. int main(void)
  13. {
  14.   int j;
  15.   for( j=0; j < 6; j++ )
  16.     peak[j] = 0;
  17. ...
  18. }


A tömböket érdemes használni, olvass utána.
A hozzászólás módosítva: Máj 13, 2013
(#) csabeszq válasza csabeszq hozzászólására (») Máj 13, 2013 / 1
 
Meg ugye a for ciklus + shift művelet (1<<3, ami pontosan kettő a harmadikon).
Érdemes lenne elolvasni egy alap C könyvet és a programodat ennek megfelelően átírni.

  1. while(1)
  2. {
  3.   int i;
  4.   for(i=0; i < 6; i++)
  5.   {
  6.     adc = Beolvas8bitADC(i); PORTB=1 << i; kijelez(adc);
  7.   }
  8. }
(#) mzozo95 hozzászólása Máj 13, 2013 /
 
Sziasztok!
Egy kristállyal hogyan lehet ellátni több avr-et óralellel?
Mit kell beállítani azon az avr-en amin van a kristály, és azokon amelyeken nincs? Melyik lábat kell összekapcsolni melyikekkel, amelyeken nincs kristály, illetve amelyiken van?
(#) zombee válasza mzozo95 hozzászólására (») Máj 13, 2013 / 1
 
1: a "forrás" AVR-en a "CKOPT" nevű FUSE bitet kell beállítani, ha nincs akkor "Full-Swing" legyen!
2: a "cél" AVR-eket külső órajelre kell beállítani, azaz "ext. clock".
3: az XTAL2 kimenet(forrás), az XTAL1 bemenet(cél).
4: maximum 4-5 "cél" AVR lehet, ha több kell akkor használj erősítőt!
5: ha az XTAL1-2 portláb, ilyen a beállításnál az XTAL2-t sem tudod használni.
A hozzászólás módosítva: Máj 13, 2013
(#) Ami válasza csabeszq hozzászólására (») Máj 13, 2013 /
 
Rendben, Köszönöm. Hát igen nem tudok még mindent. ATmega8 belső órájáráiról van valami magyar nyelvű leírás?
(#) csabeszq válasza Ami hozzászólására (») Máj 13, 2013 /
 
Könnyebb lenne, ha elmondanád, hogy mire szeretnéd az órát használni, túl sok magyar leírás nincs.
Emellett megfelelően bonyolult is kezdőknek.

- lehet előosztást beállítani, hogy lassabban számoljon (adott értékekre)
- beállíthatod, hogy 0-tól meddig számoljon
- két lábat irányíthatsz egy timerrel PWM (impulzusszélesség moduláció), definiálhatod, hogy a lábak az IC-n hogyan változzanak túlcsordulásnál, adott szint elérésénél
- beállíthatsz megszakításokat, hogy a timer bizonyos eseményeknél a programszámlálót ugrassa máshová
- számolhatsz külső éleket is (felfutó/lefutó)
- leálíthadod / elindíthatod

Elég ravasz dolgokat lehet velük csinálni. A vasúti átjáró váltakozó piros villogását egy timerrel megcsinálhatod hardverből, úgy hogy a program semmit sem csinál, kizárólag az IC hardvere végez mindent.
(#) Ami válasza csabeszq hozzászólására (») Máj 13, 2013 /
 
Pl órakészítésre. De minden érdekelhet. AVR-eknél minden működik ami a C-ben álltalában?
(#) csabeszq válasza Ami hozzászólására (») Máj 14, 2013 /
 
Itt egy magyar nyelvű C könyv.

A printf, scanf, fájlkezelés, szöveges képernyő és grafika értelemszerűen nem fog menni AVR alatt. A könyv középiskolásoknak íródott, nem okozhat problémát.

A C nyelv egyébként ugyanaz, csak másképpen használják AVR alatt. Amikor 8GB memóriád van, másképpen programozol, mint amikor csak 512 byte. Ráadásul 32/64 bites processzor alatt is minden más, mint 8 bites alatt.

A lebegőpontos (float/double) típusokkal AVR alatt csak óvatosan. Lassú és nagy kódot fog eredményezni, lehet, hogy jobban megéri mindent egészként számolni, de ahol tizedes kellene, ott megszorzod 100-zal, így 2 számjegyes pontosságot kapsz. PC-n mindez hardverből megy, ezért ott nyugodtan használhatsz ilyen típusokat, AVR alatt csak módjával.
A hozzászólás módosítva: Máj 14, 2013
Következő: »»   535 / 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