블로그 이미지
fiadot_old

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

Rss feed Tistory
Diary 2007. 4. 10. 13:54

이공계 장학금 관련...

한국과학재단
국가 과학기술 장학사업
2006년 11월
지원기간 2006년 2학기 1회 지급

,
Diary 2007. 3. 19. 06:10

근황...

나름 빡빡한 삶을 살고자 블로깅과 웹질, 메일질, 게임질(이건 제외ㅡㅡ;)을 자제하면서

다양한 분야에 손만 살짝 담그다 말다 하고 있다.


제일 먼저 마이크로 마우스...

요놈 처음에는 신기하고 잼있더니 가면 갈수록

어이없는 실수들(와이어 끊어져서 안되는거, VCC,GND반대로 연결하기, 부품태워먹기...등등)로

난감 시츄에이션이 연출되고...

흥미를 잃어가고 있다.

정떨어지기전에 빨리 완성해야된다 ㅡㅡ;;;

이제 맵 빌딩 부분만 남았는데 그나마 SW로 하는 부분이라 다행이다.


멤버쉽 창의과제 들어가기전에 토익에 올인하려고~

학교선배(제원이행님 짱~^^)에게 개인강습(?)-처음에는 스터디였음 ㅡㅡ; -을 받고 있다.

과연 4월 29일 토익에서 얼마나 점수가 나올것인가~


다른건 다 찌질하게 손데는것들...

WDM드라이버, OS제작, 파일시스템, RTOS, 루아....

뭐 하나 집중을 해야하는데~ 다하고 싶어서 미치겠따 ㅡ_ㅡ;;

꼭 공부못하는것들이 책 이것저것 펴놓고 혼자 공부는 다하는것처럼 하긴 하더만~...

딱 그꼴...

지은이햄 책산거 줘야하는데~ 그것도 붙들고 ..;;



,
Idea 2007. 3. 17. 23:57

웨어러블(wearable) 기기에 있어서 인체내 무선통신의 응용

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2007. 3. 17. 15:12

VC++ 프로그래밍 관련 잡다한 정보 몇가지..

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

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);  
}

,
Technical Article 2007. 1. 30. 21:03

ShellExecute와 ShellExecuteEx 를 이용해 프로세스 실행하기!

// case 0. 그냥 실행하는 경우
ShellExecute(NULL, "open", strFileName, "updated" , NULL, SW_SHOW);



// case 1. 해당프로세스를 실행시킬때 인자 넘기기
SHELLEXECUTEINFO seInfo = {0};

seInfo.cbSize = sizeof (SHELLEXECUTEINFO);
seInfo.lpVerb = "open";
seInfo.lpDirectory = m_strExePath;
seInfo.lpFile = m_strExeFile;
seInfo.lpParameters = "onbada";
seInfo.nShow  = SW_SHOWNORMAL;

ShellExecuteEx (&seInfo);
EndDialog(IDOK);


// case 2. 해당 프로세스가 끝날때까지 기다리기
SHELLEXECUTEINFO seInfo = {0};

seInfo.cbSize = sizeof (SHELLEXECUTEINFO);
seInfo.fMask  = SEE_MASK_NOCLOSEPROCESS;
seInfo.lpVerb = "open";
seInfo.lpDirectory = "d:\";
seInfo.lpFile = "FiaLineCnt.exe";
seInfo.nShow  = SW_SHOWNORMAL;

if (ShellExecuteEx (&seInfo))
{
 WaitForSingleObject (seInfo.hProcess, INFINITE);
}
,
Hardware 2007. 1. 29. 10:21

16x2캐릭터 LCD(LC1621)에 글자찍기 성공!!!

사용자 삽입 이미지


Atmega162 + 16x2캐릭터 LCD(LC1621)

V0(Contrast)에 GND 안물리면 안나온다는걸 뼈저리게 느끼는 순간 --;

핀배열은 다음과 같다.


핀: LC1621 - Atmega162
1 : GND - GND
2 : VCC - VCC (5V)
3 : V0 - GND
4 : RS - PA0
5 : RW - PA1
6 : E(Enable) - PA2
7 : DB0
8 : DB1
9 : DB2
10 : DB3
11 : DB4 - PA4
12 : DB5 - PA5
13 : DB6 - PA6
14 : DB7 - PA7
15 : 백라이트 VCC(5V)
16 : 백라이트 GND


4비트 제어를 하기 위해서 DB0~3까지 안쓰고 했는데~
궂이 4비트로 할필요는 없을듯한데 ;; 그렇게까지 핀수가 모자라다면
그냥 Atmega128로 넘어가는게 나을듯~

이상 3시간 반의 삽질결과~

관련 링크
마이크로마우스 Jina의 캐릭터 LCD(LC1621) 제어 소스 공개 (http://www.fiadot.com/TatterTools/1909)
Atmega128 마이크로마우스 위험인식로봇(http://www.fiadot.com/TatterTools/1849)

,
Hardware 2007. 1. 28. 06:32

스텝모터 제어~

SLA7024를 모터 드라이버를 사용하는 스텝모터(바디포함)를 구해서
모터를 돌렸다.

핀 배열은 다음과 같다.

200펄스당 1.8도인가 .. 그렇다고 한다;;(카더라~ 통신)

1 - VCC(AVR 5V)
2 - GND
3 - CLK A(클럭 : 딜레이 줘서 0,1주면 된다)
4 - CLK B
5 - ENABLE A(활성화 여부 : 1주면 켜진다)
6 - ENABLE B
7 - DIR A(방향 : 0이면 전진, 1이면 후진)
8 - DIR B
9 - PHASE (사용안함)
10 - VCC (Motor 10V)

데이터시트보고 가르쳐준 성하와 민경이 한테 감사의 마음을 ^^
모터빌려준 하지도 물론~ ㅋㅋ

,
Hardware 2007. 1. 27. 05:40

첫번째 AVR Atmega162 프로젝트~~ 뚜둥~

[결과]
mms://wm-002.cafe24.com/lovydayz/heart0005.mp4


[소스]


#include <mega162.h>
#include <delay.h>                          



#define NORMAL_DELAY 100   // delay per each led
#define MODE_DELAY   200   // mode change

#define LED_MAX      18    // total LED count


void InitLED();    
void SetLED(int nPos, int nStatus);
void SetAllLED(int nStatus);    // 전체 LED                   

void RightShiftLED(int nAcc, int bInc);   // 가속도, 누적
void LeftShiftLED(int nAcc, int nInc);             

void SplashLED(int nDelay, int nRepeat); // 번쩍 번쩍
       
void UpToDownLED(int nAcc);
void DownToUpLED(int nAcc);   

void StarSplashLED(int nAcc, int nRepeat);


int n;
int nDelay; // for calcuration accelation

void main()
{
DDRA = 0xff;
PORTA = 0x00;

DDRB = 0xff;
PORTB = 0x00;

DDRC = 0xff;
PORTC = 0x00;
 

while(1)
{               
// pattern 1
     nDelay = 150;
     RightShiftLED(-3,0);

     nDelay = 200;
     RightShiftLED(0,1);      
    
     nDelay = 150;
     LeftShiftLED(-3,0);
 
     nDelay = 200;
     LeftShiftLED(0,1); 
    
    
// pattern 2           
     SplashLED(500, 3);
    
// pattern 3
   
     nDelay = 100;
     UpToDownLED(100);          

     nDelay = 100;          
     DownToUpLED(100); 
                    
// pattern 4
     nDelay = 300;
     StarSplashLED(0,5);
}
}                

     

void InitLED()
{      
  PORTA = 0x00;
  PORTB = 0x00;
PORTC = 0x00;
       
  SetAllLED(0);  // 이거 없으니까 버그 생긴다-_-
  n = 0;        
}


void SetLED(int nPos, int nStatus)

  switch ( nPos )
  {
case 0: PORTA.0 = nStatus; break;
case 1: PORTA.1 = nStatus; break;
case 2: PORTA.2 = nStatus; break;
case 3: PORTA.3 = nStatus; break;
case 4: PORTA.4 = nStatus; break;
case 5: PORTA.5 = nStatus; break;
case 6: PORTA.6 = nStatus; break;
case 7: PORTC.0 = nStatus; break;
case 8: PORTC.1 = nStatus; break;
case 9: PORTC.2 = nStatus; break;
case 10: PORTC.3 = nStatus; break;
case 11: PORTC.4 = nStatus; break;
case 12: PORTC.5 = nStatus; break;
case 13: PORTC.6 = nStatus; break;
case 14: PORTC.7 = nStatus; break;
case 15: PORTB.0 = nStatus; break;
case 16: PORTB.1 = nStatus; break;
case 17: PORTB.2 = nStatus; break;  
  default: break;  
  }
 
}
 
void  SetAllLED(int nStatus)

  int nLedCnt;
  for(nLedCnt=0;nLedCnt<LED_MAX;nLedCnt++)
  { 
     SetLED(nLedCnt, nStatus);
  }                                       
}  

// whole LED on or off ..  
void SplashLED(int nDelay, int nRepeat)
{
  int bStatus = 1;
  int j=0;

  InitLED();
                    
  for(j=0;j<nRepeat*2;j++)
  { 
     SetAllLED(bStatus);
     bStatus = bStatus == 0 ? 1 : 0;
     delay_ms(nDelay); 
  }
}

     
void RightShiftLED(int nAcc, int bInc)

  InitLED();
 
  for(n=0;n<18;n++)
  {   
     if ( 0 == bInc )
        SetLED(n-1, 0);
       
     SetLED(n, 1); 
        
     if ( 0 < nDelay+nAcc && 5000 >= nDelay+nAcc )
        nDelay += nAcc;
     delay_ms(nDelay);                        
  }
 
//   delay_ms(MODE_DELAY);
}
 
void LeftShiftLED(int nAcc, int bInc)
{             
  InitLED();  
 
  for(n=17;n>=0;n--)
  { 
     if ( 0 == bInc )
        SetLED(n+1, 0);
       
     SetLED(n, 1);
     if ( 0 < nDelay+nAcc && 5000 >= nDelay+nAcc )
        nDelay += nAcc;   
     delay_ms(nDelay);        
  }       
 
//   delay_ms(MODE_DELAY);
}
                        

void UpToDownLED(int nAcc)
{
  InitLED();
 
  for(n=0;n<9;n++)
  {         
     SetLED(n,1);
     SetLED(LED_MAX-n,1);
         
     if ( 0 < nDelay+nAcc && 5000 >= nDelay+nAcc )
        nDelay += nAcc;
     delay_ms(nDelay);                        
  }  
 
  SetLED(n,1);
  delay_ms(nDelay);

   
void DownToUpLED(int nAcc)
{
  InitLED();
 
  SetLED(9,1);
  delay_ms(nDelay);
    
  for(n=8;n>=0;n--)
  {         
     SetLED(n,1);
     SetLED(LED_MAX-n,1);
         
     if ( 0 < nDelay+nAcc && 5000 >= nDelay+nAcc )
        nDelay += nAcc;
     delay_ms(nDelay);
  } 
}                        
 
void StarSplashLED(int nAcc, int nRepeat)
{  
  int nStatus = 0;         
  int t=0;

  InitLED();
 
for(t=0;t<nRepeat;t++)

for(n=0;n<18;n++)
{          
  if ( 0 == nStatus )
  {
   if ( 0 == n%2 )
    SetLED(n,1);
   else
    SetLED(n,0);
  }      
  else
  {
   if ( 1 == n%2 )
    SetLED(n,1);        
   else
    SetLED(n,0);           
  }                           

nStatus = nStatus == 0 ? 1 : 0;                              

if ( 0 < nDelay+nAcc && 5000 >= nDelay+nAcc )
  nDelay += nAcc;
delay_ms(nDelay);
}
}

,
Hardware 2007. 1. 27. 01:19

AVR의 세계~ 유후~

누리 프로젝트와 개인적인 일로 AVR Atmega를 해야만 한다!!
24일 서울에 교육갔다왔더니 부품이 와있군~ 으흐흐~

앞으로 AVR에 대해서 공부하는걸 이 분류에 넣고자 추가해보았다.
최종 목표는 몇가지 센서를 부착하고 있는 마이크로 마우스~!!!

진행상황과 알게된 지식을 정리하고자 한다.


현재까지 진해상황

24일 : AVR-ISP(Atmega에 케이블을 통해 프로그램을 심을수 있는 In system Programming)
        2시간 수소문 끝에 구함 +_+;;  빵판에 LED 불켜봄  앗싸~조쿠나
        민걸이햄이 atmega128보드를 던져줘서 그놈으로 LED테스트~ 잘되네~

       CodeVisionAVR 1.24.8d 기본셋팅
       Setting - Programmer Settings 에서
          AVR Chip Programmer Type : Kanda Systems STK200+/300
          Printer Port : LPT1: 378h
          Delay Multiplier : 1
          Atmega169 CKDIV8 Fuse Warning : 체크

              

25일 : ISP를 통해 Atmega162에 프로그램하기 위해서 ISP케이블과 10핀을 이용해
        납땜. 핀 구조를 몰라서 개삽질함.
        __ -__    (위에가 뽈록한 컨넥터를 기준으로 )
        13579  
        24680
           
        1 : SCK 8핀
        2 : ACC(+)
        3 : GND(-)
        4 : X
        5 : TXD0 11핀
        6 : GND
        7 : RXD0 10핀
        8 : GND
        9 : RESET 9핀

        이거 한다고 민걸이햄 보드 핀 배열과 온갖 책 뒤짐 -_-;
        책에 있는게 맞는지 몰라서 몇번 삽질~ 흐흐흐

        XTAL1,2(19,18핀)에 크리스탈 16MHz짜리 박고 20pF 콘덴서 2개 박고 GND연결
        2핀으로 전원부 연결(입력은 5V)
        4핀짜리 소켓하나 박아서 GND, ACC, 17핀, x) 해서 LED로 테스트

        테스트 소스~

#include <mega128.h>
            
void FiaDelay(int nRemain);

void main()
{         
      
       DDRD = 0xFF;
      
       while(1)
       {
       PORTD = 0xFF;       
       FiaDelay(50);
      
       PORTD = 0x00;
       FiaDelay(50);
       }  
}     

void FiaDelay(int nRemain)
{  
     int i,j,k;


    for(i=0;i<200;i++)
        for(j=0;j<200;j++)
               for(k=0;k<nRemain;k++); 
}



26일 : LED18개를 제어하기 위해 새로운 만능기판에 땜질 시작 했다.
        전윈 2핀짜리를 빼서 7805에 연결하고(나중에 9V건전지로 할 예정) 스위치 연결.
        대략 땜질하는데 3시간 소요 -_-;; 아고 어깨야~
        불이 3개가 안들어와서 포트 문젠가 싶었더니
        완회씌가 include를 Atmega128로 해놔서 그랬다는군 ;;; 난또 PE포트가 전류가 약한줄 알았3;;
         
        오늘남은거는 LED하나씩 제어해보는거~ 타이머까지 하면 좋고~
       
 
,
TOTAL TODAY