질문게시판 > 프리마스터 LED 시프트 문제...

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

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

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

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

BASIC4MCU > 질문게시판

프리마스터 LED 시프트 문제...

페이지 정보

작성자 miim 작성일21-10-13 09:16 조회3,222회 댓글1건

본문

 2초마다 LED를 오른쪽으로 시프트 시키는 문제인데

마지막 공란 부분에 코드를 추가시켜야한다고 해요...

되게 간단한 문제같은데 이상하게 계속 안되고 있어서 글 남겨봅니다...ㅠㅠ

 제가 잘 몰라서 일단은 ,,, 코드 전문 첨부해봅니당...

 

 

 #include "MPC5604P_M26V.h"

#include "freemaster.h"

#include "init_base.h"

 

void LED_Ctr(void);

void Init_GPIO(void);

void Switch(void);

void init_ADC1(void);

void ADCRead_1(void);

void ADC_LED_Ctr(void);

void init_PIT(void);

void PIT0ISR(void);

void PIT1ISR(void);

 

 

volatile int i = 0;

 

char LED1=1, LED2=1, LED3=1, LED4=1;

char SW1, SW2, SW3, SW4;

int R_adc = 0;

uint32_t Pit0cnt =0;

uint32_t Pit1cnt =0;

 

int main(void)

{

initModesAndClock();

disableWatchdog();

enableIrq();

initOutputClock();

FMSTR_Init();

init_INTC();

init_Linflex0();

Init_GPIO();

Switch();

init_ADC1();

init_PIT();

INTC_InstallINTCInterruptHandler(PIT0ISR, 59, 6);

//59=하드웨어 고유 넘버(이곳에서 인터럭트 발생), 6=우선순위

INTC_InstallINTCInterruptHandler(PIT1ISR, 60, 6);

/* Loop forever */

for (;;) 

{

FMSTR_Recorder();

FMSTR_Poll();

LED_Ctr();

Switch();

ADCRead_1();

//ADC_LED_Ctr();

i++;

}

}

 

void Init_GPIO(void)

{

SIU.PCR[52].R = 0x0200; //LED1

SIU.PCR[53].B.PA = 0b00;

SIU.PCR[53].B.OBE = 0b1; //LED2

SIU.PCR[54].B.PA = 0b00;

SIU.PCR[54].B.OBE = 0b1; //LED3

SIU.PCR[55].R = 0b0000001000000000; //LED4

SIU.PCR[48].R = 0x0100;

SIU.PCR[49].R = 0x0100;

SIU.PCR[50].R = 0x0100;

SIU.PCR[51].R = 0x0100; //switch

}

 

void LED_Ctr(void)

{

SIU.GPDO[52].B.PDO = LED1;

SIU.GPDO[53].B.PDO = LED2;

SIU.GPDO[54].B.PDO = LED3;

SIU.GPDO[55].B.PDO = LED4;

}

 

void ADC_LED_Ctr(void)

{

if(R_adc > 250)

{

LED1 = 0;

}

else

{

LED1 = 1;

}

if(R_adc > 500)

{

LED2 = 0;

}

else

{

LED2 = 1;

}

if(R_adc > 750)

{

LED3 = 0;

}

else

{

LED3 = 1;

}

if(R_adc > 1000)

{

LED4 = 0;

}

else

{

LED4 = 1;

}

}

 

void Switch(void)

{

SW1 = SIU.GPDI[48].B.PDI;

SW2 = SIU.GPDI[49].B.PDI;

SW3 = SIU.GPDI[50].B.PDI;

SW4 = SIU.GPDI[51].B.PDI;

}

 

void init_ADC1(void)

{

ADC_1.MCR.B.ABORT = 1; //Abort ADC_1

ADC_1.MCR.B.OWREN = 0; //disable overwritting

ADC_1.MCR.B.WLSIDE = 0; //conversion data is written right_aligned

ADC_1.MCR.B.MODE = 0; //One Shot mode

ADC_1.MCR.B.CTUEN = 0; //disable CTU triggered

ADC_1.MCR.B.ADCLKSEL = 0; //Set ADClock 32MHz

// ADC_1.MCR.B.ADCLKSEL = 1; //Set ADClock 64MHz

ADC_1.MCR.B.ACK0 = 0; //disable auto clock off

ADC_1.MCR.B.PWDN = 0; //disable power down mode

ADC_1.CTR[0].R = 0x00008208;

ADC_1.NCMR[0].R = 0x00000020;

ADC_1.CDR[5].R = 0x00000000;

ADC_1.MCR.B.ABORT = 0; //clear ADC_1

SIU.PCR[64].R = 0x2400; //2000으로 설정해도 가능

}

 

void ADCRead_1(void) //변환결과를 읽어오는 함수

{

ADC_1.MCR.B.NSTART = 1;

asm("nop");

while(ADC_1.MCR.B.NSTART) asm("nop");

R_adc = ADC_1.CDR[5].B.CDATA;

}

 

void init_PIT(void)

{

PIT.PITMCR.R = 0x00000001; //타이머가 멈추고 디버그 모드로 설정

PIT.CH[0].LDVAL.R = 6400000; //64만을 16진수로 표현한 값(주기=100ms)

PIT.CH[0].TCTRL.R = 0x3; //둘 다 1이여야 하므로

PIT.CH[1].LDVAL.R = 64000000;

PIT.CH[1].TCTRL.R = 0x3; //예제 문제를 위한 추가 코드

}

 

void PIT0ISR(void) //interrupt가 잘 수행됐는지 확인 가능하게 해주는 함수

{

Pit0cnt ++;

//100ms 마다 해야할 일 추가 가능

PIT.CH[0].TFLG.B.TIF =1; //clear PIT0 flag

}

 

void PIT1ISR(void)

{

Pit1cnt++;

/////////////////////////////////////공란//////////////////////////////////////////////////

PIT.CH[1].TFLG.B.TIF =1;

}

 

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

댓글 : 1

조회수 : 3,222

master님의 댓글

master 작성일

PIT.CH[0].LDVAL.R=6400000; //64만을 16진수로 표현한 값(주기=100ms)
  PIT.CH[1].LDVAL.R=64000000;
타이머0이 100ms면
타이머1은 1000ms 인가보죠?
2초마다 한번씩 쉬프트 해야하므로
void PIT1ISR(void){ // 1초
  Pit1cnt++;
  if(Pit1cnt>=2){ Pit1cnt=0; // 2초마다 <-- 추가
    /////////////////////////////////////공란//////////////////////////////////////////////////
  }
  PIT.CH[1].TFLG.B.TIF=1;
}
나머지는 답글로 적어드리죠

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 아두이노 코딩 결합 댓글[1] hohoje 새글 22-08-18
질문 UART통신 스위치 사용 댓글[4] 픽공부 새글 22-08-18
질문 아두이노코딩 질문사항 댓글[1] kai5439  22-08-16
질문 해석좀 해주세요 댓글[2] bubu  22-08-14
질문 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
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전