2014-05-25から1日間の記事一覧

itoaで32766を超えると負の数になる→utoaを使う

PWMの実験で、OCR1Aの値が知りたかった。 itoaはint(avrだと16bit)なので32766=(65535/2)までしかいかず、その上は負の数になる。 unsigned intを使いたいときはのutoaを使う。これで65535までいけた。 http://www.avrfreaks.net/index.php?name=PNphpBB2&fi…

16bitタイマーのICR1の初期値を調べる

ICR1は最大値を示す変数。 http://usicolog.nomaki.jp/engineering/avr/avrPWM.html デフォルトはどうなってるのかなと気になったので。 #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #define FOSC 16000000UL #define BAUD 9600 #define MYUBRR ((FOSC/(16UL*BAUD))-1) u</stdlib.h></util/delay.h></avr/io.h>…

ArduinoでUSARTを使う

Cの文字列リテラルがchar型配列の最後にヌルターミネータ'\0'を挿入してくれてるおかげで putStringの実装が楽だった。(配列ループの終了条件にarray[i]を入れられるので) #include <avr/io.h> #include <util/delay.h> #define FOSC 16000000UL #define BAUD 9600 #define MYUBRR </util/delay.h></avr/io.h>…

ULを付ける理由

Arduino UNOでUSARTのテスト。 以下のコードで、FOSCを16000000、16ULを16にしてたら動かなかった。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1130998931基本的だけど、AVRのunsigned intは16bit、2バイトなので65535までしか表現できな…

ArduinoでMakefileを使う

http://tosainu.wktk.so/view/310環境変数を.zshrcに追加 export ARDUINO_DIR=/Applications/Arduino1.0.5.app/Contents/Resources/Java export ARDMK_DIR=~/Documents/arduino-mk export BOARDS_TXT=/Applications/Arduino1.0.5.app/Contents/Resources/Jav…

ArduinoからAVRへ:最大のメリット→割り込み

割り込みを使うとArduinoのloop()の呪縛から解法される。(省電力なシステムを設計できる) 以下ではExternal Interrupt INT0/INT1(PD2,PD3)を使った。 http://elec-studio.eco.coocan.jp/AVR_C-Program06.html http://stastaka.wordpress.com/2012/03/10/…

構造体とクラスへのポインタ

#include <iostream> #include <string> #define LEN(x) (sizeof(x)/sizeof(*x)) typedef struct { //無名構造体でtypedefすると便利 int a; char name[10]; } t_Student; //t_ のように頭にPrefixをつけとくとクラスと構造体を混同せずに済みそう t_Student st[] = { {1,"char</string></iostream>…

Arduinoのライブラリを作る その3(PWM)

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(</avr/io.h>…

Arduinoのライブラリを作る その2(ADC)

adc.h #ifndef _ADC_H_ #define _ADC_H class Adc { public: void adc_init(); int adc_conv(int pin); }; #endif adc.cpp #include "adc.h" #include <avr/io.h> #define sbi(BYTE,BIT) BYTE|=_BV(BIT) #define cbi(BYTE,BIT) BYTE&=~_BV(BIT) void Adc::adc_init(){ </avr/io.h>…

Arduinoのライブラリを作る その1(USART)

usart.h #ifndef _USART_H #define _USART_H class Usart{ public: void USART_init(unsigned int ubrr); void USART_Transmit(unsigned char data); char USART_recv(void); void putString(char msg[]); int getUBRR(int baud); int getUBRR(int baud,unsi…

ArduinoでADCを使う

このコードではArefにVcc(5V)などをつなぐ必要がある。 #include <avr/io.h> #include <util/delay.h> #define F_OSC 16000000UL #define BAUD 9600 #define MYUBRR ((F_OSC/(BAUD*16UL))-1) #define sbi(BYTE,BIT) BYTE|=_BV(BIT) #define cbi(BYTE,BIT) BYTE&=~_BV(BIT) void usa</util/delay.h></avr/io.h>…

Arduino言語とC言語のコンパイルサイズを比べてみる

Arduinoコード void setup(){ pinMode(13,OUTPUT); } void loop(){ digitalWrite(13,HIGH); delay(1000); } 実行結果 ---------------- Device: atmega328p Program: 1062 bytes (3.2% Full) (.text + .data + .bootloader) Data: 9 bytes (0.4% Full) (.dat…

Arduno UNOでPWMを使う

PWMの設定 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 前書いたコードと同じだけど、再掲。 //#define F_CPU 1000000UL …