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   414 / 840
(#) TavIR-AVR válasza kiborg hozzászólására (») Feb 20, 2012 /
 
Hát, nem kockáztatnék. Az esetek 99%-ában nem okoz gondot (99 +/- 3% - mérnöki becslés ).
Lélegeztetőgépet, kritikus eszközt nem bíznék rá... Ált. először a perifériák hibáznak, legvégül a processzormag...
(#) sikolymester válasza TavIR-AVR hozzászólására (») Feb 20, 2012 /
 
Még a témához annyi, hogy korábbi munkahelyemen direkt nem járatták a mikrokontrollert még max sebesség közelében sem. A cég gépjármű elektronikában utazik.
(#) kakas92 hozzászólása Feb 20, 2012 /
 
Hali! Nincs valakinek ötlete hogy hogyna kellene hozzákezdeni egy ammega 128-as mikrovezérlővel megtervezni egy mozgásérzékelős alkonykapcsolót ?
előre is köszi
(#) sikolymester válasza kakas92 hozzászólására (») Feb 20, 2012 /
 
Talán azzal, hogy keresel egy mozgásérzékelő szenzort, illetve egy fényérzékelőt. Utána kitalálod, hogy miként illeszted a mikrokontrollerre. Az illesztés módja általában megtalálható a szenzorok adatlapjaiban.
(#) kendre256 válasza kakas92 hozzászólására (») Feb 21, 2012 /
 
Milyen plusz szolgáltatások kellenének még, amihez mikrovezérlő kell az ilyenekhez képest? Vagy csak a kihívás miatt csinálnád?
(#) szdani hozzászólása Feb 21, 2012 /
 
ATinny2313 fast pwm üzemmódban szeretnék ledet meghajtani de nem megy!
Idézet:
„DDRB |= (1 << PB4);
uint8_t pwm;

TCCR1B = (1<
TCNT0 = 0;
OCR1B = 0;
pwm=1;

while(1) {
if(pwm) {
if(OCR1B<255) OCR1B++;
else pwm = !pwm; }

if(!pwm) {
if(OCR1B) OCR1B--;
else pwm = !pwm;}
}
_delay_ms(1);”

Valaki tudja mi nem jó benne?>>
(#) szdani válasza szdani hozzászólására (») Feb 21, 2012 /
 
TCCR1B = (1 WGM13) (1 WGM12) a nyilakat az 1 és a wgm között valaminnt a függőleges elválasztót kitöröltem mert nem akarja megjeleníteni, az előző hozzászólás meg nemtudom módosítani.
(#) zombee válasza szdani hozzászólására (») Feb 21, 2012 /
 
Használd a KÓD funkciót, vagy oszd meg az egész fájlt!
(#) Suncorgo válasza szdani hozzászólására (») Feb 21, 2012 /
 
  1. DDRB |= (1 << PB4); // PD4 kimenet
  2.  
  3. //Timer1 PWM módba
  4. TCCR1B = (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); // Fast PWM , nincs órajel osztás


Ha nem állítod be az órajel osztást (minden clock select bit 0) akkor a TIMER alapbeállításként nem indul el.

Másrészt a TimerCounter1-es az 16 bites. Vagyis a 8 bites AVR 2 utasításból tudja beállítani az értékét és nem csak 0 és 255 érték között lehet állítani hanem, 0 és 65534.
  1. TCNT1H = 0; //timer nullázás
  2. TCNT1L = 0;
  3.  
  4. OCR1BL = 0; //komparálási szint nullázás
  5. OCR1BH = 0;


Előbb próbáld meg beüzemelni a Timer0 8 bites PWM-ét

Ha ez megy akkor ugorj neki ennek
(#) szdani válasza Suncorgo hozzászólására (») Feb 21, 2012 /
 
Köszönöm! szerintem még elleszek vele egy ideig.
(#) Suncorgo válasza kakas92 hozzászólására (») Feb 21, 2012 /
 
Ha csak ennyi a célod akkor ehhez hülyeség AVR-t használni.

De ha ragaszkodsz hozzá akkor,

- beüzemeled az ADC-t.
- while ciklusba méregeted a feszkót a lábon -> ezt az értéket egy változóba teszed és egy if elágazással beállítod hogy egy bizonyos érték felett/alatt kapcsolsz egy lábat.

+ tehetsz rá 2 gombot vagy enkódert az érzékenység állítás végett.

A foto (fény) érzékelőhöz kell egy müveleti erősítős vagy tranyás erősítő ami az AVR ADC-jének megfelelően erősíti az analog jelet amit meg tud mérni/fel tud dolgozni.

Kell egy áramerősítő fokozat (1 tranyás szokott lenni) meghajtani a relét.

Üdv!
(#) malanc hozzászólása Feb 21, 2012 /
 
a nyákok a szokásos 2< rétegü 290-335celsius fok közöt lehet müteni?>
(#) kakas92 hozzászólása Feb 21, 2012 /
 
Hali! Egy mozgásérzékelőt szeretnék avr-re kötni, milyet lenne érdemes választani?
(#) Massawa válasza kakas92 hozzászólására (») Feb 21, 2012 /
 
Čn a legolcsobb hálozati PIR szenzort választottam, kiszedtem belöle a relét meg a hálozati egységet, és megmaradt az egész elektronika a szenzorral együtt aminek egy nyilt klllektoros kimenete van és az egész 5V-rol megy igy siman illeszthetö az AVR bemenetére (és még olcsobb is mind darabonként venni NYŔKot csinálni, összerakni, dobozolni.
(#) painkillerperoxi hozzászólása Feb 21, 2012 /
 
Hello mindenkinek!

Tanácsot kérnék, ki látott már olyat, hogy a HEKIT-es AVR ISP programozó a következőt játssza:
AVR Studio-ban csatlakozik, felismeri az IC-t, meg is írja, ellenőrzés is rendben, majd következő körben, nem ismeri fel az ic-t, majd addig nyomkodom, míg felismeri, megírom és a szokásos hibaüzenetet látom, az ellenőrzés után. Egy hete kezdődött, most minden ic-t felismer néhányszori nyomkodásra, majd nem, aztán megint, és egy ic-t se tudok megírni vele, szokásos hibaüzenet az ellenőrzés után.
USB-port biztos jó,kábel szintén, két programozóm van mindkettő ezt játssza, két új ic-vel próbáltam semmi, szalagkábel 10cm, érintkezések rendben. Tanácstalan vagyok, please help!
(#) sikolymester válasza painkillerperoxi hozzászólására (») Feb 21, 2012 /
 
Szerintem rosszak a forrasztásaid. Mutass nekünk egy fényképet a forrszemekről. Ránézésre a hozzáértő szem könnyen megmondja, hogy nem sikerültek jól.

Aztán ha kiderül, hogy azok jóknak tűnnek, akkor még gondolkodunk a dolgon.
(#) szdani hozzászólása Feb 21, 2012 /
 
Most van pwm, csak kijelzés nincs, valaki tud benne segíteni?

lcd.zip
    
(#) mester06 hozzászólása Feb 21, 2012 /
 
Üdvözletem!
Van nekem egy atmega8-16PU mikrovezérlőm. Rátettem egy 16 MHz-es kvarcot, beállítottam a fuse biteket (AVR studio). Működik is a dolog, tudom programozni, fut is a kód, de van amikor minden látható ok nélkül resetel. Belső RC-ről nem jelentkezik a probléma.
Rosszul állítottam volna a fuse biteket (most external high frew crystal-ol van).
(#) zombee válasza mester06 hozzászólására (») Feb 21, 2012 /
 
Kondi a táplábakon? 100nF elég lesz, de 1-10µF-nak talán még jobban örülne.
Ja és ne érj hozzá kézzel a kristályos kivezetésekhez mert attól is újraindulhat(tapasztalat).
És még mielőtt más is lelőné: 10kOhm felhúzó ellenállás a RESET lábra.
(#) mester06 válasza zombee hozzászólására (») Feb 21, 2012 /
 
Ezek mind megvannak, de a reseten csak 1kOhm van. Egy vonalkövető robotban dolgozik a panel jelenleg, és van, hogy menet közben resetel, tehát még véletlenül sem tudok hozzáérni semmihez. (A kapcsolás gyakorlatilag fizikus WILL-I cikke alapján épült, csak terveztem hozzá egy NYÁK-ot)

Lehet, hogy kevés az 1 kOhm felhúzó??

EDIT: Ja és reset után néhány utasítást ki is hagy. Pl.: a program elején várakozik egy gombnyomásra, de reset után egyből fut az azt követő rész.
(#) zombee válasza mester06 hozzászólására (») Feb 21, 2012 /
 
Az 1k is jó, max a programozóval veszhet össze, de hibát nem okoz. Talán az XTAL lábak valamelyike húz át.
(#) huba válasza mester06 hozzászólására (») Feb 21, 2012 /
 
Milyen optimizálási beállításokat használsz? O3 esetén volt olyan hogy egy kódrész lefutása után indokolatlan restet-et kaptam. Állítva az optimizáláson helyrejött. Hatalmas kódméret miatt nem volt kedvem kikeresni valójában mi is történik.
Tápok rendben? Nem jöhet létre egy rövid feszültségkimaradás? Főleg hogy motrok tépázzák a tápot.
(#) mester06 válasza huba hozzászólására (») Feb 21, 2012 /
 
Motorok teljesen külön akkukról kapják a tápot (vezérlésnek van egy 9V-os akkuja+7805, motoroknak 4 db AA ceruza akku), tehát ez nem hiszem, hogy zavarhat. Optimalizálst alapon hagytam (-Os)

zombee: Ezt hogyan tudom leellenőrizni?
(#) huba válasza mester06 hozzászólására (») Feb 21, 2012 /
 
Még egy tanács. Ha nem is a probléma megoldása. Egy 7805 igen hamar meg tud enni egy 9v-os elemet. Még ha nincs is jelentősen terhelve. Érdemes rálesni az elem feszültségére elég sűrűn. Jártam meg hasonló felállásban lemerülő elemel, hogy az AVR megvadult és zárlatba küldte a h-hidam ami füsttel reagált. Melegen tudom ajánlani egy kis dc-dc konverter alkalmazását a digitális részben. Sokat tud spórolni. Meg merem állítani 1 9v elemet ha megspórol már kijött az ára.
(#) TavIR-AVR válasza huba hozzászólására (») Feb 21, 2012 /
 
Tápra 1000µF kondi!
A motorok megrántják a tápot és a 7805-n átjut....
(#) mester06 válasza huba hozzászólására (») Feb 21, 2012 /
 
Valóban elég sokat elfűt így, de biztos nem ez a probléma. Első gondolatom nekem is az volt, hogy merül az elem, de friss töltés után is ugyanazt csinálta...A tanácsot viszont köszönöm.

EDIT: szűrőkondik is megvannak mindkét tápon...motor tápfeszen és vezérlésen is, igaz nem 1000 uF, de 220 µF mindenhol ottvan.
(#) sikolymester válasza mester06 hozzászólására (») Feb 21, 2012 /
 
Lehet lassan egy teljes kapcsolási rajzra lenne szükségünk, hogy elemezni tudjuk a hibát.
(#) mester06 válasza sikolymester hozzászólására (») Feb 21, 2012 /
 
Itt a kapcsolási rajz: Bővebben: Link
A gyakorlatban ettől annyiban tér el, hogy a PORT kivezetések mellé oda van vezetve a +5V és GND is.
(#) Suncorgo válasza kakas92 hozzászólására (») Feb 22, 2012 /
 
Milyet? Amilyet szerenél/venni tudsz. Mindegyikbe közös általában hogy egy relé behúz mikor mozgás van és zárja az áramkört(kapcsol egy lámpát).
(#) Suncorgo válasza szdani hozzászólására (») Feb 22, 2012 /
 
Az a baj hogy main2-őt sehol sem hívod meg. Tehát ami az alatt van az sose fog lefutni.

Próbáld így:
  1. #include "lcd.h"
  2. #ifdef USE_LIB_DELAY
  3. #include <util/delay.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <stdint.h>
  7. #define    F_CPU    8000000UL
  8. #else
  9.   #include <util/delay.h>
  10. #endif
  11.  
  12. //--------------------------------------------------------------------------
  13.  
  14.  
  15.  
  16.    void init_timer()
  17. {
  18. /* Set Fast PWM mode. */
  19. TCCR0A |= (1<<WGM00) | (1<<WGM01);
  20.  
  21. /* Clear 0C0A on compare. */
  22. TCCR0A |= (1<<COM0A1);
  23.  
  24. /* Start timer, no prescaling. */
  25. TCCR0B |= (0<<CS02)
  26.                       | (1<<CS01)
  27.                       | (1<<CS00);
  28.  
  29. /* Duty cycle 0% */
  30. OCR0A = 0;
  31. }
  32.  
  33. void init_led()
  34. {
  35. DDRB |= (1<<PB2);
  36. }
  37.  
  38. int main(void)
  39. {
  40. int i;
  41.  
  42. init_led();
  43. init_timer();
  44. LcdInit();
  45. char* string=" FAST PWM";
  46. LcdSetCursor(0x00);
  47. LcdPutS(string);
  48.  
  49. while(1)
  50. {
  51. for(i=0; i < 255; i++)
  52. {
  53. OCR0A = i;
  54. _delay_ms(10);
  55. }
  56.  
  57. for(i=255; i > 0; i--)
  58. {
  59. OCR0A = i;
  60. _delay_ms(10);
  61. }
  62. }
  63. }
Következő: »»   414 / 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