반응형
Notice
Recent Posts
Recent Comments
Link
Brise
아트메가 인공호흡용 아두이노 소스 본문
반응형
아트메가를 인공호흡하기 위해서는 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에 가까운 클럭을 얻을 수 있음을 알 수 있다.
반응형
'MCU' 카테고리의 다른 글
[STM32CubeMX] STM32F429-DISC0 LCD 출력하기 (0) | 2017.04.27 |
---|---|
[atmega128] RC servo 예제 (0) | 2017.04.22 |
[atmega128] adc 예제 (0) | 2017.04.22 |
STM32F429-DISCO TrueStudio 프로젝트 기본 템플릿 (0) | 2016.07.11 |
아두이노로 펠티어 항온 챔버(냉장고) 자작하기 (0) | 2016.07.09 |
아두이노에서 NOKIA 5110 LCD 사용하기 (0) | 2016.06.13 |
MCP 9700E 와 아두이노로 온도 읽기 (0) | 2016.06.09 |
Comments