LEKCJA 14: Rejestry zmianowe - Dziennik przemieszczenia 74HC595 i 7-segmentowy wyświetlacz

Wprowadzenie

W pewnym momencie dotrze lub już osiągnąłeś etap, w którym nie masz wystarczającej liczby wyjść w Arduino.

Kiedy podłączamy wyświetlacz bezpośrednio do Arduino, zajmujemy do ośmiu pinów cyfrowych. Oznacza to, że jeden Arduino (wyposażony w 14 cyfrowych wejść / wyjść) może kontrolować tylko jeden wyświetlacz.

Rozwiązanie tego problemu jest bardzo proste, wystarczy użyć rejestru przewijania 74HC595.

Rejestr przemieszczeń pozwala nam zwiększyć liczbę pinów, których możemy użyć w naszych Arduino (lub innym mikrokontrolerze).

Dzięki temu małeemu układowi scalonemu mamy możliwość sterowania ośmioma wyjściami za pomocą tylko trzech Arduinocyfrowych.

Komponenty

"Produkt:2000" "Produkt:256" "Produkt:1436" "Produkt:536" "Produkt:603" "Produkt:1220" "Produkt:154"

Zasada eksperymentu

Schemat 7 segmentów wyświetlacza LED. Obraz pokazuje wyświetlanie 7 wspólnych segmentów katody:

Ten typ wyświetlacza jest "sterowany" z logicznym "1" lub napięciem dodatnim.

Poniższa tabela przedstawia od 0 do 9 (dziesięć cyfr) i których zgodność z każdym segmentem, jak widać podczas rysowania liczby na lewym obrazie, jest następująca:

Jeśli używasz wspólnego wyświetlacza aad, tabela musi być zastąpiona każdym logicznym "1" musi być zastąpiony przez zero (0) i co zero (0) z "1".

Rekord przewijania 74HC595 ma 8-bitowy rekord pamięci masowej i 8-bitowy rekord przewijania. Dane są zapisywane w dzienniku przewijania szeregowego, a następnie podłączone do dziennika magazynu. Dziennik magazynu obsługuje następnie 8 linii wyjściowych.

Schemat kołka log 74HC595 jest następujący:

Jak działa dziennik przemieszczenia 74HC595

Zasada działania dziennika przewijania jest bardzo prosta: należy wysłać jeden bajt danych (8 bitów) do dziennika, w zależności od tego, który dziennik włączy lub wyłączy każdy z jego ośmiu pinów wyjściowych.

Dziennik ma wpis serii DS, który jest używany do wprowadzania danych na każdej flance wysyłania, czyli gdy sygnał zegara (SH_CP) wzrasta z 0 do 1.

Gdy na sygnale zatrzaśnięcia (ST_CP) występuje flanka przekazywania, zastępuje ona stan równoległych wyjść dziennika przewijania w dzienniku pamięci.

Stan zapisany w dzienniku pamięci pojawia się w wyjściach systemowych, gdy sygnał pinu OE jest niski.

Bity, które tworzą wysłany bajt danych są mapowane na piny wyjściowe w kolejności od Q7 do Q0. Oznacza to, że lewy bit danych reprezentuje stan pinu Q0 rekordu przewijania, a bit skrajnie prawicowy reprezentuje stan pinu wyjściowego Q7.

Przyglądając się uważnie poniższemu obrazowi, możesz to zrozumieć znacznie lepiej. Za każdym razem, gdy zegar oznacza impuls przekazywania, zapisywana jest wartość pinu danych (DS). Są one rejestrowane do momentu przeskoczenia pinu zatrzasku, w którym momencie dla każdego wyjścia (Q0 do Q7) impuls zakończy się skorelowane z sekwencją przechwyconych pinów danych. Pierwszy 1 będzie 1 do wyjścia Q0, drugi 1 do Q1, w sekwencji 3, "0" będzie wyjście przez Q2, i tak dalej.

Procedura

Krok 1: Podłączyć obwód, jak pokazano na poniższym diagramie:

Krok 2:Podłącz 74HC595

Po pierwsze, okablowanie jest podłączone do zasilacza i uziemienia:

• Vcc (pin 16) i MR (pin 10) podłączone do 5V

• GND (pin 8) i OE (pin 13) uziemione

Podłączenie DS, ST_CP i SH_CP pin:

• DS (pin 14) podłączony do pinu 11 Arduino (rysunek poniżej niebieskiej linii)

• ST_CP (pin 12, sworzeń zamykający) podłączony do Arduino pin 8 (rysa zielonej linii poniżej)

• SH_CP (pin 11, sworzeń zegara) podłączony do Arduino pin 12 (rysunek poniżej żółtej linii)

Krok 3: Podłącz wyświetlacz 7-segmentowy

• Siedmiosegmentowy 3-pinowy, 8-pinowy wyświetlacz GND (w tym przykładzie użyto wspólnej katody, w przypadku wspólnej aodo - od 3, 8 pinów do + 5V)

• Zgodnie z tabelą 74HC595 łączymy Q0-Q7 z odpowiednim pinem 7-segmentowego wyświetlacza (A - G i DP) i rezystancją 220 omów szeregowo.

Schemat obwodu

Krok 4:Program (patrz przykładowy kod na płycie CD lub oficjalnej stronie internetowej)

/ Lab13 Korzystanie z wyświetlacza 74hc595 i siedmiosegmentowego w celu wzajemnego

definiuje wzory cyfr LED, od 0 do 9

1 x dioda LED wł., 0 x dioda LED wyłączona, w tej kolejności:

74HC595 pin Q0, Q1, Q2, Q3, Q4, Q5, Q6,Q7

Mapowanie na a,b,c,d,e,f,g z siedmiosegmentową diodą LED

bajt seven_seg_digits[10] ? B11111100, // s 0

B01100000, // s 1

B11011010, // s 2

B11110010, // s 3

B01100110, // s 4

B10110110, // s 5

B10111110, // s 6

B11100000, // s 7

B11111110, // s 8

B11100110 // s 9

};

podłączyć do ST_CP 74HC595 (pin 12, zatrzask)

int zatrzaskPin s 8;

podłączyć do SH_CP 74HC595 (pin 11, sworzeń zegara)

int clockPin s 12;

podłączenie do ds 74HC595 (pin 14)

int dataPin s 11;

void setup()

Ustawianie zatrzaskuPin, clockPin, dataPin jako wyjście

pinMode(zatrzaskPin, WYJŚCIE);

pinMode(clockPin, WYJŚCIE);

pinMode(dataPin, WYJŚCIE);

}

wyświetlanie numeru na wyświetlaczu segmentu cyfrowego

void sevenSegWrite(cyfra bajtowa)

ustawić zatrzaskpin na niski potencjał, przed wysłaniem danych

digitalWrite(zatrzaskPin, LOW);

oryginalne dane (wzorzec bitowy)

shiftOut(dataPin, clockPin, LSBFIRST, seven_seg_digits[digit]);

ustawić zatrzaskpin na wysoki potencjał, po wysłaniu danych

digitalWrite(zatrzaskPin, HIGH);

}

pętla void()

liczyć od 9 do 0

dla (cyfra bajtowa s 10; cyfra > 0; --cyfra)

opóźnienia(1000);

sevenSegWrite(cyfra - 1);

}

zawiesza się 4 sekundy

opóźnienia(4000);

}

Krok 5:Zbuduj program

Krok 6: Nagrywanie programu na pokładzie One