カテゴリ:arduino, AVR( 64 )

Japanino ArduinoISPで ATtiny13 の ATtiny85 への置換方針 (3/28)

AVR 8Pin DIP の ATtiny13とATtiny85の互換性(差異)だが、

メインの違いはRAM容量で、ATtiny13 = 1KB , ATtiny25/45/85 = 2/4/8KB 。
ではATtiny*5はATtiny13の完全上位互換かというと、そうではない。

技術者あるあるで、まず短所から。

(1) ATtiny10/11/12/13/14/15の系列
(2) ATtiny15/25/45/85の系列
1の拡張は機能メイン、2は容量メイン。

つまり、ATtiny XY のXは容量(KB)、Yは機能の互換性を示しているので、
ATtiny13とATtiny85は機能の拡張+容量の拡張になる。

ただし、内・外部クロック周波数は、ATtiny*5がサポートする周波数でのみ互換性があるので、それ以外の設定では同じクロック数にならない。

また機能追加のせいで低電力動作時の消費電力が20%大きい(240→300μA)。

細かいが、AVRの新しいチップには内蔵RCのジッタ(波形のくっきり度)が大きくなる傾向があるので、より高精度に使うには外部クロックの使用推奨度も大きくなる。

ここまで。

ここからは長所。

互換性については、外部ピンレベルではハード的に上位互換性があるので、内蔵RCや外部クロックで同じにすれば、あとはピン機能とFuse設定の変更だけで、プログラムのソフト互換は保たれる(命令数123でアセンブラレベルで同じ)。HEXしかなくても、AVRはわかりやすいので書き換えは可能。ソースがあればコンパイル時にピン機能を置換するだけ。ピン機能も基本的なものは同じ。

なのでチップ置き換え可能性は高い。

ここまで。

ピン機能で大きな違いとしてタイマ1と、USIというUSARTの下位シリアル機能が追加されている。

円高で古いATtiny13の方が極端に安い間は、単機能を実験するのに気軽に買えばいいし、もし価格差が縮まったり、容量や追加機能が必要になったらATtiny*5を買えばいい。

AVRはPICよりもチップごとのピン機能やハードの互換性が高く、周辺機能が基本的なものに抑えられているおかげで、ディスコンになっても置き換えがしやすい構造となっている。そうやってPICのような地位に登り詰めるまで広く技術ノウハウを貯めていく方策だったのだろう。そしてそれはarduinoでの採用により成功した。合併してもディスコンに強いというメリットがなくなるからPICとの混合はしないだろう。そしてメーカーとしては製造設備投資などコストアップにつながるので、ディスコンできるチップは魅力的。新しいチップに投資が出来るなら将来性をAVRにかけて、カスタマイズ性をPICに与えていくのだろう。

ARMのドタバタが続くなら、このまま8ビットの緩やかなコスパ良好(上昇)路線でベースを整え、32ビットでパワーを出していく(32ビットも互換性重視で)、ノウハウを貯める感じかな。うまく舵取り出来れば将来性とコスパの魅力で利点を大きく伸ばしつつ、主戦場のマイコン32ビットで主権を握っていくのだろう。
[PR]
by k1segawa | 2017-03-28 17:21 | arduino, AVR | Comments(0)

Japanino ArduinoISPで ATtiny13 で BASCOM-AVR (39) (3/17)

またシリアル通信は確かにアセンブラで制御すれば収まるかもしれないが、ワンチップマイコンの使い方でも、本当に中のハードの仕組みまで抑えないと出来ない。

シリアル通信自体、規格に沿って使うだけだったので、細かい通信のインプリメントをハードレベルで実現したいとは考えていない。ハードの汎用ロジックICのデジタル電子回路の習得までと決めてあったのに、小さいもの好きが高じて8Pin1KBのATtiny13にこだわり過ぎた。
同じことをするなら、ATtiny85でシリアル通信をソフトシリアルで受信バッファを持たせた物に置換する。そしてATtiny13には簡単な制御だけにし、PCへの1個のセンサーデータ取り込みをシリアルで行うためにはATtiny85とする。
そしてMatrix 8x8 LEDで無理に汎用ロジックICを使うのではなくどうしても使いたい場合に使う。
だから8Pinは実験のためであり、安く単純に使うためBASCOM-AVRやArduinoを使う。
複数センサー入力するなら8Pinにこだわらないし、容量も1KBにこだわらない。
そしてそれは実験ではなく実用にしたいのだから、少し高くてもきちんとしたものにして、流用を考えない。だからブレッドボードではなく基板で、50円マイコンじゃなくてもいい。それが8KB越えするならArduinoでもよい。

アセンブラもそうなると全体を作成するのではなくサイズ縮小ではなく、高速化のためとなる。
ならばAVRではなくARMにすればいい。がワンチップマイコンでARMが使えるのかわからない。
AVRならば大容量多ピン種でも8ビット/32ビットともにArduinoのブートローダを書き込めばソフトはまあまあ一律で同じのが使えるが、高速化も極めるとつらいのでARMとなる。

個人レベルで高速化が必要なものって高速な通信プロトコルのためか、液晶コントロールぐらいか。でもそれってグラフィック転送レベルだよな。なら液晶モジュール(キット)でいいんじゃない?

やはり個人ならARMの力は不要で、ソフト一律のArduinoが使えるAVRで十分だ。まあロボットを作りたいなら反応速度を上げるのにセンサーデータを解析するホストマイコンかRaspiへ通信速度が高速な必要もあるかも。ただローカルで脊髄反射のようにするならホストはいらず、AVRローカルで制御できるかな?

あと流行りの画像・音声認識や人工知能・自動運転の末端センサーなら、大容量高速通信が必要かな。ここにはARMの独壇場となりそう。

あくまでも「個人の趣味レベルの場合」で書いたが、PICはハード屋さんなら究極にコストパフォーマンス高くできるので、そういう人はPICでがりがり書けばいい。それを目指してもいいが、ハードは奥が深すぎてちゃんと勉強して専門の電気の知識を頭に入れないと難しい。

せいぜいワンチップマイコンの制御レベルでも本当に極めれば難しいので、そこはArduinoのライブラリにおんぶにだっことする。

通信とかね。

はー、回り道した。ここでいったん仕切り直しとする。これもポケコンでやった事を振り返って初心に戻ったから、ハマっていた事に気が付いた。周りを見直すのは大切だ~
[PR]
by k1segawa | 2017-03-17 14:07 | arduino, AVR | Comments(0)

Japanino ArduinoISPで ATtiny13 で BASCOM-AVRでシリアル通信 (38) (3/17)

上記の件、区切りがつかないのでソフトも公開。
LED Matrix 8x8 の制御ソフトのシリアル部分は除く。
だが、新しい配線で3ピンしか使わない(残り2ピン - Tx/Rx用)回路用。

'****************************************
' Copyright (c) 2016 k1segawa
' License : free
' Program : 8x8 LED Control
' (by 74HC164)
'****************************************
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 18
$swstack = 8
$framesize = 4

' 74HC164x2 : 1,2
' A= 1 14=VCC
' B= 2 13=QH
' QA= 3 12=QG
' QB= 4 11=QF
' QC= 5 10=QE
' QD= 6 9=XCLR
'GND= 7 8=CLK

' B,XCLR=VCC

' ATtiny13
' PB0=A :1
' PB1=A :2
' PB2=CLK :1
' PB3=CLK :2

Config Portb.0 = Output 'A1(Data 1)
Config Portb.1 = Output 'A2(Data 2)
Config Portb.2 = Output 'CLK(Clock 1)
Config Portb.3 = Output 'SoftSerial TX
Config Portb.4 = Input 'SoftSerial RX
Set Portb.4 'Pullup
Config Base = 0 'DIM(0-7)
Const Human = 1 'Human Data=LCD designer

Dim A As Byte , I As Byte , J As Byte , W As Byte
Dim D(8) As Byte , K As Byte
Dim Rxstr As String * 17
Open "COMB.3:9600,8,N,1" For Output As #1
Open "COMB.4:9600,8,N,1" For Input As #2
Print #1 , "OK "
Input #2 , Rxstr

'--- Data Init (Start) ---
Restore Chr_data

Do
#if Human = 0

'--- 8 Bytes = 8 Lines , Data Store ---
For J = 0 To 7
Read A
'--- End Data = Return Start Data ---
If A = 99 Then
Restore Chr_data
Read A
End If
'--- Data Store ---
D(j) = A
Next J

#else

'--- [ Convert Read ] : 8 Bytes = 8 Lines , Data Store ---
For I = 0 To 7
D(i) = 0
Next I

For J = 0 To 7
Read A
'--- End Data = Return Start Data ---
If A = 99 Then
Restore Chr_data
Read A
End If

For I = 0 To 7
'--- Data Store ---
W = &H80
Shift W , Right , I
W = A And W
If W <> 0 Then
W = &H80
Shift W , Right , J
D(i) = D(i) Or W
End If
Next I
Next J

#endif

'=== Repear Same Data * 10 Loop (=200ms Display) ===
For K = 0 To 9

'--- Matrix LED A1=Char Data Pin 8 bit Shift ---
For J = 0 To 7 'A2 Shift Count (0=QA:b0, 7=QH:b7)

'--- Get 1 Byte Data ---
A = D(j)

'--- A1 74HC164 Shift ---
For I = 0 To 7
W = &H80
Shift W , Right , I 'I=0-7:bit 7-0(&H80,&H40,&H20, ...)
W = A And W 'Char Data bit mask
If W = 0 Then
Portb.0 = 1 'Data 1(A1): OFF=1(reverse)
Else
Portb.0 = 0 'ON=0(reverse)
End If

'--- Clock(CLK 1) ---
' Portb.2 = 1 'Low->Hi(Rising Edge)
' Portb.2 = 0 'Hi->Low(Falling Edge)
' Next I

'--- A2 74HC164 Shift ---
' For I = 0 To 7
If I = J Then '1 Line : ON
Portb.1 = 1 'Data 2(A2) : ON=1
Else
Portb.1 = 0 'another 7 Lines : OFF=0
End If

'--- Clock(CLK 2) ---
' Portb.3 = 1 'Low->Hi(Rising Edge)
' Portb.3 = 0 'Hi->Low(Falling Edge)
Portb.2 = 1 'Low->Hi(Rising Edge)
Portb.2 = 0 'Hi->Low(Falling Edge)
Next I

Waitms 2 ' (MAX Wait) Not hi-speed Brinking

Next J

' Not Wait (For V-Sync)

Next K
'=== Repeat End ===

Loop

End

Chr_data:
#if Human = 0
'Byte Data=bit7-0:Left-Right
'7->
'6
'5
'4
'3
'2
'1
'0
Data &H55 , &HFE , &HFC , &HF8 , &HF0 , &HE0 , &HC0 , &H80
Data &H55 , &HFE , &HFC , &HF8 , &HF0 , &HE0 , &HC0 , &H80
Data &H55 , &HFE , &HFC , &HF8 , &HF0 , &HE0 , &HC0 , &H80
Data &HAA , &HFE , &HFC , &HF8 , &HF0 , &HE0 , &HC0 , &H80
Data &HAA , &HFE , &HFC , &HF8 , &HF0 , &HE0 , &HC0 , &H80
Data &HAA , &HFE , &HFC , &HF8 , &HF0 , &HE0 , &HC0 , &H80
#else
'Byte Data=bit7-0:Up-Down
'7 6 5 4 3 2 1 0
'|
'V
' human
Data 8 , 6 , 29 , 4 , 4 , 11 , 9 , 25
Data 8 , 6 , 29 , 4 , 4 , 11 , 9 , 25
Data 8 , 8 , 4 , 12 , 14 , 4 , 10 , 11
Data 8 , 8 , 4 , 12 , 14 , 4 , 10 , 11
#endif
Data 99

' History
' [2016/12/31]
' PB3->PB2;Human=1;(Loop I)*2->*1
' [2016/10/09]
' 74HC164AP-1 reverse
' [2016/10/08]
' Read Convert Human Data (tools>LCD designer)
' [2016/10/07]
' $framesize = 16 -> 8
' Const Human #if Human define
' Data A1,A2 ON/OFF =1/0 (reverse) comment debug
' [2016/10/07]
' Pattern Data: lam mch led matrix 8*8
' URL:https://www.youtube.com/watch?v=U8zDmvD_pmY

[PR]
by k1segawa | 2017-03-17 00:25 | arduino, AVR | Comments(0)

興味深い世界のAVR 公式・ユーザフォーラムページ・AVR SNS (3/15)

世界には色々なSNSがあるが、AVRにも企業がらみのFacebookやフォーラムが沢山あって、規模が大きいせいか日本のAVR界隈とは毛色の違った切り口で興味深い。

Arduinoに採用されたせいか、初心者に取っつきやすい情報が多い気がする。

a0034780_21070336.jpg
Atmel社 Facebook で生きているページ。
Atmel Facebook はなぜかつながらなかった。


a0034780_21124807.jpg
Atmel University 向けプログラム(大学生向け)のHP。色々な関連リンクがあるので、ここからたどるのがいいかも。


a0034780_21191097.jpg
上記のリンクにあるメイカーズのためのGoogle+。ArduinoやRaspberry Piなど様々な電子工作作品がある。


a0034780_21271646.jpg
LinkedIn(ビジネスSNS)のAtmel公式。Facebookより力を入れているように見える。
コンパイラのリリースや新しいボードの情報はこちらが早い。
SNSなのでユーザが活発なのかも。面白い工作も投稿されている。


a0034780_21320035.jpg
いわゆるAVR非公式ユーザフォーラム。AVRの色々な問題や疑問・質問はここで取り上げられて検討されている。Arduino公式フォーラムと合わせてチェックしたい。

検索でWebに載っている事を一通りやって、やりたいことが見つからなくなったら、世界の大きなサイトにアクセスすると色々変わった事をやっていて、マンネリから脱出できるような気がする。


[PR]
by k1segawa | 2017-03-15 21:26 | arduino, AVR | Comments(0)

Japanino ArduinoISPで ATtiny13 で アセンブラ (38) (3/8)

AVRのアセンブラを少し勉強がてら解析。

Z80,8086,6502,6809等は知っているが、RISC系はちょっと初めてだ。
ニーモニックはZ80と同じLD,STがあり、8086のMOVもある。
基本の命令群
(1) データ転送命令
(2) 分岐命令
(3) ビット命令
(4) 算術命令

(1)はLD,ST,MOVをメインに、OUT,IN,PUSH,POP系を揃えてある。基本中の基本なのでLD,STの2文字からの派生。

(2)はCP,CALL,RET,JMPはメインに、ブランチ命令が4文字。BRxxとなっている。変わったところで次の命令をスキップする命令があり、それも4文字。SBxxとなっている。何が変わっているかというと、Z80はCPでフラグビットを立てて、ブランチ命令で指定アドレスにジャンプする組み合わせだったのが、スキップ命令では次の命令がジャンプ命令でほぼ同じ働きをし、次の命令を算術命令等にすれば、特別処理を1ステップ実行できる自由度がある。

まずニーモニックを覚えるのに(1)(2)のLD,ST,MOV,CP等の短いぱっとみて推測できる基本の「データ転送」命令を覚えてから、(2)の4文字で統一されているブランチとスキップの「分岐」命令を覚え、それらに含まれない省略形が覚えずらい命令は(3)(4)の「ビット」命令か「算術」命令と判断する、という流れか。

少ない命令と短い文字数で、オベランドを長くするというアプローチもあるが、RISCはこんな感じかな。
命令に修飾するアドレッシングモードで多彩にしたのは68系だが。
トータルの命令長を短くしてフェッチを少なくするのと、パイプラインに突っ込んでもキャンセル時に無駄にならないし、沢山突っ込める。マルチコアでCPUコアレベルで分散処理するならなおさら短い方が有利だからな。

人間が習得して、コンパイラを緻密に作れるようにマシン語レベルで読みやすい事は、GNU-gccでサポートされるためにも重要だ。集合知で切磋琢磨されないと、中規模のメーカーがいくら頑張ってもバグはなくならないし。

[PR]
by k1segawa | 2017-03-09 00:25 | arduino, AVR | Comments(0)

レゴブロックのようなロボットアーム簡単制御 (12/27)

レゴマインドストームのようなバラバラにして組み立てて色んな動きをさせる、日本の田宮模型の工作シリーズ。
a0034780_09195916.jpg

こちらのサイト様で知ったのだが、結構簡単に汎用的な機構が作成できる。
いよいよもって割れるがよい ARROWS Aで「100万のタマゴ」にガチ勝負を挑んだ結果……【ネタバレ】

ページ真ん中辺の「タミヤのモーター工作キット1式」というのを探したら、
3速クランクギヤーボックスセット 660円
ユニバーサルアームセット(オレンジ) 420円
ユニバーサルプレートL(210×160mm) 660円
単3電池ボックス(2本用・逆転スイッチ付)360円
で作っているらしい(タミヤのモーター工作キット1式のリンク先[動力ユニット][構造材][電気パーツ])。

こちらが無線でアームを持ったロボットを作れるキット(工作キット)。
3ch RCロボット製作セット 8600円
a0034780_9482456.jpg


次のページに6種類の作成例とこの部品だけで出来る3種類の作成例が載っている。
くふう次第で動きいろいろ!3ch RCロボット製作セット

3万円台で大ヒットしたお掃除ロボットiRobotルンバも買える昨今、これをarduinoやワンチップマイコンで制御すれば、次のステップにちょうど良いのではないだろうか。
a0034780_9534147.jpg


オレコマンダーとか再販して欲しい物がいっぱいあるな。hori頑張ってー。
[PR]
by k1segawa | 2016-12-27 09:30 | arduino, AVR | Comments(0)

Japanino ArduinoISPで ATtiny13でBASCOM-AVR

第一回プラチナブロガーコンテスト
に参加します。

a0034780_01191652.jpg


IoTの流行で、arduinoで電子工作をされる方が増えましたが、その先はどうしたらいいか戸惑っているのではないでしょうか?

自分で書いてある通りやったあと、どう変更したり、自分の好きな部品をくっつけるにはどうしたらわかるんだろう?

arduinoは簡単ですが、さらに先に進むには、回路とプログラムがわかるようにならなければなりません。

それには実験するのが一番で、価格的にarduinoは「もったいない」。
またarduinoの基礎となるAVRマイコンは、足の数が多すぎてよくわからない。

そこでATtiny13です。足はたった8本です。
arduinoは簡単ですが、実は裏で沢山のライブラリに頼っています。
シンプルにBASICはいかがでしょうか?

digitalWrite(PB3,ON)と書くより、PORTB.3=ONの方がわかりやすいのではないでしょうか?

BASCOM-AVRarduinoよりプログラムは小さくなります。ATtinyシリーズはATtiny13なら1kBATtiny85でも8kBしか入りません。
小さいプログラムなら、簡単な事を一つずつしか出来ません。でも1個50円なので、沢山買っても財布は痛みません。実験して壊してもいいのはとても初心者向きだと思います。

ピンが足りないなら、ATtiny841なら14ATtiny861なら20。小さいブレッドボードで可愛く作れます(^O^)。

ぜひ、ATtiny13BASCOM-AVRを使ってみてください。

以下は最近の作ったものです。
a0034780_01394451.jpg

左側が今持っているarduinoを使った書込み器、右側がシリアル通信してLEDを光らせる回路を追加したもの。

ね、簡単でしょ?

arduinoとAVRへのリンク一覧へはこちら。


[PR]
by k1segawa | 2016-12-27 01:46 | arduino, AVR | Comments(0)

Japanino ArduinoISPで ATtiny13 で Atmel Studio 7 (37) (12/27)

Atmel が 2016年4月にMicrochipに買収されたのに伴い、最近公式ライターAVRISP mkIIが販売終了になってしまったので、ちょっと慌ててAVR Studioを落とそうとしたら、もうAtmel Studio 7しかダウンロードできなくなってしまっていた。

どんどん新しい環境になっているのでC/C++で開発できるかチェック。
公式のダウンロードサイトでは、Windows 10ではWeb インストールとオフライン インストールが選べるのだが、オフライン インストーラを起動しても「Windowsがこのプログラムの起動を中止しました」と出てセキュリティチェックではじかれてしまう。

仕方ないのでWeb インストール(物凄く時間がかかる)して起動すると、大分様相が変わっていた。
プログラムの組み方をググって、ソースを書いたり、設定を行うのに次のサイト様を参考にした。
Atmel Studio の環境立ち上げと 使用方法 - PDF

自分の環境は、Windows10 64bit、Atmel Studino 7.0.1188、ATtiny13A、Arduino ISPライタ、arvdudeの組み合わせなので、[メニュー][ツール][外部ツール]で環境設定行う。
a0034780_23405944.jpg

引数はサイト様がATmega168pのarduino用で、今回はATtiny13Aのワンチップマイコン直接用なのでちょっと違って、以下のようになる。
-p t13 -c avrisp -P \\.\COM3 -b 19200 -U flash:w:"$(ProjectDir)Debug\$(TargetName).hex":i -C C:\avrdude\avrdude.conf

この中でItemFileName→TargetNameになっている(ItemFileName=main、TargetName=GccApplication1)のは、サイト様の手順でソースを追加するとプロジェクト名はGccApplication1で変わらないが、ソースファイルはGccApplication1.c→main.cに変わっており(バージョンアップで変わったのだろう)、実際に出力されるHexファイル名はmain.hex→GccApplication1.hexに変わっているためだ。

その他のCOM3やC:\avrdude\avrdude.confは各自の環境による。
-F -v -Dは取り除いた。

また、[ソリューション エクスプローラ][GccApplication1で右クリック][プロパティ][Tool][Selected debugger/programmer][Custom Programming Tool]を選んでおく(SimulatorからCustom・・・へ変更する)
a0034780_00022486.jpg
デバイスはATtiny13Aを選ぶ。
a0034780_00012267.jpg
そしてソースはサイト様のをベースにATtiny13A用に修正し次のようになる。
/*
* GccApplication1
*
* Created: 2016/12/26 22:08:05
* Author : k1segawa
* License: free
*/

#ifndef F_CPU
#define F_CPU 9600000UL // 9.6 MHz clock speed
#endif
#include <avr/io.h>
#include <util/delay.h>

#define PB3 PORTB3 // PBx未定義のため

int main(void)
{
PORTB = 0x00; // ポートB出力方向決定時0出力準備
DDRB = (1<<PB3); // PB3 as output, other as input
while(1)
{
PORTB |= (1<<PB3); // Turns ON PB3 LEDs
_delay_ms(1000); // 1 second delay
PORTB &= ~(1<<PB3); // Turns OFF PB3 LEDs
_delay_ms(1000); // 1 second delay
}
}

サイト様はPORTDだがPORTBへ変更。新しい環境はPB3が未定義らしいので自分で定義。PORTB3を探し出すには、PORTBを右クリックして[Goto Implementation](定義へジャンプ)を選び探した。
a0034780_00183647.jpg

_BV()でもよい。

F7でビルド、[ツール][Deploy](設定内容による)で書込み。86バイトで、いつものThank you.で終了。

ビルドログは次の通り。

------ ビルド開始: プロジェクト:GccApplication1, 構成:Debug AVR ------
ビルドを開始しました。
プロジェクト "GccApplication1.cproj" (既定のターゲット):
ツール バージョン "14.0" でビルドしています。
false 条件により、ターゲット "PreBuildEvent" を省略しました。('$(PreBuildEvent)'!='') は (''!='') として評価されました。
ファイル "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" 内にある、プロジェクト "c:\users\(ユーザ名)\Documents\Atmel Studio\7.0\GccApplication1\GccApplication1\GccApplication1.cproj" からのターゲット "CoreBuild" (ターゲット "Build" は依存):
タスク "RunCompilerTask"
タスク パラメーター:
ContentList=
main.c

(XHTML)


Program Memory Usage : 86 bytes 8.4 % Full
Data Memory Usage : 0 bytes 0.0 % Full
タスク "RunOutputFileVerifyTask" の実行が終了しました。
プロジェクト "GccApplication1.cproj" 内のターゲット "CoreBuild" のビルドが終了しました。
false 条件により、ターゲット "PostBuildEvent" を省略しました。('$(PostBuildEvent)' != '') は ('' != '') として評価されました。
ファイル "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Avr.common.targets" 内にある、プロジェクト "c:\users\(ユーザ名)\Documents\Atmel Studio\7.0\GccApplication1\GccApplication1\GccApplication1.cproj" からのターゲット "Build" (エントリ ポイント):
プロジェクト "GccApplication1.cproj" 内のターゲット "Build" のビルドが終了しました。
プロジェクト "GccApplication1.cproj" のビルドが終了しました。

ビルドに成功しました。
========== ビルド: 正常終了または最新の状態 1、失敗 0、スキップ 0 ==========

書込みログは次の通り。

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.11s

avrdude.exe: Device signature = 0x1e9007
avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: reading input file "c:\users\(ユーザ名)\Documents\Atmel Studio\7.0\GccApplication1\GccApplication1\Debug\GccApplication1.hex"
avrdude.exe: writing flash (86 bytes):

Writing | ################################################## | 100% 0.30s

avrdude.exe: 86 bytes of flash written
avrdude.exe: verifying flash memory against c:\users\(ユーザ名)\Documents\Atmel Studio\7.0\GccApplication1\GccApplication1\Debug\GccApplication1.hex:
avrdude.exe: load data flash data from input file c:\users\(ユーザ名)\Documents\Atmel Studio\7.0\GccApplication1\GccApplication1\Debug\GccApplication1.hex:
avrdude.exe: input file c:\users\(ユーザ名)\Documents\Atmel Studio\7.0\GccApplication1\GccApplication1\Debug\GccApplication1.hex contains 86 bytes
avrdude.exe: reading on-chip flash data:

Reading | ################################################## | 100% 0.30s

avrdude.exe: verifying ...
avrdude.exe: 86 bytes of flash verified

avrdude.exe: safemode: Fuses OK (E:FF, H:FF, L:7A)

avrdude.exe done. Thank you.

うまくいくと、GND~抵抗1kΩ~PB3に繋いだLEDが1秒おきに点滅する。

C/C++環境も構築できた。

[PR]
by k1segawa | 2016-12-27 00:03 | arduino, AVR | Comments(0)

Japanino ArduinoISPで ATtiny13 で 8x8 MatrixLED制御 (3) - 応用 (36) (12/25)

以前の記事、Japanino ArduinoISPで ATtiny13 で 8x8 MatrixLED制御 (2) - 応用 (24) (10/9)で、シリアル以外は出来たのだが、ピンが1つしか余っていなかった。
そのため受信オンリーでなんとかしようとしていたのだが、PC側に送信遅延を施しても思うようにいかなかった。
結果シリアルは2ピン必要という事で、MatrixLEDの方の回路を1ピン減らしてみる。
CLKが共通にできるのではないかという事で、PB2とPB3→PB2で制御してみる。
下図のように回路図のPB3の線をPB2へつなぎ、PB3の配線を削除してPB3を空ける。点線が元の配線で太線が新しい配線。
a0034780_18185165.jpg

それに従い、プログラムも変更する。PB3を制御していた2つのFor Iループを一つにし、条件を追加する。

ちょっと回路的に以前の記事のタイミングチャートで、CLR1,CLR2もリセットとして必要(ゴミが出る)かもしれないので、保留中。

[PR]
by k1segawa | 2016-12-25 18:13 | arduino, AVR | Comments(0)

Japanino ArduinoISPで ATtiny13 シリアル通信 (34) (12/20)

シリアル通信について、ATtiny13でずいぶんと回り道している。
今回は、双方向の通信が失敗し続けた原因が分かった。
今までは受信か送信の一方向のみがうまくいっていた。
なぜか両方向だとうまくいかなかった。

それはプログラムの問題ではなく、環境設定の問題だった。
まず一つは、PCとのUSBシリアル変換の問題。
JapaninoをArduino ISPライタとして使っていたため、USBを仮想COMポートとして一つ使っており、そのRX/TX(D0/D1)がシリアル通信に使えるはずという前提が、一部間違っていた。
JapaninoにISPライタのスケッチを書き込んだまま、RX/TXを使っても、それはスケッチがポートを見てしまい、うまくいかなかったのだ。本来なら送受信をRX/TXにそのまま流すスケッチを書き込まなければ意図したように動かないにも関わらずにだ。そのスケッチを書き込む事をすっかり忘れて、一方向しかうまくいかないと試行錯誤してしまっていた。
これは、別のUSBシリアル変換モジュールを繋いでそちらのCOMポートでやり取りすることで、解決した。

なお、ISP6本と受信(PC側 USB-Serial変換モジュールTXに繋がる黄色い方)がかぶっているので、GND/5V以外のISPケーブル4本を、書込み時と実行時で接点4個のSWでON/OFF(接続/切断)する自作の冶具を間に噛ませてある(Arduinoから伸びるオレンジ、黄色、緑、青)。
a0034780_21064123.jpg

そして2つ目は、TeraTermの設定。ローカルエコーをOFFにしないとPC側から送信できないのだ。
出来ないというより、ローカルエコーしているから、本来受信文字列を表示すべきところが、送信文字列に消されてしまっていたらしい。

この2つ目はATtiny13へのBASCOM-AVRのプログラムにもよるため、大変わかりづらかった。

従って、TeraTermの設定はローカルエコー無しにし、プログラムは次のようになる。

'****************************************
' Copyright (c) 2016 k1segawa
' License : free
' Program : Serial Control
'****************************************
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 24
$swstack = 4
$framesize = 8

Config Portb.3 = Output
Set Portb.3

'Config Portb.4 = Output
'Config Portb.2 = Input
'Portb.2 = 1 'Pullup

'-------------------------------------
#if 0

Dim I As Integer
I = 0
Open "COMB.4:9600,8,N,1" For Output As #1 'soft serial PB4:Out
Do
Wait 1
Toggle Portb.3
Print #1 , "I=" ; I
Incr I
Loop

End
Close #1
' History
' [2016/09/23]
' PB4 Serial Output

'-------------------------------------
#else

Dim Tstr As String * 6
Dim Num As Word

'open channel for output
Open "COMB.4:9600,8,N,1" For Output As #1
Open "COMB.2:9600,8,N,1" For Input As #2

Do
Set Portb.3
Wait 1
Reset Portb.3
Print #1 , "text: "
Input #2 , Tstr
Print #1 , Tstr
Print #1 , "number: "
Input #2 , Num
Print #1 , Num
Loop

End
#endif

'Open COMB.x(Don't need Config Pin=I/O)
'local echo OFF(Must OFF)
'COM3 = Writer(Don't need disconnect)
'COM5 = TeraTerm(connect)

下の方のelse節のプログラムが動いており、TeraTermの画面には「test:」と表示され、Input待ちになる。そこで、TeraTerm画面上でそのままキーボードで文字列を打つのだが、それはローカルエコーOFFなので表示されない。そのままエンターキーを押すと、入力した文字列がATtiny13から送信→それを受信して「xxxx」と表示される。続けて「number:」という表示に対してさらに文字列をキー入力してエンターキーを押すと、やはり入力した文字列が表示される。こんな簡単な事が、今までできなかった。

COMポートの問題とシリアル入出力の特性を忘れていたため問題が長引いた。
これでマトリクスLEDの制御に戻れる。今もう1ピン空ける回路を考えているので、そうすれば2ピン空いて双方向にシリアル制御出来、データ送出のタイミングをコントロールできる。
[PR]
by k1segawa | 2016-12-20 20:07 | arduino, AVR | Comments(0)