set_pwm1_duty uzmanlık sorusu??

Başlatan shark27, 28 Şubat 2011, 17:02:00

shark27

selamunelykumç, beyler

diyeceksinizki sende hep saçma sorular soruyosun ama bunu çözmem gerkiyor.

set_pwm1_duty(255) dediğimde bildiğin üzere motor full hız dönüyor.
set_pwm1_duty(20) dediğimde filan ise bayağı yavaş dönüyor sorun yok
ama benim elimde float bir sayı var diyelimki 50.65

set_pwm1_duty(50.65) dediğimde motor tam hız dönüyor nasıl çıkabilirim işin içinden

fikri olan yardımcı olan arakdaşlarla teşekkürler..

ii çalışmalar..

Nedenler

Konu hakkında tam bilgi sahibi değilim ama;

Öncelikle bu tarz giriş çıkış işlemlerinde virgüllü bir değer kullanmamalısın. PWM çıkışı muhtemelen 8 (255) yada 10 (1023) bit çözünürlüğe sahiptir. Eğer 8 bit ise senin vereceğin değer 0-255 araması tam sayı değerleri olmalıdır.

Edit:// Aşağıda ki linkte istemediğiniz kadar bilgi mevcut.
http://www.antrak.org.tr/index.php?Itemid=27&id=58&option=com_content&task=view

picmanya

unsigned int x = (unsigned int) 50,65;
set_pwm1_duty(x);

bu çalışırmı? x burda 50 değerinde gidiyor olmalı.
floor ve ceil komutlerıda aynı işi görüm birisi 50 diğeride 51 değeri ürettirir.
ama hangisi ne üretir ezberden bende bilmiyorum ama floor zemin manasına gelir bu 50 üretse gerek.
soruda saçma değil.gayet normal bir soru.ama uzmanlıkla alakası malakası yok.

shark27

50.65 gibi bir değerin sadece 50 kısmını almak için ne yazmak lazım?

fahri-

ceil ve floor fonsiyonlarını inceleyin. işinizi görebeilir.

shark27

fahri hocam teşekkür ederim umarım işime yarar.

drmp

floatı word yada byte olarak baska registere aktar bir de öyle dene

ogoculu

basit bir çözüm

float a;
unsignet long int b;
----------------------------
a = 50,65;                   // a değişkenine 50,65 değeri atandı
b = a;                          //b değişkeni long int olduğu için 50 olarak kalır, ondalık değer almaz
set_pwm1_duty(b);