Witam. Realizuje sterownik prędkości obrotów wiatraka w funkcji temperatury. Wykorzystuje lm 35 (0-100st) oraz do sterowanie wiatrakem PWM + BUZ10. Sterownik działa, ale chciałbym miec 3 zakresy tj. 100st, 50st, 25st ( dla tych wartosci temperatury maxymalne obroty wiatraka - czyli pwm maxymalnie wypełniony)zakresy wybieram poprzez zwarcie pinów PD0 PD1 PD2 . Mam problem z zakresami 50 i 25 stopni a mianowicie dla praktycznie 0 napiecia wyplenieni jest dośc znaczne( o wiele za duże) a dla max napięcia wypełnienie nie jest ciągłe.Ponadto dioda zapala się gaśnie i zapala na krótszy czas niż za pierwszym razem- to jest jakby 1 cykl. do testów urzywam potncjomentru i diody na wyjsciu pwm. Coś nie tak z kodem... może ktoś pomóc???
#include <avr/io.h>
int main(){
DDRB |= _BV(3); // PWM JAKO PORT WEJSCIOWY
DDRD |= _BV(0); //PIN 0 OUT STAN LO
PORTD &= ~(_BV(0));
DDRD &= ~(_BV(1)); //PIN 1 IN STAN HI
PORTD |= _BV(1);
DDRD &= ~(_BV(2)); //PIN 2 IN STAN HI
PORTD |= _BV(2);
//ustawienie przetwornika
ADMUX |= (0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(1<<MUX0);
ADCSRA |= (1<<ADEN)|(1<<ADSC)|(1<<ADFR)|(1<<ADPS0);
// USTAWIENIE PWM
TCCR2 |=(1<<WGM20)|(1<<COM21)|(1<<WGM21)|(1<<CS22)|(1<<CS21)|(1<<CS20);
unsigned char *WADCH; //wskaznik do rejestru adch
unsigned char wynik;
for(;;){
if(bit_is_clear(PIND,1))
{
*WADCH=&ADCH; wynik=*WADCH; wynik=wynik*2; OCR2=wynik;
};
if(bit_is_clear(PIND,2))
{
*WADCH=&ADCH; wynik=*WADCH; wynik=wynik*4;
OCR2=wynik;
};
OCR2=ADCH;
}
return 0;
}