임베디드/고추건조기 28

온도센서 검증

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 : 온도 ..

Rom search

Rom search : 0xF0 주소를 어떻게 찾지? 1. 한 bit 를 읽음 2. 비트의 보수를 읽음 3. 0 or 1 Write > 시작 1.  리셋펄스 2. slave 응답 3. 써치 커맨드 , 0xF0 4. 비트를 읽음 찾아내기 ROM1 00110101---64 ROM2 10101010---64 ROM3 11110101 ROM4 00010001 1. slave : MSB 들을 동시에 보냄 0 1 1 0    master : 0 으로 인식  // 0 : 60~120 μs , 1: 1μs > 겹침 > 결국 60~120 인 0 으로 읽음 2. 보수를 보냄 > 1 0 01                  > 똑같이 0 으로 인식 3. 경우의수 00  : slave 들이 0, 1 섞여있음 // 장치가 여러개..

1-wire, 프로토콜

접근법 어디다 사용 할까? 굳이 왜 사용 할까? 1-wire 통신  > 딱 두선으로 전원공급 + 양방향 통신 가능 // POE 있으면 좋음    > 전원공급이 됨  nomal power mode / parasite power mode 1. 장거리는 힘듦 ( 노이즈에 약함 )  > 신호선이 하나  > GPIO  선이 길어질수록 전압 떨어짐 > 멀리까지 전달x 2. 주소 체계 방식  하나의 GPIO로 여러 칩을 연결함   > 어떤 칩이 보냈는지 알아내기 위해       > 주소 체계 방식 사용 3. 빠른 속도 불가 (time base)  클럭이 없음.. >time base (baud rate) 4. 간단해서 많이 사용 + 혼합 사용도 가능 프로토콜 1. 물리적인 통식 방식만을 규정한 프로토콜    SPI, ..

온도센서

부품) 3가닥 쇠부분 모듈 쇠 부분에 열 > 저항이 변함 > 전압이 변함 > 변한 수치로 계산해서 온도 측정 (ADC)  DATASEET DAT : DATA IN/OUT 을 pin 하나로 함 onewire.cpp // 예제코드 pde + cpp 코드분석 (pde) OneWire  ds(10); (cpp) OneWire::OneWire(uint8_t pin) { pinMode(pin, INPUT); // INPUT bitmask = PIN_TO_BITMASK(pin); baseReg = PIN_TO_BASEREG(pin); #if ONEWIRE_SEARCH reset_search(); #endif uint8_t OneWire::read() {     uint8_t bitMask;     uint8_t r ..

GPIO >SPI

stm32 cubeide  프로젝트 복사해도 복사한 파일의 값을 변경하면 원래 파일의 정보가 바뀜  > metadata 등의 관계에의해 + 백업 잘해두자,, 다 날려버림 해결책 1. second 로 실행시 ide에 first라고 뜨는데 그거 제거     ** 이때 contents on disk 체크 박스 꼭 해제 2. import projects 3. general > existing projects into workspace 4. second > browse 5. ioc 이름도 secoond 로 변경 // 속성에서 잘 확인 6. 디버그 속성에서도 second.elf로 변경 7. project > clean ------------------------------------------------------..

FND 분석

// SCLK   HAL_GPIO_WritePin(FND_SCLK_GPIO_Port, FND_SCLK_Pin, LOW); HAL_GPIO_WritePin(FND_SCLK_GPIO_Port, FND_SCLK_Pin, HIGH); // HIGH 로 끝나므로 시작도 HIGH // DO (DATA OUT)    if (X & 0x80)     {       HAL_GPIO_WritePin(FND_DIO_GPIO_Port, FND_DIO_Pin, HIGH);     }     else     {      HAL_GPIO_WritePin(FND_DIO_GPIO_Port, FND_DIO_Pin, LOW);     }     send(0xF8); HAL_Delay(1000); > 오실로스코프로 1111 1000 확인 ..

SPI통신

SPI데이터 주고받는 선 : 3가닥 ( 클럭, 데이터2 )  > 전압차이 이용 HIGH > LOW or LOW > HIGH 데이터 구분  1. Time base : bps (1초를 쪼개서) 2. CLK : 1주기에 대한 데이터의 값 구분 > SPI : CLK 전이중 > A의선 B의선 두개로 서로 말할 수 있음 반이중 > A와 B 가 하나의 선을 번갈아 사용 > SPI :default 전이중, + 둘다 사용 1:다수 통신  A  1) > B C D       2) > B C D  CLK > B C D >> 단점1)  A입장 >누구한테 말할지 알 수 없음        "    2) BCD입장 > 누가 말하는지 알 수 없음 (SPI 해결)  2) Master, Slave 전용으로 만듬 slave : maste..

FND 모듈제어

모듈 구성 : 메인칩 + 필요한 최소한의 회로   (쪽보드) 제어 단계 1. 칩, 부품 모델명 확인 : TM74HC595 , 7세그먼트  2. 데이터시트 구글링 1) TM74HC595 2) 모듈 자체의 데이터시트 QA , QB, QC ,,, 찾는법  1) 모듈 데이터시트 2) 쇼트테스트 3) 남이 정리한것 찾기 4) 샘플 코드를 구해서, 일단 동작시키고     > 그다음 추리     구글에 칩 sample code 검색.. @ STI 통신 CLK > DI( data )  클럭을 기준으로 데이터를 보냄 GPIO3개 outut > CLK, DATA Input , DATA output @ cpp 코드 > stm 으로 변환 해석 void TM74HC595Display::send(unsigned char X) {..

LED 회로

다이오드 : 긴쪽 + 짧은쪽 - 저항 220R GPIO > 1 ( 3.3v , HIGH ) ,0 ( LOW ) 으로 해서 가운데의 LED가 껏다 켜졌다 할 수 있음 HAL_GPIO_WritePin(GPIOx, GPIO_Pin, PinState); GPIOx : GPIO group   > MX_GPIO_Init();       >  HAL_GPIO_WritePin(PB6_LED1_GPIO_Port, PB6_LED1_Pin, GPIO_PIN_SET); 1,3번 연결2,4번 연결 > s/w : on > 1234 다연결// 테스터기로 1,3 과 2,4를 찾을 수 있음  1. s/w off : PB0_TEMP-SET-UP 으로 전류가 흐름 > HIGH2. s/w on : GND > 다 흐름 , PB0_TEMP-S..

UART로 printf() 구현

리눅스에서 표준출력 바꾸는 방법 있음 printf > 파일에 기록되게 할 수 있다. UART : 장치 관리자 > 포트 > usb serial port(com3) 3.3v 로 스위치 바꾸어 줘야함 모듈                  보드 DTR RX (수신부) - 보드에서는 TX   (PA9), 60번 TX(송신부) - 보드에서는 RX (PA10) ,55번 VCC CTS GND //신호의 기준선 XShell5 세션만들기 > 프로토콜 :serial > serial 설정 : com3 STM32 char senddata[20]= "hello world\r\n"; // 엔터 하려면 \r\n FTDI 모듈 > 컴퓨터 (드라이버)  >Port3 > xshell > hello world   오실로스코프  start 1..