BASIC4MCU | 질문게시판 | ATmega128로 압력센서
페이지 정보
작성자 바밤 작성일2024-09-27 12:23 조회492회 댓글1건본문
일정 압력이 가하면 led에 불이 켜지고 일정 압력이 가하지 않으면 led off 하려고 소스코드를 작성했는데 led는 불만 들어오고 어디가 문제인지 모르겠습니다 ㅜㅜ
결선 문제일 수도 있으니 하드웨어 사진도 같이 첨부 하겠습니다..!
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned int pressure = 0;
void port_lnit() // 포트 초기화 (입출력 설정)
{
DDRA = 0xFF; // PORTA를 5V 출력으로 설정
PORTA = 0xFF; // 5V 출력 설정
DDRF = 0x00; // PORTF를 입력으로 설정 (ADC용 입력)
DDRB = 0xFF; // PORTB를 출력으로 설정 (LED)
PORTB = 0x00; // LED 초기 상태 (꺼짐)
}
void ADC_lnit()
{
ADMUX = 0x00; // ADC0 사용, AREF, 오른쪽 정렬, 외부 전압 참조
ADCSRA = 0xC7; // ADC 활성화, 단일 변환, 프리스케일러 128
}
void v_lnit()
{
// 압력 센서 값 읽기
pressure = ADCL + (ADCH * 256); // ADC 결과값을 10비트로 합치기
}
int main(void)
{
port_lnit(); // 포트 초기화
while (1)
{
ADC_lnit(); // ADC 초기화
v_lnit(); // ADC 값 읽기
if (pressure > 600) // 일정 압력 이상의 경우 (값은 적절히 설정)
{
PORTB = 0xFF; // LED ON (PORTB에서 LED를 켜는 신호 출력)
}
else
{
PORTB = 0x00; // LED OFF (PORTB에서 LED를 끄는 신호 출력)
}
_delay_ms(100); // 100ms 딜레이 (필요시 조정 가능)
}
return 0;
}
댓글 1
조회수 492master님의 댓글
master 작성일
#include <avr/io.h>
#include <util/delay.h>
//
int pressure=0;
//
int main(void){
DDRA=0xFF; PORTA=0xFF;
DDRB=0xFF;
ADCSRA=0xE7;
while (1){
_delay_ms(100);
pressure=ADCW; // pressure=ADC;
if(pressure>600)PORTB=0xFF;
else PORTB=0x00;
}
}
눌러도 600 이상이 안된다면 항상 꺼져있게 되고
안눌러도 600 이상이라면 항상 켜있게 됩니다.
//
누르지 않았을 때의 값이 얼마인지, 눌렀을 때의 값이 얼마인지 알아야 하는데요
테스터기로 전압을 측정해도 알 수 있습니다.