Analogwert mit 7-Segment-Anzeige visualisieren

burmeiha

Neues Mitglied
03. März 2008
7
0
0
Sprachen
Hallo zusammen,
ich habe vor einiger Zeit angefangen kleine Schaltungen mit AVR-Controllern zu erstelleun un diese zu programmieren. Ich habe bisher jedoch nur mit digitalen I/Os gearbeitet und würde nun gerne in die analoge Technik einsteigen.
Ich möchte nun drei 7-Segment-Anzeigen (gemultiplext) mit einem Mega32 steuern. Ich habe einen analogen Eingang an PA0 (ADC0). Nun möchte ich den gemessenen Wert aus dem ADC in einen digitalen Wert auf der Anzeige umwandeln. Wie kann ich dies programmtechnisch lösen? Ich könnte natürlich für jeden Dezimalwert einen Befehl programmieren, doch wäre ich dies zu aufwändig. Ich denke mir, dass man jeder Stelle des Messwertes eine 7-Segment-Anzeige zuordnen kann. Also bei z.B. 1,5V Die 1 der ersten Anzeige und x,5 der zweiten Anzeige
In vielen Foren stehen Beispiele für die Anzeige der Werte mit Hilfe eines PCs über RS232, nicht aber welche für meine Anwendung.
Vielleicht hat ja einer von euch eine Idee.:)
Schon einmal vielen Dank
Gruß
Hans
 
Hallo Hans,

willkommen im Forum!

Zunächst wäre einmal interessant zu wissen, in welcher Sprache du programmierst, damit man dir hier detaillierter helfen kann. Um schon mal eine Richtung vorzugeben, hier kurze Hinweise, wie man es programmtechnisch lösen kann.

Der Analog-Digital-Converter des AVR liefert einen 10Bit Wert (0...1023). Wenn du den Spannungswert am ADC0 auf deiner Anzeige ausgeben möchtest, musst du diesen aus dem gemessenen 10Bit-Wert berechnen. Bei dem Ergebnis ermittelst du alle Dezimalstellen (ich gehe hier von 3 Stellen aus), also Anzahl der 100er, der 10er und der 1er.

Die Dekodierung der 7Segment-Anzeige ist abhängig davon, wie du die 7Segment-Anzeigen an einen Port anschließt. Dekodieren macht man zum Beispiel durch Tabellenadressierung (hier im Forum gibts einige Beispiele).

Die dekodierten Werte für 100er, 10er und 1er gibst du nun nacheinander an dem Port aus, an dem du die Anzeigen angeschlossen hast, wobei du immer die entsprechende Anzeige aktivierst. Die Intervallzeit (Periodendauer) wählst du so, dass das Auge kein Flackern mehr wahrnimmt (Werte 20ms bis 10ms).

Es wäre wahrscheinlich erst einmal einfacher, die Anzeige statisch, also nicht gemultiplext anzusteuern, aber da hast du wahrscheinlich beim ATmega32 nicht genug freie Portpins.

Ich hoffe, dir hat das schon mal ein bisschen weitergeholfen.

Grüße,
Dirk
 
Danke für die erste Hilfe

Hallo Dirk,
vielen Dank für deinen Beitrag!
Ich habe im Moment keine Zeit mich damit zu beschäftigen, werde mich aber morgen mit dem Thema Tabellenadressierung befassen.
Ach ja, das hatte ich ganz vergessen mit reinzuschreiben: Ich programmiere (versuche es zumindest) in Basic mit Bascom.:)
Gruß
Hans
 
Hallo Hans,

ich vernahm BASCOM. BASCOM finde ich gute, willkommen an Bord!

Bin gespannt auf Deine Fragen :p

Grüße,
Markus
 
Hallo,
ich habe nun rumgestöbert und so einige Beiträge über das Anlegen von Tabellen gefunden. Die sind aber meist in Fachchinesisch :confused: geschrieben und behandln nur bestimmte Fehler/Probleme nicht aber, wie man sie anlegt.

; HGFEDCBA Decimal/Hexadecimal equivalent
.db 0b11000000 ; 0
.db 0b11111001 ; 1
Diese Zeilen sind denke ich ein Anfang, doch sind die Bytes nun die Werte aus dem ADC oder schon der Befehl zum Schalten der Ausgänge?

Habe ich das mit den Bits des ADCs richtig verstanden? Die Referenzspannung ist also der Wert 1023 und 0V der Wert 0. Die Dezimalstellen kann ich dann also durch einfaches Teilen errechnen z.B. bei 5V Referenzspannung und einem ausgegebenen Wert von 410 wären es ca. 2V (5V/1023 * 410).

Vielleicht habt ihr einen guten Link oder ein paar Informationen für mich mit denen ich weiterarbeiten kann.
Grüße
Hans
 
Hallo Hans,

das Arbeiten mit Tabellen kannst Du Dir in meinem Beispiel unter

http://www.avr-praxis.de/forum/showthread.php?t=46

mal näher ansehen. Dort habe ich über eine Tabelle die CRC-Korrektur für den Sensor SHT71 realisiert.

Ansonsten gibt es ei Beitrag von mir in diesem Forum zum thema Zugriff auf Tabellen und Vorgehensweise. Den findest Du unter

http://www.avr-praxis.de/forum/showthread.php?t=46

Schau's Dir mal an ob Du damit zurecht kommt. Zu Tabellen (Kommando DATA) in Bascom gibt es auch einige Beispiele in der BASCOM Hilfe und im 730-Seiten Tutorial für BASCOM. Da wirst Du sicher auch fündig. Wenn nicht frag einfach weiter.


Dann zu Deiner nächsten Frage
....doch sind die Bytes nun die Werte aus dem ADC oder schon der Befehl zum Schalten der Ausgänge?

Ich denke die dort enthaltenen Definitionen betreffen nur die Output-Konfiguration für die 7-Segment-Anzeige. Also die Definition welche PIN's für die 0 und welche für die 1 und welche für..... angesteuert werden. Das hat erstmal nix mit Deinen ADC-Werten zu tun.

2. Aspekt Deiner Frage: Ich würde nie und nimmer versuchen die ADC-Umsetzung über Tabelle zu machen. Du hast schon richtig erkannt das &H0000 der Messwert für 0V und rein theoretisch &H03FF für die Referenzspannungs ist.
Nur, mit Tabellen kommst Du hier nicht weiter. Hier ist rechnen angesagt und das ist auch nicht schwer. Schau mal, angenommen die Referenzspannung ist 5V dann hast Du einen Messbereich von 0V bis 5V der sich auf den 10-bit ADC-Wert &H0000 bis &H03FF bezieht. Man definiere also eine Single-Variable und behaupte "Variable = 5V / 1023 * ADC-Wert". Damit bekommst Du schon mal Dein umgerechnetes Messergebnis in Gleitkommazahl z.B. 3,14V
So, jetzt geht es mit Rechnung und Bascom weiter. Bascom hat die Eigentschaft, das man einer Byte-Variable einfach einen Single übergeben kann und die Kommateile werden abgeschnitten. Dies kann man sich hier zu nutze machen. Nämlich:

Man definiere eine Bytevariable und sage einfach Bytevariable = single-Variable. Damit hast Du die Kommas abgeschnitten und schon mal die erste Ziffer vor dem Komma zur Ausgabe auf dem 7-Segment. MIt der kannst Du nun in die Tabelle und schauen welche Ausgänge geschaltet werden müssen um die Ziffer darzustellen.
Du brauchst als nächstes natürlich das Komma oder den Punkt. Den kannst Du fest verdrahten auf Deiner PCB oder Du legst in auch auf einen Ausgang für die Tabelle. Damit bist Du flexibel.

So, nun geht es noch um die erste und zweite Nachkommastelle. Mann ziehe vom Single den Bytewert ab, erhalte nur noch dioe Nachkommastellen und multipliziere mit 10. Und schon habe ich die erste Nachkommastelle vor dem Komma und verfahre wie mit der ganzen Zahl oben...

Und das ganze nochmal und schon hat man die zweite Nachkommastelle. Das ganze kannst Du treiben bis der Single "aufgearbeitet ist".

Hilft Dir das weiter? Ich denke schon, probiers einfach mal aus, das macht doch am meisten Spass.

Ich hoffe ich konnte Dir a bissle weiter helfen. Halt uns auf dem Laufenden!

Grüße,
Markus
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)