Difference between revisions of "AVR Embedded Tutorial - Shiftregister/de"
From Free Pascal wiki
Jump to navigationJump to searchLine 15: | Line 15: | ||
==Port-Konstanten== | ==Port-Konstanten== | ||
− | + | Die verwendeten Pins des ATtiny2313 und der Shiftregister. Beim AVR kann man beliebige Pins nehmen. | |
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | !Name !! PinNr AVR !! Pinbezeichnung AVR !! PinNr 74HC165 !!Bezeichnung 74HC165 !! PinNr 74HC595 !! Bezeichnung 74HC595 | ||
+ | |- | ||
+ | |dataInPin || 0 || PB0 || 10 || DS || || | ||
+ | |- | ||
+ | |dataOutPin || 0 || PD0 || || || 14 || DS | ||
+ | |- | ||
+ | |latchPin || 1 || PD1 || 1 || PL || 12 || ST_CP | ||
+ | |- | ||
+ | |clockPin || 2 || PD2 || 2 || CP || 11 || SH_CP | ||
+ | |} | ||
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
const | const | ||
− | // PortB | + | // PortB |
dataInPin = 0; // PB0 | dataInPin = 0; // PB0 | ||
Revision as of 23:59, 6 November 2017
Schieberegister
Der Beispielcode ist für ein ATtiny2313. Zum Lesen habe einen 74HC165 genommen, zum Schrieben einen 74HC595. Achtung, die Leseroutine ist nicht kompatibel mit Arduinos shiftIn(... ! Die Arduino Lesefunktion ist für andere Schieberegister.
Will man MSB und LSB vertauschen, dann muss man dementsprechend einfach to mit downto austauschen.
Portzugriffe
Wie die Schieberegisterbefehle auf die Ports zugreifen, siehe hier: GPIO-Ausgabe.
Nicht vergessen die Ausgänge auch als Ausgang einzustellen (DDRx).
Port-Konstanten
Die verwendeten Pins des ATtiny2313 und der Shiftregister. Beim AVR kann man beliebige Pins nehmen.
Name | PinNr AVR | Pinbezeichnung AVR | PinNr 74HC165 | Bezeichnung 74HC165 | PinNr 74HC595 | Bezeichnung 74HC595 |
---|---|---|---|---|---|---|
dataInPin | 0 | PB0 | 10 | DS | ||
dataOutPin | 0 | PD0 | 14 | DS | ||
latchPin | 1 | PD1 | 1 | PL | 12 | ST_CP |
clockPin | 2 | PD2 | 2 | CP | 11 | SH_CP |
const
// PortB
dataInPin = 0; // PB0
// PortD
dataOutPin = 0; // PD0
latchPin = 1; // PD1
clockPin = 2; // PD2
Schieberegister schreiben 74HC595
procedure shiftOut595(val: Byte);
var
i: Byte;
begin
for i := 7 downto 0 do begin // MSBFIRST
if (val and (1 shl i)) <> 0 then begin
WritePortD(dataOutPin, True);
end else begin
WritePortD(dataOutPin, False);
end;
WritePortD(clockPin, True);
WritePortD(clockPin, False);
end;
end;
Schieberegister lesen 74HC165
function ShiftIn165: Byte;
var
i: Byte;
begin
Result := 0;
for i := 0 to 7 do begin // LSBFIRST
Result := (Result shl 1) or Byte(ReadPortB(dataInPin));
WritePortD(clockPin, True);
WritePortD(clockPin, False);
end;
end;
Schieberegister Arduino
Diese Version entspricht dem shiftIn von Arduino
function ShiftIn: Byte;
var
i: Byte;
begin
Result := 0;
for i := 0 to 7 do begin // LSBFIRST
WritePortD(clockPin, True);
Result := (Result shl 1) or byte(ReadPortB(dataInPin));
WritePortD(clockPin, False);
end;
end;