글
Hardware 2007. 1. 31. 05:57적외선 LED 테스트
적외선 수광부 발광부를 PORTE 0,1번핀에 각각 연결해서 330옴 저항달고 연결했다.
물론 수광부는 +, -를 반대로 꽂고...
ADC를 이용해서 10비트를 받아서 스트링으로 변환해서 찍었는데
최대 1023이 나와야 한다고 하는데 44밖에 안나온다 -_-;;
센싱은 되는데 값이 부정확하니 나중에 이를 어찌할꼬~ 흐흐
#define SetBit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define ClearBit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))#include <mega128.h>
#include <delay.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include "lcd.h"
#include "util.h"
#include "uart.h"void AD_disp(int);
void main(void)
{
unsigned char pszData[4];
unsigned char string[20];
int ad_val;
// unsigned char receive_data = NULL;
// LCD 포트 초기화
LCDPortInit();
// LCD 초기화 명령
LCDInit();
LCDControl(LCDCLEAR);
LCDControl(LCDCLEAR);
/*
delay_ms(20);
// 블루투스가 19200으로 셋팅되어 있으므로.
UARTInit(19200);
*/
delay_ms(20);
LCDControl(LCDLINE1);
LCDStringOut2("FIA");
// #asm("sei");
//블루투스를 통해 받을 거 밖에 없으므로 따로 작업할 것이 없다.
// PF.0 = 수광부
// PF.1 = 발광부
DDRF = 0x7F;
PORTF = 0x40;
// PORTF.1 = 1;ADMUX = 0x20;
ADCSRA = 0x87;
delay_ms(5);
while(1)
{
ADCSRA = 0xC7;
while( ( ADCSRA & 0x10) == 0 );
ad_val = ADCH;
LCDControl(LCDLINE2);
itoa(ad_val, string);
LCDStringOut(string);
//AD_disp(ad_val);
delay_ms(20);
}
}
void AD_disp(int val)
{
unsigned char pszData[16];float fval;
int ival, buf;
char N100, N10, N1;
fval = (float)val * 5.0 / 1023.0;
ival = (int)(fval * 100.0 + 0.5);
N100 = ival / 100 + 48;
buf = ival %100;
N10 = buf / 10 + 48;
N1 = buf % 10 + 48;
// LCDControl(LCDCLEAR);
LCDControl(LCDENTRY);
LCDCharOut(N100);
LCDCharOut(N10);
LCDCharOut(N1);
// sprintf(pszData, "%c %c %c", N100, N10, N1);
// LCDStringOut(pszData);
delay_ms(300);
}
RECENT COMMENT