burada ben anlatmıştım zaten nasıl olacağını.
adc okuma için adc_read() ı kullanarak 0-255 arasındaki veriyi almış olacaktın.
daha sonra bu veriyi 0.6 ile 2.6 arasında indirgemek için bir formül türetecektin. yani 0.6 ve 2.6 dediğim, ms olarak değerlerdi. buna da us olarak 600us ve 2600 us diyebilirdin.
bu aralıkta değer elde etmek için de analog değerini şu şekilde formülize edebilirdin en basitinden,
a = ( potval * 10 + 600 );
potval dediğim, ölçülen analog değer, a dediğim ise us cinsinden görev periyodu oluyor. burada deier, 600us ile 3150 arasında oluyordu. sen de onu
IF (a > 2600)
{
a = 2600;
}
bu şekilde kontrol ettirip maksimum değerini 2600 us olarak sabitleyebilirdin. sonuç, 600us ile 2600us arasında değer olurdu. ve toplam periyodu 20ms=20000us olarak belirleyince, a değeri kadar ( delay_us ile ) 1, periyot-a değeri kadar da 0 gönderebilirdin. bunu da yukarıda arkadaşların söylediği gibi mesela 50 defa gönderebilirdin, o da şöyle olurdu. ( mesela PORTA.0 çıkışımız olsun )
for(i=0; i<=50; i++){
output_high (PIN_A0);
delay_us (a);
output_low (PIN_A0);
delay_us (periyot - a);
}
böylece istenen işlem gerçekleşmiş olurdu ve pot'un değerine göre işlem yapılırdı. tabi formül daha da iyi hale getirilebilinir ama basit olarak bu şekilde kullanmıştım ben.
anlattığım şey de buydu yukarıda. bu kadar da zor değil.