Tiny85 - konfigurace PWM v Bascomu
Moderátor: Moderátoři
Tiny85 - konfigurace PWM v Bascomu
rem nastaveni PWM radice na 2400Hz, vystup bude na PIND.5, tedy OC1A
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 8
v kodu jsem pak pouzival prirazeni hodnoty:
Pwm1a = hodnota
ted jsem chtel program predelat pro tiny85, ale kdyz pouziju tuhle deklaraci, tak to nefunguje. konkretne nefunguje prirazeni pro pwm1a. zjisitl jsem, ze pwm0a lze pouzit, takze asi je jen jeden pwm port u tohoto cipu, ale zaboha nevim, jak upravit radek config timer1....kde mi to porad hlasi chybu a na jakem pinu vystup bude. koukal jsem do manualu, ale njsem z toho nejak mooudrej. urcite to bude tim, ze jeden procesor ma na orzdil od druheo nejake timery a jine nema nebo tak neco, ale fakt nevim.
Andrea píše:Co tak si o těch procesorech něco přečíst, třeba datašíty? Nebo jak chceš programovat jednočip, když ani netušíš, jaké má nebo nemá čítače?
myslim, ze na tohle jsem upozornil, ze tomu nerozumim
koukal jsem do manualu, ale njsem z toho nejak mooudrej
takze prosim o konstruktivni radu. kdyz s tim nekdo zacina, tak mu navod nepomuze. privital bych odpoved typu ten tvuj cip nema tenhle casovac, proto musis pouzit tuhle deklaraci atd... ja s tema cislama zkousel laborovat, ale k nicemu sem nedospel. bohuzel se to ucim sam, takze tvoje rada je mi vis tak k cemu...a zbytecne zaplnuje forum. mozna ze ho zbytecne zaplnuju i ja, ale alespon s konkretnim problemem, ktery muze poslouzit dost dobre stejnym "defum" jak jsem ja.
staci si projit nastaveni bitu pro rizeni PWM
dale musis urcit ICR1 (zalezi na volbe krystalu, preddelicky a zvolem typu PWM)
datasheet na megu32 http://www.atmel.com/dyn/resources/prod ... oc2503.pdf
PWM tam najdes na str.98
jinak pro OC1A
to napr bude
Kód: Vybrat vše
ICR3=20000; // f=50Hz f=fxtal/N*TOP N=8 ICR1=TOP
TCCR1A|=(0<<COM1A0)|(1<<COM1A1)|(0<<COM1B0)|(0<<COM1B1)|(1<<WGM11)|(0<<WGM10); // fazove korigovana PWM (0<<WGM11)|(1<<WGM10)ale zalezi na tobe jak to potrebujes. vysvetlovat vyznami jednotlivych bitu ti nebudu to najdes v datasheetu a pokud aspon trosku davas anglictinu tak to zvladnes precist.
jinak v bascomu nedelam delam v C takze si to musis prekopak a doporucuju prejit na AVR Studio popripade Code Vision.
potom muzes podobne problemi hledat napr zde:
http://winavr.scienceprog.com/avr-gcc-t ... inavr.html
http://winavr.scienceprog.com/avr-gcc-t ... inavr.html
potom nainstaluj
pak stahni http://sourceforge.net/project/showfile ... _id=668059
nainstaluj
do AVR studia se ti prida gcc (programovani v C)
pak pust AVR zaloz projekt gcc a programujes
- 8-bit Timer/Counter with Prescaler and Two PWM Channels
- 8-bit High Speed Timer/Counter with Separate Prescaler
a v tech registrech se nevyznam, na kterem pinu tedy co najdu? jde to pospat nejak pro troubu?
A ten oscilátor uvnitř, není krystal, je to RC oscilátor, takže od něj nečekej přesnou ani stabilní frekvenci.
- Přílohy
-
tiny25.gif- (16.33 KiB) Staženo 126 x
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 8
tu jsem pochopil, ze pro regulaci pwm bude pouzit timer1 z rozlisenim 8 bitu, pocitanim dolu, porovnavat to bude s A a predelic urcil nejaou frekvenci. dal jsem si myslel, ze ten porovnavaci registr A je nejaka vazba na pin OC1A (1=timer 1, A = compare A) a podle schema obvodu to odpovidalo pind.5. takze porovnavat se bude s registrem Compare1a pro ktery ma bascom ekvivalent zapisu Pwm1a, ktery tedy urcuje hodnotu k porovani.
na pin d.5 jsem pripojill ledku a kdyz jsem nastavoval ruznou hodnotu, tak se menila intenzita jejiho svitu.
takze jsem to chtel zkusit predelat pro mensi cip, tedy tiny85. koukal jsem, ze ma taky timer1, takze jsem nastavil:
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 8
a myslel jsem, ze nastavenim pwm1a, tedy oc1a bude vystup na pinu b.1 podle vyse uvedenoho obvrazku. ovsem u deklarace mi prekladac hlasi invalid parametr or value pro deklaraci a pro prirazeni hodnoty chybu prirazeni. tak jsem zkusil prepsat pwm1a na pwm1b a ta druha chyba zmizela, ale porad u te deklarace je ta stejna chyba. rikal jsem si, ze zmenim podle B compare a na B a budu to mit na pinu b.4 ale porad to hlasi chybu. vubec nevim, jak si to mam polopaticky vysvetlit...teda jestli je nejake jednoduche vysvetlneni
http://www.ebastlirna.cz/modules.php?na ... sc&start=0
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 8
sptane tam totiz bylo navic Pwm= 8 (myslim, ze se to zadava pouze u 16-ti bitoveho timeru, nebot si tim parametrem vybirame rozliseni 8,9 nebo 10bitu, coz u 8-bitoveho timeru dost dobre nejde)
dale pak prirazeni vystupu odpovida pouzitemu kompatatoru, tedy compare A, budu nastavovat hodnoty pwm0a= hodnota.
kompilator to schroustal, tak snad to je dobre a ma to svou logiku. vystup by mel byt na pinu B.0, ktery odpovida OC0A.
nebo se v necem pletu?