
昨日の夜中、回路図どおりブレッドボードに配置しました。
上部可変抵抗器は作動温度調節
下部可変抵抗器はサーミスタ(温度センサー)の代わり
タクトスイッチは手動スイッチの代わり
下部可変抵抗器はサーミスタ(温度センサー)の代わり
タクトスイッチは手動スイッチの代わり
AVRは、内部クロック最低値0.5MHzで動作させ
即プログラミングしテストしてみました。
即プログラミングしテストしてみました。
いまのところ問題なく動作している感じ♪
回路図中央にある300kΩの抵抗器でON、OFF時の
温度差を実現しております。
計算では約4℃くらいの差がでているはず??
回路図中央にある300kΩの抵抗器でON、OFF時の
温度差を実現しております。
計算では約4℃くらいの差がでているはず??
アナログで作ったときよりは良い物ができそうです。
[実際のプログラムです。意外と短い!?]
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <string.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <string.h>
#include <stdlib.h>
/* 時間待ち */
void wait(uint16_t w){
void wait(uint16_t w){
while(w–){
volatile uint16_t i=200;
while(i–);
while(i–);
}
}
/* デバイスの初期化 */
void init_devices(void){
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; //スイッチフラグ
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);
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);
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);
PORTB &= ~(1<<PB2);
PORTD &= ~(1<<PD3);
wait(75); //約0.5秒
}
}
}


コメント