PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Analoger Eingang - Bargraph Anzeige



delaware
26.01.2010, 10:02
Hallo, habe eine VU / Bargraph Anzeige programmiert.
An Pin 0 PORT C ( ADC) hängt ein Poti zwischen GND & 5V (mit Vorwiderstand).

Je nach Stellung des Potis soll eine LED-Licht wandern.

Ich beschäftige mich seit 3 Wochen mit ATmels.
Die Schaltung läuft auf einem STK500 mit ATmega8.

Vielleich kann mir jemand eine Meinung zu dem C- Code geben, evtl. geht es ja auch viel einfacher.

christoph

sternst
26.01.2010, 11:44
Wie wäre es erstmal mit "richtiger" statt "einfacher"? ;-)
Oder ist es Absicht, dass keine LED an ist, wenn result genau 4 ist (oder genau 20, oder 30, ...)?
Ich fände es auch einfacher lesbar, wenn man die beiden Vergleiche tauschen würde, also so:

if (result>0 && result<=4) PORTD = 0b11111110;
if (result>4 && result<=20) PORTD = 0b11111101;
if (result>20 && result<=30) PORTD = 0b11111011;
...

delaware
26.01.2010, 11:58
Hast recht. Viel gar nicht auf, da der Port bei z.b. genau 4 nicht gelöscht wurde sondern einfach der vorige Wert erhalten blieb.

Ceos
26.01.2010, 12:14
ohne in das programm gesehen zu haben würde ich folgende zeile vorschlagen


PORTD = ~(1<<((result*8)/1024)); // messwert / 10bit->1024 / 8Lampen = bitposition

wobei das ergebnis aus der rechnung die nte lampe ist, die leuchten soll und die binäre zahl 1 dann um soviele positionen nach links geschoben wird, im falle von 1023 (maximalwert) ist das ergebnis 7,99~ die nachkommastellen werden einfach abgeschnitten im falle von weniger als 128 wäre das 0

ACHTUNG: ich hab hier result*8 geklammert, damit auch definitiv DAS zuerst berechnet wird, wenn ich erst das ergebnis durch 1024 teile, klommt IMMER 0 bei raus, bei ganzzahldivision ignoriert man alles was nach dem komma kommt

bei 0 ist die erste lampe an und bei 1023 die achte lampe ... da die LEDs low active sind, hab ich mit '~' die zahl abschliessend invertiert


PS: bei result == 0 würde garkeine lampe bei dir leuchten!