www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC Wert Umdrehen


Autor: Fichte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hay @all

Ich habe eine Frage ich lese einen Wert an einen Spannungsteiler aus
wenn der wert richtig 0 bzw. Masse geht dann zeigt mir mein Controller
100->0 an ich hätte dies gerne Umgedreht das heisst wenn ich richtung 0
bzw. Masse gehe soll er mir von 0->100 Anzeigen.

Hat jemand eine Lösung oder Code in C für mich.


MFG: Fichte

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
x' = 100 - x;

Gruß hagen

Autor: Fichte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja also versteh ich das jetzt richtig

Mein Orginal Code

      Vmess=read_adc(5);   //wert aus ADCL und ADCH an Pin1 auslesen
      Vmess*=100;
      b= Vmess/46.0;
      ftoa(b,0,s);

dann müsste ich nach deiner Antwort

      Vmess=read_adc(5);   //wert aus ADCL und ADCH an Pin1 auslesen
      Vmess*=-100;
      b= Vmess/46.0;
      ftoa(b,0,s);

MFG: Fichte

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
deiner rechnung nach kommt doch jetzt eine negative zahl raus oder?
einfach Vmess = 100 - Vmess vor ftoa hatte Hagen wohl gemeint

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Fichte:

x' = 100 - x;

Wenn x = 20, dann x' = 80, wenn x = 70 dann x' = 30, wenn x = 100
dann x' = 0, wenn x = 0 dann x' = 100.

Das war doch das was du suchtest ??

Gruß Hagen

Autor: Fichte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hagen

Genau das ist das was ich meinte.


MFG: Fichte

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hagen!

Deine Methode ist voll suba und eine Attraktion! Solltest patentieren,
ich wüsste schon einen Namen: subtraktion :-)

Ich hab gestern endlich mal über die Formel für ein gleichmässiges
dimmen der LCD-Beleuchtung nachgedacht, das geht recht gut:

      pwm--;
      x= 255 - pwm;
      OCR1BL = 2*x*(1-x/512.0);

Ich hab übrigens sogar schon ein Gehäuse dafür gebaut:

http://www.ganter.at/elektronik/index.html#smdwecker

Gruss Fritz

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Fritz,

deine Platinen sehen immer so super aus, wenn ich das auch nur so
könnte ;(

Gruß hagen

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wennst magst, mach ich dir eine, ist kein Problem. Kanns dir auch
bestücken.
Kostet dir aber ein Bier falls du mal in Hamburg bist.

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Fritz,

x = 255 - pwm;
y = 2  x  (1 - x/512.0);

Diese Rechnung benötigt langsamme Fließkommaoperationen. Besser ist es
so:

x = 255 - pwm;
y = ((x + x) * (256 - x / 2)) / 256;

bzw. eben

y = ((x + x) * (256 - x >> 1)) >> 8;

Das wäre eine Integer Rechnung mit 16 Bit Datentypen und nur einer
Multiplikation.

Gruß Hagen

Autor: MathiasMärker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Fritz,

Dein Projekt sieht wirklich top aus! Mit welcher Software hast Du
eigentlich diese Raytracing Platinenansicht gemacht?

Gruß,
Matze

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gnuplot sagt, dass es die selbe Kurve ist, ich werds einbauen.
Normalerweise wärs nicht so tragisch, die Berechnung ist jedoch in
einer ISR.

Aber du willst dich ja nur ums Bier drücken :-)

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Och, falls ich in Hamburg wäre würden wir Sekt schlürfen ;)
Nur war ich eben noch nie in Hamburg, bin mehr im Süden und Osten
unterwegs.

Gruß Hagen

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Matze:

Stand weiter oben im Text, ich habs jetzt an das Ende der Seite
gestellt:

"Die "künstlichen" Platinenbilder wurden mit Eagle3D erstellt
(vielen Dank an Matthias Weißer).
Dieses ULP erzeugt aus dem Eagle-Layout eine .pov Datei die mit Povray
gerendert wird."

@Hagen:
das >> brauche ich wohl nicht, sowas sollte der gcc automatisch machen,
aber ich überprüf das mal...

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, macht er. Aber zur Verdeutlichung was dann als Machinencode
rauskommt hab ich's mal hingeschrieben ;)

Das / 256 bzw. >> 8 wird sogar nur ein versetzer Speicherzugriff sein,
also y = HighByte(x);

Somit 1 Add, 1 Sub, 1 Shift, 3 Mul a 8 Bit + 2 Add.
Macht man es in Assembler so benötigt man nur 2 Mul, sozusagen eine
partielle Multiplikation. Es dürfte aber auch nur 1 Mul ausreichen wenn
man mit verminderter Qualität der Kurve arbeiten will.

Gruß Hagen

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was macht denn die LKW-Steuerung ??

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach, die blinkt nur vor sich hin, war eigentlich nur ein
Proof-of-Conzept dass ich so was kleines zusammenkriege. Momentan
liegen viele LKW-Plastikteile auf dem Tisch, weil ich mich nicht trau,
die LEDs in den LKW einzubauen.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Hagen,

eine Frage
y = ((x + x) * (256 - x >> 1)) >> 8;
muß das nicht so aussehen?
y = ((x + x) * (256 - (x >> 1))) >> 8;

Michael

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> deine Platinen sehen immer so super aus, wenn ich das auch nur so
> könnte ;(

Das stimmt, Fritz kann wirklich gut löten. Aber mit dem passenden
Werkzeug ist das wirklich nicht so superschwer. Ich habe gestern einen
MSP430 mit 0,5mm pitch als LQFP gelötet. Das sieht dann so aus:

http://mathar.com/bilder/headerboard.jpg

Ich mag ja auch mal angeben. :-)

Grüße, Sebastian

P.S.: Das wird mal mein 32-Kanal-Lichtcomputer werden ...

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Sebastian

Könnte schärfer sein :-)

Wie lötest du? So wie einer das im Forum erklärt hat: Pads verzinnen,
Chip drauf und dann ohne Zinn erhitzen?
Ich machs so, ist die schönste Methode, aber schwerer den Chip zu
platzieren.

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja, ich löte nur bleifrei, damits richtig schwierig ist :-)

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael:

> muß das nicht so aussehen?
> y = ((x + x) * (256 - (x >> 1))) >> 8;

Kann so ausssehen, muß aber nicht. Es gilt "Punkt vor Strich", und
Shifts sind Punkt-Rechnungen, also Linksshift == Multiplikation * 2^i,
Rechtsshift == Division / 2^i

y = (x + x) * (256 - x >> 1) >> 8; wäre auch richtig.

Mit dem >> 8 bin ich mir nicht so sicher was der Compiler benutzt. Ist
dieser clever erkennt er das y == 8 Bit breit ist und wird einfach
y = HighByte( ( x + x) * (256 - x >> 1) ); benutzen. Ist er nicht so
clever wird er tatsächlich einen 8 Bit Rechtsshift nutzen, was dann
ineffizienter wäre. Muß mal nachschauen was GCC macht.

@Fritz:
Ich fragte nach der LKW Steuerung weil dann für dich mein Source in der
Codelib interessant wäre. Der steuert 10 Duo LEDs mit einem ATTiny15L,
also ist wesentlich kleiner zu bekommen als deine Platine ;)

Gruß Hagen

Autor: Fichte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ all

Danke erst mal für die Antworten aber so ganz versteh ich das nicht
oder ich stehe auf der Leitung.

Meint ihr das so. ??

      Vmess*=100;
      b= Vmess/46.0-100;
      ftoa(b,0,s);


MFG: Fichte

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
b = 100 - (Vmess/46.0)

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Könnte schärfer sein :-)

Hab kein Geld für 'ne neue Digicam. ;-) Das Foto habe ich mangels Zoom
durch eine Lupe gemacht ...

> Wie lötest du?

Mit einem Lötkolben. :-]

> So wie einer das im Forum erklärt hat: Pads verzinnen,
> Chip drauf und dann ohne Zinn erhitzen?

EINER? Das war ICH! Benutz mal die Suchfunktion. :-) Aber um die Frage
zu beantworten: Ja, ich bin meiner Methode treu geblieben. Und die
klappt bis jetzt auch 1a.

> Ich machs so, ist die schönste Methode, aber schwerer den Chip zu
> platzieren.

Freut mich, jemanden missioniert zu haben. :-) Aber hast recht, es ist
wegen der konvexen (oder konkaven?!?) Mini-Hügelchen auf den Pads dann
ein kleines bisschen schwerer, das Bauteil zu platzieren. Dafür wird
der Aufwand mit superschönen Lötstellen belohnt.

Grüße, Sebastian

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jaja, du kannst leicht behaupten dass die Methode von dir ist, weil du
weisst dass ich zu faul zum suchen bin! :-)

Beim Plazieren muss ich halt den Chip mit der Pinzette halten während
ich 2 Pins anhefte, vorher gings mit dem Finger auf die Platine
drücken.

Apropos Lupe: meine Digikam kann auch nicht näher als ca. 50cm,
deswegen ist http://www.ganter.at/elektronik/mikrocontroller/tqfp32.jpg
auch mit der Lupe gemacht. Aber der Autofokus funktioniert auch durch
die Lupe durch. Vielleicht wars bei dir nur verwackelt, du brauchst
halt gutes Licht (Blitz geht da nicht).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.