Forum: Mikrocontroller und Digitale Elektronik Arduino map Funktion an Potentiometer anpassen.


von Elektro F. (Firma: Trafo AG) (elektrofrederick)


Lesenswert?

Hallo zusammen

Ich steuere mit einem Potentiometer ein PWM-Signal. Das Problem ist ich 
habe ein 5kOhm Poti. Nach 1/3 der Drehung ist bereits die Maximale 
Geschwindigkeit erreicht. Ich möchte gerne ohne an der Hardware was zu 
verändern(Aufgabe des Lehrmeisters) die Komplette Drehung des 
Potentiometer verwenden, aber ich möchte nicht einfach nach hinten 
schiebe indem ich in der map Funktion einen grösseren Wert eintrage dort 
wo im Moment die "1" steht. Wäre es möglich das ganze in die Länge zu 
ziehen. Freue mich auf eure Antworten und Danke schon im voraus.

1
  int ValuePoti = analogRead(Poti);
2
  int Output = map(ValuePoti,1,255,1,1023);
3
  analogWrite(Q,Output);

von Guest (Gast)


Lesenswert?

Hint:
long ValuePoti

analogRead liefert einen 16Bit Wert zurück

von Toxic (Gast)


Lesenswert?

Guest schrieb:
> analogRead liefert einen 16Bit Wert zurück

int ist schon richtig:siehe HELP-Sektion....
========================================
Syntax

analogRead(pin)
Parameters

pin: the number of the analog input pin to read from (0 to 5 on most 
boards, 0 to 7 on the Mini and Nano, 0 to 15 on the Mega)
Returns

int (0 to 1023)
=========================================

Aus dem Stehgreif wuerde ich sagen:
int(1023/3) und das sollte es schon gewesen sein.
1023/3 = 341 - das ist auch der Wert der dem Motor die volle Drehzahl 
gibt 1/3 Poti ergeben 1.67V welches vom A/D-wandler in 341 umgewandelt 
wird.
Probier es aus.

  analogWrite(Q,int(analogRead(Poti)/3));

von Elektro F. (Firma: Trafo AG) (elektrofrederick)


Lesenswert?

Vielen Dank, hat mir sehr geholfen nun funktioniert es super!

von Sly_marbo (Gast)


Lesenswert?

Müsste es nicht sogar so aussehen:

//map(value, fromLow, fromHigh, toLow, toHigh)

int Output = map(ValuePoti,1,1023,1,255);

Der AD Wandler hat doch 10bit und die PWM 8?

von Georg M. (g_m)


Angehängte Dateien:

Lesenswert?

Sly_marbo schrieb:
> Müsste es nicht sogar so aussehen:
>
> //map(value, fromLow, fromHigh, toLow, toHigh)
>
> int Output = map(ValuePoti,1,1023,1,255);
>
> Der AD Wandler hat doch 10bit und die PWM 8?

Ja.
https://www.arduino.cc/reference/en/language/functions/math/map/

von Adam P. (adamap)


Lesenswert?

Elektro F. schrieb:
> int ValuePoti = analogRead(Poti);
> int Output = map(ValuePoti,1,255,1,1023);
> analogWrite(Q,Output);

Sly_marbo schrieb:
> Müsste es nicht sogar so aussehen:
>
> //map(value, fromLow, fromHigh, toLow, toHigh)
>
> int Output = map(ValuePoti,1,1023,1,255);
>
> Der AD Wandler hat doch 10bit und die PWM 8?

Oder man spart sich das in diesem Fall und macht nen right shift.
1
int ValuePoti = analogRead(Poti);
2
int Output = (ValuePoti >> 2);
3
analogWrite(Q,Output);

Dabei fällt mir grad auf, die Funktion analogWrite:
Sie erlaubt "int":
1
void analogWrite(uint8_t pin, int val)
...aber in der Funktion wird nur auf == 0 oder == 255 abgefragt,
sonst kommt "val" direkt ins OCR Register.

Kann man so machen, ist halt kacke... :-D

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.