반응형

기능 구현 및 현재 진행 상황


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

+ Recent posts