エントリー

カテゴリー「Arduino・AVR」の検索結果は以下のとおりです。

ページ移動

ATTINY13用の開発支援ボードを作る(続き)

USBシリアル変換モジュールを使って送受信が可能になったのでボードの空きの部分(後になんらかの機能追加できるように空けていた)に丁度USBシリアル変換チップが余っていることもありUSBシリアル変換モジュールを追加することにした

チップ

安くUSBシリアル変換モジュールが作れないかなと思って購入していたパーツでようやく挑戦することになる(今なら超小型USBシリアル変換モジュールを使えば手間かからないかも)

回路図

VSOP用のボードが28ピン用のためスペースがあるのでUSBコネクタを付ける(FT231は20ピン)

USB

USB裏

チップを載せるために半田メッキする

半田メッキ

チップを置いて半田で温めて付けようとしたら・・・げげぇ幅が足りない・・・ボードをミスったか・・・ギリギリの線まで足を置いて後は半田を延ばして無理やり付けた(ピン1つがなかなか接触しなくて時間かかり壊れてなければよいが・・・)

半田付け

必要な部分のみピンを付けてボードは完成

ピン

実態結線図を作成して

実態結線図

※)都合良いパーツは無かったので、27Ω ⇒ 20Ω、47pF ⇒ 22pFを使用

ブレッドボードで確認

ブレッドボード版

ところがFT232RLでは正常だったのにFT231XSでは文字化けが発生してしまう

参考記事でOSCCALの調整で改善されるかもと調整を試みる

#include <BasicSerial3.h>

void setup( ) {
  pinMode(3, OUTPUT);
}

void serOut(const char* str) {
   while(*str) TxByte (*str++);
}

void loop() {
  char buf[4];
 
  for(uint8_t i = 0; i <= 128; i++) {
    digitalWrite(3, HIGH);
    itoa(i, buf, 10);
    OSCCAL = i;
    serOut("***** OSCCAL=");
    serOut(buf);
    serOut(" *****\r\n");
    delay(1000);
    digitalWrite(3, LOW);
    delay(1000);
  }
}

以下のように出たので91を設定してみたが改善せず

クロック調整

いろいろとプログラムを調整していたら長い文字列だと文字化けするようなので連続して送信する文字数の上限を設けてみたら解決

void serOut(const char* str) {
  while (*str) TxByte(*str++);
}

以下のように上限を8文字にした

void serOut(const char* str) {
  while(*str) for(int n = 0; *str && n < 8; n++) TxByte(*str++);
}

ブレッドボード上で送受信とも確認できたのでシールド基板上に取り付け完成

完成ボード

追加として以下を設置

  • 電源切り替えスイッチ(シールド上のUSBかArduinoの5Vピンかの切り替え)
  • 電源LED(緑)

使い方は以下を参照

ArduinoISP 使い方・書き込みテストArduino IDE で ATtiny 他の開発

消えると困るので転用し編集させてもらった

①開発ボードをArduinoUNOにセット

②ArduinoUNOにArduinoISPスケッチを書き込む

IDEの[ファイル]→[スケッチ例]→[11.ArduinoIAP]→[ArduinoISP]をマイコンボードに書き込む

③書込み装置選択

IDEの[ツール]→[書込み装置]の[Arduino as ISP]を選択

④ボード選択

IDEの[ツール]→[ボード:]で[ATtiny13(bitDuino13)]を選択

IDEの[ツール]→[Clock:]と進み[1.2MHz(Internal)]を選択

⑤テストスケッチを入力

#define PIN 3
#define DTIME 500

void setup() {
    pinMode(PIN, OUTPUT);
}

void loop() {
    digitalWrite(PIN, HIGH);
  delay(DTIME);
   digitalWrite(PIN, LOW);
   delay(DTIME);
}

⑥「マイコンボードに書き込む」ボタンをクリック

コンパイルと書き込みが行われLEDが約0.5秒間隔で点消灯する

⑦クロックを変更(工場出荷時は1.2MHz)

IDEの[ツール]→[Clock:]で[9.6MHz(Internal)]を選択

再度「マイコンボードに書き込む」ボタンをクリック

LEDが約4秒間隔で点消灯する(内蔵クロック1.2MHzで動作しているのにクロック9.6MHzとしてスケッチをコンパイルして書き込んだために起こる現象)

⑧ヒューズビット書き換え

IDEの[ツール]→[ブートローダの書き込み]を実行

ダミーのブートローダ書き込みによりヒューズビットの書き換えとプログラムの消去が行われる

もういちど,「マイコンボードに書き込む」ボタンをクリックしてスケッチをコンパイルして書き込むとLEDは約0.5秒間隔で点消灯する

 

ATTINY13用の開発支援ボードを作る

ATTINY13を使うにあたって毎回ブレッドボートに構築してると大変なので、ATTINY13用の開発支援ボードを作ることにした

仕様として

  • Arduinoシールド化で簡単に書込み準備可能にする
  • 電源電圧3.3Vに切り替え可能にする(電源スルーと3.3V降圧)
  • 動作試験できるようにLEDを配置
  • デバッグ用のシリアル出力

シリアル出力は、以下の記事を参考にして半二重通信だが1ピンで送受信を可能にする

ATtiny13Aでシリアル通信(UART)を行う

ATTiny13Aで割り込みを利用したパソコンとのシリアル通信

 

開発ボード回路

追記

  • 7,6,5,1ピンは、それぞれArduinoシールドピン、13,12,11,10に接続(ISP)
  • 1ピンはタクトスイッチでリセット可能
  • 2ピン(LED)3ピン(UART)は、切り離し可能とするため短絡ピンを通す
  • 各ピンはブレッドボードなどに取り出し可能とするためピンソケット接続

最初は2SC1815を使っていたが、5Vでしか動作しないので3.3Vでも動作するように2N7000に変更

開発ボード

通信はUARTなのでPCと接続するためにFT232RL(USBシリアル変換モジュール)を使うが動作しない

直接PB4から送信すると問題ないのでTxとRxを分離する回路が問題のようで、しかたないので送信だけに仕様変更しようとも思ったが少し調査することに・・・

まず単にダイオードで接続されている送信ができない?のか、原因はFT232RL側のRxに電圧がかかっており逆流していたためで、USBシリアル変換モジュールのVCCIOの電源を無効にすれば解決した

またオシロで送信データを見てみると矩形波になっておらず負論理である0Vが正常に出ていない

オシロ波形1

はっきりした原因は判らないが、ダイオードと並列で0.1μFを入れることでまともになり

オシロ波形

正常に送受信できるようになった

 

ATTINY13(8ピンAVR)を使ってみる

前に購入しておいたATTINY13Aを使ってみようかと取り出してみた

ATTINY13

小さい8ピンのDIPパッケージ、秋月価格で50円である

使うためにはプログラムを書き込む環境が必要で、kosakalabさんのArduino IDEでATtiny他の開発(Arduino-ISP編)を参考にブレッドボードで試したみた

ブレッドボード版

Arduinoは秋月のDuemilanove互換ボードを使用しLチカに成功

簡単に扱えるように開発ボードでも製作するかな

 

AVRのフューズビット

AVRのフューズビットについて調査してみようと思いAtmelのデータシートを参照した

  • ATmega168Pと328Pのみ
  • フューズビットとされているがデータシートではフューズバイトと記載されている
  • 負論理なのでビットの意味に対する肯定・否定は、0:肯定、1:否定となる
  • クロック選択関係はややこしかったので未稿
328P
上位バイト(HIGH FUSE)
名称 ビット 意味 備考
RSTDISBL 7

PC6がI/Oピンかリセットピンかを選択

0:I/Oピン

1:リセットピン

 
DWEN 6 デバッグWIRE機能許可  
SPIEN 5

プログラム許可

0:許可

1:非許可

フラッシュメモリとEEPROMへの書込みを制御
WDTON 4

ウォッチドックタイマを常時有効

0:有効

1:無効(プログラムモード)

0:有効ではリセット後から開始される

1:無効の場合WDTCSRで有効にできる

EESAVE 3

ChipErase(初期化)時EEPROMの内容を保護

0:初期化しない

1:初期化する

0なら内蔵されているEEPROMを初期化しない
BOOTSZ1 2

ブートローダの容量選択

00:2048bytes($3800~$3fff)

01:1024bytes($3c00~$3fff)

10:512bytes($3e00~$3fff)

11:256bytes($3f00~$3fff)

()内はブートローダアドレス範囲(開始~終了)

開始アドレスがブートローダ実行時のリセットアドレス

プログラム領域は$0000~ブートローダ開始アドレス-1となる

BOOTSZ0 1
BOOTRST 0

リセット時に実行される領域の選択

0:ブートローダ領域

1:プログラム領域

 
下位バイト(LOW FUSE)
名称 ビット 意味 備考
CKDIV8 7

システムクロック8分周

0:8分周する

1:8分周しない

 
CKOUT 6

システムクロック出力

0:出力する

1:出力しない

PB0に出力
SUT1 5

起動時間選択(最低14×CK)

00:+0

01:+4.1ms

10:+65ms

11:予約

00でリセット時RSTDISBLが0の場合は+4.1ms

SUT0 4
CKSEL3 3 クロック種別選択        
CKSEL2 2
CKSEL1 1
CKSEL0 0
拡張バイト(Extended FUSE)
名称 ビット 意味 備考
 - 7 未使用      
 - 6
 - 5
 - 4
 - 3
BODLEVEL2 2 低電圧検出リセットの検出電圧選択    
BODLEVEL1 1
BODLEVEL0 0
168P
上位バイト(HIGH FUSE)
 名称 ビット 意味 備考
RSTDISBL 7

PC6がI/Oピンかリセットピンかを選択

0:I/Oピン

1:リセットピン

 
DWEN 6 デバッグWIRE機能許可  
SPIEN 5

プログラム許可

0:許可

1:非許可

フラッシュメモリとEEPROMへの書込みを制御
WDTON 4

ウォッチドックタイマを常時有効

0:有効

1:無効(プログラムモード)

0:有効ではリセット後から開始される

1:無効の場合WDTCSRで有効にできる

EESAVE 3

ChipErase(初期化)時EEPROMの内容を保護

0:初期化しない

1:初期化する

0なら内蔵されているEEPROMを初期化しない
BODLEVEL2 2  低電圧検出リセットの検出電圧選択    
BODLEVEL1 1
BODLEVEL0 0
下位バイト(LOW FUSE)
名称 ビット 意味 備考
CKDIV8 7

システムクロック8分周

0:8分周する

1:8分周しない

 
CKOUT 6

システムクロック出力

0:出力する

1:出力しない

PB0に出力
SUT1 5

起動時間選択(最低14×CK)

00:+0

01:+4.1ms

10:+65ms

11:予約

00でリセット時RSTDISBLが0の場合は+4.1ms
SUT0 4
CKSEL3 3 クロック種別選択  
CKSEL2 2
CKSEL1 1
CKSEL0 0
拡張バイト(Extended FUSE)
名称 ビット 意味 備考
 - 7 未使用      
 - 6
 - 5
 - 4
 - 3
BOOTSZ1 2

ブートローダの容量選択

00:1024bytes($1c00~$1fff)

01:512bytes($1e00~$1fff)

10:256bytes($1f00~$1fff)

11:128bytes($1f80~$1fff)

()内はブートローダアドレス範囲(開始~終了)

開始アドレスがブートローダ実行時のリセットアドレス

プログラム領域は$0000~ブートローダ開始アドレス-1となる

BOOTSZ0 1
BOOTRST 0

リセット時に実行される領域の選択

0:ブートローダ領域

1:プログラム領域

 

 

 

ページ移動

ユーティリティ

検索

エントリー検索フォーム
キーワード

過去ログ

Feed