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   22 / 840
(#) Gory válasza davidov hozzászólására (») Máj 10, 2007 /
 
Elvileg ennek nem kéne semmit befolyásolnia. Szerintem van valami hiba még a kódodban, ami miatt ezt csinálja, csak most nem jön elő. Vagy a kapcsolásban valami hiba. Szerintem másold be ide a timer initeket, meg ahol meghívod őket, hátha kiderül.
(#) andrewforest hozzászólása Máj 11, 2007 /
 
Hello!
Egy ATMega8-ba átállítottam a biztosítékbiteket, hogy külső kvarcról kapja az órajelet. A AVR működik is, a sebessége jó, szóval ez sikerült is. De miután átállítottam, már nem tudom kiolvasni és beirni a fuse és a flash-t... Mi a hiba? Hogy tudnék újra programot írni bele?? 1MHz-es kvarcot kéne raknom mellé felprogramozásnál?? Help
(#) Gory válasza andrewforest hozzászólására (») Máj 11, 2007 /
 
Lehet hogy letiltottad az SPI programozás fuse bitjét, akkor már nem tudsz SPI programozón keresztül hozzáfréni. Ezzel vigyázni kell. Ha rendesen megy külső kvarccal akkor én erre gyanakszom.

Az szokott még előfordulni, hogy az ember mondjuk másra állítja az órajel forrást péládul külső órajelre, olyankor segít ha az órajel bemenetre valami 555-el vagy valamivel ad az ember clockot és úgy visszaprogramozza.
(#) andrewforest válasza Gory hozzászólására (») Máj 11, 2007 /
 
Pontosan ez történt, külsőre állítottam az órajelet, külső kvarcra... Tehát ebben az esetben, ha egy másik AVR-el előállítok egy 1MHz-es alapjelet, úgy működnie kéne az SPI programozónak?
köszi
(#) d0b0s válasza andrewforest hozzászólására (») Máj 11, 2007 /
 
Bővebben: Link , 237. oldal szerint a külső órajel frekvenciáját attól függően kell beállítani, hogy mekkora az SCK high ill. low ideje. Mérd le és alkalmazd a leírásnak megfelelő frekit.

(#) andrewforest válasza d0b0s hozzászólására (») Máj 11, 2007 /
 
Köszönöm szépen a segitséget!
(#) Gory válasza andrewforest hozzászólására (») Máj 11, 2007 /
 
Nem mindegy, hogy külső kvarc, vagy simán külső órajel forrás. A kvarcnál odaraksz egy annak megfelelőt, amilyenre állítottad a fuse bitet, ha külső órajel akkor meg amit leírtam fentebb (555 vagy egy másik AVR-el generálsz neki valami órajelet és azt az XTAL2 lábra kötöd ha jól emlékszem).
(#) gtk hozzászólása Máj 12, 2007 /
 
Nem teljesen idevag de ..

Az AVR/PIC/stb xtal labain ,kulso kvarc hasznalata eseten merheto-e az adott oszcillator frekvencia?
(#) gtk válasza davidov hozzászólására (») Máj 12, 2007 /
 
En sem mert nem melyultem el benne..
Lehet hogy ha hasznalod mind a ket timert amelynek az osztoja kozos,akkor nem allithatsz be ket kulonbozo osztot,vagy van erre valamilyen kikotes.
(#) GAB3SZ hozzászólása Máj 13, 2007 /
 
Sziasztok!
Arra lennék kíváncsi, hogy AT90S2313-ra írt programot bele lehet-e égetni módosítás nélkül egy ATTiny2313-ba?
(#) gemo válasza GAB3SZ hozzászólására (») Máj 14, 2007 /
 
(#) davidov válasza Gory hozzászólására (») Máj 15, 2007 /
 
Hello!

Az utóbbi pár napban nem nagyon volt időm a problémával foglalkozni, de ettől sajnos nem múlt el. :no:

Így inicializálom, és hívom meg a timereket:

void timer1_init(void);
void timer0_init(void);

int main(void)
{

port_init();
timer1_init();
timer0_init();

sei();
....
}

void timer1_init(void)
{
TCCR1A = 0x0000; //stop timer
TCCR1B = 0x0000;

TCNT1 = 0;
OCR1A = 200; //f = fclk/(N*(1+TOP)) = 976.56Hz ,fclk = 8MHz
OCR1B = 0;
TIMSK = 0b00010010; //Output Compare A Match Interrupt Enable
TCCR1A = 0b10000011; //Clear OC1A, OC1B on compare match; Fast PWM 10 bit, TOP = 0x03FF
TCCR1B = 0b00001010; //Fast PWM, TOP = 0x03FF; prescale(N) = 8
}

void timer0_init(void)
{
TCCR0 = 0b00000000; //stop timer

TCNT0 = 0;
OCR0 = 78; //T = Tclk * prescale * OCR0 = 0.01s
TIMSK = 0b00000010; //ha ezt kikommentezem újra indul
TCCR0 = 0b00001101; //Clear Timer on Compare Match, TOP: OCR0, prescale = 1024
}

További érdekesség, hogy ha a timer0 initjében kikommentezem a TIMSK = 0b00000010; sort, akkor is újra indul. Ez azért furcsa, mert először a timer1-et init-jét hívom meg, és akkor már beállítom úgy a TIMSK regisztert, hogy a timer0-nak is megfelelő legyen.
Normális ez? Hiszen így a timer0_init meghívásával felülírom a TIMSK regisztert, így kitörlöm az OCIE1A bitet, ami szerintem a PWM-hez kellene (bár működik).

Van valakinek valami tippje?

(#) davidov hozzászólása Máj 15, 2007 /
 
Tudom, hogy már sok lesz belőlem mára, de lenne még egy ADC-s kérdésem.
ATmega16 egyik AD csatonáját akarom 10x-es (de lehet, hogy 200x-os) erősítéssel használni, azért Differential Input módban próbáltam beolvasni az értéket.
Lehetséges, hogy a DIP tokos ATmega16-ban nem működik ez a Differential mód, mert az adatlapban ezt írták:
"The differential input channels are not tested for devices in PDIP Package."

Ezt akkor buktam, vagy csak valamit nem jól csináltam, és azért nem megy?
(#) szucs_g hozzászólása Máj 15, 2007 /
 
Abszolut kezdő kérdés!

Tudtok valami frankó chipet USB-HUB gyártáshoz?
(#) Dudus válasza szucs_g hozzászólására (») Máj 16, 2007 /
 
Az FTDI weboldalat javaslom. Gyakorlatilag mindenre van megoldasuk.

www.ftdichip.com
(#) potyo válasza szucs_g hozzászólására (») Máj 21, 2007 /
 
pl. Texas Instruments-nek és Cypress-nek is vannak ilyen chipjeik, de otthon forrasztgatni majnem felejtősek.
(#) Reggie válasza davidov hozzászólására (») Máj 22, 2007 /
 
Udv!

Alapveto programozasi hiba. TIMSK egyarant hasznalt a Timer1-hez es Timer0-hoz.

Tehat timer1_init-ben ird ezt:
TIMSK = TIMSK & 0b11000011 | 0b00010000;
timer0_init-ben:
TIMSK = TIMSK & 0b11111100 | 0b00000010;

Termeszetesen nem hinnem hogy ettol hibas a programod.

Kerdes: a megszakitasi vektorokhoz rendeltel fuggvenyt? az avr-gcc libjei ugy vannak megirva, hogyha nem definialsz fuggvenyt egy int vektorhoz, akkor az adott vektor 0-as cimre torteno ugrast tartalmaz.
(#) davidov válasza Reggie hozzászólására (») Máj 23, 2007 /
 
Hello!

Köszi szépen a tippet, sajnos ezzel a megoldással is úgyraindul, egy olyan fügvényben, amiben csak egy _delay_ms(1); utasítás van.

Én úgy indultam el a TIMSK regiszter beállításánál, hogy úgy is a timer1-et inicializálom hamarabb, ezért már ott beálítottam a timer0-nak megfelelő bitet, ezért először a timer0 initbe nem is írtam bele a TIMSK állítását. Ez nekem jónak tűnik. De ha így csinálom újraindul. (emiatt írtam oda a bemásolt programrészbe hogy ha ezt a sort kikommentezem, akkor újraindul)

A legfurcsább az az, hogy ezzel a megoldással működik. Igen, ez így szerintem is rossz, mert a TIMSK regisztert a timer0_init-ben felülírom, bár ezek szerint a PWM módhoz (a timer1 így működik) nem kell az OCIE1A bitet 1-be rakni a TIMSK-ban.
De azt még mindig nem értem, hogy ha mindkét bitet 1-be állítom a TIMSK-ban, vagy úgy ahogy írtad, vagy úgy ahogy én próbáltam, akkor miért kell újraindulnia?

A timer0 megszakításhoz egyébként van egy ISR(TIMER0_COMP_vect)
{...}
függvényem

Kicsit rejtélyes a dolog...
(#) gtk válasza davidov hozzászólására (») Máj 24, 2007 /
 
Szia .

En pl nem ertem az egeszet..Egyre bonyolodik.
Sokkal egyszerubb lenne,ha leirnad roviden hogy mit akarsz es a kodot beszurnad tisztan(folos dolgok kiszedve,kod rendszerezve) elejetol vegeig.Hatha jobban tudnank segiteni.

Amit eszrevettem:
A stop timer szerintem folosleges mindket esetben.
A TIMSK reget eleg egyszer irni; megfelelo biteket helyesen beallitani.
Ha megis ragaszkodsz a ket init-hez,akkor logikat kell hasznalni a reg beallitasanal,ugy ahogy korabban irtak.

Nem emlited a timer0 -es 1 megszakitas fuggvenyeket.
GCC-nel legalabbis ugy van,hogy ha engedelyezed a megszakitast akkor a kodban ott kell legyen a hozza tartozo vektor,vagyis a megszakitas kezelo rutin.Kulonben mindenfele dolgok tortennek.
(#) szucs_g hozzászólása Máj 24, 2007 /
 
Beüzemeltem a kicsikét! Az USB portról kapja az 5 v-t, így a paralell portról lehet programozni egy egyszerű kábel segítségével.

A kérdésem a következő:
1. Hogyan lássak neki a programozásának.
2. Egy ismert forráskód alapján, ami egy más típusu chipbe íródott USB2LPT átalakítóhoz írtak adaptálni tudjuk-e M8-ra?
3. Íme a link: http://www-user.tu-chemnitz.de/~heha/bastelecke/Rund%20um%20den%20PC/USB2LPT/

Köszönöm.
(#) davidov válasza gtk hozzászólására (») Máj 25, 2007 /
 
Hello!

Nem akarom az egész kódot beszúrni, mert elvenné a figyelmet a lényegről. Egyébként egy szabályozható tápegységet csináltam, a timer1-et PWM módban használom, ezzel szabályzom (aluláteresztő szűrés után) a teljesítményerő részt, a timer0-lal pedig megszakításokat generálok a fesz. és árammérésekhez.

A stop timer tényleg felesleges, csak formaiság.

A TIMSK-t én is először csak egy helyen akartam beállítani. Pár hozzászólással hamarabb ott van az inicializáló fgv. De ahogy ott is írtam, és az előző hozzászólásomban is, ebben az esetben a progi újraindul. Akkor nem indul újra, ha a timer0 initben (amit későb hívok meg) megint inicializálom, de a timer0 működésnek megfelelően, tehát törölve az OCIE1A bitet.
Ebből arra következtettem, hogy PWM módban nem kell az OCIE1A bitet 1-be billenteni, hiszen működik.
Így viszont azt nem értem, hogy miért indul újra, ha a TIMSK-ban az OCIE1A és az OCIE0 bitet is 1-be állítom? Azért mert PWM-hez nem kell az OCIE1A bit beállítása? Lehet, bár kicsit furcsa.

A timer0-hoz van megszakítás fgv-em, (ISR(TIMER0_COMP_vect){...}), a timer1-hez értelemszerűen nincs.
(#) gtk válasza davidov hozzászólására (») Máj 26, 2007 /
 
Idézet:

Így viszont azt nem értem, hogy miért indul újra, ha a TIMSK-ban az OCIE1A és az OCIE0 bitet is 1-be állítom? Azért mert PWM-hez nem kell az OCIE1A bit beállítása? Lehet, bár kicsit furcsa.”


En hasznaltam PWM-et mega8-nal,megpedig: Timer1 10-bit PWM phase correct beallitassal.Ehhez nem allitottam be az OCIE1A ,(OCIE0) biteket.

Viszont ennel: OCIE1A ,benne van a neveben is hogy (output compare interrupt enable),tehat megszakitas vektor tartozik hozza.
A megfelelo megszakitas vektort ha hozzaadod a C forrashoz akkor nem fog ujraindulni.Ezt meg keresd ki a hasznalt C konyvtarad helpjeben hogy mi az.
(#) mokus hozzászólása Máj 26, 2007 /
 
Sziasztok!
Elvetemült ötletem támadt így 0 tudással de nagy lelkesedéssel, mégpedig, hogy építek egy stoppert. Nem nagy dolog, 2 nyomógomb egy AVR és pár 7szegmenses kijelző.
A programozás része viszont még egyenlőre lila köd, azt tudom, hogy timerekkel kell operálni.
Tudna valaki mutatni egy példa programot hozzá, ami alapján eltudok indulni? Esetleg helyet ahol találok ilyet.
Előre is köszönöm a válaszokat!
(#) gtk válasza mokus hozzászólására (») Máj 26, 2007 /
 
Peldaprogi: c,asm?
Melyik megy jobban?
(#) mokus válasza gtk hozzászólására (») Máj 26, 2007 /
 
Igazából a web programozás (php, js, html) megy haladó szinten. BASIC-el még a C64-es időkben foglalkoztam utoljára (tavir-on olvasgatva azt preferálták, ezért előbányásztam a régi C64-es könyveket).

Ha lehet inkább C, mert asmet nem igazán látnám át szerintem a mostani tudásommal.
Köszönöm!
(#) gtk válasza mokus hozzászólására (») Máj 26, 2007 /
 
A gtk_projects.tvn.hu -n talalsz egy homerot AVr-el.Abbol a multiplex vezerlest pl el lehet lopniTovabba ha valamire megoldas
erdekel (pl. reszprogram) akkor segitek ha tudok.
(#) mokus válasza gtk hozzászólására (») Máj 26, 2007 /
 
Köszönöm szépen a felajánlást!
Próbálom átrágni magam a tavir oldalon és nekiesni a két timernek, hátha egyedül is sikerül összehozni az alapokat.
Mint a hőmérődben én is ATMega8-at szeretnék használni.
(#) davidov válasza gtk hozzászólására (») Máj 27, 2007 /
 
Köszönöm szépen!!

Tényleg az volt, a baj, hogy a timer1-hez nem rendeltem megszakítás fgv-t. Mostmár értem miért volt hiba beállítani a TIMSK-ban az OCIE1A bitet.
Ez elég láma hiba volt...

Köszi szépen még egyszer mindenkinek, aki segített!
(#) davidov válasza szucs_g hozzászólására (») Máj 27, 2007 /
 
Hello!

Ha olyan USB - LPT átalakítót akarsz, amivel tudsz AVR-t programozni, szóval egy USB - SPI átalakítóra gondoltál, akkor ajánlom neked az USBTiny-t, mert ezt egy ATtiny2313-ra írták. Ennek a programját szerintem kisebb változtatásokkal át lehet írni ATmega8-ra.
Egyébként nem tudom, hogy működik-e, nem próbáltam ki.
Ha egy univerzális USB - LPT átalakítóra gondoltál, akkor abban nem tudok segíteni, olyat nem találtam a neten.

(#) dpeti hozzászólása Máj 27, 2007 /
 
atmel cuccoknál hogy van a programozás?
létezik itt is vmi univerzális programozó, mint a Pickit2 a microchipnél, a platform cable a xilinx-nél stb?

ugye ide is jtag kell, de gondolom kell mellé vmi szoftver, debugger, ezeknél hogy vannak?

meg milyen tipusokat ajánlotok a kezdéshez ezekben a kategóriákban:
-kis lábszámú minimális (mint 12F széria a piceknél)
-közepes méretű, extrább dolgokkal (usb, i2c, rs232, stb)
-meg a hardcore kategóriából mik a népszerűbb figyelemre méltó típusok?

köszi szépen előre is!
---
+ kinéztem ezt az ATmega644-et magamnak, ez szerintetek jó kezdetnek? van benne minden
Következő: »»   22 / 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