pwm.h
#ifndef _PWM_H #define _PWM_H class Pwm{ public: void PWM16_init(); void PWM16_write(int percentage); }; #endif
pwm.cpp
#include <avr/io.h> #include "pwm.h" void Pwm::PWM16_init(){ DDRB |= _BV(PORTB1);//For PWM output TCCR1A = _BV(COM1A1)|_BV(WGM11); //Compare match A enable,Fast PWM (ICR1 as TOP) TCCR1B = _BV(WGM13)|_BV(WGM12)|_BV(CS10); //Fast PWM (ICR1 as TOP),Clock Source enable ICR1 = 65000; } void Pwm::PWM16_write(int percentage){ int value = 65000 * percentage/(float)100; OCR1A = value; }
main.cpp
#include "pwm.h" #include <util/delay.h> int main(void){ Pwm p; p.PWM16_init(); int i; while(1){ for(i=0;i<10;i++){ p.PWM16_write(i*10); _delay_ms(200); } for(i=10;i>0;i--){ p.PWM16_write(i*10); _delay_ms(200); } } return 0; }
Arduinoの同等コード
void setup(){ pinMode(8,OUTPUT); } void loop(){ for(int i=0;i<10;i++){ analogWrite(8,255/10*i); } for(int i=10;i>0;i--){ analogWrite(8,255/10*i); } }
Arduino同等コードのメモリ使用状況
AVR Memory Usage ---------------- Device: atmega328p Program: 1100 bytes (3.4% Full) (.text + .data + .bootloader) Data: 9 bytes (0.4% Full) (.data + .bss + .noinit)
cppのメモリ使用状況
AVR Memory Usage ---------------- Device: atmega328p Program: 1054 bytes (3.2% Full) (.text + .data + .bootloader) Data: 0 bytes (0.0% Full) (.data + .bss + .noinit)
プログラム領域は余り変わらない。本質的に同じことをやってるということだろう。
相変わらずArduino側ではSRAMの9バイトが消費されている。