PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Beispielprogramm: Mit RN-Control und LM75 Temperatur messen



Frank
23.08.2004, 21:08
Hier ein kleines Beispielprogramm wie einfach man mit dem Sensor IC lm75 und einer rn-control die Temperatur messen und anzeigen kann. Vielleicht braucht jemand mal sowas.


http://www.goblack.de/desy/digitalt/i2c/lm75.gif

Der Sensor lm75 belegt dabei keinerlei Port da er einfach über 2 Drähte am I2C-Bus angeschlossen wird. Ansonsten benötigt das IC nur noch +5V und GND, sonst nix.

Dieses kleine Programm liest die Temperatur aus und zeigt diese über die RS232 Schnittstelle an.

Das Programm ist für rn-control mit 16 Mhz und Mega 16 konfiguriert, kann jedoch auch durch andere Include-Datei für Mega 32 compiliert werden.
Die Unterroutine verwendet eine Integer-Variable Temperatur um auch das Vorzeichen bei negativen Temperaturen einfach mit Print ausgeben zu können. Man könnte natürlich auch eine Gleitkommazahl verwenden.



'################################################# ##
' rncontrol_lm75.BAS
'für
'RoboterNetz Board RN-CONTROL ab Version 1.1
'Das neue preiswerte Controllerboard zum experimentieren
'
'Aufgabe:
' Temperatur messen mit IC LM75 über den I2C Bus
' Das Beispiel zeigt wie einfach es ist in Basic
' mit rn-control die Temperatur zu messen
' Benötigt wird nur das IC LM75
' Das IC wird am I2C-Bus angeschlossen und belegt keinen Port

'Autor: Frank
'Weitere Beispiele und Beschreibung der Hardware
'unter http://www.Roboternetz.de oder robotikhardware.de
'Eigene Programmbeispiele sind im Roboternetz gerne willkommen!
'################################################# #############


Declare Sub Showtemperatur()


$regfile = "m16def.dat"


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

$crystal = 16000000 'Quarzfrequenz
$baud = 9600

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

Print "Die Temperatur beträgt: " ; Temperatur ; Nachkommastelle ; " Grad"
End Sub

Der Sensor wird hier sehr gut beschrieben:
http://www.goblack.de/desy/digitalt/i2c/lm75.html

Florian
23.08.2004, 21:18
Hi Frank!
Dieses Programm ist ja in Basic geschrieben, gibt es das auch in ASM?
Mich würde vor allem das mit dem I2C interessieren! *ggg* *zwinker*

Wäre cool, wenn jemand das eventeull umschreiben könnte! :o)

Danke! :o)

Frank
23.08.2004, 21:27
Aber du bist doch der ASM - Experte ;-)
Dürfte leicht umzuschreiben sein, das geht sicherlich auch mit Kjions I2C-Routinen. Wer Lust hat kann es ja hier noch als ASM oder C Beispiel posten. So ein paar praktische Sensor-Routinen sind immer ganz hilfreich wenn man auf die schnelle mal was braucht.

Gruß Frank

Frank
23.08.2004, 22:37
Habe gerade mal ein Kabeltest gemacht.
Also mit 5m Telefonkabel klappt die I2C Übertragung noch problemlos. Mit 25m klappt sie allerdings nicht mehr. Also irgendwo dazwischen muss die Grenze liegen.

Gruß frank

Florian
24.08.2004, 13:52
Hi Frank!
Ich werde es demnächst mal versuchen!
Aber ich kann nicht versprechen, dass das dann vernünftig wird! *lol*
Aber Hauptsache, es funktioniert! *ggg*

Zwischen 5m und 25m liegen immernoch 20m!
Das ist eine riesige Strecke! ;o)
Kann man das nicht irgendwie berechnen?
Naja, bei meinem Bot brauche ich eh keine 5m Leitungen! ;o)

Ich habe gehört, dass es den LM75 nur in SMD-Ausführung gibt, stimmt das?

Frank
24.08.2004, 16:59
Hi Florian,
mach das mal. Übrigens ist es empfehlenswert den Hardware I2C-Bus zu verwenden. Da gibt im Buch von Roand Walter als auch von Kühnel ein paar Routinen und Infos zu.

Das mit dem Kabel war nur ein Test. An sich sind ja so lange Leitungen nicht für I2C gedacht. Ich wollte das Kabel nicht zerstückeln, daher kann ich nicht sagen ob es z.B. mit 10m noch geht.

Ja der LM75 gibt es nur in SMD. Aber notfalls kann man ihn dennoch auf einer normalen Experimentierplatine verwenden. Man muss dann halt das Teil in der Luft ein paar mm über der Platine mit Drähten verdrahten. Sieht nicht schön aus, aber geht recht gut. Hat auch den Vorteil das genug Luft dran kommt, was ja bei Temperatursensor nicht schlecht ist.

Hellmut
25.08.2004, 13:28
Hallo Florian
ich möchte bei meiner Programmierung Assembler und nicht Basic verwenden. Wäre es nicht sinnvoll das man hier im Forum eine Bibliothek an Assembler Subroutinen und Funktionen aufbaut? Wenn ich mir das Basic-Testprogramm ansehe das Frank mit der RN-Control ausliefert, so habe ich den Eindruck ein sinnvoller Einstieg in die Assembler-Megaxx Programmierung könnte es sein die Einzelnen Basic Kommandos, wo sinnvoll, in Assembler Routinen umzuwandeln. In dem Zusammenhang wollte ich fragen ob es nicht einen "Disassembler" für die AVR´s gibt?
Da es hier doch einige Assembler-Programmierer gibt, könnten diese nicht ihre "Routinen" für die Allgemeinheit verfügbar machen?

Frank
25.08.2004, 13:46
Hi Helmut,

aber warum willst du denn gleiche Assemblerroutinen benutzen, dann wäre doch Bascom Compiler sinnvoller. Er verwendet ja schließlich für jeden Befehl Assemblerroutinen im Controller. Zudem kannst du Assembler direkt im Basic Quelltext verwendet, wenn du was optimieren willst.

Aber nichts desto trotz fände ich einige Beispiele in Assembler auch nicht schlecht.

Gruß Frank

flocky
30.11.2004, 08:16
hallo !

ich habe einen AD7146 mit RNB-FRA welcher soweit ich weiß baugleich mit dem LM75 ist. gehe ich richtig in der annahme, dass ich neben Vdd und GND nur SDA und SCL anschließen muss? ich bekomme nämlich keine daten von dem sensor, das programm zeigt mir immer -127.5°C an. hat jemand eine idee?
allerdings muss ich zugeben, dass der sensor kurz geraucht hat :D der zweite auch ](*,) obwohl ich mir mit der pinbelegung sicher war

Frank
30.11.2004, 22:47
AD7146 kenn ich leider garnicht. Abe rwenn es raucht, dann glaub ich kaum das er pinkompatibel ist. Eigentlich kann man da sonst kaum was falsch machen. Man muss wirklich nur SDA,SCL, GND und +5V anschließen. A0 bis A2 legen natürlich die SLAVE ID fest. Eventuell ist dies bei deinem Baustein anders, dazu bräuchtest du genaues Datenblatt, ansonsten nimm lieber den LM75!

flocky
30.11.2004, 22:58
naja den LM75 hab ich eh bestellt, farnell hat aber den AD7416 geschickt :-s
die pinbelegung is genau gleich... hier das datenblatt: http://vela.pb.bialystok.pl/~kaie/kaie-md/UP/AD7416.pdf
naja mal schaun ob da noch was rauskommt, ich melde mich wieder.

flocky
07.12.2004, 16:36
ok da bin ich wieder und sitz wieder vor dem ding.
kannst du mir oder kann mir jemand vielleicht das programm etwas erläutern?
z.B. I2cwbyte Lm75slaveread
I2crbyte Lm75high , Ack
I2crbyte Lm75low , Nack

was passiert hier? es wird ein byte geschrieben, und zwar Lm75slaveread. jetz frag ich mich: wie kommt man auf den wert von Lm75slaveread? im datenblatt hab ich nix dazu gefunden.
warum muss man überhaupt schreiben? lt. datenblatt sollte das pointer-register von anfang an auf 00 stehn, das heißt dass ich die temp auslesen kann. und wenn das pointer-register auf 00 wäre, würde dann I2crbyte automatisch das temp-register auslesen?
irgendwie steh ich hier ziemlich an 8-[

danke im vorraus !

Frank
07.12.2004, 17:12
Lm75slaveread ist die Slave Adresse des Bausteines wenn A0 bis A2 auf Masse liegt. Das steht in dem Dtaenblatt, ist nur etwas schwerer dort Verständlich da die Bits der Adresse beschrieben werden.
In oberer Anweisung werden nur 2 Bytes gelesen, mehr nicht.
Die Bedeutung der Bytes steht im Datenblatt, ist ein wenig verzwickt zu beschreiben. Aus dem beispiel kannst du aber die Verarbeitung entnehmen

Toby
08.03.2006, 14:46
Hallo,
suche seit zwei Tagen verzweifelt den LM75 Sensor.
Wo bekomm ich den her?
Gibt es nur die möglichkeit über farnell mit 20€ Zoll & Porto aus den USA??

patti16
08.03.2006, 15:14
warum nimmt keiner den Ds1621 Temperatur sensor geht auch über I2C und den gibt auch als Dil-Form hat auch nur 8 Pins wie der oben auch und kostet 5€


gruß
patrick

Toby
08.03.2006, 20:11
warum nimmt keiner den Ds1621 Temperatur sensor geht auch über I2C und den gibt auch als Dil-Form hat auch nur 8 Pins wie der oben auch und kostet 5€


gruß
patrick
Vll weil alle sonst LM75 haben und es von denen dann mehr Support gibt?? Also weiß niemand eine alternative Bezugsquelle?
OK patti, ist der Ds1621 identisch? kann ich die schöne Anleitung auch für den nutzen oder wie nutz du ihn?

patti16
08.03.2006, 20:34
also so wie das bis jetzt gerade beim drüber gucken sehe ist der von den anschlüssen identisch und hat auch I2c.

ist jetzt die frage welche Temperatruen der aushalten muss.

ein code liegt unter download bei bascom

tauruz
14.03.2006, 22:17
Hallo,
suche seit zwei Tagen verzweifelt den LM75 Sensor.
Wo bekomm ich den her?


www.reichelt.de
nr. lm 75 smd
2,10€

kaktus
27.01.2007, 19:30
Kann der Ausgang OS direkt einen Mosfet IRLZ 34 N treiben?

oder brauch ich da noch ein Transistor zum Verstärken?

Möchte einen Lüfter mit ansteuern.

Wo sind die Experten?

Hellmut
27.01.2007, 20:47
Hallo, bin kein Experte, jedoch...

Welchen Strom brauchst du maximal? Dann sehe im Datenblatt vom Controller nach, bei den elektrischen Merkmalen, wieviel der von dir gewählte Ausgang treiben kann.

theschaaf
11.04.2007, 16:11
hallo
ich muss ein projekt für die scule machen, die schaltung die hier ist
http://www.franksteinberg.de/lm75.htm
aufbauen, die funktion beschreiben und die daten auslesen und in eine textdatei speichern.
das ganz sollte nach möglichkeit in c++ oder c funktionieren, dann würde ich die daten in ein array schreiben und irgendwie ausgeben.
leider finde ich nur programme in assembler, etc. da kann ich nichts mit anfangen, und selber ein programm in c++ bzw. c schreiben krieg ich absolut nicht hin.
kann mir da vll jemand helfen?
grüße, theschaaf