Forum: Mikrocontroller und Digitale Elektronik ADC Werte (Formel)?


von DhscR (Gast)


Lesenswert?

Hi ich hab folgendes Problem ich bekomme ja bei meinem ADC Werte von 
0...255 ,

bei 0 will ich eine Schleife 100 mal durchlaufen lassen
.
.
.
bei 127, 150 mal und
.
.
.
bei 255, 200 mal


hat jemand eine Idee wie ich für alle Schritte eine Art Formel oder so 
bekomme ich steh nämlich gerade aufm Schlauch alles einzeln eingeben 
wäre die doofste Lösung ! :-)

Danke

: Gesperrt durch User
von Pascal K. (zerb)


Lesenswert?

Hallo,

möchtest du dann hier Werte abfragen oder einfach eine 
Maschinenzyklenzeit von 100 etc. durchlaufen lassen ?

von Michel (Gast)


Lesenswert?

Wenn du das nicht im Kopf hinbekommst, tip die drei Wertepaare in Excel 
ein, laß dir eine xy-Diagramm zeichnen und füge eine Trendlinie hinzu 
mit Option "Gleichung im Diagramm darstellen"

von Alexander S. (esko) Benutzerseite


Lesenswert?

Schleifendurchläufe = 100 + 100 * ADC / 255

von DhscR (Gast)


Lesenswert?

Eigentlich dachte ich daran sowas wie ne Soft-PWM daraus zu machen
denn 100 Schleifendurchgänge sind 1ms (Servo-Ansteuerung)

150 Durchgänge sind 1,5 ms

200 dann 2ms

von DhscR (Gast)


Lesenswert?

Alexander Schmidt schrieb:
> Schleifendurchläufe = 100 + 100 * ADC / 255

JAAA das is doch mal was :-)))

Kannst mir das noch erklären wie du darauf gekommen bist ?
weil ich mich gerade auch sehr dumm fühle ! :-) Danke

von Thomas E. (thomase)


Lesenswert?

DhscR schrieb:
> eine Art Formel oder so

((AdcValue * 100) / 255) + 100

Mathematisch musst du AdcValue durch 2,55 teilen, damit wird es aber auf 
dem AVR problematisch, da der nicht gerade ein Rechengenie ist. Mit 
obiger Formel kannst alles mit Integer rechnen, sofern du mit den 
Rundungsfehlern leben kannst.

Noch einfacher wird es mit ((AdcValue * 100) / 256) + 100. Dann kannst 
du dir das dividieren ersparen indem du ((AdcValue * 100)  >> 8) + 100 
rechnest.

Wie schon gesagt, wenn du mit den Rundungsfehlern leben kannst. Es wird 
eben immer abgerundet, bzw. abgeschnitten.

mfg.

von Karl H. (kbuchegg)


Lesenswert?

DhscR schrieb:
> Eigentlich dachte ich daran sowas wie ne Soft-PWM daraus zu machen
> denn 100 Schleifendurchgänge sind 1ms (Servo-Ansteuerung)

Das macht man doch nicht mit Schleifen

Modellbauservo Ansteuerung

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas Eckmann schrieb:
> Noch einfacher wird es mit ((AdcValue * 100) / 256) + 100.
Wenig erstaunlich ist allerdings, dass die weniger aufwendige Methode 
(Division durch 256 statt der falschen 255) auch mathematisch korrekter 
ist...

von DhscR (Gast)


Lesenswert?

Ja weiß ich aber ich hab nur nen Attiny 13 und der hat nur nen 8 bit TC.
Deswegen versuch ich ne bessere Auflösung so zu bekommen .

von DhscR (Gast)


Lesenswert?

Ok hab es mit delay Versucht nur nimmt er mir Jetzt kein DDRB an und die 
Ports lassen sich nicht mehr ansteuern ?

(wenn ich bei AVR-Studio Simuliere)

von Karl H. (kbuchegg)


Lesenswert?

DhscR schrieb:
> Ok hab es mit delay Versucht nur nimmt er mir Jetzt kein DDRB an und die
> Ports lassen sich nicht mehr ansteuern ?
>
> (wenn ich bei AVR-Studio Simuliere)

delays kannst du im AVR-Studio vergessen. So ein delay auf zb 1 
Millisekunde bedeutet, dass der µC ein paar Hundertausend mal in einer 
Schleife Däumchen drehen muss. Da simuliert sich der Simulator zu Tode. 
(Es geht schon, nur dauert die Simulation der Warteschleife entsprechend 
lange).

Brenne es in den Tiny, häng dein Servo an, sorg für eine stabile 
Versorgungsspannung und die _delay_us, wie im Link angegeben, wird 
funktionieren (wenn deine Taktfrequenz stimmt)
Wenn dein Servo dann korrekt reagiert, fängst du an den ADC einzubauen.

Aber bitte nicht wieder mit so einer goto Orgie wie in deinem anderen 
Link.

Beitrag "Servo dreht nur nach Links"

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.