드디어 완성.. 2024.12 18~24 1차 - 미완 - : SPI 오류 27~31 2차 -완성- : GPIO 로 해결 앞으로 ..1.SPI 통신 으로 다시 해보기 2. GPIO_INPUT 으로 START pin 받아보기 IT.c : 타이머 > 계속 돌아감: 인터럽트 > interrupt 발생시 작동 NEXT1. 리눅스 커널2. 펌웨어 포팅 임베디드/고추건조기 2024.12.31
ADC ADC A : analog 온도,소리 와 같은 연속성 D : digital 0,1 비연속성 > ex) 사진 : 좌표로 나눠서 저장 ex) 온도계 측정기(쇳덩어리) : 온도가 오를때마다 저항값이 바뀜 or 기전력 // 스트레인게이지 : 체중계, 상하수도 변형 측정 > ADC > 몇 도 ( analog)일때 몇 V (digital) 를 나타냄 > 프로그래밍연산 > 온도계에 표시 ADC 의 변화과정 :필터링 > 샘플링(표본화) > 양자화 > 부호화 1. 필터링 > 노이즈 ( 갑자기 튀어오르는) 필터 2. x 축 : 시간 3 y 축 : 측정치 4. 01010101 > 3bit,, 10bit,, 12bit ADC 로 갈수록.. 임베디드/고추건조기 2024.12.24
완성 -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번과 동일 3. 온도센서 .. 처음부터 다시bool Ds18b2.. 임베디드/고추건조기 2024.12.18
TCB 구조 각각의 Task : 자기 고유의 TCB 가짐 TCB: Kernel이 Task들을 관리하기 위한 Meta Data* typedef struct { struct task_tcb_struct *next_ptr; struct task_tcb_struct *prev_ptr;} task_tcb_link_type ; typedef struct task_tcb_struct { char task_name[200]; void *sp; /* 스택 포인터 */ uint32 receive_siganl ; .. 임베디드/임베디드 레시피 2024.12.18
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.. 임베디드/고추건조기 2024.12.17
TCB - Task , CS Kernel Level의 Context Switching 현재의 Context잘 보전 > 다른 곳에 갔다 와서 하던 일 계속 진행 가능! ARM의 Context > 그림1 > 이 녀석만 잘 저장해두면됨 > 해당 Task의 Stack에 저장 Context Switching 할때 , 현재의 Context를 저장해 두는 방법 > Kernel이 어떻게 Task를 관리할까? System상의 Task : 자기 자신만의 Stack과 TCB (Task Control Block)가짐 TCB : 각 Task를 Control하기 위해 > Task의 정보를 저장해 놓는 Data Structure > Scheduling과 Context Switching을 위한 정보들.. 임베디드/임베디드 레시피 2024.12.17
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.. 임베디드/고추건조기 2024.12.17
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 .. 임베디드/고추건조기 2024.12.15
선점형 Multitasking 선점형 (Preemptive) Multitasking : 비선점형 (Non-preemptive) Multitasking : " 하나의 Task가 Scheduler로부터 CPU를 사용권을 할당 받았을 때, > Task가 자발적으로 CPU 사용권을 반납할 때까지 강제적으로 CPU의 제어권을 빼앗을 수 없는 방식 선점형 (Preemptive) Multitasking : Scheduler의 필요에 따라 Task로부터 CPU의 제어권을 강제적으로 빼앗음 > Task가 실행될 수 있도록 Task의 실행 순서를 결정하는 방식 Multitasking : 시분할 방식 : 동시에 뭔가를 동시 다발적으로 일을 하는 것 .. 임베디드/임베디드 레시피 2024.12.14
코드 분해 코드 분해 최대한 간단히 > 시간축소 + 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.. 임베디드/고추건조기 2024.12.14