BASIC4MCU | 질문게시판 | Atmega 온도 부저 도와주십쇼 ㅠㅠㅠ
페이지 정보
작성자 무야호 작성일2022-11-30 20:10 조회566회 댓글0건본문
atmega 128에서 LM35를 이용한 디지털 온도계를 만드는데,
일정한 온도(33도)를 기준으로 고온/저온에서 서로 다른 부저소리 울리는 코드를 작성하려고 합니다.
이 코드는 온도를 측정해 주는 코드 입니다.
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
#include <alcd.h>
#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 0
unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
#define ADC_VREF_TYPE 0x00
// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
static unsigned char input_index=0;
// Read the AD conversion result
adc_data[input_index]=ADCW;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
input_index=0;
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
}
void main(void)
{
int adc_val;
char text[16];
int temp;
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ETIMSK=0x00;
// USART0 initialization
// USART0 disabled
UCSR0B=0x00;
// USART1 initialization
// USART1 disabled
UCSR1B=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AREF pin
ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);
ADCSRA=0xCC;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(16);
// Global enable interrupts
#asm("sei")
while (1)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("LM35 Temperature");
adc_val=adc_data[0];
temp=adc_data[0]*0.0048828125*10;
sprintf(text, "Temp= %i.%2i \xdfC", temp);
lcd_gotoxy(0,1);
lcd_puts(text);
delay_ms(500);
}
}
이 코드는 부저를 사용하여 사이렌소리, 전화벨 소리를 만든 코드입니다.
#include <mega128.h>
#include <delay.h>
void main(void)
{
unsigned char i;
unsigned char k;
PORTD=0xFF;
DDRD=0x00;
PORTE=0x00;
DDRE=0x08;
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
TCCR3A=0x40;
TCCR3B=0x09;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ETIMSK=0x00;
// USART0 initialization
// USART0 disabled
UCSR0B=0x00;
// USART1 initialization
// USART1 disabled
UCSR1B=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{
if(PIND.6==0)
{
DDRE=0xFF;
for(i=0;i<3;i++)
{
OCR3AH=31249>>8;
OCR3AL=31249&0x00FF;
delay_ms(500);
OCR3AH=23528>>8;
OCR3AL=23528&0x00FF;
delay_ms(500);
}
DDRE=0x00;
}
else if(PIND.7==0)
{
DDRE=0xFF;
for(k=0;k<3;k++)
{
for(i=0;i<10;i++)
{
OCR3AH=16665>>8;
OCR3AL=16665&0x00FF;
delay_ms(30);
OCR3AH=24999>>8;
OCR3AL=24999&0x00FF;
delay_ms(30);
}
OCR3AH=0x00;
OCR3AL=0x00;
}
DDRE=0x00;
}
OCR3AH=0x00;
OCR3AL=0x00;
}
DDRE=0x00;
}
여기서 일정한 온도(33도)를 기준으로 고온/저온에서 서로 다른 부저소리 울리는 코드를 만들고 싶은데 어떤식으로 해야할까요??
댓글 0
조회수 566등록된 댓글이 없습니다.