Fórum témák
» Több friss téma |
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
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.
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
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.
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
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.
Köszönöm szépen a segitséget!
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).
Nem teljesen idevag de ..
Az AVR/PIC/stb xtal labain ,kulso kvarc hasznalata eseten merheto-e az adott oszcillator frekvencia?
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.
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?
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?
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?
Abszolut kezdő kérdés!
Tudtok valami frankó chipet USB-HUB gyártáshoz?
pl. Texas Instruments-nek és Cypress-nek is vannak ilyen chipjeik, de otthon forrasztgatni majnem felejtősek.
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.
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...
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.
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.
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. 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.
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!
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!
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.
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.
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!
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.
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 |
Bejelentkezés
Hirdetés |