반응형
기능 구현 및 현재 진행 상황
1. buzzer ok
2. serial ok
3. timer ok
*참고
\n \t \b \r \0 등등
\t : 탭키
\b : 백스페이스바
\r : 처음으로 커서를 옮김
* 출력 타입
%d : 10진수 정수형
%f : 실수형
%e : 지수형
%o : 8진수
%x : 16진수
%u : 부호없는 10진수
%g : 실수형 자동출력
%p : 포인터의 주소
%c : 하나의 문자
%s : 문자열
4. I2C
usart 규격정리
- BME280 온습도 센서
- MAX44009 조도 센서
- BMI160 자이로 센서
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | #include <avr/io.h> #define F_CPU 8000000UL #define SCL_freq 200000 //TWBR = 16, TWPS = 0 // SCL_freq = F_CPU / (16+2*TWBR*4^TWPS) #include <util/delay.h> #include <avr/interrupt.h> #include <stdio.h> #define I2C_SCL PD0 #define I2C_SDA PD1 unsigned int TimerCount =0,sec = 0,min =0; char buff[100]; void init_Buzzer(); void init_Serial(); void init_I2C(); void init_Timer(); void test_buzzer(); void test_Serial(int mode); unsigned char USART0_TX(); void USART0_RX(unsigned char data); void USART0_RX_str(unsigned char *str); int main(void) { init_Buzzer(); init_I2C(); init_Serial(115200); init_timer(); sprintf(buff,"Hello\r\n"); USART0_RX_str(buff); //test_buzzer(); sei(); while (1) { } } void init_Buzzer(){ DDRB |= 0x10; // PB4 PORTB &= ~(0x10); } void init_Serial(long bautrate){ UBRR0H = 0; switch(bautrate){ case 115200: UBRR0L = 3; break; case 57600: UBRR0L = 8; break; } UCSR0A = 0x00; UCSR0B = 0x18; UCSR0C = 0x06; } void test_serial(int mode){ switch(mode){ case 0: USART0_RX('A'); break; case 1: if(USART0_TX() == 'h'){ USART0_RX('B'); } break; } } void init_I2C(){ DDRD |= (1 << I2C_SCL); DDRD |= (1 << I2C_SDA); TWBR = 16; } void test_buzzer(){ PORTB = 0x10; _delay_ms(10); PORTB = ~0x10; _delay_ms(10); } unsigned char USART0_TX(){ while(!(UCSR0A & (1<<RXC0))); return UDR0; } void USART0_RX(unsigned char data){ while(!(UCSR0A & 0x20)); UDR0 = data; } void USART0_RX_str(unsigned char *str){ while(*str != '\0'){ USART0_RX(*str); str++; } } void init_timer(){ TCCR0 = 0x04; TIMSK = 0x01; TCNT0 = 256-125; /* 1/8000000 = 0.000000125 64분주 0.000008 0.000008 *125 = 0.001 TCNT0 = 256-125; */ } ISR(TIMER0_OVF_vect){ TCNT0=256-(256-125); TimerCount++; if(TimerCount>=1000){ TimerCount=0; sec++; /* test_timer sprintf(buff, "min : %u, sec : %u \r\n", min,sec); USART0_RX_str(buff); */ if(sec>=60){ min++; sec=0; if(min>=60) min=0; } } } | cs |
반응형
'Project > Sensor Board' 카테고리의 다른 글
[Sensor Board] 개선해야 할 점 (0) | 2018.12.10 |
---|---|
Project - Sensor Board (0) | 2018.10.01 |