![]() |
I2C LM75 sensor
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen,
Ich habe ein Problem mit der slave ACK. Hier möchte ich der Temperatur messen, dafür benutze ich eine Bibliothek von Asynchron Pro ( ![]() Das Problem ist, dass ich kein ACK von Slave schicken kann. Das ist mein Quellcode und Vielen Danke für eure Hilfe. LG muss normalaweise so sein (Anhängen foto): mein Delphi Code : unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs , i2cusb, Vcl.StdCtrls, Vcl.ComCtrls; const cTimeoutInMs = 1000; cTimeoutInit = 5000; SCL90 = 'A'; { SCL 90 kHz PCD8584 Clocktakt } SCL45 = 'B'; { SCL 45 kHz } SCL11 = 'C'; { SCL 11 kHz } SCL1_5 = 'D'; { SCL 1.5kHz } type //Ti2cUsb = class(TObject); TForm1 = class(TForm) Button1: TButton; StatusBar1: TStatusBar; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Déclarations privées } public end; var Form1: TForm1; ic, slave : Ti2cUsb; Temperatur1 : Byte; Temperatur2 : Byte; Wert : Double ; Byte1, Byte2 :Byte; a : Double; implementation {$R *.dfm} Function i2cLM75_in(Var Temperatur1 , Temperatur2 : Byte):double; //Liest einen Wert (2 Byte) vom LM75 Temperatursensor var Byte1, Byte2 :byte; Wert : double ; begin Byte1 := Temperatur1; //1. Byte Wert vom LM75 lesen Byte2 := Temperatur2; If (Byte1 And 128) = 0 Then Wert := Byte1 //Temperatur Vorkomma >= 0°C Else Wert := Byte1 - 255; //Temperatur Vorkomma < 0°C If ((Byte2 And 128) <> 0) Then Wert := Wert + 0.5; i2cLM75_in := Wert; End; procedure TForm1.Button1Click(Sender: TObject); begin ic := Ti2cUsb.Create; slave := Ti2cUsb.Create; //Check if the I2C is Initialized Repeat ic.Init(4,SCL90); Until ic.Is_Initialized = True; ic.relais_on ; Sleep(1000); ic.start_iic(False,146,'w'); // Start LM75 ic.wr_byte_iic(0); ic.stop_iic; ic.restart_iic (False, 147 , 'r'); ic.rd_byte_iic(Temperatur1,False); ic.rd_byte_iic(Temperatur2,True); ic.relais_off ; ic.stop_iic; a := i2cLM75_in(Temperatur1 , Temperatur2 ); ShowMessage(a.ToString); end; End. |
AW: I2C LM75 sensor
In der AsyncPro finde ich keine Datei für die i2c Kommunikation.
Was ist die Unit i2cusb ? Welches Interface nutzt du zum i2c bus? |
AW: I2C LM75 sensor
Ich bin nicht 100% sicher, denke aber AsyncPro unterstützt nur Rs232 Interfaces.
Vielleicht gibt es mittlerweile ja was Neues, denke aber nicht. Mit Rs232 könnte man evtl. etwas über die Steuerleitungen simulieren, Aber echtes I2C wird wohl schwierig. Es könnte sein das Du noch einen Rs232 zu I2C Konverter brauchst. |
AW: I2C LM75 sensor
Vielleicht hilt das weiter:
![]() Frohe Weihnachten und bleibt gesund. |
AW: I2C LM75 sensor
Guten Morgen, vielen Danke für eure Antwort. Ich benutze Delphi IDE für I2C.
1) Unit i2cusb ist die Bibliothek von Asynchron Pro aus Github. Das Problem, dass ich verpflichtet bin, diese Bib zu nutzen. Ich bin mir sicher, dass die verkabel richtig aufgebaut sind. Aber bekomme ich 255 als Antwort. Irgendwie mein i2c Master liest nicht aus der Slave LM75, sondern aus der Bus allgemein. Haupt Funktionen, die ich benutze sind : 1- function start_iic (MRX_ACK: boolean; dest: byte; mode: char): byte; Die Funktion erzeugt einen Startrahmen mit der Zieladresse dest. Der Wert mode (r oder w) gibt die Richtung der Übertragung an. Letztlich bestimmt der mode das niederstwertigste Bit der Adresse des anzusprechenden I2C-Bausteins. Der boolesche Parameter MRX_ACK gibt an, ob ein Acknowledge beim nächsten übertragenen Byte zu unterdrücken ist (false) oder nicht. 2- stop_iic function stop_iic: byte; erzeugt eine Stopp-Bedingung auf dem I2C-Bus. Rückgabewert siehe oben. 2.3.3 wr_byte_iic function wr_byte_iic(b: byte ): byte; schreibt – als Master-Transmitter – ein Byte auf den I2C-Bus. Rückgabewert siehe oben. 3- rd_byte_iic function rd_byte_iic (var B: BYTE; NOACK: Boolean):byte; liest ein Byte (als Master Receiver) vom I2C-Bus. (Bedingt durch den Aufbau des Geräts wird immer das Byte ausgegeben, was vor der aktuellen Übertragung auf dem Bus zu beobachten war. Dieser Wert wird in B übergeben. Der Parameter NOACK bewirkt – falls er auf true gesetzt wird – daß bei der nächsten Übertragung ein negatives Acknowledge generiert wird. Rückgabewert siehe oben. 4- restart_iic function restart_iic (MRX_ACK: boolean; dest: byte; mode: char ):byte; erzeugt eine Start-Bedingung innerhalb einer laufenden Kommunikation. Die Parameterbeschreibungen entsprechen denjenigen bei start_byte_iic. Rückgabewert siehe oben. 5- wr_byte_port procedure wr_byte_port (zuSchreiben: byte); schreibt ein Byte (zuSchreiben) auf den I/O-Ausgang des USB-ITS-Geräts. Man beachte die Beschaltung des Ports! Erzeugt werden TTL-Signale. 6- rd_byte_port procedure rd_byte_port (var gelesen: byte); liest ein Byte (gelesen) vom I/O-Port des USB-ITS-Geräts. Die erkannten Spannungsbereiche sind TTLkonform. 7- Init function Init (ComPortNr: byte): byte; overload; und function Init (ComPortNr: byte; Takt: char): byte; overload; dienen der Initialisierung des USB-ITS-Gerätes, verschiedener Timer und Konstanten. Eine dieser Funktionen ist zu Beginn der Arbeit mit dem System aufzurufen. Als Parameter erwartet Init die Nummer des COM-Ports, an dem das Gerät zu finden ist. Weiterhin ist optional die Angabe des Bustaktes möglich. Dafür sind die Werte SCL90, SCL45, SCL11 und SCL1_5 vorgesehen, die für 90 kHz, 45 Khz, 11 kHz und 1,5 kHz stehen. Voreingestellt ist ein Wert von 90 kHz als I 2C-Bustakt (falls der Parameter Takt fortgelassen wird). 8- Is_Initialized property Is_Initialized:boolean kann ausgelesen werden und zeigt – falls sie TRUE ist – an, daß die Initialisierung des Gerätes und damit des I2C-Busses erfolgreich abgeschlossen wurde. 9- Relais_On procedure relais_on läßt das Relais für die zusätzliche Busversorgung anziehen. Bei den angesprochenen Relais handelt es sich um umschaltende Relais, die beidseitig beschaltet sind. Möglicherweise kann auch die invertierte Bedienung den gewünschten Effekt erzeungen. 10- Relais_Off procedure relais_off läßt das Relais für die zusätzliche Busversorgung abfallen. Bei den angesprochenen Relais handelt es sich um umschaltende Relais, die beidseitig beschaltet sind. Möglicherweise kann auch die invertierte Bedienung den gewünschten Effekt erzeungen. Ich habe keine Lösung noch gefunden und ich versuche noch paar sachen. Wenn ihr Idee habt, bitte mir helfen. Vielen Danke für eure Hilfe |
AW: I2C LM75 sensor
Bist Du denn sicher dass bei deinem I2C 5V ankommen,
der RS232-Ausgang ist normalerweise 12V. Die Frage nach dem Hardware-Interface, von generic, ist noch offen. |
AW: I2C LM75 sensor
Liste der Anhänge anzeigen (Anzahl: 1)
Ja normalerweise
|
AW: I2C LM75 sensor
Die 5V scheinen zumindest für den Sensor zu passen.
Hast du mal ein komplettes Schaltbild mit entsprechend richtigen Bezeichnungen (wo welches IC mit welchen Pins etc.)? |
AW: I2C LM75 sensor
Zitat:
Danke |
AW: I2C LM75 sensor
Moin, der Link wird sich nicht bei Async finden:
Async .... It provides direct access to serial ports, TAPI, and the Microsoft Speech. Das könnte dieses USB-I²c-Interface sein: ![]() Hier könnte man mal schauen ![]() Das hat schon seinen Kniffel-Faktor :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz