Hallo @All, ich möchte Analoge Werte gerne an den LED's (ich habe keine andere Anzeige) ausgeben - d.h. beispielsweise 3,8V sollen ausgegeben werden - das bedeutet, dass diese 3,8 V in einen Binärwert umgewandelt werden sollen, die die LED's dann ausgeben. Ich habe ein STK-500 und einen ATmega8515L und nutze AVR Studio 4. Programmiert werden soll alles in C. Was muss ich machen, um diese Analogen Werte ausgeben zu können?
naja den ADC wert einfach an die Leds, ist doch eh schon alle binär
Sorry das ich Frage, aber wie mache ich das ? Programmcode als Beispiel würde helfen...
BJBJ schrieb: > das bedeutet, dass diese 3,8 V in einen Binärwert umgewandelt werden > sollen, die die LED's dann ausgeben. und wie soll die LED das machen? auf irgendeinen Binärwert die Farbe wechseln? (also soll eine rote LED grün werden) den Binärwert als Morsezeichen ausgeben? -S-O-S- kannst du noch mal überlegen wie deine Frage verständlicher werden könnte?
Also, ich erhöhe die Spannung von 0-5V. Wenn ich jetzt beispielsweise bei dem Wert 3,5V bin, soll der Wert ausgegeben werden - und dafür möchte ich die LED's nutzen. Da man aber keine Zahlen mit Kommastellen in einen Binärwert umwandeln kann, erhöhe ich diese um den Faktor 10. Das bedeutet, dass meine Spannung von 3,5V den Wert 35 hat - der ist binär darstellbar - vor allem können meine 8 LED's am STK-500 ja Wert bis 255 ausgeben. Verstehst du, was ich meine ?
Naja du wandelst die Spannung in einen Binärwert um mittels ADC und dann schreibst du es eifnach auf die Ports wo die LEDs dranhängen ADC=PORTx;
Besser formuliert: Weden Wert im Bereich von 0-5V möchte ich an meinen LED's ausgeben. D.h. die Werte 0- 50 (weil Kommawerte ja nicht möglich sind). Diese Werte müssen aber erst binär sein, damit meine LED weiß, was sie ausgeben soll. Ich hoffe das war verständlich..
ja ,jeder versteht dich, aber WIE sollen die zahlen dargestellt werden ? blinkend ? bei dem wert 3 zB 3 mal blinken ? oder hast du eine matrix und willst sie tatsächlich als zahl darstellen ?
dfghjk schrieb: > Naja du wandelst die Spannung in einen Binärwert um mittels ADC > > und dann schreibst du es eifnach auf die Ports wo die LEDs dranhängen > > ADC=PORTx; Ja, soweit kann ich folgen - aber wie programmiert man so einen ADC - wie sage ich ihm, dass er die Spannung in einen Binärwert umwandeln soll. Das ist mein Problem - ich kenne die Befehle nicht und bin nicht fündig geworden.
Achsoo - die LED's sollen Leuchten - beispiel : Habe eine Spannung von 3,5V - LED 1,3 und 5 leuchten. Dann erhöhe ich die Spannung auf 3,6 V - LED 2,3 und 5 Leuchten. So meine ich das.
BJBJ schrieb: > Diese Werte müssen aber erst binär sein, damit meine LED weiß, was sie > ausgeben soll. > > Ich hoffe das war verständlich.. ne nicht wirklich: und wie soll die LED das machen? auf irgendeinen Binärwert die Farbe wechseln? (also soll eine rote LED grün werden) den Binärwert als Morsezeichen ausgeben? -S-O-S- kannst du noch mal überlegen wie deine Frage verständlicher werden könnte? Eine LED kann das nicht. Eine LED kann auch nicht die Farbe wechseln. Eine LED kann auch nicht 10 Binärwerte darstellen (der ADC hat eine 10 Bit Auflösung, um diese darzustellen brauchst du 10 LEDs, also wozu die Frage mit meine LED = Singular?)
BJBJ schrieb: > Achsoo - die LED's sollen Leuchten - beispiel : > > Habe eine Spannung von 3,5V - LED 1,3 und 5 leuchten. > Dann erhöhe ich die Spannung auf 3,6 V - LED 2,3 und 5 Leuchten. > > So meine ich das. das ist zB eine gute Ansage
Ich denk es waere an der Zeit ein Oszilloskop zu beschaffen. Dann kann man wenigstens Pulse ausgeben
Eine Spannung von 0,5V kommt rein - ich sage vorher, "Bitte erhöhe die Analogen werte um den Faktor 10 - das wäre dann also bei 0,5V der analoge Wert 5 - und diesen kann man doch binär darstellen?! 5 hätte den Binärwert 101 - damit blinken LED 1 und 3.
Hier fehlen drei grundlegende Kenntnisse: 1. ALLE Werte in einem heutigen Computer werden zunächst als (Kette von) Binärwerte(n) dargestellt und physikalisch repräsentiert. Zusätzlich zur Interpretation als Kette von Binärzahlen, lassen sich diese Ketten auch als ASCII-Zeichen, als ganze Zahlen beliebiger Basis mit und ohne Vorzeichen und eben auch als Real-Zahlen interpretieren. 2. Die meisten primitiven Operationen, wie etwa +, -, *, /, % interpretieren die Ketten von Binärwerten tatsächlich als Integer- bzw. Real-Zahlen. Welche Interpretation aktuell verwendet wird, sagt man dem Compiler in dem man Typen für die Variablen angibt. Z.B. uint_16, float etc. 3. Weitere Operatoren, wie <<, >>, ~, die selbst die Binärwerte lediglich als solche auffassen können angewendet werden, um etwa die Skalierung von Werten oder eben auch die Interpretationen zu ändern - und sei es auch nur zeitweise. Lies Dir nochmal genau in einem C-Buch die Abschnitte über Variablen, Typen und die Operatoren durch. Man kann nicht programmieren, wenn man die Grundlagen nicht kennt.
BJBJ schrieb: > Eine Spannung von 0,5V kommt rein - ich sage vorher, "Bitte erhöhe die > Analogen werte um den Faktor 10 - das wäre dann also bei 0,5V der > analoge Wert 5 - und diesen kann man doch binär darstellen?! > > 5 hätte den Binärwert 101 - damit blinken LED 1 und 3. Deine Zahlenwerte sind schon binär. Alles in einem COmputer ist binär. Hast du denn noch nie ausprobiert, welche LED leuchten, wenn du zb
1 | PORTB = 5; |
machst? Solltest du mal. Das Ergebnis ist erhellend.
BJBJ schrieb: > Habe eine Spannung von 3,5V - LED 1,3 und 5 leuchten. > Dann erhöhe ich die Spannung auf 3,6 V - LED 2,3 und 5 Leuchten. > > So meine ich das. Dennis S. schrieb: > das ist zB eine gute Ansage die er auch hätte früher schreiben können (manno) also ADC http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC gibt dir eine Int Zahl im Bereich von 0-1023 (10 Bit = 1024 Werte) dafür brauchst du 10 LEDs den ADC Wert schiebst du 6x nach links unddierst mit 0X8000 uint16_t var var=ADC var<<6; Schleife 10x durchlaufen if(var&0x8000) LEDn= ON; else LEDn= OFF; einmal linksschieben und nächste LED
Joachim B. schrieb: > http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC > > gibt dir eine Int Zahl im Bereich von 0-1023 (10 Bit = 1024 Werte) > > dafür brauchst du 10 LEDs Er hat aber nur 8. Also muss er die beiden untersten weniger wichtigen Bits wegschneiden: adc >>= 2; Jetzt hat er einen Wert 0...255 Den gibt er auf den 8 LEDs so aus: PORTD = adc; FERTIG! Er liest den binären Wert ab oder tippt ihn in seinen Windows-Taschenrechner (Programmierer -> Binär) und multiplziert ihn mit 4. Dann hat er den (ungefähren) ADC-Wert von 0...1023. Den rechnet er dann mit dem Taschenrechner in seine Spannung um. Einfacher Dreisatz. Also durch 1024 multipliziert mit Maximalspannng, welche 1023 entspricht. > den ADC Wert schiebst du 6x nach links > unddierst mit 0X8000 Warum das???? > Schleife 10x durchlaufen Warum Schleife??? > einmal linksschieben und nächste LED Ist das Dein Ernst?
:
Bearbeitet durch Moderator
Hi >Also muss er die beiden untersten weniger wichtigen Bits wegschneiden: > adc >>= 2; Oder ADLAR in ADMUX setzen und nur ADCH auslesen. MfG Spess
#include <avr/io.h> #define adc PORTA int main(void) { DDRB = 255; while (1) { adc >>= 2; PORTB = adc; } return 0; } Wo ist mein Fehler? LG BJBJ
Frank M. schrieb: > Joachim B. schrieb: >> http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC >> >> gibt dir eine Int Zahl im Bereich von 0-1023 (10 Bit = 1024 Werte) >> >> dafür brauchst du 10 LEDs > > Er hat aber nur 8. > > Also muss er die beiden untersten weniger wichtigen Bits wegschneiden: > > adc >>= 2; > > Jetzt hat er einen Wert 0...255 > > Den gibt er auf den 8 LEDs so aus: > > PORTD = adc; > > FERTIG! Nicht ganz. Er möchte es noch auf eine Voltangabe umrechnen. Aber ich denke das ist nicht sein Problem. Was ihm bisher gefehlt hat, das war die Erkentniss, dass er einem Port als ganzes genausogut etwas zuweisen kann. Sowie die Erkentniss, dass er dazu auch nichts speziell machen muss. Ich hätte es ja anders gemacht. Ich hätt in den unteren 4 Bits die Einerstelle vom Zwischenergebnis gegeben und in die oberen 4 Bits die Zehnerstelle. Sozusagen ein BCD. Fände ich leichter abzulesen. Denn wer kennt schon die Bitdarstellung von 47 auswendig. Die von 4 kenn ich aber und die von 7 auch. Leuchten meine LED so
1 | +---+---+---+---+---+---+---+---+ |
2 | | . | x | . | . | . | x | x | x | |
3 | +---+---+---+---+---+---+---+---+ |
4 | |
5 | | | | |
6 | +---- 4 --------+------ 7 ------+ |
dann würde zumindest ich mir mit der Ablesung um einiges leichter tun.
Frank M. schrieb: > Er hat aber nur 8. ist ja nicht mein Problem, aber die lower Bit wegwerfen geht natürlich auch Frank M. schrieb: > Ist das Dein Ernst? ja klar, erst mal soll er lernen und verstehen, deine Fähigkeiten kann er sich ja später aneignen, es gibt immer mehr als einen Weg nach Rom auch wenn nur deiner der richtige ist ;-)
BJBJ schrieb: > Wo ist mein Fehler? adc ist der analoge Wert. Wo hast Du diesen denn ausgelesen? Bestimmt nicht damit: > #define adc PORTA So einfach geht ADC-Wandlung nicht. Gehe zurück auf Los. Am besten, indem Du Dich erstmal einliest, wie Du einen Analogwert an einem Pin ausliest.
Karl Heinz schrieb: > Ich hätte es ja anders gemacht. > Ich hätt in den unteren 4 Bits die Einerstelle vom Zwischenergebnis > gegeben und in die oberen 4 Bits die Zehnerstelle. Sozusagen ein BCD. > Fände ich leichter abzulesen. Ja, natürlich, das wäre für mich dann die Phase 2 gewesen. Erstmal einfach, dann komfortabel. Phase 1: ADC-Wert binär darstellen Phase 2: ADC-Wert in BCD ausgeben Phase 3: Bis zu 4 Dezimalzahlen, z.B. 1023, als Lauflicht ausgeben ;-) Phase 4: Ergebnis gemorst auf nur einer LED Phase 5: Statt LED eine IR-LED, Signalübertragung an einen 2. µC mit Display ;-)
:
Bearbeitet durch Moderator
Karl Heinz schrieb: > Aber ich > denke das ist nicht sein Problem. Ich nehms zurück. Zu diesem Zeitpunkt hatte ich sein 'Programm' noch nicht gesehen. Da fehlt es an noch viel mehr als ich ursprünglich dachte.
BJBJ schrieb: > Wo ist mein Fehler? das du ADC nicht verstanden hast! Joachim B. schrieb: > also ADC > http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC lesen musst du das schon......
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.