Difference between revisions of "AVR Embedded Tutorial - Shiftregister/de"

From Lazarus wiki
Jump to navigationJump to search
(Created page with "{{Translate}} {{Warning| In Arbeit}} =Schieberegister= Der Beispielcode ist für ein ATtiny2313. ==Schieberegister schreiben== <syntaxhighlight lang="pascal"> const // P...")
 
Line 6: Line 6:
 
=Schieberegister=
 
=Schieberegister=
 
Der Beispielcode ist für ein ATtiny2313.
 
Der Beispielcode ist für ein ATtiny2313.
==Schieberegister schreiben==
+
==Portzugriffe==
 +
Wie die Schieberegisterbefehle auf die Ports zugreifen, siehe hier: [[AVR Embedded Tutorial - Simple GPIO on and off output/de|GPIO-Ausgabe]]
 +
Nicht vergessen die Ausgänge auch als Ausgang einzustellen (DDRx).
 +
 
 +
==Port-Konstanten==
 +
Ich habe folgende Pins des ATtiny2313 genommen. Man kann aber beliebige Pins dafür nehmen.
 +
 
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
 
const
 
const
 
   // PortB
 
   // PortB
   dataInPin = 0;
+
   dataInPin = 0; // PB0
  
 
   // PortD
 
   // PortD
   dataOutPin = 0;
+
   dataOutPin = 0; // PD0
   latchPin = 1;
+
   latchPin = 1;   // PD1
   clockPin = 2;
+
   clockPin = 2;   // PD2
 
</syntaxhighlight>
 
</syntaxhighlight>
 
  
 
==Schieberegister schreiben==
 
==Schieberegister schreiben==

Revision as of 19:28, 6 November 2017

Template:Translate

Warning-icon.png

Warnung: In Arbeit


Schieberegister

Der Beispielcode ist für ein ATtiny2313.

Portzugriffe

Wie die Schieberegisterbefehle auf die Ports zugreifen, siehe hier: GPIO-Ausgabe Nicht vergessen die Ausgänge auch als Ausgang einzustellen (DDRx).

Port-Konstanten

Ich habe folgende Pins des ATtiny2313 genommen. Man kann aber beliebige Pins dafür nehmen.

const
  // PortB
  dataInPin = 0;  // PB0

  // PortD
  dataOutPin = 0; // PD0
  latchPin = 1;   // PD1
  clockPin = 2;   // PD2

Schieberegister schreiben

  function ShiftIn74HC165: byte;
  var
    Data: byte = 0;
    i: byte;
  begin
    mysleep(20);
    for i := 0 to 7 do begin
      Data := (Data shl 1) or Byte(ReadPortB(dataInPin));
      WritePortD(clockPin, True);
      mysleep(20);
      WritePortD(clockPin, False);
      mysleep(20);
    end;
    Result := Data;
  end;

Schieberegister lesen

  function ShiftIn74HC165: byte;
  var
    Data: byte = 0;
    i: byte;
  begin
    mysleep(20);
    for i := 0 to 7 do begin
      Data := (Data shl 1) or Byte(ReadPortB(dataInPin));
      WritePortD(clockPin, True);
      mysleep(20);
      WritePortD(clockPin, False);
      mysleep(20);
    end;
    Result := Data;
  end;