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. | ||
− | == | + | ==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
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;