AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [µC] Spannung von 0-5V mit 8 LEDs darstellen
Thema durchsuchen
Ansicht
Themen-Optionen

[µC] Spannung von 0-5V mit 8 LEDs darstellen

Ein Thema von Matze · begonnen am 27. Apr 2008 · letzter Beitrag vom 28. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

[µC] Spannung von 0-5V mit 8 LEDs darstellen

  Alt 27. Apr 2008, 09:26
Moin,

ich habe als Aufgabe, die über einen A/D-Wandler eingelesene Spannung mithilfe von 8 LEDs als Balkenanzeige darzustellen. Testen kann ich es erst am Dienstag, doch ich würde gerne etwas zur Umsetzung wissen.

Vorweg die Erklärungen zu meinem Code:

ad_res: Ergebnis des A/D-Wandlers (Werte 0-1023 oder 1024)
P2: 16-Bit-Port, an dessen Bits 0-7 die LEDs angeschlossen sind. Die linken 8 Bits (9-15) dürfen nicht verändert werden, daher die Bitmaske).

Code:
void show_visual_current(unsigned int ad_res)
{
   P2 = P2 | ~((P2 |= 0x00FF) >> (ad_res / 128));
}
Meine Theorie dahinter ist folgende:
ad_res/128 ist der Spannungsabstand von einer LED zur nächsten. Um diesen Wert werden 8 Einsen nach rechts verschoben und das ganze nach dem Invertieren dem Port 2 zugewiesen.

Ob das mit obigem Code auch tatsächlich gemacht wird, sei mal dahingestellt, doch das werde ich dann testen.

Unser Professor meinte jedoch, man soll Gleitkommadivisionen möglichst vermeiden, da die Berechnungen auf einem µC sehr langsam ablaufen. Durch eine Zehnerpotenz zu teilen ginge jedoch recht schnell, da man die Zahlen vor der Berechnung einfach um einen Faktor (10, 100, ...) vergrößern kann, um mit ganzen Zahlen rechnen zu können, aber wie macht man das in meinem Fall? Da teile ich durch 128.

Grüße,
Matze
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#2

Re: [µC] Spannung von 0-5V mit 8 LEDs darstellen

  Alt 27. Apr 2008, 10:11
Code:
(ad_res / 128) == (ad_res >> 7)
(128 ist ja praktischerweise eine 2er-Potenz )

btw: ich denke, Deine "Formel" kann nicht funktionieren - sobald die Leds einmal an sind, werden die nie mehr ausgeschalten werden (OR), zumal es vermutlich noch ein Syntax-Fehler hat (|=)

mein Vorschlag:
Code:
void show_visual_current(unsigned int ad_res)
{
  if (ad_res > 0)
    P2 = (P2 & 0x0FF00) | (0x00FF >> (7 - (ad_res >> 7)));
  else
    P2 = (P2 & 0x0FF00);
}
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [µC] Spannung von 0-5V mit 8 LEDs darstellen

  Alt 27. Apr 2008, 10:39
Hallo,

Tatsache, das mit dem Verschieben geht, danke. Ich frage mich zwar grad, wieso das funktioniert, aber es haut wirklich immer hin.

Mein Prof. hat auch irgendwas von den 7 Stellen angesprochen, die man verschieben könnte, nur wusste ich nicht, wieso er das vorgeschlagen hat. *g*

Stimmt |= ist natürlich Quatsch an dieser Stelle. Und du schreibst "7 - ...", damit man nicht mehr invertieren muss, vermute ich. Das lasse ich mir mal durch den Kopf gehen.

Grüße


Edit: Das blöde ist, dass ich nun eine neue Überlegung habe:

Code:
P2 = (P2 & 0xFF00) | ((0x00FF << (7 - (ad_res >> 7))) & 0x00FF);
aber das Zeugs so komplex ist, dass man das ohne es zu testen kaum überprüfen kann.
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#4

Re: [µC] Spannung von 0-5V mit 8 LEDs darstellen

  Alt 27. Apr 2008, 10:56
Zitat von Matze:
Und du schreibst "7 - ...", damit man nicht mehr invertieren muss, vermute ich.
genau

kleine Optimierung:
Code:
void show_visual_current(unsigned int ad_res)
{
  if (ad_res < 64)
  {
    P2 = (P2 & 0x0FF00);
  }
  else if (ad_res >= 960) // 1024 - 64
    P2 = (P2 & 0x0FF00) | 0x000FF;
  }
  else
  {
    P2 = (P2 & 0x0FF00) | (0x00FF >> (7 - ((ad_res - 64) >> 7)));
  }
}
bei 128er-Schritten gibt es 8 Eingangszustände (der AD-Wandler wird kaum jemals 1024 liefern), die LEDs unterstützen aber 9 (keine an bis 8 an) => ein Eingangszustand "halbiert" ergibt 9 Eingangszustände
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: [µC] Spannung von 0-5V mit 8 LEDs darstellen

  Alt 27. Apr 2008, 11:04
Das wird ja immer lustiger. *g*

Wenn ich das richtig sehe, setzt du hier zuerst die rechten 8 Bits auf 0 und ver-orderst diese mit 256 (8 Einsen). Somit setzt du insgesamt die rechten 8 Bits auf 1 und die linken 8 bleiben so (mehr als 16 Bit kann der Prozessor übrigens nicht, daher reichen hier 4 Hex-Ziffern)

Code:
P2 = (P2 & 0x0FF00) | 0x000FF;
Könnte man das nicht auch einfacher schreiben als

Code:
P2 |= 0x00FF;
Grüße
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#6

Re: [µC] Spannung von 0-5V mit 8 LEDs darstellen

  Alt 27. Apr 2008, 11:08
Zitat von Matze:
Könnte man das nicht auch einfacher schreiben als

Code:
P2 |= 0x00FF;
da hast Du natürlich recht...

meine vorherige Lösung in Kurz:
Code:
void show_visual_current(unsigned int ad_res)
{
  P2 = (P2 & 0x0FF00) | (0x00FF >> (8 - ((ad_res + 64) >> 7)));
}
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: [µC] Spannung von 0-5V mit 8 LEDs darstellen

  Alt 27. Apr 2008, 11:13
Danke. Deinen aktuellen Vorschlag und meine Überlegung aus Beitrag #3 werde ich am Dienstag testen. Vermutlich werde ich dann berichten, dass dein Code funktioniert und meiner nicht, aber das sehe ich dann ja.
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#8

Re: [µC] Spannung von 0-5V mit 8 LEDs darstellen

  Alt 27. Apr 2008, 11:21
Zitat von Matze:
Danke. Deinen aktuellen Vorschlag und meine Überlegung aus Beitrag #3 werde ich am Dienstag testen. Vermutlich werde ich dann berichten, dass dein Code funktioniert und meiner nicht, aber das sehe ich dann ja.
Deine Lösung aus #3 wird schon funktionieren, allerdings...
... beginnt der Balken auf der anderen Seite
... werden nie alle LEDs ausgeschalten sein
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: [µC] Spannung von 0-5V mit 8 LEDs darstellen

  Alt 27. Apr 2008, 11:25
Zitat von Basilikum:
allerdings...
... beginnt der Balken auf der anderen Seite
Sicher? Ich dachte nun die geniale Idee zu haben, das ganze anstatt nach recht nach links zu schieben um dem entgegenzuwirken.

Zitat von Basilikum:
... werden nie alle LEDs ausgeschalten sein
Stimmt, den Wert 1023 kann der A/D-Wandler wirklich nicht liefern. Im letzten Versuch gab die Messung, dass die Spannung von 0 bis 4,8x Volt reicht.
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#10

Re: [µC] Spannung von 0-5V mit 8 LEDs darstellen

  Alt 27. Apr 2008, 13:14
Mal ne andere Frage:
Code:
void show_visual_current(unsigned int ad_res)
Müsste es nicht

Code:
void show_visual_voltage(unsigned int ad_res)
heißen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz