임베디드/고추건조기 27

완성 -1-

1. S/W            : 전원 > 저항 > s/w > gnd            // 전원 >  s/w 연결되면 > gnd : short 주의! > GPIO_EXTIO ( interrupt ) : 누를때마다 인터럽트 발생   PB0 : ON > 0, OFF > 1          > 누르면 전압 하강, 띄면 올라감       > 눌렀을때 발생하려면 > 하강엣지 ( 옵션 : falling edge )        눌렀다 띄었을때 발생하면 > 상승엣지        > NVIC : 우선순위 3 정도 >> 누를때마다 it.c 파일 내 코드가 실행됨    > ex) printf ("hello\r\n"); 2.  START S/W   // 1번과 동일

SSD1306 코드분석

uint8_t SSD1306_Init (void) { if (HAL_I2C_IsDeviceReady(&H_I2C, SSD1306_I2C_ADDR, 1, 20000) != HAL_OK) { >/* Send slave address */ hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress); deAddress > DR DR 쪽에 값을 넣어주면 그 후부터는 Hardware가 처리 I2C_HandleTypeDef hi2c2;{ I2C_TypeDef *Instance;}typedef struct{ __IO uint32_t CR1; __IO uint32_t CR2; __IO uint32_t OAR1; __IO uint32_t OAR2; __IO uint32_t DR; __IO..

I2C hello world :)

SM (standard mode ) : 비율 1대 1 FM (fast Mode )             a > 1 : 2            b > 1 : 1.7  SCL clock frequencySM : 0~ 100KHZFM : 0~ 400KHZ Tlow : FM : 1.3 us ~     > duty cycle LOW,HIGH 비율 1:2 ,1 : 1.7 // SM : 1대1 400kHZ = 2.5us 1초에 400kHZ , 1주기 ( LOW + HIGH) : 2.5us > 한쪽당 1.25us>>NXP I2C 메뉴얼에 .. LOW 를 최소 1.3us 유지해야함>HIGH : LOW1 : 2 > 0.8 + 1.7 = 2.51 : 1.7 > 0.9 + 1.6 = 2.5 strech mode ; 클럭 LO..

I2C 구조

I2C // IIC 클럭동기방식  onewire 는 시간으로 구분했음 주소를 불러서 각 SLAVE 구별 특징 1. 8bit 씩 주고받음 2. 7bit 주소공간 ( 128개) // ex) 0x78 > 0111 1000  > 111 1000만보냄 3. 400Khz 전송속도 4. sleep 모드 > 주소 인식으로 일어남 5. 동기방식 6. 선 두가닥 7. 기본 HIGH // 클럭 발생 주체는 master  기본구조 0. 클럭 HIGH> DA: HIGH 1. 클럭 HIGH > DA : LOW 2. 클럭 LOW > DA : HIGH 3. 다시 클럭 HIGH > 이때 DA 를 읽음 4. 쭉하다가 5. 클럭 HIGH > DA : LOW 계속유지 6. 클럭 HIGH 유지 , > DA: HIGH 7. 기본값 WRITE ..

코드 분해

코드 분해 최대한 간단히 > 시간축소 + write 함수가 있으면 그동안 방해받지 않도록 보호해주어야함 @Ds18b20_Init();@ uint8_t isTemperSensorInit(){ return m_init; } //  init이 잘됐는지 확인용 bool Ds18b20_Init_simple (){ m_init = 0; // 처음에는 0 OneWire_Init(&OneWire,_DS18B20_GPIO ,_DS18B20_PIN); //OneWireDevices = OneWire_First(&OneWire); OneWire.ROM_NO[0] = 0x00; OneWire.ROM_NO[1] = 0x00; OneWire.ROM_NO[2] = 0x00; OneWire.ROM_NO[3] = 0x00; OneWi..

문제원인

문제원인 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 >..

장치 통합

현재 세그먼트 과정 1 > 2 > 3 > 4 순서대로 킴 + void send_port(unsigned char X, unsigned char port) {     send(X);  // 첫 번째 데이터 전송     send(port);     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); } void digit4_temper(int n, int replay) {   int n1, n2, n3, n4;   n1 = (int)  n % 10;   n2 = (int) (n % 100)/10;   n3 = (..

난방실 만들기

HAL_GPIO_TogglePin(GPIOx, GPIO_Pin); 알아서 on/off 해줌 static 파일내 전역변수 원래 함수끝나면 그 안에서 소멸인데 static으로하면 계속 유지됨 //파일내에선 ex) static uint8_t m_state=0; void heaterControll(uint8_t onoff){ HAL_GPIO_WritePin(RELAY_ON_OFF_CTRL_GPIO_Port, RELAY_ON_OFF_CTRL_Pin, onoff); m_state=onoff; } uint8_t getHeaterState(){ return m_state;  // 함수 내에서는 m_state 에 대한 선언 없어도 사용가능 // 그값은 heeaterControll 에서 사용된 그 값이 유지됨 } 열거형 ..

릴레이 모듈

릴레이 모듈 (AC Relay) GPIO > HIGH or LOW > like S/W ON ~= TR ex) trigger : LOW > HIGH 였다가 LOW 로 바뀔때 동작 DC+ : 5V DC- : GND IN1 : LOW 받아와야함 > PB5 : HIGH > TR ON > IN1 : 0v > LOW    PB5 : LOW > TR OFF > IN1 : 5V >HIGH NO (6) 에 드라이기 연결 > NC , COM(기준) 평상시    NO , COM  > IN1 : HIGH > LOW 작동      TR : 판판한걸 기준으로 왼쪽1 ( emitter ) , 오른쪽3 (collector)  납땜 도체  도체 연결           // 인두기로 순식간에 녹이고, 금방 굳음 수동확인 > PB5 대신..

온도센서 검증

Ds18b20_ManualConvert(); > DS18B20_StartAll(&OneWire); OneWire_Reset(OneWire); // 리셋 OneWire_WriteByte(OneWire, ONEWIRE_CMD_SKIPROM); // 전체선택 OneWire_WriteByte(OneWire, DS18B20_CMD_CONVERTTEMP); // 온도 변환 시작 명령어 > OneWire_WriteByte(OneWire, ONEWIRE_CMD_SKIPROM); > // 0xCC : Skip ROM 모든 slave들에게 동시 전송 OneWire_WriteByte(OneWire, DS18B20_CMD_CONVERTTEMP);  >  // 0x44 : function 명령어 > convert T : 온도 ..