PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit LM75 und AT90S2313



Grillmeister Markus
12.03.2005, 12:53
Hallo
Ich habe ein Problem mit einem LM75 an einem AT90S2313.
Den folgenden Code hab ich hier im Forum gefunden (von Frank glaub ich) und hab ihn auf den AT90S2313 umgeschrieben. Der µC soll die Temperatur auslesen und dann auf dem LCD anzeigen.



$regfile = "2313def.dat"
$crystal = 3686400
config LCD = 16 * 1

Declare Sub Showtemperatur()

Const Lm75slavewrite = &H90
Const Lm75slaveread = &H91
Dim Lm75high As Byte
Dim Lm75low As Byte
Dim Temperatur As Integer
Dim Nachkommastelle As String * 2


I2cinit
Start:
Showtemperatur
Wait 2
Goto Start


Sub Showtemperatur()
I2cstart
I2cwbyte Lm75slaveread
I2crbyte Lm75high , Ack
I2crbyte Lm75low , Nack
I2cstop

If Lm75high > 127 Then
Temperatur = Lm75high And 127
Temperatur = Not Temperatur
Incr Temperatur
Else
Temperatur = Lm75high
End If

Lm75low = Lm75low And 128
If Lm75low > 0 Then
Nachkommastelle = ",5"
Else
Nachkommastelle = ""
End If

Locate 1 , 1
Lcd Temperatur ; Nachkommastelle
End Sub


Aber alles was ich auf dem LCD sehe ist ein undefinierbares zeichen (sieht aus wie so nen chinesisches schriftzeichen =P~ ).
Ich hab den LM75 so angeschlossen:

+Ub = +5V
A0 = leer
A1 = leer
A2 = leer
I2CData = SDA port
I2CTakt = SCL port
OS = leer
GND = GND

Ich hoffe ihr könnt mir helfen
Vielen Dank, Markus

sebastian.heyn
12.03.2005, 20:26
funktionieren denn "normale" ausgaben wie lcd "hallo welt"??

Gerhard
12.03.2005, 21:17
Hallo markus,

Du solltest Dir mal das Datenblatt, insbesondere Seite 9 - 12 anschauen.
Mir fällt z.B. auf das Du den chip nicht initialisiert hast, auch das pointerbyte
wurde nicht gesendet.
Im Datenblatt ist es eigentlich recht gut erklärt. Ich habe zwar mit dem LM75 keine eigenen Erfahrung, scheint mir aber ähnlich wie der DS1631 zu sein. Den habe ich in Gebrauch.

Um mögliche Fehler im Bereich LCD auszuschließen, teste doch erst mit Ausgabe auf dem Monitor.

BTW: hast Du SDA und SCL mit Pullup's,versehen.


mfg gerhard

13.03.2005, 08:25
Hallo
also erstmal danke für eure antworten.
Die einfache Textausgabe auf dem LCD funktioniert einwandfrei.
Pullups habe ich keine verwendet (sry, aber was ist das und wie mach ich das???).
Also ich werd mir dann mal das Datenblatt saugen und gucken was da drin steht.
mfg Markus

Gerhard
13.03.2005, 08:41
... du mußt SCL und SDA mit pullup-Widerständen auf +5 V legen.
Ohne die geht I2C garnicht.
Zum Verständnis des I2C-Bus ist dieser Link recht hilfreich.
http://www.semiconductors.philips.com/acrobat_download/literature/9398/39340011.pdf

mfg Gerhard

Grillmeister Markus
13.03.2005, 09:28
Also jetzt hab ich SCL und SDA mit 1,7K auf +5V gelegt. Allerdings bekomme ich nun konstant 23,5 grad angezeigt (auch wenn ichd das teil in die hand nehme und somit erwärme). Ist da irgendwas in der routine falsch die das LCD beschreibt oder aus dem LM75 ausliest?
mfg Markus

PicNick
13.03.2005, 09:33
Zwischenfrage vom Nichtwissenden zum dazulernen: Wenn du schreibst:
"LCD Temperatur, Nachkomma"
wobei temp.. ein Integer und Nachk.. ein String ist
kann der "LCD" das ?

Grillmeister Markus
13.03.2005, 10:24
Jetzt funktioniert alles so wie gewollt.
Danke für eure Hilfe.
mfg Markus

13.03.2005, 10:36
Jetzt funktioniert alles so wie gewollt.
Danke für eure Hilfe.
mfg MarkusHallo Markus, könntest du mal das kommentierte Programm posten, dann können wir auch noch was lernen.
Bernd

Grillmeister Markus
13.03.2005, 11:04
Das Programm steht oben. Wie gesagt: ich hab den code auch nur von frank.
mfg Markus

alin+
17.09.2005, 16:22
hallo,
'working with atmega8 and lm75
Declare Sub Showtemperatur()
Config Serialout = Buffered , Size = 60
Const Lm75slavewrite = &H90
Const Lm75slaveread = &H91
Dim Lm75high As Byte
Dim Lm75low As Byte
Dim Temperatur As Integer
Dim Nachkommastelle As String * 2
'don't forget to define scl and sda pins !! :)
Config Sda = Portc.1
Config Scl = Portc.0

I2cinit
Start:
Call Showtemperatur 'this line was missing from Grillmeister Markus program
Print Temperatur ; Nachkommastelle
Wait 2
Goto Start


Sub Showtemperatur()
I2cstart
I2cwbyte Lm75slaveread
I2crbyte Lm75high , Ack
I2crbyte Lm75low , Nack
I2cstop

If Lm75high > 127 Then
Temperatur = Lm75high And 127
Temperatur = Not Temperatur
Incr Temperatur
Else
Temperatur = Lm75high
End If

Lm75low = Lm75low And 128
If Lm75low > 0 Then
Nachkommastelle = ",5"
Else
Nachkommastelle = ""
End If


'Print Temperatur ; Nachkommastelle
End Sub