AVRでサーモスイッチ…テスト

イメージ 1
昨日の夜中、回路図どおりブレッドボードに配置しました。

上部可変抵抗器は作動温度調節
下部可変抵抗器はサーミスタ(温度センサー)の代わり
タクトスイッチは手動スイッチの代わり

AVRは、内部クロック最低値0.5MHzで動作させ
即プログラミングしテストしてみました。

いまのところ問題なく動作している感じ♪
回路図中央にある300kΩの抵抗器でON、OFF時の
温度差を実現しております。
計算では約4℃くらいの差がでているはず??

アナログで作ったときよりは良い物ができそうです。

[実際のプログラムです。意外と短い!?]

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <string.h>
#include <stdlib.h>

/* 時間待ち */
void wait(uint16_t w){

while(w–){

volatile uint16_t i=200;
while(i–);

}

}

/* デバイスの初期化 */
void init_devices(void){

cli();

DDRB = 0xFC;
PORTB = 0xFB;
DDRA = 0xFF;
PORTA = 0xFF;
DDRD = 0xFB;
PORTD = 0xF7;

DIDR = 0x03; //デジタルインプットを無効

}

int main( void )
{

uint8_t c;
uint8_t SW_ON = 0; //スイッチフラグ

//—内臓RC発振器の初期化
c = pgm_read_byte(FLASHEND-1); // written by -c switch
if(c != 0xFF) OSCCAL = c;

//— デバイスの初期化
init_devices();

for(;;){

//—手動スイッチがONで既にONの場合(何もしない)
if((PIND & (1<<PD2))==0 && SW_ON);

//—スイッチON動作
else if(((ACSR & (1<<ACO))==0 || (PIND & (1<<PD2))==0) && !SW_ON){

SW_ON = 1;
PORTB |= (1<<PB2);
PORTD |= (1<<PD3);

wait(75); //約0.5秒

}

//—スイッチOFF動作
else if((ACSR & (1<<ACO)) && SW_ON){

SW_ON = 0;
PORTB &= ~(1<<PB2);
PORTD &= ~(1<<PD3);

wait(75); //約0.5秒

}

}

}

コメント