Lab. of Voynich Code
2023年オーストラリア・インドネシア    金環皆既日食のたくらみ
時刻制御式タイマー ②
ハードウェア製作とファームウェアについて
2022.09.04 Open 2023.02.04 Finished

時刻制御式タイマー…製作の実際

 当初、付加するPICの回路は時計の中に入れてしまうつもりでした。
 が、回路は存外に厚いようで上手く収まらなかった。
 という事で、適当なプラケースに納める事にしました。タクトスイッチ式の設定ボタンの作りで良かったです。

回路の組み立てと箱に収まった状態

 回路は前の記事にある通りに部品配置図に沿って組みました。
 こうして見ると入れ込むことは難しそうにもは見えないかもですが、単4バッテリが入るエリアが存外に大きく、フリースペースは高さが無かったです。ICソケットの厚みが無ければ良いのですが、流石にPICを直付けする度胸は無いです。多分大丈夫とは思うのですが、やっぱりね。
 圧電ブザーからの電流を受けるフォトカプラはドキドキしながら直付けしました。PICからの出力で動くフォトカプラは3回路用意しました。が、3回路入りは無いので2回路+1回路を16ピンICソケットを切断して切り詰めたものに載せました。
 入れるケースは秋月電子通商で売られているABS樹脂ケース(蝶番式・中) 117-TMを使用しました。
 バッテリは単4を入れられたかもです。が、3Vではイマイチ上手く動いてくれない場合があったので、1/2AAサイズ バックアップリチウム電池(3.6V)を使う事にしました。これだと安定動作する様です。
 左側から、時計のメイン基板、スイッチ基板、独自の遅延タイマーの基板となっています。
 スイッチ基板のスイッチは上から
 Mode
 Up
 Down
です。
 これらの基盤は厚手強力な両面テープで液晶基板の裏側に張り付けています。
 右下にあるのがPICの出力側辛の信号で動くフォトカプラ―に繋がったステレオジャックです。モノラルでも良いのですが、ニコンのデジタル一眼を駆動できるようにフォーカス・シャッターの順で動くようファームを組んでいます。

ファームウェアの概略

ファームウェアでは、 
  1. アラーム信号が入るまで無限ループ
  2. 時計のアラーム信号が入るとGP3にかかる電圧がなくなるのでこれを感知
  3. GP0を2回Onにしてアラームを切る(所要2秒)
  4. 遅延したい秒数-2秒待つ
  5. 3極プラグに呼応したGP1とGP2を規定秒数(ココでは234秒)Onにする
というだけのものです。
 この程度の制御に12F683は高性能=高価すぎるのですが、手持ちがあるのでこれにしました。またGPIOで直にOn/Offを制御しているのは、なぜかGP0がうまく動いてくれなかったからです。

プログラムリスト(起動空の遅延時間部分は未決定・仮置きで12秒) Download

/*
 * File:   newmain.c
 * Author: M_shi_Lab
 *
 * for 12F682
 *
 * Created on 2023/01/24, 21:01
 * Finish on 2023/02/04
 */


#include <xc.h>

#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config IESO = ON #pragma config FCMEN = ON #define _XTAL_FREQ 4000000 void main(void) { TRISIO = 0b00111000; ANSEL = 0b00000000; WPU = 0b00001100; CMCON0 = 0x07; GPIO = 0b00000000; while(1){ if(GP3 == 0 ){ //Alarm off, take 2sec GPIO = 0b00000001; __delay_ms(500); GPIO = 0b00000000; __delay_ms(1000); GPIO = 0b00000001; __delay_ms(500); GPIO = 0b00000000; //Delay 10sec (total 12sec) __delay_ms(10000); //Switch on for 234sec GPIO = 0b00000010; __delay_ms(100); GPIO = 0b00000100; __delay_ms(50000); __delay_ms(50000); __delay_ms(50000); __delay_ms(50000); __delay_ms(34000); GPIO = 0b00000000; } __delay_ms(50); } return; }
inserted by FC2 system