atmega128을 이용하여 rfid와 lcd를 연동하려합니다. 도와주세요 ㅜㅜ
페이지 정보
작성자 eeekekek 작성일19-11-29 18:18 조회14,457회 댓글1건본문
codevision을 이용하여 코드를 작성하였습니다.
atmega128 초보자인데요
rfid에서 인식한 정보를 atmega에 불러와서 atmega에 있는 lcd에 띄우려고 합니다.
rfid는 rc522를 사용하였고 atmega128은 kut-128키트를 사용하였습니다
atmega128에서 spi통신하는 부분에 있는 ss sck mosi miso핀과 rfid에 있는 같은 이름의 핀들을 연결한 후 사용하였구요.
lcd에
#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 LCD_init(void);
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];
LCD_string("start ");
Rs232_init();
LCD_port();
lcd_init(16); // LCD module initialization
while (1)
{
USART_SendData();
// Read single block 입력
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 {
}
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
조회수 : 14,457
master님의 댓글
master 작성일
뭐가 되고 뭐가 안되는지 모르겠지만
통신 관련해서는 오실로스코프나 로직아날라이저로 파형을 체크하면서 디버깅 하셔야합니다.