体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

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)