임베디드/고추건조기

문제원인

twoweeks-within 2024. 12. 14. 01:00

문제원인

7세그먼트 

1. 동시에 같은숫자 O
2.      "   다른숫자 X
 > 1 , 2, 3 ,4 를 각각 빠르게 껏다켰다
    > 눈에는 다르게 켜진컷 처럼 보임
 그러느라 while 문은 하나여서 다른 일을 못함

> timer
  : 숫자표현
> main  
   : printf("hello\r\n");
>> 세그먼트 + UART 동시실행

근데..

7세그먼트 표현    |     온도 가져옴

: GPIO 신호 만듬  |    : GPIO 신호 만듬

> 온도 쪽에서 GPIO 쓰다가 세그먼트에서 갑자기 그걸 뻇어감
 > 온도에서 끝나면 세그먼트로 넘어가게 해주어야함

문제해결

1. 하드웨어적으로 > 불가..
  > 

모듈 구조
: 7세그먼트 + 쉬프트 레지스터

 

 

a) 7세그먼트
  : 3.3v > DIG 1, 2,3,4 가 동시에 켜지는 구조

ex) A > A A A A .. 서로 다르게 못킴 ex) A B C D : X

 

 

b) 쉬프트 레지트터

 : MCU 가아닌 순수 회로

 : 목적) 직렬 > 병렬로 바꾸는 역할

 

14번 in + 11번(SCLK) > + 12번 ( LCLK) > 13번 ( ON/ OFF) > Qa,Qb,Qc,,

11100011                           > >                      >>                    >  11100011  

( 직렬입력 )    > SR 로 병렬입력   > LR로 병렬입력 > 병렬 출력 

// 1, 1, 1, 0, 0, 1, 1                                                        // 11100011

 

중간에 LR (LATCH CLOCK) 이 있는이유

  SR 중에 출력하면 SCLK에 의해 데이터 출력이 불안정함 > 값이 바뀔수 있음

// 일부 bit 는 이전값, 일부bit는 새로운값

  > LR 로 한번 옮겨서 고정 ! > 출력   

// 데이터를 받아온뒤 LR을 on 해서 8bit 받고 off 로 차단 !  > 고정할 수 있음

>> SR 로도 가능하나.. 그러면 NEW DATA 를 받아올수 없게 됨 

    : SR 은 데이터를 계속 받아오고 (데이터 연속성)

    : LR 은 8bit 씩 짤라서 저장  ( 데이터 안정성)

     > 출력 : 11100011

 

 

void send_port(unsigned char X, unsigned char port) {
    send(X);  // 첫 번째 데이터 전송 // 8bit
    send(port); // 4bit
    HAL_GPIO_WritePin(FND_RCLK_GPIO_Port, FND_RCLK_Pin, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(FND_RCLK_GPIO_Port, FND_RCLK_Pin, GPIO_PIN_SET);
}

레지스터 (IC칩 ) 2개
a b c d e f g 표시용 1개
DIG 1,2,3,4 표시용 1개 // 세그먼트 1,2,3,4번
이 둘은 
SERIAL DATA OUTPUT 으로 연결되어있음

> 첫번째 칩의  SERIAL DATA OUTPUT 이 두 번째 칩의 SERIAL DATA  INPUT 과 연결

8bit 를 받고 ( X에대한)
4bit를 받으면 (Port)
SRh 에있던게 OUTPUT 으로 빠짐 > 다음 칩의 SRa 로 들어감


ex) send(0x80) // 8bit
0x80 : 1000 0000
// 11 , 7, 4, 2, 1, 10, 5, 3에 연결

1) 1 이므로 DATA : HIGH // DATA 1로 셋팅
2) SCLK : LOW > HIGH // 클럭을 LOW > HIGH
 >> SRa : 1

2) 0 DATA : 0, (1) 의 DATA > Q를 거쳐 SRb 로 이동
   > SRa : 0
"
"
>> 0000 0001 로 나옴 // 오실로스코프로 확인

a) LCLK > SR 에있는게 다 LR 로 이동 > 출력 
   : 0000 0001
 > 7세그먼트

ex) send(ob0001) // 4bit
// DIG 1, 2, 3, 4 에 연결


알수없는 이유로 프로그램이 맛갈수도 있음 

 >> 백업의 일상화

 

 

'임베디드 > 고추건조기' 카테고리의 다른 글

I2C 구조  (0) 2024.12.15
코드 분해  (0) 2024.12.14
장치 통합  (0) 2024.12.12
난방실 만들기  (0) 2024.12.11
릴레이 모듈  (0) 2024.12.10