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
Köszönöm a válaszodat a PIC-ről. Igazán érdekes, hogy hol és hogyan lehet műveleteket végezni, ill a regiszterkezelés.
Ha C-ben akarod írni a progit és GCC-t használsz, akkor nézz utánna a "módosító" kulcsszavaknak, mert ekkor a fordító valóban azt fogja fordítani amit akarsz. Én már szívtam pl volatile kihagyása miatt. Ha nagy tételben gondolkodunk, akkor tényleg fontos az ár.
Sziasztok !
Atmega8 - AVRen probalom a Phase/Freq-correct PWM -et osszehozni. Az adatlap (es az en ertelmezesem) szerint a mellekletben lathato beallitasokkal Phase/Freq-correct PWM -et kapok. A note[] tartalmazza a forrasban lathato makrokkal szamolt konstans TOP ertekeket. A dolog mukodik, viszont az elso nehany ciklusban torzitva, jon a jel az OC1A labon, -- mintha rajta lenne meg egy alacsony frekvencias jel -- majd nehany ciklus utan beall es mukodik ahogy kell. A programban nincs semmi delay vagy egyeb processzor zabalo kod, ami bekavarhatna. Ugy is probaltam, hogy a loopban nullazas elott leallitom a timert, majd a TOP ertek es a kitoltes beallitasa utan elinditom. Igy kicsit mas a hiba: akadozva , rovidebb kitoltessel megy nehany ciklust, aztan jo lesz. (kozben fut a timer0 es a timer2 is) Mi lehet a problema oka? Masodik kerdesem: Az adatlap szerint ha a WGM10 bitet is beallitom, akkor a TOP erteket az OCR1A hararozza meg, es a kitoltesi tenyezo 50% kellene legyen. Ennek ellenere ez a valtozat nekem abszolute nem mukodott.
Sajnos a C-hez minimálisan konyítok, de talán sokat segítene, ha tagolva lenne a szöveg, nem hiszem, hogy ilyen formában írtad, ahogy a txt-ben szerepel!
Ha TC-ben viewer-vel nyitod meg, tisztább lesz...
Olvashato TC-ben? Linux , UTF-8 kodolasu szoveg..Nem gondoltam hogy gond lesz vele.
Ritkán használom, ilyenre pedig egyáltalán nem, de köszi a tippet!
Ez TC-ből kiollózva.... P.S. Sorry, de nem tudom hogyan kell C-sre formázni, mi a paramétere a "code"-nak
Sziasztok, esetleg tud valaki magyar nyelvű AVR assemblerről leírást feltenni, mert amit nekünk kiadtak a suliban az angol nyelvű, én pedig nem igazán értek angolul
Nem ekertem hogy beszurd a kodot ide, csak azt kerdeztem olvashato-e TC-ben. Nem veletlenul csatoltam.
Ha mar megvan a [ code ] akkor mi lehetne mas, mint [ code = c ], persze szokozok nelkul. a [ / code ] -nal nem kell = c.
zolee1209-nak lett volna címezve, csak félre ment.
Próbáld meg a 16Bites regisztereket egyben kezelni. "TCNT1", "ICR1" ként. Többször van az előbb íródik az alsó mint a felső, vagy fordítva. Erre a processzor érzékeny.
Koszonom a segitseged !
Probaltam ugy is, az eredmeny ugy tunik ugyanaz. Kov. probalkozasom, hogy a timer ki -be kapcsolas csak a loop-ban tortenik, ahol a "hangjegyeket" cserelgeti. Igy sem jo.
Probaltam a masik beallitassal, amikor a TOP az OCR1A regiszterben van. Ez sem jo. Egyet kattan, azzal kesz. Kod a mellekletben. (az ilyenektol tudom tepni a hajam)
Timert nem szükséges kikapcsolni, ha OCR1A-t használsz TOP-ként, mert az kettős bufferelt.
Ezt a hibát helyileg HW-esen (LED bekapcs, érték ellenőrzés, stb) módszerrel lehetne kideríteni. Látszólag jónak tűnik. Vedd ki a feltételt, vegyél ki mindent a ciklusból. TCNT1, ICR1, OCR1A állítás, majd még a fő loop-od előtt egy for(;; Tehát hogy ne fusson le garantáltan többször. Ellenőrizd, hogyha egyszer van csak megadva az érték, utánna a proci garantáltan be van szorítva egy loop-ba, akkor megy-e a fázis korrekt PWM. (Egyébként hang generáláshoz CTC-t kényelmesebb használni) Idézet: „Vedd ki a feltételt, vegyél ki mindent a ciklusból. TCNT1, ICR1, OCR1A állítás, majd még a fő loop-od előtt egy for(;;” Igen, megy. Az OCR1A = TOP valtozat igy sem indul, majd holnap ujra nezem.
Ez erdekes:
Ha egyben irom a TCCR1B regisztert, akkor jo. Nehanyszor ki be kapcsolgattam es ok. A proba kedveert visszairtam, hogy VAGYolva allitsa be a CS11 -et, es a hiba ujra elojott.
És ha így írnád?
Akkor a TCCRB olvasása okoz gondot. De hogy miért?! Pff. Ki tudja.
Azt már én is tapasztaltam, hogy waveform generátor esetén órajelet lekapcsolni zűrös. De nem igen találtam rá eddig magyarázatot. Ha egyben írom a teljes konfigot, akkor pedig jó. Sőt. Nem csak az órajel lekapcsolása, de a COMxx biteket írni is gond.
Kiterhetnenek az adatlapban bovebben ezekre a dolgokra, ha mar ilyen problemas. Amugy, ha a TCCRB olvasassal van a baj, ugy sem ertem, hogy miert az elso nehany loop-ban van torzitott jel. A loopban nincs konfigolva sem TCCRA, sem TCCRB. (csak egy proba keppen volt egy ilyen valtozat is irva)
Tegyuk fel, hogy TCCRB VAGYolva van konfigolva, a loopban nincs allitgatva, es a hiba letezik. Ha egyben irom a 16 bites regisztereket, a torzitasnak ilyen formaja van: pl. ha megadok egy A1 hangot, az elso nehany loopban ugy szolal meg mintha hamis lenne, mintha a frekvencia ide oda maszkalna eleg gyorsan, de jol hallhatoan, aztan jo lesz. Meg egyszer koszonom.
Sziasztok!
Most kezdtem el foglalkozni az AVR-ekkel és sajna elakadtam. A helyzet az, hogy egy atmega168-at szeretnék programozni, de amikor beállítom, hogy 8MHz-en dolgozzon, akkor a Waitms 1000 parancsra nem azt csinálja amit kéne. Kb 8 másodpercet vár, aztán hajtja végre a parancsot. Ha az órajelet átállítom 1MHz-re, akkor csinálja rendesen(mondjuk akkor sem 1msodpercet vár, de közel van hozzá). Hogy lehet ez? A Fuse bitek jól be vannak állítva, a panel jól van összerakva stb. A rajzon lévő kvarc már nincs a panelban. Aki esetleg találkozott már hasonló problémával és tudja mi a megoldás, kérem írjon. Előre is köszönöm Üdv.: P.Robi
Pocket pc -vel (win) fel lehet programozni valahogy az avr-eket?
Stk500-as USB-s programozót szeretném használni pda-n, de eddig csak PalmOS-re találtam progit.
Valamit nagyon nem ertek a gcc-ben. Ha normal interruptot hasznalok, akkor a PORTB=0 jol fordul:
Nade ha naked-del kiserletezem, akkor valamiert az r1-et nem nullazza ki elotte, ami nekem nem tetszik, ill gyanus, hogy ez igy nem lenne jo. Mit ronthatok el? Vagy mit kellene csinalni, hogy jol forduljon?
Sziasztok!
Lenne egy kérdésem, mert nem tudom rá a választ... ATmega16-os proci az alany, a PORTA-t szeretném használni analóg és digitális mennyiség mérésére. Megtehetem ezt egyszerre? Például PA7 és PA6 analóg jelet fogad, a többi bemenet pedig digitális bemenet. Ki kell kapcsolnom a felhúzó ellenállásokat az analóg bemenet miatt, és ahol szükséges, külső felhúzót alkalmazzak? Ilyen "vegyes" bemenetet még nem kezeltem, de szükségem lenne rá... Szerintem vannak részek, amiket rosszul gondolok, de épp ezért kérdezlek titeket, biztosan tudtok segíteni! Közben még egyszer ránéztem az adatlapra... Amikor a MUX-ban beállítom, melyik csatorna legyen aktív, akkor átvált az analóg bemenetre, ahol nincs felhúzó... De mi van akkor, ha lekapcsolom az analóg bemenetet? Akkor visszavált digitális bemenetté, és ott lesz a felhúzó, ha nem kapcsolom ki, de az bezavarja a csatlakozó áramkört, nem?! 2 óra alvás után én is össze vagyok már zavarodva, de bízom benne, hogy értitek mire gondolok...
DivCLK8 be van kapcsolva alapban. Tessék kikapcsolni.... (FuseBit)
Nem. A PDA-n USBHostnak kell lennie....
E nélkül 2 slave nem tud beszélgetni (A STK500 az slave áramkör (FT232RL))
Simán.
Az adott n db ADC-t amikor konfigurálod, sima ki/bemenet lesz. Ha az ADMUX-l ezt a lábat címzed, akkor kimenet esetén megmérheted rajta a tápfeszt vagy a GND-t . A felhúzó alapban _ki van kapcsolva_ De ha te bekapcsolod, akkor AD méréskor ki kell kapcsolnod...
Köszi!
Van már 1-2 Pda usb host-al, de az enyém még nem tudja.
Ez kicsit off, de gyanitom, hogy azok nem igazi host-ok, csak usb-on-the-go -sok -- bar lehet tevedek. Amugy ha field engineering-re kell, akkor lehet jobban jarnal egy netbookkal.
A felhúzók alapból nem bekapcsolt állapotban vannak? :hide: Nekem eddig úgy tűnt...
Akkor a legegyszerűbb, ha tiltom a belső felhúzókat és oda teszek, ahova nekem kell... Köszönöm szépen!
Megoldódott a probléma...Köszönöm Mester
Hali!
Korábban írtam már ezzel kapcsolatban, akkor aztírtátok h járjak utána... a dolognagyrész már működik is már csak az ADC -t nem tudom megoldani... Valaki tudna segíteni, hogy az "init() függvénybe" mit kéne beleírnom, hogy be tudjak olvasni vagy az PC5 -ről vagy a PC3 -ról? Illetve a beolvasas függvényt hogy kelle megcsinalnom, hogy az ADC-nek hasznat portrol a feszultseg fuggvenyben egy egesz szamot kapjak? Tudom, hogy sok helyen van hozzá példaprogram, csak éppen amiket találtam példaprogikat az alapján amit írtam attól mindíg lefagy a fordító (WinAVR). Előre is köszönöm a segítséget. Üdv! Andris |
Bejelentkezés
Hirdetés |