블로그 이미지
fiadot_old

칼퇴근을 위한 게임 서버 개발 방법론에 대한 심도있는 고찰 및 성찰을 위한 블로그!

Rss feed Tistory
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);  
}

,
TOTAL TODAY