본문 바로가기

PIC16_STUDY

(11)
PIC16F723 내부 풀업저항 설정 PIC16F723 내부 풀업저항 설정 PIC16F723/PIC16F724 EVM 보드에서는 P_A7(PB7)이 저항을 통해 스위치로 연결되어 있다. MCU에서 풀업이 필요하다. PIC16F723에는 GPIOB에 내부 풀업저항이 있고 WPUB(WEAK PULL-UP PORTB REGISTER) 레지스터를 통해 설정 가능하다.1일경우 플업이 된다. 여기서 주의 사항은 OPTION_REG 에서 RBPU비트를 0으로 설정해 주어야 풀업이 가능하다. 실제 코드에서는 아래와 같이 정의해 주면 된다.//-----------------------------------------------------------------------------//Switch Driver #define SW1_BIT BIT7 #define..
[mTouch] PIC16F274 Capacitive Touch 테스트 [mTouch] PIC16F274 Capacitive Touch 테스트 MICROCHIP사는 Capacitive Touch Sensing 솔루션으로 mTouch 를 제공하고 있다. PIC16F723은 하드웨어 적으로 8채널의 capacitive sensing module 을 제공하고 PIC16F724는 16채널을 제공한다. CPS0~CPS15 핀을 이용하면 부가적인 하드웨어 필요 없이 터치 센싱이 가능하다. CAPACITIVE SENSING MODULE 초기화 코드 void CapInit(void) { // Initialize for Timer0 time base OPTION = 0b11000010; // Timer0 init ( Prescaler:TMR0, 1:8 ) T0IF = 0; // enable..
[PIC16F150x EVM]TIMER 인터럽트 테스트 [PIC16F150x EVM]TIMER 인터럽트 테스트 PIC16F1509 에는 3개의 타이머/카운터가 있다. 타이머 입력소스는 시스템클럭의 1/4 또는 T0CKI핀 으로 입력 받을 수 있다. PIC16F1509 타이머 초기화 함수 void InitTimer0(void) { // TMR0 Associate Registers Initial TMR0CS = 0; // Timer0 CLK Source설정 -> FOSC/4 PSA = 0; //Prescaler 사용여부 설정(사용) PS0 = 0; // Prescaler 1:4 PS1 = 1; // Prescaler 1:16 PS1 = 0; // Prescaler 1:256 TMR0 = INTERVAL_1mS; // Initial TMR0 //타이머 인터럽트 레..
[PIC16F1509] FVR 테스트 - 레퍼런스 입력 없이 정밀한 전압 측정하기 [PIC16F1509] FVR 테스트 - 레퍼런스 입력 없이 정밀한 전압 측정하기 PIC16F1509를 사용하다 한가지 문제점이 발생했다. ADC채널이 부족해서 Vref핀을 사용할 수 없는 상황인데 정확한 레퍼런스 측정이 필요한 상황이다. 데이터시트를 찾아보니 FVR이 있다. 이를 이용하면 가능하지 않을까... PIC16F1508 에는 FVR(FIXED VOLTAGE REFERENCE) 이 있어 레퍼런스 전압을 측정할 수 있다. FVR은 3가지 고정 전압으로 설정 가능하다. 4.096V 2.048V 1.024V 이 출력 전압은 ADC, CMP 등의 레퍼런스로 사용할 수 있다. FVR출력을 ADC 로 설정하면 31번 채널에서 ADC값으로 읽을 수 있다. //VFR 초기화 코드 ADFVR0 = 1; ADFV..
[PIC16F150x EVM] PIC16F1509 ADC, PWM 테스트 [PIC16F150x EVM] PIC16F1509 ADC, PWM 테스트 PIC16F1509는 4개의 10비트 PWM출력이 있다. 20Mhz에서 최대 208khz, 6.5bit 해상도로 출력 가능하다. PIC16F1509 PWM초기화 코드 void Pwm1Init(void) { Cbi(TRISC, BIT5);Cbi(ANSELC, BIT5); PWM1CON = 0x00; T2CON = 0b00000111; PR2 = 255; PWM1DCH = PWM1DCL = 0x00; T2CON = 0b00000100; PWM1DCH = 0b00100000; PWM1EN = 1; PWM1OE = 1; PWM1OUT = 0 PWM1POL = 0; } void PWM1_SET(unsigned int Duty){PWM1DCH..
[PIC16F150x EVM] PIC1509 초기화 및 클럭 설정 [PIC16F150x EVM] PIC1509 초기화 및 클럭 설정 PIC16F15xx 시리즈는 Enhanced Mid-range Core 로 저렴하면서 강력한 페리를 가진 MCU로 이전 PIC16시리즈와 클럭 시스템과 약간 다른 점이 있어 설정이 필요하다. 내부 클럭을 사용하면 31Khz에서 16Mhz로 설정 가능하고 기존 코드 호환을 위해 SystemInit()함수에 설정하였다. void SystemInit(void) { //grobal interrupt disable disable(); //Internal Oscillator Frequency Select bits /* 1111 = 16MHz 1110 = 8MHz 1101 = 4MHz 1100 = 2MHz 1011 = 1MHz 1010 = 500 kH..
[PIC16F73] SPI 테스트 [PIC16F73] SPI 테스트 - FOSC/4 (or TCY) - FOSC/16 (or 4 • TCY) - FOSC/64 (or 16 • TCY) - (Timer2 output)/2 data rate of 5 Mbps(at FOSC = 20 MHz). PIC16F723 SPI 블록도 PIC16F723 SPI 레지스터 PIC16F723 SPI초기화 함수 void SPI0_Init(void) { //RC3 pin => SCK output //RC4 pin => SDI input //RC5 pin => SDO output SSPBUF = 0x00; //SSPBUF Clear ADCON1 = 0x06; Cbi(TRISC, (BIT3|BIT5)); Sbi(TRISC, (BIT4)); SSPSTAT = 0; S..
[PIC16F723] Timer0 인터럽트 테스트 [PIC16F723] Timer0 인터럽트 테스트 PIC16F723 타이머 구조 OPTION레지스터를 이용하여 Timer0관련 클럭 설정을 할 수 있다. PIC16F723 타이머 초기화 void InitTimer0(void) { // TMR0 Associate Registers Initial PS0 = 1 // Prescaler 1:4 TMR0 = INTERVAL_1mS; // Initial TMR0 // Interrupt Associate Registers Initial T0IF = 0; //Clear TMR0 Interrupt Flag T0IE = 1; //Enable TMR0 Interrupt GIE = 1; //Enable Global Interrupt } PIC16F723 타이머 인터럽트 핸들러..