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
Hali!
Egy kicsit elakadtam a Tiny861 IC és dokumentációjának ellentmondásában. Szerintem. A probléma a PWM6 üzemmóddal van. A doksi szerint -és az én értelmezésem szerint- TCCR1E regiszter alsó 6 bitje kiengedi OCR1A szerint komparált értéket. Teszi ezt úgy, hogy nem foglalkozik a negált láb működésével. Ezzel szemben az IC és a AvrStudio bizony a negált lábakon csak akkor ad H szintet, amikor az a komparálási értékből következik. Kérdésem: Az én értelmezésem rossz a dokumentáció alapján, vagy van valami cseles bit, amit még be kell állítani? Előre is köszönöm, akik foglalkozol a kérdéssel!
Sajna ez elég régi és azért elég mókás hogy pl. a bcd.h-t nem adják mellé. Az "#asm" rész is rosszul van megoldva,
meg nincsen "bit" nevű változótípus szóval igazán csatolhatták volna a HEX fájlt is az egészhez mert így nem jó...
Akkor ezzel nem megyek semmie se. Köszönöm a segítséget.
Esteleg nem tudjátok hogyan vezéreljek 2 soros lcd-t a mega 16-al?
Hello,
Nem sikerült, mert én PWM-ként definiáltam, elfelejtettem mondani. A lényeg, hogy pwm-el vezérelem a ventillátort, de ha a PD2-t letestelem, le kéne állítani az automata vezérlést, és átállni kézire, ehhez a PD0, PD1, PD2 -t kellene 5V-ra kapcsolni. Bocsánat az értetlenkedést, de nem nagyon találom a kiutat. (A PORTx.y nem működik nekem, vagy nem is kellene) Üdv, yoman
Bascomul:
Arduino:
De van, csak nem GCC alatt. Az a kod Codevision-nal keszult.
Előrebocsájtom hogy még mindig nem tudok programozni A mellékletben található kóddal nem jutok dűlőre. Az analóg digital rész, és a "bekapcsolási animáció" működik, csak a kikapcsolási rész nem. Számításaim szerint kb fél óra múlva , ( ha az ADC nem kap megfelelő nagyságú jelet) a PB3-ra kötött lednek ki kellene aludnia (erre a portra csatlakozik a kikapcsoló áramkör), de ez nem történik meg. Megköszönném ha valaki rávezetne mit rontottam el !
Az EREDETI kódot Codevision-al próbáld fordítani, azt írták hogy az alatt írták, nem GCC-re...
Kösz az ötletet !
De ez honnan derült ki számodra ??
Google-be beirod, hogy ""mega16.h" "bcd.h" avr", akkor a negyedik talalat a codevision avr manualja. Az altalad feltoltod programban minden olyan elem megtalalhato ebben a leirasban, ami gcc alatt nem letezik.
Néztem ezt a Codevisiont, de több gondom is van vele: először is fizetős és a demója csak 4k-ig dolgozik. A programom pedig nagyobb. A másik hogy nagyon nem szeretem az ilyen "varázslós" dolgokat, aztán meg ennek is meg kellene tanulnom a kezelését, amire végkép nem füllik a fogam.
Tehát úgy döntöttem, hogy inkább átírom a programot GCC-re ( ha már ezt is én írtam, nem lehet az akkora ördöngösség) De ehhez tudnom kellene mi nem tetszik a GCC-nek. A codevisionnak megtaláltam a manualját, De a GCC-hez nem találtam még számomra is értelmezhető leírást. Ha valaki tudna nekem ebben segíteni azt megköszönném ! az meg végképp nem értem hogy a fordító miért nem hisztizett az általa nem ismert elemek miatt
Senki sem mondta, hogy hasznald, csak leirtam, hogy miert nem tudod leforditani.
Az avr-libc leirasahoz a linket megtalalod a topic cimeben. A fordito hisztizett, nezd meg amit feltoltottel kepet.
Hát ez az, hogy lefordul!! minden hiba és warn nélkül.
Fel is töltöttem a Tinyre, működik is, csak a a kikapcsolási rész nem, azaz time0 környékén van a gond. A stúdióban szimuláltam a működést, a TCNT0 szépen emelkedik. Szerintem nem történik meg túlcsorduláskor a megszakítás, mert valamiért nem állítja be a TOV0 bitet ez az utasítás: TIFR = 0b00000010; . Javítson ki valaki ha tévedek!
http://hotfile.com/dl/82199807/7239a20/atmel-uygulama-notlari-ve-ka...r.html
Hátha valaki másnak is tetszik majd ez a csomag...
Tiny-re töltötted, miközben mega16-ra lett írva? Ééérdekes!
Nem értitek. Ő nem arról beszél, amiről ti. Olvassátok már el mit akar!
Jogos egy pont, mégha mégsem igaz, ugyanis az egy régi komment, nem javítottam (ellenben a program rész módosítva lett tinyre az adatlapja alapján). Mivel a projetben be van állítva az ATiny45, és kommenttel meg nem foglalkozik a fordító, illetve akár a jó istent is inkludolhatnám, ha nem kell, szintén nem foglalkozik vele a fordító.
A másik hogy az io.h nem csak a mega16ról szól, ha jól gondolom, sőt most olvasom ott van benne az ATtiny45 is.. Akkor most szorítkozhatunk arra a megszakításra. Szóval tesztként írtam már egy timer0-t használó progit, ez tökéletesen csinálta a dolgát a próbanyákon. Ezt módosítottam egy kicsit ( nyilván rosszul). Most ha a b változó eléri az 1100-as értéket le kellene futnia a 104. sortól kezdődő résznek. Viszont most jut az eszembe ! Igazából egy leddel figyelem azt a kimeneten, erősen gyanús, hogy olyan gyorsan kialszik , és mivel nincs még rákötve a kikapcsoló áramkör, olyan gyorsan vissza is kapcsol... de hülye vagyok teszek rá egy relét ami tényleg lekapcsolja...hátha sokat javít a dolgokon. Azért köszönöm a tanácsokat és a türelmet!!
Bocsanat, reggel osszekevertelek Damian666-al.
Sziasztok!
Tudnátok valami tippet adni hogy az AVR TWI hardverét hogy tudnám gyorsítani ? Ezeket a funkciókat használom hozzá : Masternél :
Slave-nél :
MASTER főprogramban : while(!TWIM_Start (cim1, 0)); TWIM_Write (xx); SLAVE főprogramban: if ((TWCR & (1< if (TWSR==0x60) { adat=TWIS_ReadAck(); } TWIS_Stop(); } Ezekután ha sok eszköz van rádugva akkor szemmel láthatóan lassú. Szkóppal vizsgálva maga az adatfolyam olyan gyors amilyennek beállítom(100kHz vagy 400kHz) de utána van egy csomó üresjárati idő, majd újra egy gyors adatmozgás a következő címre.. Semmilyen delay, vagy más művelet nincs a következő címre ugrás között, és a slave "teszt" program is csak az adatra vár és mégis 'lassú' . Esetleg tippetek lenne?
A hibaleirasod lehetne kvantitativ.
A lassabb Slave eszközök elvileg elnyújthatják az átvitelt(SCL vezetéket lehúzzák), így sasold meg az SCL-t. Amúgy az átvitel mindig hibameltes?
Pár apróságot másképp csinál az én könyvtáram a Master oldalon:
Magyarázat: STOP feltétel kiadása után nem kell megvárni annak befejezését, rögtön visszatérhetünk a programunkhoz számolni. Így processzoridőt nyerünk. Ennek az az ára hogy az új START feltétel kiadása előtt rá kell sasolni a TWSTO bitre. Amíg be van állítva addig nem adhatunk ki újabb START feltételt! A hardver ezt is elintézi, hiszen a TWSTO addig nem törlődik amíg az esetleges lassú Slave el nem engedi az SCL vonalat.
Sziasztok!
Az lenne a kérdésem, hogy az Attiny26-nak hány pwm kimenete van? Én úgy látom kettő, és még kettő invert?. Tudnám ezt úgy használni, hogy 3 pwm kimenetem legyen? Üdv,
Nem tudod használni. Csak 2 (pár) OC kimenet van, mindkettő a 8 bites Timer1-en. Ha nem fontos hogy legyen ADC, használj ATTiny2313-at. Ha ADC is kell és elegendő a 6 csatorna akkor ATMega48-at ajánlok.
Jol megirt interrupttal lehet 3 pwm kimeneted. Persze csak szoftveres.
Igen, kb. én is így csinálom: ATMega48-al 18 csatornás PWM.
LED-es futófányhez, knight rider effekthez több mint tökéletes a 120Hz-es PWM. A hardveres csak annyival jobb hogy ott jóval nagyobb frekik is lehetnek(akár 100kHz) miközben nem eszi a processzoridőt.
Az előző hozzászólást nem engedte módosítani a rendszer...
A hardveres annyival jobb, hogy ott jóval nagyobb frekik is lehetnek(akár 100kHz) miközben nem eszi a processzort. Tápegységeknél, frekvenciagenerátoroknál elengedhetetlen a hardveres PWM. Ráadásul ATTiny26 esetében a PWM számlálója akár 64MHz is lehet a beépített PLL-nek köszönhetően, így a PWM frekvencia 250kHz lehet! 3 csatorna esetében csak a 3. csatornát érdemes szoftveresre csinálni ami szinkronban fut a másik kettővel. A PWM számlálója értelemszerűen minimum 16-os előosztás mellett futhat korrekten, azaz a számláló órajele 8MHz-es processzor mellett 500kHz, a PWM frekvencia pedig kb. 2kHz. Persze lehet az OCR1C beállításával nagyobb frekiket elérni, de akkor a PWM felbontása is csökken! Szoftveres PWM, ahogy én csinálom: ATMega48-al 18-csatornás LED-es futófény, knight rider effekthez: VIDEÓ
Hello! Atmega128A-t próbálok programozni, AVR dragonnal, AVR studio 5 ben, de nem akar menni normálisan. A programot bele tudom írni a mikrovezérlőbe, de az ellenőrzésnél mindig hibát ír ki:
"Verifying Flash...Failed! address=0x0000 expected=0x0c actual=0xff" Ha kiolvastatom a flasht, akkor látszik hogy tényleg nem írt az elejére.
Valamilyen beállítási hiba lehet szerintem, de nem tudok rájönni hogy mi. Előre is köszi a segítséget! Ja és JTAG-on keresztül próbálkozok.
Megoldottam, programozó kábel volt a hiba.
Vannak meg csodak
|
Bejelentkezés
Hirdetés |