Barometer mit A/D

#3163822
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...
Angehängte Dateien:
Persönliche Seite #3163849
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.
#3163852
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.
#3163963
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?
#3164062
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
#3164546
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.
#3164594
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
#3164724
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.
#3164818
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren