<   2016年 08月 ( 30 )   > この月の画像一覧

Japanino ArduinoISPで ATtiny13 で I2C 液晶(6) - コマンド発行 (8/31)

(2016/9/1修正)
前記事から、このI2C液晶のコマンドを発行してみる。
2行3桁目に表示するためDDRAMアドレス&H42を指定する。
取扱説明書に沿った形でインストラクションテーブルというのをConst定義して、コマンド記述出来るようにする。明示的に分周比を1と定義する。2行目の先頭&H40に1桁の数字0~9を300msで表示する。初期化設定例のClear Displayが効いていないようなので、Forループの外へ移動した。fuseビットは周波数9.6MHzに書き換えてある。ちなみに買った時点では1MHz(ずっと前の記事でマイコンボードInternal clock 9.6MHzを選んでからATtiny13に対してブートローダ書込みをする)。

ソース:
'****************************************
' Copyright (c) 2016 k1segawa
' License : free
'****************************************

$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 24
$swstack = 4
$framesize = 8
Config Scl = Portb. 1
Config Sda = Portb. 0
Config I2cdelay = 5
Config Clockdiv = 1
Declare Sub G_i2cwrite(byval D As Byte)
Dim A As String * 10
Dim I As Integer
Dim Cmd As Byte
Dim Wt As Byte
Dim W As Byte
'--- Instruction Description Command ---
Const Ins_cleardsp = &H01
Const Ins_returnhm = &H02
Const Ins_entrymd = &H04
Const Ins_dsponoff = &H08
Const Ins_curdspsft = &H10
Const Ins_funcset = &H20
Const Ins_setcgram = &H40
Const Ins_setddradr = &H80
'--- Instruction table 1 Command (IS=1) ---
Const Ins_intoscfreq = &H10
Const Ins_seticonadr = &H40
Const Ins_powericonctrst = &H50
Const Ins_flwctrl = &H60
Const Ins_contrstset = &H70
'--- I2C Init ---
I2cinit
'--- LCD Init ---
Waitms 40
For I = 0 To 7
'--- Read EEPROM ---
W = I * 2
Readeeprom Cmd , W
Incr W
Readeeprom Wt , W
'--- Output Command ---
Call G_i2cwrite(cmd) : Waitms Wt
Next I
'--- Clear Display Command ---
Call G_i2cwrite(ins_cleardsp) : Waitms 2
'''--- Read EEPROM ---
'''Incr W
'''Readeeprom A , W

'--- Output Data (String) ---
A = "@Hello"
I2csend &H7C , A , 6
'--- Output DDRAM Address ---
W = Ins_setddradr Or &H42
Call G_i2cwrite(w) : Waitus 27
'--- Output Data (String) ---
A = "@World"
I2csend &H7C , A , 6
'--- Rotate number ---
I = 0
Do
W = Ins_setddradr Or &H40
Call G_i2cwrite(w) : Waitus 27
W = I + &H30
A = "@" + Chr(w)
I2csend &H7C , A , 2 : Waitms 300
Incr I
I = I Mod 10
Loop
End
'--- Sub routine : Output Command ---
Sub G_i2cwrite(byval D As Byte)
I2cstart
I2cwbyte &H7C
I2cwbyte &H80 (2016/9/1修正 0→&H80)
I2cwbyte D
I2cstop
End Sub
'=== ATtiny13 EEPROM=64byte, rewrite 100,000 ===
$eeprom
'--- LCD Init Squence ---
Data &H38 , 1 , &H39 , 1 , &H14 , 1 , &H70 , 1 , &H52 , 1
Data &H6C , 201 , &H38 , 1 , &H0C , 1
'''--- String ---
'''Data "@Welcome"
$data
' History
' 2016/08/31
' clock 9.6MHz
' $hwstack 32->24
' W As Integer -> Byte
' Mult Statement
' LCD Init Squence
' Power &H56(3.3V) -> &H52(5V)
' Follwer control wait=201ms
' remove Clear Display

Const定義はHEXサイズを変えない。Do-Loopが結構容量を食って現在924バイト。

[PR]
by k1segawa | 2016-08-31 21:26 | arduino, AVR | Comments(0)

Japanino ArduinoISPで ATtiny13 で I2C 液晶(6) - EEPROM (8/30)

(2016/9/1修正)
前記事のプログラムが冗長なので、Flashよりずっと許容回数の多いEEPROMにDATA文を置いて短くしてみた。
結果、50バイト程度のHEXファイルの減少と、プログラムからのEEPROM活用方法が分かった。

まず、いつもやっているのだが、毎回CPUの設定をするのは面倒なので、前回のソースを開いて、[File][Save as ...]で別名で保存する。その時「Leave File old CFG file ?」(古いCFGファイルは残す?)みたいに聞かれるので、Yesを押す。
CFGファイルがCPUの設定だが、前のCFGファイルを残さないと戻れなくなるので。

新しいソースはそこから修正して作っていく。

で今回プログラムが長くなるとコンパイル後のHEXでFlashが圧迫され、固定データが増えたらプログラムのSRAM領域が足りなくなるので、64バイトのEEPROMにデータ文を退避した。
HEX書き込み時のFlashが1万回、EEPROMが10万回なので安心してもっと活用していい。

プログラムが変わり、窮屈(Out of SRAM)になったのでSRAM 64バイトの構成を変えた。
framesize = 16 → 8 だが、
hwstack = 32 → 16 でもよい。

ソース:
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 4
$framesize = 8
Config Scl = Portb. 1
Config Sda = Portb. 0
Config I2cdelay = 5
Declare Sub G_i2cwrite(byval D As Byte)
Dim A As String * 10
Dim I As Integer
Dim Cmd As Byte
Dim Wt As Byte
Dim W As Integer

I2cinit
Waitms 40
For I = 0 To 8
W = I * 2
Readeeprom Cmd , W
Incr W
Readeeprom Wt , W
Call G_i2cwrite(cmd)
Waitms Wt
Next I
A = "@Hello123"
'Incr W
'Readeeprom A , W
I2csend &H7C , A , 9
End

Sub G_i2cwrite(byval D As Byte)
I2cstart
I2cwbyte &H7C
I2cwbyte &H80 (2016/9/1修正 0→&H80)
I2cwbyte D
I2cstop
End Sub

' ATtiny13 EEPROM=64byte, rewrite 100,000
$eeprom
Data &H38 , 1 , &H39 , 1 , &H14 , 1 , &H70 , 1 , &H52 , 1
Data &H6C , 200 , &H38 , 1 , &H0C , 1 , &H01 , 2
'Data "@Hello246"
$data
Helloの文自体もDATA文に落とそうとしたがちょっとうまくいかなかった。
DATA文を$eeprom ~ $dataで囲み、Readeeprom 格納変数, EEPROM読出し開始位置(バイト) で格納変数にEEPROM(先頭は0)の任意の位置のデータを読み出す。データの1は2.7usを1msに置換したもの。ワーク変数Wを使ったのはReadeeprom命令でI*2のように式を書けなかったから。

[PR]
by k1segawa | 2016-08-30 21:01 | arduino, AVR | Comments(0)

Windows10 Anniversary Update で パッケージ管理 と 日本語入力(再) (8/30)

RaspberryPiで使用しているパッケージマネージャ synapticをインストール。
apt-getでもいいけど、何が入っているかGUIで調べやすい。

sudo apt-get install synaptic
sudo synaptic
で起動。
ionice: ioprio_set が失敗しました: 無効な引数です、と出るけど何とかOK。
a0034780_09525898.jpg
日本語入力はこちらのサイト様を参考に。
俺の Bash on Windows10 環境 - Qiita
sudo apt-get install uim-fep uim-anthy
上のsynapticでuimを検索してインストール指定してもいい。

~/.uim
(define default-im-name 'anthy)
(define-key generic-on-key? '(" " "`"))
(define-key generic-off-key? '(" " "`"))

次は、うちの環境では最後の行を定義するとbash on Ubuntuで起動したルートのbash自体がエラーになって、立ち上がらなくなって詰むのでコメントアウトしている。
~/.bashrc
export XMODIFIERS=@im=uim
#exec uim-fep -e bash
(ここまで)

lxterminal &
(lxterminal上で)
uim-fep

末尾行にantyh[An- R]と表示されれば成功。
コントロール+スペースで、ON/OFF
(各端末でuim-fep起動しなければならないので、ルートと区別する方法があれば何とかしたい)

詰んだ時の直し方:
デスクトップのbashショートカットを読む。コマンドプロンプト(管理者権限)を開き、
cd c:\windows\system32
bash.exe --norc (.bashrcを読み込まない)
cd /home/xxxxx (ユーザ名)
ed .bashrc (edで編集。総行数が表示される)
p (定義が最終行ならexec uim-fep -e bashと表示される)
d (カレント行削除)
p (最終行export XMODIFIERS=@im=uimと表示される)
w (書き込み)
q (ed終了)
bash - コマンド (プログラム) の説明 - Linux コマンド集 一覧表 - kazmax Linuxで自宅サーバー のサイト様でbashの起動オプション詳細を参照の事。

[PR]
by k1segawa | 2016-08-30 09:55 | X-Window | Comments(0)

Japanino ArduinoISPで ATtiny13 で I2C 液晶(6) - BASCOM-AVR - AQM0802A (8/30)

(2016/9/1修正)
BASCOM-AVRでI2Cを制御する。
秋月で買った8x2ミニ液晶 AQM0802A-RN-GBW を制御。
ブレッドボード変換基板に乗せてVDD,RESET,SCL,SDA,GNDの5 Pinにする。
必要なコンデンサ、プルアップ抵抗は全て有効活用。変換基板のPUは両方とも結線する。
ATtiny13の内部プルアップ抵抗は使わない。外部抵抗10kΩをSCL,SDAに接続する。
変換基板のPUを結線した場合は下図の10kΩ抵抗×2は必要無い。

回路:
米粒AVRでI2C通信を使ってLCD表示のサイト様の回路図を参考に。
a0034780_04113900.jpg
Japaninoもミニ液晶もfritzingにないので代用で。WriterとLCDの差を見ながら配線。VDDが離れているのは抵抗を短く描けなかったから。

BASCOM-AVR:
I2Cを試す。(ATTiny2313編) - 団塊親父のブログ のサイト様のソースを参考に。
BASCOMの「くせ」 のサイト様の通り、i2c.LBXを編集する。
BASCOM-AVRの実行形式のディレクトリ/LIBの中にある。
編集するには、i2c.LBXを[右クリック][プロパティ][セキュリティタブ][編集ボタン][Users(xxxxx)選択][書き込み許可ON][適応ボタン]を押す。
以下の通り、28行目を書き換え、コンパイルエラーになるので[書き込み許可OFF]に戻す。
旧:* sbi  _sclDDR,_SCL
新:* cbi _sclDDR,_SCL
かつ今回の回路は5Vなので、
Netduinoシリアル通信(I2C)でLCD表示 のサイト様の、下の方に「リスト1 LCD接続のためのサンプルコード」の欄外の、
『5. データシートでは3.3V用に「0x56」になっているが、「0x04」(=ブースター回路On/Off)を「0」(off)にすることで、入力電圧5Vをそのまま使用する』との記述に従い、56→52に修正する(ボタン電池の3.3Vならそのまま)。

ソース:
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 4
$framesize = 16
Config Scl = Portb. 1
Config Sda = Portb. 0
Config I2cdelay = 5
Declare Sub G_i2cwrite(byval D As Byte)
Dim A As String * 10

I2cinit
Waitms 40
Call G_i2cwrite(&H38)
Waitus 27
Call G_i2cwrite(&H39)
Waitus 27
Call G_i2cwrite(&H14)
Waitus 27
Call G_i2cwrite(&H70)
Waitus 27
Call G_i2cwrite(&H52) '56->52
Waitus 27
Call G_i2cwrite(&H6c)
Waitms 200
Call G_i2cwrite(&H38)
Waitus 27
Call G_i2cwrite(&H0c)
Waitus 27
Call G_i2cwrite(&H01)
Waitms 2

A = "@Hello123"
I2csend &H7C , A , 9
End

Sub G_i2cwrite(byval D As Byte)
I2cstart
I2cwbyte &H7C
I2cwbyte &H80 (2016/9/1修正 0→&H80)
I2cwbyte D
I2cstop
End Sub
買った部品の説明書の「初期化設定例」の通りコマンドを発行。
G_i2cwriteはユーザ定義関数。
8桁の文字列は先頭に@を1文字追加。
$hwstack = 32
$swstack = 4
$framesize = 16
Config Scl = Portb. 1
Config Sda = Portb. 0
は、[Options][Programmer][Compilerタブ][Chipタブ]/[I2C,SPI,1WIREタブ]より優先される。stackなどの値はソース内の制御命令や配列などの追加に従い、調整する。図はHelloだがHello123と表示する。文字列はNULL分を+1して確保するため10で宣言する。
Arduino IDEだとI2Cライブラリも含めると相当大きいだろう。BASCOM-AVRだとI2CxxxがI2Cライブラリで682バイトで済む。
ATtiny13の使えるピンは少なくとも3(=5-2)個余ってるのでSPI接続のセンサーで入力して表示するといいかも。ボタン電池で動くようにするには、Writerに対応する線(オレンジ2本~白2本まで)全てを取り外し、VDDにボタン電池の+を、GNDにーをつなげばよい(52→56も)。Pin 1のPB5(RESET)はつながなくても動くが、不安定なのでVDDと10kΩ抵抗で結ぶとなお良い。
[PR]
by k1segawa | 2016-08-30 02:05 | arduino, AVR | Comments(0)

Drone 4K 空撮 (8/27)

宮古島ドローン空撮「橋の日」


Drone Japan 4k 絶景 ドローン 空撮映像 初夏のビーナスライン 霧ヶ峰高原 空中ドライブ Summer of Venus line Kirigamine aerial drive


文字リンク:Chrome「デスクトップに追加」用
例(非4K)
テレビ朝日 中央道・八王子LIVEカメラ


最後のはLiveなので延々続くが、その他は右クリックでループ ON。
[PR]
by k1segawa | 2016-08-27 22:56 | Comments(0)

色々な トランジスタ のつなぎ方(初心者) (8/27)

トランジスタのベース(下図*のB)にどうやって電源をつないだらいいか、調べると色々な方法がある。
a0034780_20011147.jpg

(1)は固定バイアスという簡単な方法らしい。(2)は自己バイアスといってコレクタ電流が増えるとベース電流が減って安定するらしい。でも直流なら無関係だ。
(3)はベース電圧が違う時に有効そう。逆流しないようダイオードがいるのかも。同じ電圧なら(1)でいいらしい。あーでも1と2は増幅回路だけど、3はスイッチかな?
間違っているかもしれない。

こちらのサイト様でバイアスとか、少しわかったような気がする。
トランジスタ - Security Akademeia
[URL]akademeia.info/index.php?%A5%C8%A5%E9%A5%F3%A5%B8%A5%B9%A5%BF

なんか上のURL、新しいエキサイトブログではじかれるようで直接記述しておく。
回路図は以下の通り。
a0034780_20235956.jpg
これはエミッタ接地といい、まだコレクタ、ベース接地などもある。
[PR]
by k1segawa | 2016-08-27 20:15 | Comments(0)

Windows10 Anniversary Update で Solarized カラーを vi と ls と lxterminal に適用 (8/25)

Windows10 Anniversary Update で lxterminal を 起動して主にそこで作業しているのだが、Windowsの画面に合わせて白地(肌色も可)に黒の文字で表示したい。
lxterminalは[編集][設定]で前景色・背景色を変えられる。
しかしそれで変えても今度はlsの出力で、実行ファイルの表示が黄緑で白地だと区別しづらい。viを起動するとCソースのキーワードの色も同じように区別しづらい。lsはLS_COLORSという変数で変えるらしいが、viはどうなるのか。

そこで色の事はSolarizedというのが綺麗らしい。
これに合わせる。
lsとviはカラースキームというのが対応しているが、未対応?のlxterminalはそれらしく設定する。

lxterminal:
こちらのgithubから、
My ~/.config/lxterminal/lxterminal.conf with solarized colors
[general]
fontname=Takaoゴシック 10(←各自の環境によって変わるのでここは変えない)
selchars=-A-Za-z0-9,./?%&#:_
scrollback=1000
bgcolor=#fb64f230d695
bgalpha=65535
fgcolor=#000000000000
disallowbold=false
cursorblinks=false
cursorunderline=false
audiblebell=false
tabpos=top
hidescrollbar=true
hidemenubar=true
hideclosebutton=true
disablef10=false
disablealt=false
これを~/.config/lxterminal/lxterminal.confに、バックアップしてから修正する。
新たに起動すると、背景が肌色になる。

ls:
dircolorsというコマンドが必要らしい。なければapt-get。
またはcoreutilsというのを入れるのかな。こちらのサイト様を参照。
LS_COLORSを設定しよう - Qiita
dircolors-solarizedのリンク先が以下のgithubなので、コマンドは以下の通り。
mkdir -p ~/downloads/dircolors-solarized (ダウンロード先を作成)
cd ~/downloads/dircolors-solarized
git clone http://github.com/seebi/dircolors-solarized
(gitが入ってないならまたapt-get。ここで実行してもOK)
ずーっと奥にdircolors.ansi-universalがある。
とりあえずそこへcdで移動。

設定はこのファイルをまたどこかに置く(直接参照してもいいけどあとでdownloadsごと移動したら困るので)。
mkdir ~/settings
cp dircolors.ansi-universal ~/settings/ (settingsというディレクトリの下にコピーする)
cd ~
vi .bashrc
一番下に追記。
eval $(dircolors ~/settings/dircolors.ansi-universal)

これでlsで実行ファイルは黄緑→赤になる。
ディレクトリは青→水色、ファイルは黒→緑。universalだから黒地でも見やすいようだ。

vi:
こちらのサイト様を参考に。
最強カラースキームと言えば SOLARIZED だよね! | blog.remora.cx
やっぱりdownloadsに移動して、
mkdir solarized
cd solarized
git clone git://github.com/altercation/solarized.git
cd solarized (かぶった)
ここにvimのがあるので、
これの中身を.vim直下にコピー。
cp -r vim-colors-solarized/* ~/.vim/
一応これでviでソースを開くとcのキーワードが黄緑→薄い茶色、型が緑になった。

lxterminalの色に関わらず、vi独自にlightとdarkを切り替えられると、このサイト様の「vim-colors-solarized の設定」にある。少し異なるが次のように~/.vimrcに追記する。
let g:solarized_termcolors=16
let g:solarized_termtrans=0
let g:solarized_degrade=0
let g:solarized_bold=1
let g:solarized_underline=1
let g:solarized_italic=1
let g:solarized_contrast='low'
let g:solarized_visibility='normal'
syntax enable
set background=dark
colorscheme solarized
コントラストはnormalだとlightの時黄色が全く見えない。
黒地はこれが一番見やすいかも。白地(肌色も)ならこの追記自体をしないのがよい。
lxterminalの白地の背景がviのデフォルトカラーと合っているので。

画面はlxterminalが白地と肌色とviの黒地(normal+dark)で、黒地はキーワードが見づらい。ディスプレイの調整で明るさとブルーを減らしているせいもあるが。
if文は茶色がわかりやすいようにマウスで反転させている。

[lxterminal:白地 & .vimrc:設定無]
a0034780_19270698.jpg
[lxterminal:肌色 & .vimrc:設定無]
a0034780_20513911.jpg
[lxterminal:何でもいい & .vimrc:設定normal+dark]
a0034780_20515599.jpg
lsがカラー化した時は嫌だったけどこれなら使っていけそうだ。
[PR]
by k1segawa | 2016-08-25 18:35 | X-Window | Comments(0)

Japanino ArduinoISPで ATtiny13 で PWM (5) - BASCOM-AVR (8/25)

arduino IDEで記述していたが、PWMをBASCOM-AVRでも記述。
こちらのフォーラムの最後のを採用。
ATTiny13 / Timer1 + Bascom =PWM - Mikrocontroller.net

$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 8
$framesize = 16

Config Portb.0 = Output ' Anschluss an Pin 5 (PB0) und Masse (GND)

Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down

Dim I As Byte

Do
For I = 0 To 255
Incr Pwm0a ' = Pwm0a + 1
Waitms 10
Next I

' For I = 255 To 0 Step - 1
' Decr Pwm0a ' = Pwm0a - 1
' Waitms 10
' Next I

Loop
End
コメントは外してもかまわない。
はずしてarduino IDEのFadingとほぼ同じで230バイト。Fadingが958バイトだったので全然少ない。

回路:
LチカではPin 2(PB3)に抵抗をはさんでつないでいた、LEDの長い(+:アーノード)足を、PWMではPin 5(PB0:OC0A)へ変更。arduino IDEでFadingを動かしていればPin 6(PB1:OC0B)につないでる足をPin 5へ変更する。
前の通り(ブートローダ書込みでfuseビット書き換えて)9.6MHzで動いていれば約2.5秒おきにフェードアウトを繰り返す(コメント部はフェードイン2.5秒)。

BASCOM-AVRの詳しいサイト様のPWMのページだけではよくわからなかったが、こちらのフォーラムでいくつかの方法がありそのものズバリのソースがあってよかった。

まだまだタイマーにはいろいろな使い方があってPWM以外にも使えるし、PWMもモード(標準、位相、高速など)があって使うPinも2つの場合や1つでいい場合もある。
タイマー自体はPinに出ているのではなく、同様にコンペアとかもそう。Pinに出ているのはタイマーの結果やコンペアの結果を出力(0/1)するように指定しているから。それがOC(アウトプットコンペア)機能のあるPin 5,6やタイマー割込みのPCINTなのだ。んー、この辺はマイコンでよく出てくる方式なので慣れるしかない。
キーワードをATtiny13に限らずBASCOM-AVR PWMやATtiny2312 PWMに変えると出てくる(検索能力の差なのか最初は思いつかなかった)。

以下に配線の様子を示す。
赤が+5V、白がGNDにつながっている。
Japaninoにつながっているのがライタの配線で、単独の方が3Vボタン電池で動く。
ライタの配線はすべての色の線が異なっており、すべて必要。
動作確認用LEDはジャンパ線ではなく、直接抵抗とLEDの足だけでつないでいる。
ので、ライタ自体には不要な配線。今はPWM用にPin 5(PB0:OC0A)-180Ω抵抗-LED(長い方:アーノード)-LED(短い方:カソード)-GND(Pin 4)につながっている。
単独の方は、Lチカなので抵抗の足がPin 2(PB3)につながって、pinMode(3,OUTPUT)で書き込んだ。もちろん白はGND(-)。ATtiny13は外しづらいので8ピンソケットにした方がいい。線も外れやすいので基板にした方がいいな~。カッターで削って回路組めるユニバーサル基板がいいね。
a0034780_13135567.jpg

a0034780_13154783.jpg

a0034780_13161783.jpg

[PR]
by k1segawa | 2016-08-25 11:41 | arduino, AVR | Comments(0)

vimeo ビデオ リンクテスト (8/25)

Youtubeとは違い、vimeoはexciteブログではうまく埋め込めない。
仕方がないので従来通りリンクと画像で。
AROUND THE WORLD
a0034780_20253351.jpg

[PR]
by k1segawa | 2016-08-25 11:39 | Comments(0)

twitter ビデオ リンクテスト (8/24)

twitter の ビデオ 投稿をリンクテスト。
twitter 画面でいいねの隣の・・・(その他)をクリック。[動画を埋め込む]でURLを取得。
HTML編集でそのまま流し込む。

[PR]
by k1segawa | 2016-08-24 20:41 | Comments(0)