- 3D-Druck Einstieg und Tipps         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: Beispielprogramm: Mit RN-Control und LM75 Temperatur messen

  1. #1
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1

    Beispielprogramm: Mit RN-Control und LM75 Temperatur messen

    Anzeige

    Praxistest und DIY Projekte
    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.


    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.

    Code:
    '###################################################
    ' 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

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    35
    Beiträge
    2.624
    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)

  3. #3
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    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

  4. #4
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    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

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    35
    Beiträge
    2.624
    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?

  6. #6
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    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.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.07.2004
    Ort
    Mammendorf
    Alter
    67
    Beiträge
    1.062
    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?
    MfG

    Hellmut

  8. #8
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    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

  9. #9
    Neuer Benutzer
    Registriert seit
    26.11.2004
    Alter
    38
    Beiträge
    3
    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 der zweite auch obwohl ich mir mit der pinbelegung sicher war

  10. #10
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    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!

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad