202duino で 自力シリアル出力 [Arduino]
202duinoは、CH340EをUPDIにもシリアル通信にも使えるように作りました。
202duino で シリアル通信:放課後マイコンクラブ:SSブログ
https://hello-world.blog.ss-blog.jp/2023-05-29
ただ、ハードウェアシリアルを使うと、ほとんどフラッシュメモリの空きがなくなる問題が出てきます。
そこで、
・送信だけ
・送信中に他の事はできない
・高速な通信はできない
という制限はあるもののレジスタを直接たたかずにArduinoの機能だけで自力でシリアル出力をしてみました。
micros()でタイミングをとるバージョンと、delayMicroseconds()でタイミングをとるバージョンを作りました。
以下の1秒毎に「Hello world!」を送信するスケッチで、どちらも余裕で1kBを切れました。
別バージョン ー delayMicroseconds()版
Rx(CH340E)とシリアル出力ピン(Tx)をワイヤーでつないでいます。
(スケッチ書き込み時は、ワイヤーを外します。)
ちなみにこれらを、UNO R4 minima と USBシリアル変換モジュールで試したらちょくちょく文字化けして使い物にはなりませんでした。
202duino で シリアル通信:放課後マイコンクラブ:SSブログ
https://hello-world.blog.ss-blog.jp/2023-05-29
ただ、ハードウェアシリアルを使うと、ほとんどフラッシュメモリの空きがなくなる問題が出てきます。
そこで、
・送信だけ
・送信中に他の事はできない
・高速な通信はできない
という制限はあるもののレジスタを直接たたかずにArduinoの機能だけで自力でシリアル出力をしてみました。
micros()でタイミングをとるバージョンと、delayMicroseconds()でタイミングをとるバージョンを作りました。
以下の1秒毎に「Hello world!」を送信するスケッチで、どちらも余裕で1kBを切れました。
// Arduino based serial output
#define TX 0 // TX pin
#define BAUD 9600 // baud rate
void setup() {
pinMode( TX , OUTPUT );
digitalWrite( TX, HIGH );
}
void loop() {
char text[] = "Hello world!\n";
for(uint8_t i = 0; text[i]; i++ ) inoTX( text[i] );
delay(1000);
}
void inoTX( uint8_t c ) { // *** OK up to 38400bps at 20MHz(ATtiny202) ***
uint32_t us = micros();
digitalWrite( TX, LOW ); // start bit
while( micros() - us < (1000000 / BAUD) );
us += (1000000 / BAUD);
for(uint8_t i = 0; i < 8; i++ ) { // data bits
digitalWrite( TX, ( c >> i ) & 1 );
while( micros() - us < (1000000 / BAUD) );
us += (1000000 / BAUD);
}
digitalWrite( TX, HIGH ); // stop bit
while( micros() - us < (1000000 / BAUD) );
}
別バージョン ー delayMicroseconds()版
void inoTx( uint8_t c ) { // *** OK up to 19200bps at 20MHz(ATtiny202) ***
digitalWrite( TX, LOW ); // start bit
delayMicroseconds( 1000000 / BAUD );
for(uint8_t i = 0; i < 8; i++ ) { // data bits
digitalWrite( TX, ( c >> i ) & 1 );
delayMicroseconds( 1000000 / BAUD );
}
digitalWrite( TX, HIGH ); // stop bit
delayMicroseconds( 1000000 / BAUD );
}
Rx(CH340E)とシリアル出力ピン(Tx)をワイヤーでつないでいます。
(スケッチ書き込み時は、ワイヤーを外します。)
ちなみにこれらを、UNO R4 minima と USBシリアル変換モジュールで試したらちょくちょく文字化けして使い物にはなりませんでした。
2023-09-16 03:14
nice!(0)
コメント(0)
コメント 0