[흥프로] 라즈베리파이 실습 예제 7- 세그먼트 사용하기



라즈베리파이 실습 예제 
7 - 세그먼트 사용하기




안녕하세요~!!

구독자 여러뷴~

디바이스마트 엔지니어 흥프로 입니다~~!!~!

오늘의 포스팅은 !!!

라즈베리파이 실습 예제 3탄

7- 세그먼트 사용하기 입니다.!!

저는 Raspberry Pi 3 B+에 Raspbian 이고 python을 사용합니다. 참고하세요!


7 - 세그먼트를 74HC595(시프트 레지스터)를 
용해서 제어 해볼 겁니다.

74HC595란!?
자세한 내용은 데이터시트나 관련 자료 찾아보시길 바랄께요.

저는 딱 사용할 때 꼭 알아야 하는 점만 알려드릴께요!

74HC595는 8 bit shifter로 입력되는 신호를
내부의 플립플롭을 이용하여
병렬신호변환해주는 IC입니다.

 

3개의 신호선 8개의 출력을 동작 시킬 수 있습니다.

즉!

사용되는 GPIO 포트를 줄일 수 있다는 겁니다.


Q0~Q7은 출력입니다.
7-세그먼트랑 연결이 됩니다.

DS - Serial Data Input
ST_CP - Storage Register Clock Pin
SH_CP - Shift Register Clock Pin

이 3개가 라즈베리파이 GPIO로 연결됩니다.



SHCP 가 LOW 상태 일때

STCP 가 HIGH로 만드는 동시에
DS를 통해서 데이터를 입력합니다.

SHCP 가 HIGH 가 되면
데이터를 병렬로 Q0~Q7으로 출력합니다.

STCP 가 LOW / SHCP가 LOW 면 출력을 멈춥니다.

소스코드 일부 인데요
한번 보시죠.
GPIO.output(SHCP,0)          #SHCP(LATCH) LOW로 변경
time.sleep(0.001)
GPIO.output(STCP,1)          # STCP(CLOCK) 클럭 핀 HIGH
GPIO.output(Ds,x)            # DS(DATA) 데이터 비트 넣기
time.sleep(0.001)
GPIO.output(SHCP,1)         # SHCP(LATCH) ON -> DATA 병렬로 출력 
time.sleep(0.001)            
GPIO.output(STCP,0)          #STCP(CLOCK) 클럭 LOW 
time.sleep(0.001)
GPIO.output(SHCP,0)          # SHCP(LATCH) OFF -> 출력 안함

정확한 원리는 꼭 데이터 시트틀 확인해주세요~

7-Segment

아래는 세븐 세그먼트 핀맵입니다.

VCC 공통인 Anode 입니다.
Anode 타입은 데이터 '0'이 들어와야 켜집니다.
GND 공통인 Cathode 타입은 반대로 '1'이 들어와야 켜집니다.






라즈베리파이 배선도입니다.
복잡하죠...? 눈아프실까봐 표도 준비 해놨어요~~ㅎㅎ




라즈베리파이
74HC595
7 – 세그먼트
Q1 - 1
b
Q2 - 2
c
Q3 – 3
d
Q4 – 4
e
Q5 – 5
f
Q6 - 6
g
Q7 - 7
GND
GND – 8
Q7’ – 9
5V
MR - 10
GPIO 6
SHCP - 11
GPIO 5
STCP - 12
GND
OE – 13
GPIO 4
DS – 14
Q0 - 15
a
5V
VCC - 16
VCC


연결 하셨으면!!
코딩해봅시당~~
$nano 7seg.py 를 만들어주세요.
import RPi.GPIO as GPIO
import time 
GPIO.setwarnings(False)         
Ds = 4   #GPIO 4pin - 74ch595 14pin
STCP = 5 #GPIO 5pin - 74ch595 12pin
SHCP = 6 #GPIO 6pin - 74ch595 11pin      
GPIO.setmode (GPIO.BCM)      
GPIO.setup(Ds,GPIO.OUT)         #GPIO 출력설정
GPIO.setup(STCP,GPIO.OUT)
GPIO.setup(SHCP,GPIO.OUT)
# VCC 공통인 anode 세븐 세그먼트는 1이 되면 꺼짐.
# GND 공통인 cathode 세븐 세그먼트는 0이 되면 꺼짐.
# 본 예제는 에노드 타입 입니다.
list =[
    [1,0,0,0,0,0,0,0],   #0
    [1,1,1,1,0,0,1,1],   #1
    [0,1,0,0,1,0,0,1],   #2 
    [0,1,1,0,0,0,0,0],   #3
    [0,0,1,1,0,0,1,1],   #4
    [0,0,1,0,0,1,0,0],   #5
    [0,0,0,0,0,1,0,0],   #6
    [1,0,1,1,0,0,0,0],   #7
    [0,0,0,0,0,0,0,0],   #8
    [0,0,1,0,0,0,0,0],   #9
]
while 1:                               # 무한 반복
    for y in range(10):
        for x in list[y]:
            GPIO.output(SHCP,0)          #SHCP(LATCH) LOW로 변경
            time.sleep(0.001)
            GPIO.output(Ds,x)             # DS(DATA) 데이터 비트 넣기
            GPIO.output(STCP,1)           # STCP(CLOCK) 클럭 핀 HIGH
            time.sleep(0.001)
            GPIO.output(SHCP,1)           # SHCP(LATCH) ON -> 
            time.sleep(0.001)             #DATA 병렬로 출력
            GPIO.output(STCP,0)          # STCP(CLOCK) 클럭 LOW
            time.sleep(0.001)
            GPIO.output(SHCP,0)          # SHCP(LATCH) OFF -> 출력 안함
            print(x)
        time.sleep(1.5)


다 만드셨다면!!!
$python 7seg.py
해보세요~
0~9까지 반복적으로 노출됩니다.
오늘은 여기까지~

다음 포스팅도 많은 기대 부탁 드려요~~

라즈베리파이와 같이 쓰기 좋은 키트 소개 해드릴께요.!
기초적인 학습은 가능합니다.~


라즈베리파이3 B+ 기본키트
http://www.devicemart.co.kr/goods/view?no=1385485


라즈베리파이 베이직 키트
http://www.devicemart.co.kr/goods/view?no=1264628

감사합니다!!~ 안뇽!!!

댓글 쓰기

0 댓글