PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC Wert 0 - 1023 in PWM 0-100 % umrechnen



ceekay
02.10.2005, 13:23
Hallo,

ich habe es hinbekommen eine Spannung von 0 - 5 V mittels Poti an den AVR zu geben und dort in einen Digitalen Wert 0 - 1023 umzuwandeln.

Diesen Wert gebe ich auf meinem LCD aus. Ich habe aber vor mit diesem Wert die PWM einzustellen was auch kein Problem ist.

Nur würde ich jetzt gerne die PWM in % auf meinem Display anzeigen.
Ich komme aber mit der Umrechnung nicht klar. Wenn möglich würde ich sogar am liebsten mit einer nachkommastelle ausgeben.

Ich hoffe ihr könnt mir da auch die Sprünge helfen.

gruß ceekay

PicNick
02.10.2005, 13:41
? die 1023 verhalten sich zum aktuellen Wert wie 100 % zu deinen Anzeigewert. Einmal umdrehen hiesse
Prozent = (100 * Meßwert) / 1023

ceekay
02.10.2005, 14:38
hallo,

vielen dank ertsmal.

ich hab das jetzt ungefähr so gemacht:

long int pwm_wert;
int adc_wert;

pwm_wert = (100 * adc_wert) / 1023;

Die Variable pwm_wert muss ein long int sein, oder? Da bei der Berechnung ja als Zwischenergebnis eine Zahl größer 16 Bit rauskommt.

wie kann ich nun die Variable pwm_wert wieder in einen Integer packen?

gruß ceekay

nollsen
02.10.2005, 15:08
hi,

die variable pwm wert muss nicht long int sein, nur solltest du vielleicht dazwischen einen kurzen cast angeben
anstatt 1023 müsste es ja eigentlich 1024 sein, da es 1024 und nicht 1023 stufen sind.
/ 1024 lässt sich auch besser als >> 10 schreiben.

ceekay
02.10.2005, 15:16
wie meinst du das mit einem kurzen cast?

gruß ceekay

PicNick
02.10.2005, 16:02
@Nollsen: sein maximaler Meßwert sind 1023, und der soll glatt 100% darstellen. Nehm ich 1024, krieg' ich
Prozent = (100 * 1023) / 1024
und das sind offensichtlich keine 100

Du hast zwar 1024 ZAHLEN aber nur 1023 Meßstücke, das ist das zwischen den Zahlen

nollsen
02.10.2005, 16:09
hm, das ist eine abweichung von einem promille,
und die division spart ein paar hundert anweisungen,
entspricht dann eigentlich
wert 0 = 0,0000V
wert 1023 = 5,0000V?

PicNick
02.10.2005, 16:17
Is eh nur theoretisch. Praktisch (für MEINEN privaten Anzeigebedarf) tät ich einfach durch zehn dividieren. Dreh einmal ein Poti 1/100 des Weges und dann stell noch eine Dezimale ein. Und dann muß der Motor noch drauf reagieren. Der reagiert stärker auf allles andere rundherum
Wie gesagt: IMHO, meine persönliche Meinung

ceekay
02.10.2005, 16:31
wert 0 = 0 V
wert 1023 = 5 V
ja

wie meintest du das jetzt mit dem cast ich krieg da nur komische werte raus. was muss ich denn noch beachten?

gruß ceekay

PicNick
02.10.2005, 16:39
Komputer und Kompiler sind von Geburt an schwachsinnig. Man muß oft alles genau erklären:
pwm_wert = (int)(((long int)100 * (long int)adc_wert) / (long int)1023);
Dann hat er keine ausrede mehr.

("C" kommt von "casten", "C++" von "noch mehr casten")

ceekay
02.10.2005, 17:00
klasse funktioniert. vielen dank für die Hilfe.

gruß ceekay