회원가입 ID/PW 찾기
AA

Firmsys RFID Demo Kit와 atmaga128로 통신 연습중인데요

Tag에 기록된 hax값을 계속 더해서 총합을 LCD에 출력하는 시킬려구 하는데요

Tag 인식이랑은 잘 하는데 문제는 Tag 인식을 안시켰는데도 부저가 울리면서 쓰레기 값이 수신되네요...

그리고 total값이 32767 이상되면 -32767로 출력이 되는데요

데이터 타입을 바꾸어도 계속 같은 결과가 나옵니다 ㅠ.ㅠ

이 두가지 문제를 어떻게 해결해야 할지... 가르침 부탁드립니다.

 

#include <mega128.h>
#include <stdio.h>
#include <string.h>
#include <delay.h>        
#include <math.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>

flash char SendData[5] = {0x05, 0x02, 0x20, 0x00, 0xff}; // Read single block 
unsigned char rfid_rx[7];

void Rs232_init(void)
{
    DDRE = 0xFE;
    UCSR0A = 0x00;
    UCSR0B = 0x18;
    UCSR0C = 0x06;     
    UBRR0H = 0;
    UBRR0L = 8;    
}

void Putch(char data)
{
   while(!(UCSR0A & 0x20));
    UDR0 = data;
}  

void USART_SendData(void) //명령어 코드를 보내는 함수
{
    int i;
    for(i=0; i<5; i++)                                    
        Putch(SendData[i]);  
}
 
char Getch(void)
{
    while(!(UCSR0A & 0x80));  
    return UDR0;
}

void LCD_port()
{
    PORTA=0xff;
    DDRA=0xFF;
    PORTB=0x00;
    DDRB=0xFF;
    PORTD=0x00;
    DDRD=0xff;
    ACSR=0x80;
}

void main(void)
{      
    int i, j;         
    unsigned int value, won, total;
    unsigned char line1[10], line2[10]; 
     
       
    Rs232_init();
    LCD_port();
    lcd_init(16);    // LCD module initialization

    while (1)
    {
        USART_SendData();  
        // Read single block 입력   

        for(i=0;i<7;i++)
        {
            rfid_rx[i]=Getch();
            if(rfid_rx[i]==0xff)
                break;     
        }              
        if(rfid_rx[0] == 7)                     // Tag Read
        {                
            for(i=2, j=6; i<6; i++, j-=2)
            {
                value = rfid_rx[i]*pow(16,j);   // Read single block을 10진화
                won += value;
            }
            total += won;
            sprintf(line1, "%d", won);
        }       
        else if(rfid_rx[0] == 5 || rfid_rx[0] == 0xff )   
        {
            won = 0;
            sprintf(line1, "%d", won);
        }
        value = 0;
                
        sprintf(line2, "%d", total);

        lcd_clear();   
        lcd_gotoxy(0,0);
        lcd_puts(line1);
        lcd_gotoxy(0,1);
        lcd_putsf("Total : ");
        lcd_gotoxy(8,1);       
        lcd_puts(line2);
        delay_ms(300); 
       
    }
}

댓글 1
  • No Profile
     for(i=0;i<7;i++)
            {
                rfid_rx[i]=Getch();
                if(rfid_rx[i]==0xff)
                    break;     
            }              


    여기서 0xff가 들어오면 데이터 받기 끝인가요?






     if(rfid_rx[0] == 7)                     // Tag Read
            {                
                for(i=2, j=6; i<6; i++, j-=2)
                {
                    value = rfid_rx[i]*pow(16,j);   // Read single block을 10진화
                    won += value;
                }
                total += won;
                sprintf(line1, "%d", won);
            }       
            else if(rfid_rx[0] == 5 || rfid_rx[0] == 0xff )   
            {
                won = 0;
                sprintf(line1, "%d", won);
            }else{

    // 쓰레기값 일때 처리
         }



    이 구문에서 else{}를 추가해서 쓰레기 값을 처리하면 될듯하네요.

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
3 머신러닝, AI & 알고리즘 HOT오목 게임 알고리즘3 새로운하늘 3459 2010.03.29
2 머신러닝, AI & 알고리즘 HOT지하철 최단거리 알고리즘은?2 지워나 2861 2008.06.20
1 머신러닝, AI & 알고리즘 HOT순차 프로그램에 대한 간단한 알고리즘과 재귀 알고리즘의 속도 테스트 - by 아크마7 아크마 3062 2007.08.08
  • 가정이여, 그대는 도덕의 학교이다.
    - 페스탈로치
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.