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)
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.
Der Sensor wird hier sehr gut beschrieben: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
http://www.goblack.de/desy/digitalt/i2c/lm75.html
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)
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
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
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?
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.
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
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
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
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!
Lesezeichen