질문게시판 > avr studio, (atmega128) lcd랑 키패드 질문드립니다!!

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

avr studio, (atmega128) lcd랑 키패드 질문드립니다!!

페이지 정보

작성자 leesk 작성일18-12-17 16:57 조회12,755회 댓글5건

본문

제가 지금 스위치 몇개랑 모터, lcd, 키패드, fnd, 초음파센서 를 다 연결해서 사용하는 걸 만들고 있는데

 

처음에는 초음파 센서랑 키패드 둘다 while문으로 돌게 해서 서로 꼬여서 동작이 안되는줄 알았으나

 

그부분은 얼추 해결이 된듯한데

 

그다음 문제가 lcd에 출력을 시키면 mcu_initialize() 인가 하는 명령에서 (외부 뭐시기였는데.....)

 

오류가 나는지 키패드는 계속 동작을 하고 lcd는 처음 딱 한번 돌고 그대로 멈춰버립니다

 

초음파가 업데이트가 안되는것인지는 led를 써서 확인해 보려고 하고 있는데 만약 lcd문제라면 어떻게 해결해야할지 감이 안와서 자문 남깁니다!ㅠㅠ

 

지금까지 짠 코드를 올리는게 문제해결에 좀 더 도움이 될까요?ㅜ

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 5

조회수 : 12,755

master님의 댓글

master 작성일

회로도 및 전체소스코드 등 필요한 자료를 첨부해야합니다.

leesk님의 댓글

leesk 작성일

// PASSWORD HW + sonic - KEYPAD PORTC, FND PORTA & PORTE FIX INITIALIZE -ING ver.//////////////////////////////////////////////////////
/*
#include "test.h" // 기본 위치에 두도록
#include "lcd.h"  //
#define TIMER8_INTERVAL 125 // for 1msec at 8MHz , 0.5 msec at 16MHz
#define F_CPU 16000000UL
#define time 500
#include <avr/io.h>
#include <util/delay.h>

#define Trigger_1      PORTF|=1  //초음파 트리거
#define Trigger_0      PORTF&=~1 //초음파 트리거
#define Echo            (PINF&2)  //초음파 에코

unsigned char x[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ; //0,1,2,3,4,5,6,7,8,9
unsigned char open[] = {0xbf, 0xc0, 0x8c, 0x84, 0xc8} ; //{-,o,p,e,n}
unsigned char bar[] = {0xf7,0xf7,0xf7,0xf7,0xf7} ; // {_}
unsigned char z[5] = {0x08, 0x04, 0x02, 0x01} ; //출력 순서
unsigned char s[5] ;
unsigned char pw[5] = {0xf7,0xf7,0xf7,0xf7,0xf7};
unsigned char pwo[5] = {0xf7,0xf7,0xf7,0xf7,0xf7};

unsigned int range;

void OpenOutput(int b);
void MakeInputC(int c);
void MakeInputD(int d);
void MakeInputE(int e);
void MakeInputF(int f);
void SaveTobar(int g);
void MakePW(int h);
void BarOutput(int i);
void PassWord(int y);
void getEcho(void);
void ActiveSonic(void);

int password = 0;
int check=0;


int main()

//  sonic part
DDRF=1;                  // PF0 ouput Trigger, PF1 input Echo
TCCR1A=0; TCCR1B=8;      // CTC mode
// MCU_initialize();
// _delay_ms(50);
lcd_init();

// keypad
DDRC = 0xF0;
PORTC = 0x0F;
DDRE = 0xFF ;
DDRA = 0x1F ;
PORTA &= 0xE0 ;
 
for(int j = 0 ; ; j++)
{
// sonic
ActiveSonic; //이게문제가 아님 이니셜라이즈가 문제인듯

//keypad
int k = j % 4 ;
 
PORTA = z[k] ;
if(check == 0) PORTE = pw[k] ;

_delay_ms(5) ;

if(password != 1234)
{
if(pw[3]==0xf7)
{
//  first column
PORTC = 0b01111111; if (!bit_is_set(PINC, 3)) MakeInputC(1) ;
//  second column
PORTC = 0b10111111; if (!bit_is_set(PINC, 3)) ;
if (!bit_is_set(PINC, 2)) MakeInputC(0) ;
//  third column
PORTC = 0b11011111; if (!bit_is_set(PINC, 3)) MakeInputC(9) ;
if (!bit_is_set(PINC, 2)) MakeInputC(6) ;
if (!bit_is_set(PINC, 1)) MakeInputC(7) ;
if (!bit_is_set(PINC, 0)) MakeInputC(8) ;
//  fourth column
PORTC = 0b11101111; if (!bit_is_set(PINC, 3)) MakeInputC(5) ;
if (!bit_is_set(PINC, 2)) MakeInputC(2) ;
if (!bit_is_set(PINC, 1)) MakeInputC(3) ;
if (!bit_is_set(PINC, 0)) MakeInputC(4) ;
}

if(pw[2]==0xf7)
{
//  first column
PORTC = 0b01111111; if (!bit_is_set(PINC, 3)) MakeInputD(1) ;
//  second column
PORTC = 0b10111111; if (!bit_is_set(PINC, 3)) ;
if (!bit_is_set(PINC, 2)) MakeInputD(0) ;
//  third column
PORTC = 0b11011111; if (!bit_is_set(PINC, 3)) MakeInputD(9) ;
if (!bit_is_set(PINC, 2)) MakeInputD(6) ;
if (!bit_is_set(PINC, 1)) MakeInputD(7) ;
if (!bit_is_set(PINC, 0)) MakeInputD(8) ;
//  fourth column
PORTC = 0b11101111; if (!bit_is_set(PINC, 3)) MakeInputD(5) ;
if (!bit_is_set(PINC, 2)) MakeInputD(2) ;
if (!bit_is_set(PINC, 1)) MakeInputD(3) ;
if (!bit_is_set(PINC, 0)) MakeInputD(4) ;
}

if(pw[1]==0xf7)
{
//  first column
PORTC = 0b01111111; if (!bit_is_set(PINC, 3)) MakeInputE(1) ;
//  second column
PORTC = 0b10111111; if (!bit_is_set(PINC, 3)) ;
if (!bit_is_set(PINC, 2)) MakeInputE(0) ;
//  third column
PORTC = 0b11011111; if (!bit_is_set(PINC, 3)) MakeInputE(9) ;
if (!bit_is_set(PINC, 2)) MakeInputE(6) ;
if (!bit_is_set(PINC, 1)) MakeInputE(7) ;
if (!bit_is_set(PINC, 0)) MakeInputE(8) ;
//  fourth column
PORTC = 0b11101111; if (!bit_is_set(PINC, 3)) MakeInputE(5) ;
if (!bit_is_set(PINC, 2)) MakeInputE(2) ;
if (!bit_is_set(PINC, 1)) MakeInputE(3) ;
if (!bit_is_set(PINC, 0)) MakeInputE(4) ;
}

if(pw[0]==0xf7)
{
//  first column
PORTC = 0b01111111; if (!bit_is_set(PINC, 3)) MakeInputF(1) ;
//  second column
PORTC = 0b10111111; if (!bit_is_set(PINC, 3)) ;
if (!bit_is_set(PINC, 2)) MakeInputF(0) ;
//  third column
PORTC = 0b11011111; if (!bit_is_set(PINC, 3)) MakeInputF(9) ;
if (!bit_is_set(PINC, 2)) MakeInputF(6) ;
if (!bit_is_set(PINC, 1)) MakeInputF(7) ;
if (!bit_is_set(PINC, 0)) MakeInputF(8) ;
//  fourth column
PORTC = 0b11101111; if (!bit_is_set(PINC, 3)) MakeInputF(5) ;
if (!bit_is_set(PINC, 2)) MakeInputF(2) ;
if (!bit_is_set(PINC, 1)) MakeInputF(3) ;
if (!bit_is_set(PINC, 0)) MakeInputF(4) ;
}
else
{

for(int h=0; h<4; h++)
{
MakePW(h);
}

for(int y=0; y<4; y++)
{
PassWord(y);
}
pw[0] = 0xf7; pw[1] = 0xf7; pw[2] = 0xf7; pw[3] = 0xf7;
}
}
else
{
check = 1;
PORTE = open[k+1];
_delay_ms(300) ;
OpenOutput(0);
OpenOutput(1);
OpenOutput(2);
OpenOutput(3);
}
// MCUCR = 0x00; // enable external memory and I/O
// XMCRA = 0x00; // 0x1100-0x7FFF=1 wait, 0x8000-0xFFFF=2 wait
// XMCRB = 0x00; // enable bus keeper, use PC0-PC7 as address //이건 바꿔도 LCD에 영향은 없는듯
}
 
}


void MakeInputC(int c)
{
if(c < 0)
{
c = -c ;
}
else
{
pw[3] = x[c] ;
_delay_ms(500);
}
}

void MakeInputD(int d)
{
if(d < 0)
{
d = -d ;
}
else
{
pw[2] = pw[3] ;
pw[3] = x[d];
_delay_ms(500);
}
}

void MakeInputE(int e)
{
if(e < 0)
{
e = -e ;
}
else
{
pw[1] = pw[2];
pw[2] = pw[3];
pw[3] = x[e] ;
_delay_ms(500);
}
}

void MakeInputF(int f)
{
if(f < 0)
{
f = -f ;
}
else
{
pw[0] = pw[1];
pw[1] = pw[2];
pw[2] = pw[3] ;
pw[3] = x[f] ;
_delay_ms(500);
}
}


void OpenOutput(int b)
{
if(b < 0)
{
b = -b ;
}
else
{
s[0] = open[b/1000] ;
b = b % 1000 ;

s[1] = open[b/100] ;
b = b % 100;

s[2] = open[b/10] ;

s[3] = open[b%10];
}
}

void SaveTobar(int g)
{
if(g < 0)
{
g = -g ;
}
else
{
s[0] = bar[0];
s[1] = bar[1];
s[2] = bar[2];
s[3] = bar[3];
}
}


void BarOutput(int b)
{
if(b < 0)
{
b = -b ;
}
else
{
s[0] = bar[b/1000] ;
b = b % 1000 ;

s[1] = bar[b/100] ;
b = b % 100;

s[2] = bar[b/10] ;

s[3] = bar[b%10];
}
}


void MakePW(int h)
{
if(pw[h]==0xc0) pwo[h] = 0;
if(pw[h]==0xf9) pwo[h] = 1;
if(pw[h]==0xa4) pwo[h] = 2;
if(pw[h]==0xb0) pwo[h] = 3;
if(pw[h]==0x99) pwo[h] = 4;
if(pw[h]==0x92) pwo[h] = 5;
if(pw[h]==0x82) pwo[h] = 6;
if(pw[h]==0xf8) pwo[h] = 7;
if(pw[h]==0x80) pwo[h] = 8;
if(pw[h]==0x90) pwo[h] = 9;
}
 
 

void PassWord(int y)
{
password = ((1000*pwo[0]) + (100*pwo[1]) + (10*pwo[2]) + pwo[3]);
}


void getEcho(void)
{
    while(!Echo);            // high가 될때까지 대기 //
    TCNT1=0; TCCR1B=2;      // 카운터 시작, 8분주 = 0.5us //
    while(Echo);            // low가 될때까지 대기 //
    TCCR1B=8;                // 카운터 정지 //
    range=TCNT1/116;        // Cm로 변경 //
}


void ActiveSonic(void)
{
MCUCR = 0x80; // enable external memory and I/O
XMCRA = 0x46; // 0x1100-0x7FFF=1 wait, 0x8000-0xFFFF=2 wait
XMCRB = 0x80; // enable bus keeper, use PC0-PC7 as address //이건 바꿔도 LCD에 영향은 없는듯

Trigger_1; _delay_us(10); Trigger_0;    // 10uS
    getEcho();
lcd_init();
sprintf(time," %d " , range);
lcd_putstring(0,0,"length");
_delay_ms(5) ;
lcd_putstring(8,0, time);
_delay_ms(5) ;

MCUCR = 0x00; // enable external memory and I/O
XMCRA = 0x00; // 0x1100-0x7FFF=1 wait, 0x8000-0xFFFF=2 wait
XMCRB = 0x00; // enable bus keeper, use PC0-PC7 as address //이건 바꿔도 LCD에 영향은 없는듯

}


void MCU_initialize(void) // initialize ATmege128 MCU
{
  MCUCR = 0x80; // enable external memory and I/O
  XMCRA = 0x46; // 0x1100-0x7FFF=1 wait, 0x8000-0xFFFF=0 wait
  //XMCRA = 0x46; // 0x1100-0x7FFF=1 wait, 0x8000-0xFFFF=2 wait
  XMCRB = 0x80; // enable bus keeper, use PC0-PC7 as address
}
*/

leesk님의 댓글

leesk 작성일

죄송합니다 ㅠㅠ 제가 완전 마이크로 프로세서가 처음이고 코딩 경험이 많이 없다보니까 정리도 잘 안되고 정신없게 써뒀는데요
그 지금 코드는 키패드로 임의의 숫자를 입력하면 한자리씩 fnd에 출력이 되는데 동시에 초음파로 거리감지를 해서 감지된 거리를 lcd로 지속적으로 출력해주는 걸 짜본 것입니다.

leesk님의 댓글

leesk 작성일

포트는 fnd를 A와 E에 연결했고, keypad를 C, 초음파 에코,트리거를 F에 연결해둔 상황입니다.
모터나 다른 스위치 부분은 너무길어져서 제외했습니다 조언 부탁드리겠습니다

master님의 댓글

master 댓글의 댓글작성일

#include "test.h"
#include "lcd.h"
빠진 파일도 있어야하고
전체소스를 첨부하세요
하나라도 소스코드가 빠져있으면 컴파일을 해볼 수가 없습니다.
폴더째 압축해서 답변글로 첨부해보세요

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 lcd 1602에 특수문자를 출력하는 방법을 알고싶습니… 댓글[3] dndktn  22-08-12
질문 stm32 wifi 파일전송 댓글[3] 하리  22-08-11
질문 회로 구성 수정 댓글[2] 첨부파일픽공부  22-08-11
질문 아두이노 와이파이통신 질문 있습니다 댓글[1] 학생  22-08-11
질문 포토다이오드와의 연결 질문합니다. 댓글[7] 첨부파일박윤모  22-08-10
질문 회로 구성 댓글[4] 픽공부  22-08-10
질문 아두이노 센서, 와이파이, 블루투스 연결 댓글[1] pattern  22-08-10
질문 PIC 블루투스 연결 댓글[19] 픽공부  22-08-09
질문 PIC18F452 블루투스 연결 댓글[4] 마이컴  22-08-08
질문 아두이노 코드 해석을 못하겠습니다... 댓글[2] 김가헌  22-08-08
질문 아두이노 코드를 avr로 변환해 주세요 ...ㅠ 댓글[3] 옹냥냥  22-08-08
질문 아두이노 녹음-스피커모듈 관련 질문있습니다 ㅠㅠ 댓글[2] 방귀뿡뿡  22-08-08
질문 Serial EEPROM 실수값 저장.. 댓글[2] 첨부파일광이  22-08-07
질문 STM32 Live Expression 값들이 깜빡이는… 댓글[3] 둠둠  22-08-05
질문 아두이노 ESP32 wifi module 댓글[1] Yoon  22-08-03
질문 atmega128과 dht11, lcd를 연결했는데 0… 댓글[1] 고양이33  22-08-02
질문 ATMEGA 128 코드를 합치려고 하는데 어렵네요 댓글[2] 고양이33  22-08-02
질문 서보모터 제어에 대해 질문있습니다. 댓글[2] 첨부파일뉴비에오  22-07-30
질문 적외선 통신 알려주실분있나요 ㅠㅠ 댓글[1] hkjsj10  22-07-30
질문 아두이노 관련 궁금합니다. 댓글[1] 뱝뱝  22-07-28
질문 아두이노 우노 MCP4725 댓글[3] opqr  22-07-27
질문 레오나르도 인체감지센서 알림 안옴 면지지  22-07-24
답변 답변 : 레오나르도 인체감지센서 알림 안옴 master  22-07-25
질문 Uno에서 엔코더값 놓치는 이유가 뭘까요... 댓글[3] MAKTUB  22-07-24
질문 아두이노 압력센서 연동 질문 댓글[4] dbice  22-07-23
질문 아두이노 버튼 누르기 문의 댓글[1] 김형근  22-07-23
질문 HM10 다중페어링 댓글[1] ㅎㅋㅎㅋㅎ  22-07-22
질문 모터드라이브 선정 댓글[6] 조숩인  22-07-22
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전