<   2017年 03月 ( 7 )   > この月の画像一覧

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)

デルタ型3Dプリンタ - パラレルリンク機構 (3/23)

3DプリンタとかCNCフライスとかプリント基板の削除による作成を検討していたのだけど、タイトルのようにx-y-z軸でない3Dプリンタが高精度・低価格・コンパクトで購入しやすい。

機構が面白いので調べたら、サーボモータ3個で簡単に作れそう。制御方法は数式が難しそうだが。

a0034780_23381572.jpg
なんで水平になるのかよくわからないけどこちらのサイト様が詳しい。
a0034780_23472280.jpg
別のページでオートキャリブレーションや高い剛性、入手しやすいフィラメントの選定など勉強になる。

こちらのサイト様でしっかりした物が6万円の手ごろな価格で購入できる。国内で組立済みで買えるのでトラブルも少ない。
a0034780_23525050.jpg
基本は枯れた技術らしい。ドリルが載せれられば切削してプリンタ基盤も作れるかな。


[PR]
by k1segawa | 2017-03-24 00:04 | 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)

ポケコン PC-G850Vで電子回路工作(3/15)

a0034780_1223957.jpg


なんかポケコンを購入された人がいらっしゃるので、自分の所よりもわかりやすいサイト様があったので紹介。

【その5 アナログでGO!】 - ポケコンで電子工作_5

こちらはA/D変換を自分とは違ったICで変換している。
私はSPI通信でやったが、このICは8ピンで0~255(6ピンなので0~31?)の値で返してくれるらしい。
これはpiogetで11ピンにかかる信号で取得するらしいが、piogetの使い方を理解していないのと11ピンに繋ぐ必要な回路がわかっていなかった。

そこでpiogetを探したら次のサイト様が見つかった。

G850V DTMFデコーダー - CURIOSITA - 好奇心

こちらはQ1~4の昔のボタン電話のプッシュ音(AD)を解析してくれるICで、4ピンで値を返してくれる。

ポケメモの本家様へのリンクと作り方を書いてあるので、11ピンを介して128KBメモリとしてBASICプログラムをファイル保存できる。

回路と写真のすぐ下の空白の部分に隠しソースがあるのでマウスで反転させると見えてくる。
回路とそのさらに下のマニュアルの解説によるとpiogetの使い方が載ってるので、
ポケメモ本家様のファームウェアも参考に調べるとよい。

ひさびさに「ポケコン」をYoutubeで検索すると、エミュレータ上で動作している動画も上がっており、結構最近もポケコンの記事があってうれしい。やっぱり初心に戻って電子回路工作したいな~
[PR]
by k1segawa | 2017-03-15 01:31 | ポケコン | 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)