Hlavní stránka‎ > ‎

AD/DA PCF8591 (Delphi, I2C)

8-bit převodník PCF8591 obsahuje kromě ovládací sběrnice I2C  také 4x převodník A/D a 1x převodník D/A.
Ovládací program (Windows) můžete stáhnout zde.
 
 
Vývody převodníku jsou zapojeny následovně: adresovací vývody A0-2, zemnící vývod převodníku a vývod EXT jsou uzemněny na vývod VSS, referenční vývod převodníku VREF je připojen na napájecí napětí převodníku VDD.
A/D vstupy AIN 0-3 jsou jsou předřazeny odpory 500 ohm.  
                                                                                                                                        

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Náhled do výpisu programu:

unit Unit1;

interface

uses  I2CCOM2,PORTINC,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, Gauges, XPMan, OleServer, ExcelXP;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    ScrollBar1: TScrollBar;
    Gauge1: TGauge;
    Gauge2: TGauge;
    Gauge3: TGauge;
    Gauge4: TGauge;
    Label5: TLabel;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Label6: TLabel;
    Label7: TLabel;
    ScrollBar2: TScrollBar;
    Label8: TLabel;
    StatusBar1: TStatusBar;
    XPManifest1: TXPManifest;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    OpenDialog1: TOpenDialog;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure ScrollBar1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure ScrollBar2Change(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   Poczazn: Integer;
implementation

{$R *.dfm}
procedure DAaus (ridici_bajt: Byte);
begin
  Start;
  vystup (72 * 2);      { adresa 72, zápis }
  vystup (ridici_bajt);
  Stop;
end;

function vstupAD: Byte;
begin
  Start;
  vystup (72 * 2 + 1);  { adresa 72, čtení }
  RealTime(true);
  vstupAD := nacteni;
  RealTime(false);
  NoAcknowledge;
  Stop;
end;

procedure vystupDA ;
 begin
  Start;
  vystup (72 * 2);      { adresa 72, zápis }
  vystup (64);
end;

 function RoundNumber(Value: Extended; Precision: Word): Extended;
begin
  Result := StrToFloat(Format('%.*f',[Precision,Value]));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OpenDialog1.Execute;
  Poczazn := 100;
  I2C_Init;
  Timer1.Interval := 10;
  Timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

   if Memo1.Lines.Capacity = Poczazn then
   begin
   Button1.Enabled := true;
   Button2.Enabled := true;
   Button3.Enabled := true;
   Button4.Enabled := true;
   Button1.visible := true;
   Button2.visible := true;
   Button3.visible := true;
   Button4.visible := true;
  
   end;

   StatusBar1.Panels [1].Text := 'zaznamenáno: ' + FloatToStr(Memo1.Lines.Capacity)+' měření.' ;

   DAaus (4);      {adresa 72 AIN0 zápis}
   Label1.Caption := FloatTOStr(RoundNumber(vstupAD/255 * 10,(2)))+ ' V' ;
   if Button1.Enabled = false then Memo1.Lines.Add(FloatTOStr(RoundNumber(vstupAD/255 * 10,(2))));
   Gauge1.Progress := vstupAD ;

   DAaus (5);      {adresa 72 AIN0 zápis}
   Label2.Caption :=  FloatTOStr(RoundNumber(vstupAD/255 * 10,(2)))+ ' V' ;
    if Button2.Enabled = false then Memo1.Lines.Add(FloatTOStr(RoundNumber(vstupAD/255 * 10,(2))));
   Gauge2.Progress := vstupAD ;

   DAaus (6);      {adresa 72 AIN0 zápis}
   Label3.Caption := FloatTOStr(RoundNumber(vstupAD/255 * 10,(2)))+ ' V' ;
    if Button3.Enabled = false then Memo1.Lines.Add(FloatTOStr(RoundNumber(vstupAD/255 * 10,(2))));
   Gauge3.Progress := vstupAD ;

   DAaus (7);      {adresa 72 AIN0 zápis}
   Label4.Caption := FloatTOStr(RoundNumber(vstupAD/255 * 10,(2)))+ ' V' ;
    if Button4.Enabled = false then Memo1.Lines.Add(FloatTOStr(RoundNumber(vstupAD/255 * 10,(2))));
   Gauge4.Progress := vstupAD ;

end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
Timer1.Interval := ScrollBar1.Position;
Label5.Caption := FloatToStr(ScrollBar1.Position) +  ' ms = ' + FloatToStr(RoundNumber(1000000 /ScrollBar1.Position,(2))) +  ' Hz';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
Button1.Enabled := false;
Button2.visible := false;
Button3.visible := false;
Button4.visible := false;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Clear;
Button1.visible := false;
Button2.Enabled := false;
Button3.visible := false;
Button4.visible := false;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Clear;
Button1.visible := false;
Button2.visible := false;
Button3.Enabled := false;
Button4.visible := false;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Memo1.Clear;
Button1.visible := false;
Button2.visible := false;
Button3.visible := false;
Button4.Enabled := false;
end;

procedure TForm1.ScrollBar2Change(Sender: TObject);
begin
Label7.Caption := FloatToStr(ScrollBar2.Position);
Poczazn :=  ScrollBar2.Position;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
Memo1.Lines.SaveToFile(('C:\Documents and Settings\XX\Plocha\Měření_') + DateToStr(now)+ '.txt');
end;

procedure TForm1.Button6Click(Sender: TObject);
var i,coun:integer;
begin
I := ScrollBar2.Position - 1;

vystupDA;
for coun  := 1 to I do
begin
  StatusBar1.Panels[2].Text :=  FloatToStr(TRUNC( 255 *( StrToFloat( Memo1.Lines.Strings[coun]))/10));
vystup   (StrToInt(StatusBar1.Panels[2].Text)) ;

  end;
  stop;
end;

 


procedure TForm1.Button7Click(Sender: TObject);
begin
OpenDialog1.Execute;
end;

procedure TForm1.OpenDialog1CanClose(Sender: TObject;
  var CanClose: Boolean);
begin
Memo1.Lines.LoadFromFile ( OpenDialog1.FileName);
Application.Initialize;
end;

 

end.