Czyli pewnie wystarczyłoby wyciągać średnia z pewnej liczby próbek.jarekk pisze: Kod pewnie będzie działał, ale mam pewną praktyczną uwagę - rzadko kiedy dane z przetwornika A/C są zupełnie czyste więc używanie ich na żywca ( bez filtracji cyfrowej) może dać nie do końca stabilny sygnał na PWM.
Ja jednak zastosuje 555 kolego Leoo, ale i to może być ciekawe, gdyby nie fakt, że jak rozumiem jest tu regulacja tylko wypełnienia, a mnie potrzeba też częstotliwość. Aczkolwiek pozwolę sobie przy najbliższej okazji przetestować i ten pomysł, choć nie bardzo widzę tu możliwość właśnie ustawiania częstotliwości.
Kod: Zaznacz cały
Procek ATmega8
AVCC podpięte pod napięcie zasilania
pomiędzy Aref a masę kondensator,
potencjometr podpięty pomiędzy zasilanie i masę a "szczotka" do wejścia ADC0,
na pinach wyjścia OC1A i OC1B (jedno jest negacja drugiego).
T1 w trybie pracy FASTPWM
częstotliwość PWM Fosc/1024.
.nolist
.include "m8def.inc"
.list
.def mpr1 = r16
.org 0x00
rjmp start
.org ADCCaddr ; ADC Conversion Complete
rjmp ADC_int
start:
ldi mpr1,low(RAMEND)
out spl,mpr1
ldi mpr1,high(RAMEND)
out sph,mpr1
ldi mpr1,(0<<REFS1|1<<REFS0)
out admux,mpr1
ldi mpr1,(1<<ADEN|1<<ADSC|0<<ADFR|1<<ADIE|1<<ADPS2|1<<ADPS1|1<<ADPS0)
out adcsra,mpr1
ldi mpr1,(1<<COM1A1|0<<COM1A0|1<<COM1B1|1<<COM1B0|1<<WGM11|1<<WGM10)
out TCCR1A,mpr1
ldi mpr1,(1<<WGM12|0<<WGM13|0<<CS12|0<<CS11|1<<CS10)
out TCCR1B,mpr1
sei
praca: rjmp praca
ADC_int:
in zl,adcL
in zh,adcH
out OCR1AH,zh
out OCR1AL,zl
out OCR1BH,zh
out OCR1BL,zl
sbi ADCSRA,ADSC
reti
Nie pamiętam już not tego scalaczka, ale cos takiego mi się kojaży.