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   327 / 840
(#) sikolymester válasza samu003 hozzászólására (») Máj 28, 2011 / 1
 
Parancsolj!
Az interrupt lefut ~20ms -os időközzel. Ott végezd el amit kell.

  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3.  
  4. //Az orajelunk 1MHz
  5. #ifndef F_CPU
  6. #define F_CPU 1000000
  7. #endif
  8.  
  9. void InitTimer0(void)
  10. {      
  11.         //elooszto 256 -> 3906 Hz @ 1MHz -> 0,256ms
  12.         TCCR0B |= (1 << CS02);
  13.        
  14.         //overflow 78-nal -> tehat 78* 0,256 = 19,968ms
  15.         OCR0A = 78;    
  16.  
  17.         //Overflow A interrupt bekapcs
  18.         TIMSK |= (1 << OCIE0A);
  19.        
  20.         //Global interrupt bekapcs
  21.         sei();
  22. }
  23.  
  24. ISR(TIMER0_COMPA_vect)
  25. {
  26.         TCNT0 = 0;
  27. }
  28.  
  29.  
  30. int main(void)
  31. {
  32.         InitTimer0();
  33.         for(;;)
  34.         {
  35.         }
  36. }
(#) sikolymester válasza Ricsi89 hozzászólására (») Máj 28, 2011 /
 
Kis hozzáfűznivaló: A reset akkor aktív, hogyha alacsony logikai szinten van, vagyis földre húzod. Kivétel az, amikor magas feszültségű resetet adsz neki, ami ugyanis 12 V.
(#) samu003 válasza sikolymester hozzászólására (») Máj 28, 2011 /
 
Ez igen!

Köszönöm mindenkinek aki segítségemre volt!

Üdv!
(#) Mezoas hozzászólása Máj 29, 2011 /
 
A most megjelent TinyTemp cikkhez volna kérdésem.
Értelmeztem a forráskódot, és egy valamit nem értek: A hibajelből számolt kitöltési tényezőt miért nem azonnal helyettesíti be Topi az OCR0A regiszterbe, miért csak minden századik lépésre növeli/csökkenti, méghozzá csak eggyel, (aztán még ott van a 100 ms késleltetés a tetejébe)?
Értem én, hogy egyébként villámgyors a kontroller, valamint a szabályozott folyamat sokkal lassabb a szabályozóhoz képest stb.
Tekintve, hogy „a szoftver az egyszerűség elvét követve keszult”, ez furcsa számomra.
(#) Reggie válasza sikolymester hozzászólására (») Máj 29, 2011 /
 
Ez igaz, viszont, ha akarod hasznalni az I/O labakat, es programbol letiltod a JTAG-et, akkor mar szukseged van ra.
(#) Reggie válasza bzolitb hozzászólására (») Máj 29, 2011 /
 
Az AVR-nel az ISP kb ugyan az mint a PIC-nel, tehat ugyan ugy hasznalhatod normal uzemmodban.
A RESET egyaltalan nem aramtalanit semmit sem, csak alapalapotba hozza a regisztereket.
(#) trudnai válasza bzolitb hozzászólására (») Máj 29, 2011 /
 
Idézet:
„Nyomógombot szoktam, de feleslegesnek tartom azt is, ha a táp ki-be kapcsolás helyettesíti.”


Nem helyettesiti, a ketto nem ugyanaz! Pl a reset eseteben nem veszited el az adatokat a memoriaban, azaz lehet arra is hasznalni, hogy egy beragadt allapotbol kihozd az eszkozt, de ennek ellenere ne kelljen mindent elolrol kezdeni. Egyik tipikus felhasznalas mikor a kontrollered alvo allapotba teszed, hogy energiat sporolj meg, es gomb nyomasara ebreszted fel.

Idézet:
„De ezek szerint a reset és power off-on közt a különbség, h a reset az uC nem minden részét áramtalanítja, csak a processzor részt.”


A reset nem aramalanit, hanem egy meghatarozott allapotba hozza a kontrollered.

Idézet:
„A programozó interfészeket pedig azért nem értem, mert a PIC-nél ilyen gond nincs, szó nélkül lehet bármit kötni azokra a lábakra is, de tapasztalatom szerint AVR-nél nem így van.”


PIC-nel sem tehetsz oda akarmit, es az aramkort a programozotol le kell valasztani - pl ellenallassal vagy kapcsolo elemekkel. Kulonosen oda kell figyelni a terhelesre, kapacitivitasra es induktivitasra. Ezen felul termeszetesen az oda kapcsolt aramkornek nem szabad, hogy aktiv magas vagy alacsony allapotba hozza a vezetekeket. Legjobb ezeket beken hagyni, es csak ha nagyon nincs mas megoldas felhasznalni.
(#) augre hozzászólása Máj 29, 2011 1 /
 
Sziasztok!

Mit gondoltok, jó ez a kapcsolás így? Nagy 7 szegmensű kijelzőket fog meghajtani.

Köszönöm előre is!
(#) Axel válasza augre hozzászólására (») Máj 29, 2011 /
 
Biztosan nem fog működni mert nem kap az AVR tápot. Ahová Te a tápfeszt kötötted az az ADC analóg áramkörének a tápja.
Továbbá kérdéses még ,hogy a 7805 IC milyen tápfeszültséget kap? Ha eleve szűrt 12V-ot akkor elhagyhatóak a kondenzátorok de ha nem akkor bizony kellenek.
Itt egy egyszerű megoldás a 7 szegmenses kijelzők meghajtására. Tipp: ha takarékoskodni szeretnél a portokkal használhatsz BCD-->7 szegmeses dekódert pl. a 7447-es IC-t.
(#) augre hozzászólása Máj 29, 2011 /
 
Értem!

Ha nem akarom az ADC-t használni annak a tápját nem kell bekötni?

A kondezátorokat rárakom a 7805-ösre.

Más baj van vele?
(#) Axel válasza augre hozzászólására (») Máj 29, 2011 /
 
Bekötheted az ADC tápját is, baja nem lesz, azonban nyilván teljesen felesleges.
(#) vagnerjazon hozzászólása Máj 29, 2011 /
 
Azt mivel lehetne megcsinálni, hogy a soros Tx kimenetet rá tudja kapcsolni az AVR vagy erre vagy arra az eszközre(úgy hogy küld valamit az egyiknek, aztán átkapcsol, és így tovább)?
(#) Ricsi89 válasza vagnerjazon hozzászólására (») Máj 29, 2011 /
 
CD4066-os IC-vel, vagy akár CD4051-es IC-vel is csinálhatsz ilyen kapcsolóáramkört. A 4066-ossal 4 eszközre tudsz kapcsolni, a 4051-essel pedig ha jól emlékszem, akkor 8-ra. A 4051-es még jobb is, mert alapból csak 1 bemenete van, és bcd kóddal választhatod ki, hogy melyik kimenettel legyen összekötve a bemenet.
(#) augre válasza vagnerjazon hozzászólására (») Máj 29, 2011 /
 
neked 1-ből 2 demultiplexer kell.

Bővebben: Link
(#) vagnerjazon válasza Ricsi89 hozzászólására (») Máj 29, 2011 /
 
Nagyon köszönöm, augre-nek is, ez a CD4051 nagyon jónak tűnik, viszont hiába nézem az adatlapot, nem bírok rájönni, mi kell a VEE lábra? Mert ha jól tudom a VDD a tápfeszültség a VSS meg a GND, csak ezt nem tudom.
És akkor ezt úgy kell használni, hogy a 3-as lábra megy a Tx, és az A, B, C-n meg beállítja az AVR, hogy melyik kimenetre menjen, és azon ott lesz ami bemegy?
(#) Ricsi89 válasza vagnerjazon hozzászólására (») Máj 29, 2011 /
 
Azért van a Vee, mert lehet szimmetrikus táppal is táplálni, de ha neked az nem kell, akkor kösd testre. A többi viszont stimmel. 3-asra a kontroller Tx lába, a kimenetekre meg az eszközök, az A,B,C lábakra meg a megfelelő kódot adod, attól függően, hogy melyik kimenetre legyen kapcsolva a 3-as láb.
(#) trudnai válasza augre hozzászólására (») Máj 29, 2011 /
 
Nincs ellenallas (vagy mas aramkorlatozas) a LED-eken, azonkivul a kapcsolo tranyok emittereit foldre kellene kapcsolni, mert igy csak lebeg... A bazisellenallasok ertekeit be kell jelolni! (kulonben honnan tudnank mi kell oda, igy a kapcsolas helyesseget sem tudjuk ellenorizni)

A AVR Vcc es GND-jet be kellene kotni, kozejuk 100nF keramiat tenni. A 7805 ele es moge buffer kondikat rakni, moge pluszban egy keramiat (100nF - 1uF).

Amugy a foldet es a tapvezetekeket nem kell vegig huznod a rajzon, van ezekre megfelelo jeloles.
(#) vagnerjazon válasza Ricsi89 hozzászólására (») Máj 29, 2011 /
 
Köszönöm szépen! Ki fogom próbálni, amint veszek CD4051-et.
(#) Axel válasza Axel hozzászólására (») Máj 29, 2011 /
 
Valakinek ötlete esetleg?
(#) Ricsi89 válasza Axel hozzászólására (») Máj 29, 2011 /
 
Shifteled mindig eggyel jobbra, majd a kapott számot vagyolod 1-el. Ebből utána már csak az adott bitet kapod vissza, azt meg csak ki kell rakni. Elvileg.
(#) trudnai válasza Axel hozzászólására (») Máj 29, 2011 /
 
Nem egeszen tiszta mi az input es mi az output? De nagyvonalakban: Megnezed a legalso bit 0 vagy 1 (ES muvelettel kiszeded azt a bitet...). Ennek megfeleloen billegteted a port labat, majd osztod az inputot 2-vel (shifteled jobbra eggyel, ugyanaz az eredmeny)... Ezt ciklusban csinalod, hogy az osszes bit kimenjen.
(#) Axel válasza trudnai hozzászólására (») Máj 29, 2011 /
 
Az egész csak annyi, hogy ki kell tenni egy shiftregbe pl. 0x0F-et bitenként. Megvan a megoldás, a maszk 0x01 lesz, amivel össze &-elem az adott számot úgy hogy mindig shiftelem jobbra eggyel, (szerintem pont ezt javasoltad Te és Ricsi89 is) vagy balra de akkor a maszk nyilván 0x80. Nem tudom hogy nem jutott eszembe egyből.

Köszi amúgy!
(#) Ricsi89 válasza Axel hozzászólására (») Máj 29, 2011 /
 
Én is ezt akartam, csak éselés helyett valamiért vagyolást írtam.
(#) sgt hozzászólása Máj 29, 2011 /
 
Nem foglalkozik itt valaki gyári égető javítással? Még nem tudom, hogy de sikerült tönkre vágnom .
(#) Reggie válasza sgt hozzászólására (») Máj 29, 2011 /
 
Milyen egeto?
(#) sgt válasza Reggie hozzászólására (») Máj 29, 2011 /
 
AVR ISP mkII, és van egy elméletem, hogy hogyan ment tönkre. Programozás közben az egyik láb letestelődhetett így rövidre záródhatott az égetőnek az a kivezetése.
(#) Reggie válasza sgt hozzászólására (») Máj 29, 2011 /
 
Remeltem, hogy JTAG ICE mkII, mert annak az FPC kabelevel van sok gond, es arra tudok megoldast...
Akkor csak azt tudom javasolni, hogy a programozo csatlakozo elotti IC-t csereld ki. Ott minden bizonnyal egy szintillesztest vegzo buffer IC van, ugyhogy nem a mikrokontroller szallt el benne. A tipusat sajnos nem tudom, de bontsd szet nyugodtan es nezd meg.
(#) sgt válasza Reggie hozzászólására (») Máj 29, 2011 /
 
Köszönöm a segítséget! Holnap megnézem mi hogyan van rajta kötve. Van egy érzésem hogy átkozni fogom még ezt a felület szerelt technológiát.
(#) sgt válasza sgt hozzászólására (») Máj 30, 2011 /
 
MAX4712 ez az IC közvetlenül az uC-t hajtja meg. Még a mindenható Farnellnél sem lehet kapni ilyet. Aztán az adatlapban ráakadtam egy helyettesítő IC-re, ami pedig MAX392. Ezt már a Farnellnél lehet kapni de nem TSSOP tokban hanem SOIC-al. 1,5k körül van. ÉS ez így elég gáz .
(#) Topi válasza sgt hozzászólására (») Máj 30, 2011 /
 
ISP mkII-nek semmilyen baja nem lehet a rövidrezárt kimenetektől. Nagyon fejlett védelem van benne!
Én máshol keresném a hibát. Sima rövidzár esetén, bármelyik láb bármelyikkel van összezárva, az mkII üzenetben jelzi feléd láb neve szerint hogy melyikkel van gond.

Próbáltad másik mikrovezérlővel? Cseréltél rajta szalagkábelt? Mértél a programozó kimenetén jelalakokat? Van kommunikáció?
Próbaképp indíthatsz az mkII-n egy firmware frissítést. Ha az végig fut, akkor a benne található atmega biztos hogy él...

Ha nincs a kimeneten kommunikáció - jel, akkor inkább túlfeszültség ölte meg.
A MAX4712-ban beépített védelem van, 12V-ig baja nem lehet (ill. rendkívül kicsi az esély rá).
Következő: »»   327 / 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