Forum: Mikrocontroller und Digitale Elektronik Barometer mit A/D


von Christian B. (chris001)


Angehängte Dateien:

Lesenswert?

Hallo Leute!

Ich experimentiere im Mom mit einem analogen Drucksensor und dem
A/D-Wandler eines Atmega8. Ziel soll es sein, ein kleines Barometer zu
bauen.

Ich habe zu Testzwecken ein kleines LCD angeschlossen. Die eigentlichen
Werte sollen auf Segmentanzeigen angezeigt werden, die mit einem Treiber
IC angesteuert werden.

Das Problem was ich habe. Die vom A/D gemessenen Werte werden in dem
Word Messergebnis gespeichert. Jetzt wollte ich mit "makebcd" die
einzelnen bits für den BCD Code erstellen. BCD-Code ist für das Treiber
IC.

Leider bekomme ich auf den Segmenten so wie auf dem LCD nur Schrott
angezeigt.

Das Word muss doch bestimmt auch noch in zwei Bytes geteilt werden, um
dann den vier Bit breiten BCD-Code zu erstellen?

Irgendwie steh ich etwas auf m Schlauch. Ich hab meinen Bascom-Code mal
angehangen.

Danke schon mal für jeden guten Vorschlag...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Also geht es weder um ein Barometer noch um einen A/D-Wandler, sondern 
um das Zerlegen eines 16-Bit-Wertes in BCD, und das in BASCOM.

> Das Word muss doch bestimmt auch noch in zwei Bytes geteilt werden, um
> dann den vier Bit breiten BCD-Code zu erstellen?

Mit recht hoher Wahrscheinlichkeit liefert die Funktion "makebcd" etwas, 
was sich "packed BCD" nennt, in einem Byte werden zwei Stellen des 
BCD-Wertes abgelegt.

Aus Dezimal 12 (hex 0x0c) wird folglich hex 0x12.

von Rainer U. (r-u)


Lesenswert?

die Zeile "LCD Messergebnis" sollte Dir einen Wert zwischen 200 und 1223 
anzeigen (weil Du 200 addierst). Wenn dass funktioniert, dann 
funktioniert schonmal die ADC-Messung. Für die Anzeige des Messwertes 
auf dem LCD muss man nicht mehr tun (maximal noch die erste Stelle mit 
einer "0" oder einem Leerzeichen auffüllen, damit die Zahl rechtsbündig 
immer an der gleichen Stelle steht).

Für die Segmentanzeige vermute ich mal, dass Du diese 3-4 Ziffern 
auseinandernehmen und einzeln an den Treiber füttern musst - poste doch 
mal, wie diese Segmentanzeige aufgebaut ist / mit welchem Treiber.

von Christian B. (chris001)


Lesenswert?

Ja, genau. Es geht um das Zerlegen eines Wertes in einen BCD-Code.

Die ADC Messung funktioniert. Richtig ich habe einen min. Wert von 200 
und einen max. von 1223.

Das sind NE587 Treiber, wo der BCD Code an den Pins 1,2,7,8 
angeschlossen ist. Es gibt leider keinen Schaltplan, weil das alles nur 
auf nem Klemmbrett aufgebaut ist.

Ja genau. Die Ziffern müssen auseinander genommen werden, dann 
nacheinander an das IC gesendet werden. Wie tu ich denn jetzt so ein 
Word auseinander nehmen, um daraus dann jeweils 4 Bit BCD Code zu 
erhalten?

von Karl H. (kbuchegg)


Lesenswert?

eigentlich brauchst du ja auch gar kein makebcd, denn du willst ja dein 
Eregbnis sicher nicht als Hex-Ziffern ausgeben. Oder doch?

Beobachtung.

  378 / 10     -> 37
  378 MOD 10   ->     8

  37 / 10      -> 3
  37 MOD 10    ->     7

  3 / 10       -> 0
  3 MOD 10     ->     3


wenn du die die Ergebnisse der MOD Zeilen ansiehst, dann sind das genau 
die Ziffern, die deine Zahl aufgebaut haben. Das ganze beruht einfach 
nur auf DIvision durch 10 bzw. auf dem Rest, der bei so einer 
Ganzzahl-Division bleibt

von Christian B. (chris001)


Lesenswert?

Natürlich kann man mit einer Division durch 10 die einzelnen Ziffern 
einer Variable ausfindig machen.

Aber! Dann hab ich ja auch noch nicht so ganz das was ich brauche.
Ich brauche einen 4 Bit breiten Bin-Code von jeder Ziffer, die ich dann 
nacheinander dem Treiber IC aufschalten kann.

von Karl H. (kbuchegg)


Lesenswert?

Christian Betzen schrieb:
> Natürlich kann man mit einer Division durch 10 die einzelnen Ziffern
> einer Variable ausfindig machen.
>
> Aber! Dann hab ich ja auch noch nicht so ganz das was ich brauche.
> Ich brauche einen 4 Bit breiten Bin-Code von jeder Ziffer, die ich dann
> nacheinander dem Treiber IC aufschalten kann.

Dann schau dir doch mal die Binärcodes der numerischen Ziffern von 1 bis 
9 an.

Es tut mir leid, aber wer mit µC arbeiten will, sollte zumindest binär 
zählen können und Begriffe wie 'Bits' sollten keine Fremdwörter sein.

von Rainer U. (r-u)


Lesenswert?

Christian Betzen schrieb:
> Ich brauche einen 4 Bit breiten Bin-Code von jeder Ziffer, die ich dann
> nacheinander dem Treiber IC aufschalten kann.

Wie Du auf die Ziffern kommst, (Divisionsrest durch 10) steht oben.

jetzt brauchst Du etwas, was Du 4x nacheinander aufrufen kannst, und was 
aus einer Ziffer Deinen benötigten Code/Ausgabe macht. Entweder die 
fertigen BCD-Funktionen aus dem Bascom funktionieren dafür, oder Du 
schreibst Dir selbst dazu eine Funktion:

function mein BCD
   wenn diese Ziffer gib das zurück..
   wenn diese Ziffer gib das zurück..
   wenn diese Ziffer gib das zurück..
end function

von Karl H. (kbuchegg)


Lesenswert?

Ich denke, man sollte auch mal klären, was da eigentlich für eine 
Hardware drann hängt.

Ich tippe mal auf einen 7447 ....

.... und eine gewisse Parallelität in der Sache zu dem hier
Beitrag "Re: Tastaturprogramm mit ATMega328"

von spess53 (Gast)


Lesenswert?

Hi

>Ich tippe mal auf einen 7447 ....

NE587

Beitrag "Re: Barometer mit A/D"

MfG Spess

von Viktor N. (Gast)


Lesenswert?

Eine BCD Wandlung kann man sehr gut im Simulator debugen und 
nachvollziehen.


Anmerkung. Weshalb muessen die Leute immer mit einem Mega8 arbeiten ... 
dem Magersten unter den Megas.

von Karl H. (kbuchegg)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Ich tippe mal auf einen 7447 ....
>
> NE587
>
> Beitrag "Re: Barometer mit A/D"

Ah ok. Hab ich überlesen und dann nur noch im Eröffnungsposting gesucht. 
Ändert aber eigentlich am Prinzip nicht viel. Das ist ja auch nur ein 
7447, diesmal halt mit Latch.


Ich würd dem TO mal empfehlen, einfach nur den NE und die 7-Segment zu 
verkabeln und sich mal in Natura anzusehen, wie die Belegung der 
Datenleitungen sein muss, damit was an der Anzeige angezeigt wird. Kein 
Datenblatt kann das so schön vermitteln, wie ein realer Aufbau, dem man 
mit ein paar Drähten andere Pegel einspeist.

von Christian B. (chris001)


Angehängte Dateien:

Lesenswert?

Hallo Leute!

Danke schon mal für eure Arbeit und Lösungsvorschläge.
Ich habe das Problem jetzt gelöst. Siehe angehangene Datei.
Dieser Code bringt mir ein Ergebnis mit dem ich arbeiten kann.

Wenn es noch was gibt was ihr anders machen würdet, weil weniger 
Quelltext, dann her damit.

Wenn mir jetzt noch jemand sagen kann warum die Bits in der Variable 
verdreht gespeichert werden?

Beispiel die Ziffer 5, muss ich auf dem LCD mit:
Stelle1.3, stelle.1.2, stelle1.1, stelle1.0 auf dem LCD ausgeben.
Also von hinten. S. auch Quelltext.


LG

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.