728x90
반응형
[ARM] 미니 프로젝트
프로젝트 명 : 도서 관리 미니 프로젝트
기능 :
1. ARM과 하이퍼 터미널의 통신 - DBGU 활용
2. ARM에 LCD 모듈 장착하여 도서관리 메뉴 및 리스트 출력 - PIO 활용
3. ARM에 조도센서를 연결하여 주위가 어두워질 경우 자동으로 LCD 백라이트 점등 - ADC 활용
4. PID2 인터럽트로 메뉴 조작
5. PIT로 일정시간 입력이 없을 경우 초기화면으로 이동
구현 :
1. 하이퍼 터미널 통신 - DBGU
DBGU는 한 번에 문자 하나만 송수신할 수 있기 때문에 문자열을 송수신하려면 특정값('\n')이 입력될 때까지 버퍼에 이전 문자열을 저장해 두어야 한다.
따라서 아래와 같은 함수 구조를 만들어 문자열을 송수신할 수 있게 하였다.
[수신]
char dbgu_read(void) { char ch; while (!(DBGU_SR & 1<<0)); ch = DBGU_RHR; return ch; } void dbgu_read_str(const char* str) { unsigned int len = strlen(str); for (int i = 0; i < len; ++i) { dbgu_read(str[i]); } } |
[송신]
void dbgu_write(char ch) { while (!(DBGU_SR & 1<<1)); DBGU_THR = ch; } void dbgu_write_str(const char* str) { unsigned int len = strlen(str); for (i = 0; i < len; ++i) { dbgu_write(str[i]); } dbgu_write('\n'); } |
2. LCD 모듈 출력
정해진 설정을 해주면 기본적인 입출력은 가능하지만 정교한 입출력을 하려면 역시 고려해야 할 사항이 맣다.
화면을 모두 지운 후 값을 쓸 지, 한 줄만 지운 후 값을 쓸 지를 잘 결정해야 하며, 그 외에도 덮어쓰기 될 때 이상한 문자가 출력되기도 한다.
//LCD 기능 설정 void LCD_Instruction(unsigned int ucSData) { PIO_CODR = EN; //LCD 비활성화 PIO_CODR = RS; //명령모드 레지스터 선택 PIO_CODR = RW; //Write 선택 Delayms(1); PIO_SODR = EN; //Lcd Enable Delayms(1); PIO_CODR = D_BUS; // d_bus clear PIO_SODR = ucSData; // 버스에 8bit 씀 set dbus Delayms(1); PIO_CODR = EN; // EN을 H에서 L로 Lcd Disable Delayms(1); } //LCD 데이터 출력 void LCD_Data(const char* data, int Delaytime) { int i; for(i=0; *(data+i)!=0; i++) { PIO_SODR = RS; PIO_CODR = RW; Delayms(1); PIO_SODR = EN; Delayms(1); PIO_SODR = data[i]; Delayms(1); PIO_CODR=EN; Delayms(1); PIO_CODR = data[i]; Delayms(Delaytime); } } |
3. 조도센서
ADC를 이용하여 빛의 밝기에 따라 LCD가 켜질 수 있도록 하였다. 어느 정도의 밝기가 되었을 때 켜질 수 있게 하는가가 중요하다.
void adc() { ch = ADC_CDR[4]; //A/D변환된 데이터를 int 형 변수 ch 에 넣어준다. if(110<ADC_CDR[4]) //조도센서가 밝은 상태면 { PIO_SODR = 1<<14; //CLCD 의 BACK LIGHT OFF } else //조도센서가 어두운 상태면 { PIO_CODR = 1<<14; //CLCD 의 BACK LIGHT ON Delayms(500); PIO_SODR = 1<<14; } } |
4. 5. 여러 기능과 인터럽트가 개별적으로는 잘 작동하지만 합칠 경우 고려해야 할 사항이 많아 제대로 동작되지 않는 경우가 있다.
4, 5 역시 제대로 동작되지 않아 코드 수정이 필요하다.
* ADS 1.2에 C++ 컴파일러가 있어서 C++ 프로젝트 파일을 그대로 적용해보려 했으나 아직 완벽히 C++을 지원하지 않아 부득이하게 C++코드와 C코드가 섞여 있다.
* 실험 결과 C++이 적용되지 않는 부분이다. (정확하지 않음.)
- using namespace : 아직 일부는 지원하지 않는다라는 경고 메시지가 나타난다.
- string 사용 불가 : C++의 string을 쓸 수가 없다. 대신 const char*를 사용해야 한다.
- new 연산자 사용 불가 : 동적 메모리는 운영체제가 할당해 주는데 운영체제가 없으므로 동적 할당이 되지 않는다.
728x90
'코스웨어 > 10년 스마트폰BSP' 카테고리의 다른 글
[BSP]업무일지-이상구-20100719 (0) | 2010.07.19 |
---|---|
[BSP] 업무일지 -김기찬- (0) | 2010.07.16 |
[BSP]업무일지-정호영-20100715 (0) | 2010.07.15 |
[BSP]업무일지-박동수-20100714 (1) | 2010.07.15 |
[BSP]업무일지-강혜정-20100712 (0) | 2010.07.12 |
[BSP]업무일지 - 김강수 - 20100708 (0) | 2010.07.12 |
[BSP]업무일지 - 김병찬 - 20100707 (0) | 2010.07.08 |
[BSP]업무일지-이상구-20100706 (0) | 2010.07.06 |