Arduino風にRX62Nマイコンをプログラムしませんか?
RX-ELF-GCCでC++が動くようになってきたので、RX62NマイコンのプログラムをArduino風に作れるライブラリを作りました。
その名も「RXduino (アールエックスデュイーノ)」
まずは、下のムービーを見てください。
RX-MEGAボードにNokiaのLCDシールドを載せています。青いボタンを押すとLCDに長方形をいっぱい描きます。
で、これらのことを実現するために作ったのがArduino互換の関数たちです。
unsigned long mills();
unsigned long micros();
void delay(int ms);
void delayMicroseconds(int us);
void digitalWrite(int duino_portnum,DigitalWriteState value);
void pinMode(int duino_portnum,pinModeState state);
int digitalRead(int duino_portnum);
int pulseIn(int duino_portnum, int val, unsigned long timeout = 1000000);
int analogRead(int analog_portnum);
void analogWrite(int analog_portnum,int val8bit);
void analogWriteDAC(int dac_portnum,int val10bit);
SPI.begin() ;
SPI.end() ;
SPI.setBitLength(int bitLength);
SPI.setBitOrder(SPI_BIT_ORDER bitOrder) ;
SPI.setClockDivider(SPI_CLK_DIVIDER divider);
SPI.setDataMode(SPI_DATA_MODE mode);
SPI.transfer(unsigned long txbyte) ;
Serial.begin(int bps);
Serial.end();
Serial.available();
Serial.read();
Serial.write(char val);
Serial.write(const char *str);
Serial.write(const char *buf,int len);
Serial.print(int val, PRINT_TYPE print_type=NONE);
Serial.print(double val, int fpdigit=2);
Serial.print(const char *str);
Serial.println(int val, PRINT_TYPE print_type=NONE);
Serial.println(double val, int fpdigit=2);
Serial.println(const char *str);
使い方は、Arduinoを使ったことがある方なら説明しなくても不要ですね?
(かくいう私もArduinoは一度も使ったことはありません。)
それに、main()ではなく、setup()から始まりloop()を繰り返し実行するようにしました。
なので、Arduino用に作ったプログラムがRXマイコンで動いてしまうというわけです。
しかも、プログラムはすべてゼロから特電が書き起こしているので、コード自体のライセンスもGPLフリーになるのです。(GCCとかnewlibとかは後で考えるとする)
ちなみに上の動画のプログラムは、
// RX62NのGCCサンプルプログラム
// メイン
// (C)Copyright 2011 特殊電子回路
#include "iodefine_renesas.h"
// RXデュイーノライブラリ
#include "libtkdn/rxduino.h"
// Nokia液晶用ライブラリ
#include "nokia_lcd.h"
#include
CSPI SPI(spArduino); // SPIのインスタンス (グローバル変数)
void setup() {
Serial.begin(38400);
Serial.println("--------------------------------------------------------");
Serial.println("RX62N GCC and RXduino emvironment test");
Serial.print("Compiled at ");
Serial.print(__DATE__);
Serial.print(" ");
Serial.println(__TIME__);
Serial.println("--------------------------------------------------------");
// 14本のDigitaiピンを出力に
for(int i=0;i<14;i++) {
pinMode(i,OUTPUT);
}
// 6本のアナログデジタル兼用ピンを入力に
for(int i=0;i<6;i++) {
pinMode(14 + i,INPUT);
}
// LEDのポートなどの初期化
for(int i=0;i<5;i++) {
pinMode(PIN_LED0 + i,OUTPUT);
}
// プッシュスイッチは入力に
pinMode(PIN_SW,INPUT);
// SPIモジュールを初期化
SPI.begin();
SPI.setBitLength(9); // 9bitモード (RXならではの拡張!)
SPI.setClockDivider(SPI_CLOCK_DIV4);
NokiaLCD_reset();
NokiaLCD_background(0x0000FF);
NokiaLCD_cls();
}
void loop() {
if(digitalRead(PIN_SW) == 0) {
unsigned char r,g,b; // ランダムな長方形を描画
r = rand();g = rand();b = rand();
NokiaLCD_fill(rand() & 0x7f, rand() & 0x7f, rand() & 0x7f, rand() & 0x7f,
r << 16 | g << 8 | b);
}
}
どうでしょう。こんな簡単なプログラムで動いちゃうんですから、不思議なものですね。
これからのフィジカルコンピューティングは国産のRXマイコンでいきましょう!
AVRと比べると、めちゃめちゃ速いですよ!
RXduinoのサンプルをこちらにアップロードしました。※バグとか、未完成の部分もまだ多いので、ご注意ください。
このプログラムは当社のお客様(MITOUJTAGとかSP6とかRX62Nのお客様)は無償でダウンロードしていただけます。Interface誌の付録RX62N基板で使えるはずです。
さらに、特電「究極のRX62Nボード」か「RX-MEGAボード サポート付き」をお買い上げのお客様には、ソースコードも提供しちゃいます!
これからもどんどん改良していくので、ご期待ください!
| 固定リンク


コメント