「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



昨日、DigiSparkのタイマ0でタイマ割り込みができた
ので、これとanalogWriteは両立するのかなぁ?と思って、
昨日のスケッチを元に色々弄り回す。

とりあえず、昨日の割り込み処理でタイミングを計って、
適当にアナログ出力(PWM)する処理を組み合わせてみた。

…出力が出てこない。

色々弄り回してみると、どうやらタイマ0で割り込み処理
を掛けちゃうと、analogWriteとかち合って出力できない
みたい。
DigiSparkのTINY85は、タイマ0とタイマ1が入ってて、
DigiSparkは内部のタイミング関係にタイマ1を使って
いるっぽいので、アナログ出力にタイマ0を使っている
と言うことみたいだな。

さて、戦略を練り直す。

タイマ割り込みを使いたいのは、そもそもdelay関数とか
millis関数とか使わずに、タイマ割り込みで一定周期
で処理を割り込ませたいからなので、内部で使っている
タイマ1を活かす必要は無い。つぶしてもok。

逆に、analogWriteは使い勝手いいので、こいつを活かす
方向で考えたい。


というわけで、タイマ割り込みはタイマ1のレジスタを
上書きして、タイマ1で占有しちゃうことにする。

色々実験してみたら、上手いこと行くようなので、後で
そこそこ使いまわしできるようなスケッチにしておいた。
タイマ1割り込みとanalogWrite混ぜ混ぜの素材スケッチ。
(例によって、半角不等号はこのブログの制約によって、
 全角不等号に置き換えてあるので、修正してから使って
 ください)
#include <avr/interrupt.h>

int ledPin1 = 1;
int ledPin2 = 0;
volatile unsigned char vcnt;


ISR(TIM1_COMPA_vect) {
  // 16.5 Mhz / (512*126) = 256 Hz
  vcnt++;
}


void setup()  {
  vcnt = 0;

  cli();
  //initialize the timer1
  TCCR1  = (1<<CS13 | 1<<CS11) ; // Timer1 prescaling 512 and clearing other bits
                                 //  disconnected from output pin OC1A
  //TCCR1  = (1<<CS13 | 1<<CS10) ; // Timer1 prescaling 256 and clearing other bits
  //                               //  disconnected from output pin OC1A
  //TCCR1  = (1<<CS13) ; // Timer1 prescaling 128 and clearing other bits
  //                               //  disconnected from output pin OC1A
  TIMSK  |= (1<<OCIE1A);     // enable timer1 compare interrupt
  //set the timer1 count
  OCR1C = 126; // Count 126 cycles before calling ISR interrupt (0..255)
  //initialize global interrupts before beginning loop
  sei();
} 


void loop()  {
  analogWrite(ledPin1, vcnt);
  analogWrite(ledPin2, vcnt);
}

プログラム中のコメントにもあるように、プリスケーラ
は現状512に設定してあって、コメントを付け直せば
256とか128とかには簡単に直せるようになってる。

んで、カウンタとのコンペアレジスタには126を入れて
ある。これは、約1秒間隔にしたかったからで、1回の
割り込みが発生する間隔は

 16.5MHz ÷ 512

で32,226.5625Hzくらい。この割り込み毎にカウンタ
変数vcntを1ずつカウント。このvcntは、unsigned
char型(8ビット変数…0~255まで)の域値で、

 16.5MHz ÷ 512 ÷ 255 = 126

なので、逆にコンペアレジスタに126を入れておけば、

 16.5MHz ÷ 512 ÷ 126 = 255

となって、vcntが0~255までカウントして桁あふれ
起こすのは1秒に1回。このvcntをanalogWriteから
出力すれば、丁度1秒ごとにLEDがホワンホワンする
と言う具合。あまり行儀のいいプログラムじゃない
けど、極力短い行数にしてみた。

よく考えたら、126を設定すると、カウンタは0~126
まで127回カウントしちゃうから、1減らしておかないと
いけないんだったっけ?最近タイマ関係のレジスタを
ちゃんと弄ってないから、正確なところを忘れてしまって
いたな。

まぁ、そもそも内部のRC発振で使ってるんだから、
1%以下の細かいところは気にしないでいいや。


で、こんな素材ができたので、ロウソクほわんほわんの
スケッチを、こいつを使って改造してみた。

以前、delay関数使って1ミリ秒ごとにホワンホワンして
いたときとほぼぴったり同じ動作してくれている。

よし。


あとはアナログ入力使って、衝撃センサからの入力に
よって、火が消えそうになるようなシミュレートとか、
電源管理オンオフ制御周りとか、その辺がなんとかなれば
もうばっちりかな。


(追記)
http://nekosan0.bake-neko.net/warehouse_digispark.html
サイトに纏めました。細かい間違えとかも補記してあります。




http://akizukidenshi.com/catalog/g/gM-08619/

秋月に、こんな昇圧回路基板あったのか。
電池1本からでも5V取れて、3V入力時には最大85%。
なかなか便利っぽいな。これはよさげ。知らなかったな。





こないだのWindows Update以来、Windows7機がすんごい
遅い、というか、HDDのアクセスが重すぎて困っている
ので、イベントログに何かエラー出て無いかとか、
変なプログラムがタイマ起動登録されて無いかとか、
色々調べてみた。

Bonjourが大量にエラー吐いてるのはわかったんだけど、
どうやらこれが直接悪いわけでもなさそうなので、
放置しておく。
なんか、あれこれ弄った後にPCを再起動。そしたら、
なんかWindows Updateの残骸っぽいもののインストール
作業が進み始めた。再起動後、いつものように軽くなった
状態に戻ったなぁ。戻った。

なんだよ、Windows Updateの最中に、やれ再起動しろ、
やれ再起動しろとまくし立ててくるのに、最後の1回で
再起動しろなんて言ってこないせいで、こんなに重いPC
を何日も使わされる羽目になったのかよ…

https://twitter.com/felis_silv/status/951039584296579078

投機的再起動…というところかな。





https://twitter.com/YahooNewsTopics/status/951766252808060928

0.04%って…

これ、σで言ったらどのくらいよ?完全な異常値でしょ?

もしこれが「通常値」と言えるのであれば、重力波って、
じつはまだ見つかってなかったんじゃないの?

もう絶滅宣言しても、だれも怒らないよ。

https://twitter.com/false800/status/951260625497309184

日本人ももうじき絶滅するんじゃね?






https://twitter.com/Wu_Niang/status/952155677639651333

バーチャルyoutuberといえば、例の界隈ではポンコが
その走りじゃね?と言っているみたい。

https://www.youtube.com/watch?v=IOD5dup-968&t=235

最後の方で、レモンとふかひれがバシバシ入れ替わってる。





https://twitter.com/nakagawa_ho/status/952112064016732161

にんげんだもの
     みつを





https://twitter.com/tokoya/status/951581786319892480

おじーちゃん、もう免許返したでしょ!!





https://twitter.com/Beriozka1917/status/746592298964680704

>先制攻撃をすると敵国条項による制裁攻撃で国連加盟国
>から問答無用で攻撃を受ける

中国とロシアは、核兵器を持った国連加盟国で、しかも
いわゆる仮想敵国だからな。何されても文句言えないし、
アメリカがそのときに守ってくれるなんて考えるだけ
無意味だな。怖い話だな。






(追記)
すっごいの見つけちゃったので、貼っておく。

http://www.nicovideo.jp/watch/sm32581103

「紙でAAA-5 アンタレスをつくってみた」

アンドロメダ級5番艦アンタレス。

すっごいねぇ。なんか、編集画面がメタセコに似てるなぁ
と思ったら、メタセコだった。こんな造形できるツール
だったの?と、改めて思った。すごいねぇ。

紙の展開図にするのって、なにかツールがあるのかな?
なんか、昔、こういう風に紙の展開図にするツールを
どこかで見たような気がするんだけど、内部のキール
みたいのまで自動展開できたりしないよなぁ…



コメント ( 0 )