AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

I2C LM75 sensor

Ein Thema von yacdrak · begonnen am 22. Dez 2020 · letzter Beitrag vom 10. Apr 2021
 
yacdrak

Registriert seit: 22. Dez 2020
7 Beiträge
 
#1

I2C LM75 sensor

  Alt 22. Dez 2020, 14:51
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 (https://github.com/TurboPack/AsyncPro).
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.
Angehängte Grafiken
Dateityp: jpg Capture111.JPG (74,8 KB, 21x aufgerufen)
Dateityp: jpg Capture11122.JPG (128,7 KB, 18x aufgerufen)
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz