Forum: Mikrocontroller und Digitale Elektronik Ganzanzeige mit uC


von Chris (Gast)


Lesenswert?

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

von H.Joachim S. (crazyhorse)


Lesenswert?

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.

von Eumel (Gast)


Lesenswert?

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...

von Karl H. (kbuchegg)


Lesenswert?

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 = ADC abfragen
7
8
    if( adcWert < adcWert für 1.9V )
9
      stelle 0 auf der 7-Seg dar
10
11
    else if( adcWert < adcWert für 2.3V )
12
      stelle 1 auf der 7-Seg dar
13
14
    else if( adcWert < adcWert für 3.1V )
15
      stelle 2 auf der 7-Seg dar
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.

von fonsana (Gast)


Lesenswert?

Chris schrieb:
> auf eine 7 Segment

WAS soll er denn auf diese eine 7-Segment ausgeben?

fonsana

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

fonsana schrieb:
> WAS soll er denn auf diese eine 7-Segment ausgeben?

Es geht vermutlich um eine Gan_g_anzeige für ein Auto.

von fonsana (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Es geht vermutlich um eine Gan_g_anzeige für ein Auto.

Ich will auch so eine Glaskugel!

fonsana

von Route_66 (Gast)


Lesenswert?

fonsana schrieb:
> Ich will auch so eine Glaskugel!

In meinem Kaffeesatz steht: für ein Bike!

von Davis (Gast)


Lesenswert?

Route_66 schrieb:

> fonsana schrieb:
>> Ich will auch so eine Glaskugel!
>
> In meinem Kaffeesatz steht: für ein Bike!

Meinst du Mopedfahrer?

von fonsana (Gast)


Lesenswert?

Was denn; Glaskugel mit Kaffeesatz?

fonsana

von Ralf G. (ralg)


Lesenswert?

fonsana schrieb:
> Was denn; Glaskugel mit Kaffeesatz?

Alles nur virtuell!
Sowas kann man sich auf einer Sieben-Segment-Anzeige ausgeben lassen!

von fonsana (Gast)


Lesenswert?

Wieder was gelernt! ;-)))

von Peter D. (peda)


Lesenswert?

fonsana schrieb:
> WAS soll er denn auf diese eine 7-Segment ausgeben?

"Prindel"

http://www.youtube.com/watch?v=fYxR0lheTEE&feature=endscreen&NR=1

von Chris (Gast)


Lesenswert?

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

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

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 ...

von Dave C. (dave_chappelle)


Lesenswert?

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.

von Chris (Gast)


Lesenswert?

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

von futsaft (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Dave C. (dave_chappelle)


Lesenswert?

Peter Dannegger schrieb:
> Als Mensch kann man Tippfehler machen.

Naja, kannst du beim Code wohl auch, oder?

von Peter D. (peda)


Lesenswert?

Chris schrieb:
> Also ich habe hier mal den ADC ...

Nö.
Du hast was falsches gepostet.

Außerdem muß man wissen, welchen 8051 mit ADC Du verwendest.

von Karl H. (kbuchegg)


Lesenswert?

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 :-)

von Harald W. (wilhelms)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.