PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nachkommastelle Bascom



anfänger99
19.02.2011, 11:29
Hallo,

kenne mich noch nicht sehr gut mit der Programmierung von Mikrocontrollern aus und habe zunächst erstmal recht einfach mit einem Thermometer angefangen. Arbeite mit dem Sensor Lm75. Hat auch alles gut geklappt, nur leider schaffe ich es nicht, die Nachkommastelle anzeigen zu lassen.
Habe mir das Datenblatt angeschaut und leider nur verstanden, dass man Ack und Nack verwenden muss.
Vielleicht kann mir hier jemand helfen?!

Mein bisheriges Programm lautet:
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 ,
Db7 = Portb.0 , E = Portb.4 , Rs = Portb.6 Config Lcdbus = 4
Initlcd
Cls
Config Scl = Portb.5
Config Sda = Portb.7

Dim Temp As Byte
'****************** Initialisierung ***********************

Ddrb = &B11111111 'Port B als
Ausgangsport
Ddrd = &B01110000 'D4, D5, D6
als Ausgang; Rest als Eingang
Portd = &B10001111 'Eingänge
auf high legen




'******************** Hauptprogramm ***********************
Do
I2cstart
I2cwbyte 145
I2crbyte Temp , Ack
I2crbyte Temp, Nack
I2cstop
Locate 1 , 1
Lcd Temp
Lcd "C"
Locate 1 , 0
Wait 1
Loop
End

Sky30
20.02.2011, 10:38
Habe mir das Datenblatt angeschaut und leider nur verstanden, dass man Ack und Nack verwenden muss.
Vielleicht kann mir hier jemand helfen?!


Hallo Anfänger!

Ich bin hier zwar auch neu im Forum.... besitze aber schon einige Erfahrungen mit AVR und I2C.
Allerdings habe ich den LM75 selber noch nicht verwendet.... nur den DS1624 bzw. DS1631.


Das mit ACK und NACK hast du aus dem Datenblatt falsch heraus gelesen.
Du musst dies nicht selber senden!

Du benötigst zwar zwei Byte-Variablen zum Einlesen der Temperaturdaten, aber diese würde ich nicht "Ack" und "Nack" nennen!

Nenn die Variablen doch zum Beispiel "Lm_byte_1" und "Lm_byte_2".
Du kannst auch ein Array verwenden: Lm_byte(2)


Noch ein Tipp:
Schau dir in der BasCom-Hilfe mal die Anweisung "I2creceive" an.


Ich bin mir nun aber nicht sicher, ob der LM75 überhaupt eine Kommastellenberechnung auf 0,1°C zulässt... bzw. ob die übermittelten Daten dafür ausreichen.
Ansonsten würde es bei den 0,5°C bleiben (D7 hat eine "1").

Grüße,
Sky30

anfänger99
20.02.2011, 11:35
aber ack bedeutet doch, dass noch ein byte ausgelesen wird und nack, dass danach keins mehr ausgelesen werden soll, oder?
Und das braucht man dann doch für die Programmierung, oder habe ich das falsch verstanden?[/quote]

Vitis
20.02.2011, 16:44
LM75 kann 0,1°C-Schritte. Wie akkurat die sind ist aber auch wieder was Anderes

Sky30
20.02.2011, 20:43
aber ack bedeutet doch, dass noch ein byte ausgelesen wird und nack, dass danach keins mehr ausgelesen werden soll, oder?
Und das braucht man dann doch für die Programmierung, oder habe ich das falsch verstanden?

Hallo!

Nun ja, du hast es schon richtig verstanden.
Allerdings musst du dies hier nicht extra senden.
Schließlich erwartet der LM75 einen definierten Datenstrom und sendet auch nur diesen..... eben zwei Bytes zurück.

Such hier doch mal im Forum nach DS1721, oder klick einfach HIER DRAUF (https://www.roboternetz.de/phpBB2/viewtopic.php?t=38313) ;)
Da gibt es auch einen Beispielcode.


@ Vitis: Bist du sicher, das der LM75 auch die Kommastellen mitsendet........ und nicht nur die 0,5Grad Auflösung?
Beim DS1624 bzw. DS1631 werden dafür extra zwei Bytes benötigt.
Einmal der Wert vor dem Komma und einmal der Wert hinter dem Komma in 1/32 Schritten.


Grüße,
Sky

Vitis
21.02.2011, 12:52
Es gibt /M75 Typen die das machen, ja.
Hab davon einige verbaut ;)

Sky30
21.02.2011, 21:56
Es gibt /M75 Typen die das machen, ja.
Hab davon einige verbaut ;)


Hallo Vitis!

Das ist gut zu wissen. :)

Bedeutet das aber nun, dass es unterschiedliche Typen vom LM75 gibt?
Generell fällt wohl fast jedem die Typenbezeichnung LM75 ein, wenn er an I2C und Temperatur denkt.
Ich bin vor einiger Zeit aber per Zufall an die DS1624 und DS1631 geraten und habe daher den LM75 bis Heute noch nicht eingesetzt.

Auch das Datenblatt zum LM75 finde ich gegenüber dem DS1624 ziemlich spärlich.
Bei den Bytes zur Temperatur steht lediglich,
dass D6 bis D0 einen "undefinierten" Zustand besitzen........
D7 das 0,5Grad-Bit ist......
und D15 bis D8 den Temperaturwert enthält.

Scheinbar habe ich das Datenblatt vom "falschen" LM75 gelesen. ;)

Grüße,
Sky

Vitis
22.02.2011, 14:23
ja, hab ich auch nicht gewusst, hab die Dinger aber mal geliefert bekommen.
Die heißen dann LM75B

http://www.nxp.com/documents/data_sheet/LM75B.pdf

0,125°C Auflösung haben die dann :)

meine Anwendung:
http://www.weingut-hoerner.de/Bilder/chart/chart_x2.php?dayoffset=2

Die LM75A haben nur 0,5°C