Hallo zusammen,
ich habe eine analoge Spannung von 0-5V.
Ich möchte diese mir über eine 7Sgement anzeigen lassen.
Ein uC (z.b 8051) soll mir die Spannung über ein ADC auswerten und dann
auf eine 7 Segment anzeigen.
Das sind die Schaltschwellen...
1,9V
2,3V
3,1V
3,8V
4,6V
4,9V
Habt ihr ein Programm Vorschlag o.ä.?
Danke im vorraus :)
Mfg Chris
Nimm lieber einen Controller, der einen ADC schon eingebaut hat
(ATMega48 oder Tiny26 wären mein Vorschlag).
Das Programm selbst ist trivial.
Etwas Augenmerk musst du auf die Stromversorgung des ganzen legen.
H.Joachim Seifert schrieb:> Nimm lieber einen Controller, der einen ADC schon eingebaut hat> (ATMega48 oder Tiny26 wären mein Vorschlag).> Das Programm selbst ist trivial.> Etwas Augenmerk musst du auf die Stromversorgung des ganzen legen.
Als ob es keine 8051 mit ADC gibt...
Chris schrieb:> Habt ihr ein Programm Vorschlag o.ä.?
Bei welchem Teil genau hast du denn Schwierigkeiten?
Pseudocode
1
....
2
3
4
while(1){
5
6
adcWert=ADCabfragen
7
8
if(adcWert<adcWertfür1.9V)
9
stelle0aufder7-Segdar
10
11
elseif(adcWert<adcWertfür2.3V)
12
stelle1aufder7-Segdar
13
14
elseif(adcWert<adcWertfür3.1V)
15
stelle2aufder7-Segdar
16
17
...
18
}
eigentlich einfach genug, wenn man die 'Baugruppen' ADC und
7-Segment-Anzeige auch nur annähernd im Griff hat. Zumal die Anzeige in
diesem Fall im Grunde ja ganz einfach als 7 LED aufgefasst werden kann,
ohne auf irgendwelche Spezialitäten Rücksicht nehmen zu müssen, wie zb
Multiplexing. Jeder der mit seinem µC ein paar LED gezielt
ein/ausschalten kann, sollte diesen Teil eigentlich hinkriegen.
Ja das ist für mein Motorrad,
Das hat einen Gangsensor welcher im
1 Gang 1,9V
2 Gang 2,3V
3 Gang 3,1V
4 gang 3,8V
5 Gang 4,6V
6 Gang 4,9V
ausgibt. Und mit dem möchte ich jetzt auf einen 8051 (testweise) gehn.
Ich wollte das ganze mit EdSim51 ausprobieren ;)
Programmvorschläge?!
Danke
Chris schrieb:> Programmvorschläge?!
waren ja oben schon als Pseudo-Code vorgegeben.
> Ich wollte das ganze mit EdSim51 ausprobieren ;)
Lass doch mal sehen, was du bisher schon so in deinem Edsim51 als Rahmen
für deine Ganganzeige programmiert hast. Wir helfen gerne bei der
Aufdeckung von Fehlern ...
Chris schrieb:> Programmvorschläge?!
Ja willst du nen fertigen Code?
Wenn du einen Attiny oder einen Atmega nimmst kriegst du den vielleicht
sogar, weil schon x-Leute sowas gemacht haben.
Also ich habe hier mal den ADC ...
jetzt weis ich aber nicht wie ich diesen Wert umrechne das ich wie oben
genannt die gewünschte Zahl bei dem bestimmten Wert rausbekomme
ORG 0 ; reset vector
0000| JMP main ; Springe in Hauptprogramm
ORG 3 ; external 0 interrupt vector
0003| JMP ext0ISR ; springe in die externe 0 ISR
ORG 0BH ; timer 0 interrupt vector
000B| JMP timer0ISR ; jump to timer 0 ISR
ORG 30H ; Hauptprogramm startet hier
main:
0030| SETB IT0 ; Interrupt einschalten
0032| SETB EX0 ; Interrupt einschalten
0034| CLR P0.7 ; P0.7 leeren
0036| MOV TMOD, #2
0039| MOV TH0, #-50
003C| MOV TL0, #-50
003F| SETB TR0
0041| SETB ET0
0043| SETB EA
0045| JMP $
; Ende des Hauptprogramms
timer0ISR:
0047| CLR P3.6
0049| SETB P3.6
004B| RETI
ext0ISR:
004C| CLR P3.7
004E| MOV P1, P2
0051| SETB P3.7
0053| RETI
bei diesem projekt unter software hast du code für einen atmega8 und
ausgabe an 7 segment! weiters findest du auch noch die schaltung wie der
adc mit der spannung verbunden ist!
mfg
Chris schrieb:> jetzt weis ich aber nicht wie ich diesen Wert umrechne das ich wie oben> genannt die gewünschte Zahl bei dem bestimmten Wert rausbekomme
Du brauchst nichts 'umrechnen'.
Du brauchst einfach nur mit einem Wert vergleichen, ob der Wert vom ADC
kleiner ist oder nicht.
Und die Vergleichswerte kriegst du, indem du dir einen Taschenrechner
nimmst, und deine Spannungen zurückrechnest auf die Werte, die dir der
ADC liefern würde, wenn genau die Spannung anliegt. Machs doch nicht zu
kompliziert zu programmieren.
Die Rechnung selber ist ganz einfach. Das ist einfach nur ein Dreisatz.
Wenn der ADC bei 5V 1023 liefert (Annahme das ist ein 10 Bit ADC),
welchen Wert liefert er dann bei 2.78V?
Das ist in der Kategorie: 5 Äpfel kosten 3 Euro. Wieviel kosten 8 Äpfel?
Das ist doch keine Hexerei das mit dem Taschenrechner auszurechnen.
Ausserdem wird es wohl herzlich egal sein, ob die Schwelle jetzt genau
bei 1.9V liegt oder bei 1.89 oder bei 1.91 oder anderen Werten in dieser
Nähe. Dein Schaltgetriebe liefert sowieso nur die SPannungen die es
liefert und maximal beim Schalten mal kurz einen Zwischenwert. D.h. Du
könntest die Werte auch einfach feststellen, in dem du den ADC machen
lässt und dir einfach mal für jeden Gang den Wert notierst, den der ADC
liefert. Dann rechnest du dir den Wert dazwischen aus und du hast deine
Schaltschwelle ohne dich auch nur im Geringsten um irgendwelche
Spannungen gekümmert zu haben. Einfach die 'Schwellen' am Objekt selber
abnehmen, so wie der ADC das Objekt sieht.
Komisch. Heutzutage will jeder was ganz tolles hochtechnisches bauen und
die einfachsten Herangehensweisen muss man ihnen immer erst mal lernen.
Karl Heinz Buchegger schrieb:> Das ist doch keine Hexerei das mit dem Taschenrechner auszurechnen.
Ich lasse das trotzdem den Compiler ausrechnen. Als Mensch kann man
Tippfehler machen.
Ich würds daher in C schreiben und nicht in Assembler.
Peter Dannegger schrieb:> Chris schrieb:>> Also ich habe hier mal den ADC ...>> Nö.
Und ich hab mir schon gedacht - was hat da der timer damit zu tun.
Aber was weiß ich schon von den 8051 :-)
> Du hast was falsches gepostet.
Eher was falsches kopiert :-)
fonsana schrieb:>> Es geht vermutlich um eine Gan_g_anzeige für ein Auto.>> Ich will auch so eine Glaskugel!
Für Ganzanzeigen braucht man aber eine Zlaskugel! :-)
Gruss
Harald
Eine eigene Frage?
Dieser Thread ist über 13 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.