Brise

아트메가 인공호흡용 아두이노 소스 본문

MCU

아트메가 인공호흡용 아두이노 소스

naudhizb 2017. 4. 15. 09:24
반응형

아트메가를 인공호흡하기 위해서는 1mhz의 클럭이 필요하다


확실하게는 1mhz의 오실레이터를 구하거나, PWM을 이용하여 분주를 잘 맞춰야 겠지만,


칩에 익숙하지 않아 편의상 GPIO를 이용하여 1mhz를 만들어 보았다. 


아두이노의 제공 API인 digitalWrite를 쓰면 속도가 나오지 않아(1M번 스위칭을 수행하는데 12초..)


avr의 레지스터를 직접 만져 만들었다. 



아두이노 Pro Micro의 회로도는 다음과 같다. 




D3핀이 PD0에 물려 있으므로 PORTD 레지스터를 바꾸어 코드를 짠다. 


코드는 다음과 같다. 



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
unsigned long int i = 1000000;
unsigned int t1;
unsigned int t2;
 
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(3, OUTPUT);
  Serial.begin(9600);
  Serial.println("measurement start");
}
 
// the loop function runs over and over again forever
void loop() {
  //t1 = millis();
  
  //for(i = 1000000/3;i>0;i--)
  {
    PORTD = 0x00;
    asm ( "nop \n");
    PORTD = 0x01;
    asm ( "nop \n");
    PORTD = 0x00;
    asm ( "nop \n");
    PORTD = 0x01;
    asm ( "nop \n");
    PORTD = 0x00;
    asm ( "nop \n");
    PORTD = 0x01;
    asm ( "nop \n");
  }
 
  //t2 = millis();
  //Serial.println("1M toggle time :" + String(t2-t1));
  
}
cs



1M번 토글을 수행하는데 걸리는 시간은


1M toggle time :969

1M toggle time :969

1M toggle time :969

1M toggle time :970

1M toggle time :970

1M toggle time :970

1M toggle time :969

1M toggle time :969

1M toggle time :969

1M toggle time :969

1M toggle time :970

1M toggle time :970

1M toggle time :970



약 970ms로 1Mhz에 가까운 클럭을 얻을 수 있음을 알  수 있다. 


반응형
Comments