질문게시판 > atmega128 타이머 카운터를 사용한 버튼제어 스톱워치

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

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

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

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

BASIC4MCU > 질문게시판

atmega128 타이머 카운터를 사용한 버튼제어 스톱워치

페이지 정보

작성자 수제비성애자 작성일21-12-19 19:11 조회2,064회 댓글1건

본문

#define F_CPU 16000000

 

#define INIT_SEC 0

#define INIT_MIN 0

 

#include <avr/io.h>

#include <avr/interrupt.h>

#include <util/delay.h>

 

unsigned char count_int=0;

volatile int start=0;

char count=0, Seconds=INIT_SEC, Minutes=INIT_MIN;

 

 

ISR(INT0_vect) {

if(start==0) start=1; // state가 STOP으로 시작되고, INT0을 누르면 state는 START로 바뀐다. 따라서 INT0을 1번 누르면 START가 된다.

 

}

 

ISR(INT1_vect) {

if(start==1) start=0; // INT1을 누르면 state는 INIT가 된다.

}

 

ISR(TIMER0_OVF_vect) // TIMER0 has overflowed

{

if(start==1){

count_int++; // count_int값이 하나 증가

// 244번에 한번씩 seconds를 하나 증가 즉, 244.14 Hz / 244 = 1Hz, 즉 1초임.

if(count_int == 244){

Seconds++; //1초가 지날 때 Seconds를 1씩 올린다.

count_int=0; //다시 count는 0부터 세어진다.

}

}

}

 

int main(void)

{

const unsigned char Segment_Data[] =

{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};

//"0, 1, 2, 3, 4, 5, 6, 7, 8, 9"

unsigned int COLUMN[4]={0,0,0,0};

DDRA=0xff; // PORTA 출력용으로 설정

DDRC=0xff; // PORTC 출력용으로 설정

TCCR0 = 0x06; // Normal mode, prescale 256, 16M/256=62500Hz

TCNT0 = 0x00; // n=0, 256 count, 62500Hz/256=244.14Hz

TIMSK = 0x01; // timer0 OVERFLOW interrupt enable

SREG |= 0x80; // Global Interrupt Enable

 

 

while (1)

{

COLUMN[0] = (Minutes%100)/10; // 분의 십의자리를 계산하여 넣는다.

COLUMN[1] = (Minutes%10); // 분의 일의자리를 계산하여 넣는다.

COLUMN[2] = (Seconds%100)/10; // 초의 십의자리를 계산하여 넣는다.

COLUMN[3] = (Seconds%10); // 초의 일의자리를 계산하여 넣는다.

for(int i=0;i<4;i++)

{

// i번째 자리의 DIGIT만 선택. Common Anode라서 거기만 Common을 0을 주어 켤 수 있도록 함.*/

PORTC=~(0x01<<i);

// i번째 자리에 해당하는 세그먼트의 숫자를 켬

PORTA = Segment_Data[COLUMN[i]];

_delay_ms(2);

}

if(Seconds>=60) // 초값이 60이 되면 1분 = 60초

{

Seconds=0; // 초값을 0으로 만듦

Minutes++; // 분값은 하나 증가함

}

}

}


switch state를 사용하여 초기값 0000으로 시작해
INT0을 누르면 진행, INT1을 누르면 멈춤으로 만들어보려고 합니다.
현재코드로 진행하면 0000에서 INT0, INT1을 눌러도 진행이 되지 않습니다.
타이머 카운터를 INT0을 눌렀을 때 동작시켜야되는데 그러지 못하고 있는 것으로 보입니다.
어떻게 해야 해결할 수 있을까요?
  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 1

조회수 : 2,064

master님의 댓글

master 작성일

#include <avr/io.h>
#include <avr/interrupt.h>
#define  F_CPU 16000000
#include <util/delay.h>
//
volatile unsigned char COLUMN[4]={0,0,0,0},Seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};
volatile unsigned char start=0,count=0,Sec=0,Min=0;
//
ISR(INT0_vect){ start=1; }
ISR(INT1_vect){ start=0; }
//
ISR(TIMER0_OVF_vect){ // 1ms
  static int  ms=0;
  static char c=0;
  if(start){
    if(++ms4>=1000){ ms=0;
      if(++Sec>=60){ Sec=0;
        if(++Min>=60)Min=0;
        COLUMN[0]=(Min%100)/10; COLUMN[1]=(Min%10);
      }
      COLUMN[2]=(Sec%100)/10; COLUMN[3]=(Sec%10);
    }
  }
  //
  PORTC=~(1<<c); PORTA=Seg[COLUMN[c]];
  if(++c>3)c=0;
}
//
int main(void){
  DDRA=0xff;  DDRC=0xff;
  TCCR0=0x06; TIMSK=0x01;
  EICRA=0xAA; EIFR=0xFF; EIMSK=0x03; //falling edge
  SREG|=0x80;
  while(1){}
}

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 아두이노 센서값 출력 질문입니다! 댓글[1] 아궁2 새글 22-06-24
질문 ATmega128, ATmega28 RS232통신 첨부파일Moon4201 새글 22-06-24
답변 답변 : ATmega128, ATmega28 RS232… master 새글 08:07
질문 서보모터, 온습도센서 코드 질문 댓글[2] 첨부파일kshdlfaldfh  22-06-22
답변 답변 : 서보모터, 온습도센서 코드 질문 댓글[15] master  22-06-22
질문 steppermulti5 질문 응애  22-06-21
답변 답변 : steppermulti5 질문 댓글[1] master  22-06-22
질문 atmega128 avr usart 질문 snoflak  22-06-21
답변 답변 : atmega128 avr usart 질문 댓글[5] master  22-06-21
질문 사용자 정의 함수 변환 하는 방법 댓글[2] 첨부파일da0800  22-06-21
질문 atmega128 댓글[1] 양의노래  22-06-20
질문 아두이노 동시동작 재질문 댓글[9] 첨부파일죠르디  22-06-20
질문 초음파센서로 dc모터 제어하기 댓글[1] 첨부파일난쟁2  22-06-20
질문 아두이노 동시동작 댓글[7] 죠르디  22-06-19
질문 ATMEGA128 UART,FND 연동 질문 JMOD  22-06-19
답변 답변 : ATMEGA128 UART,FND 연동 질문 댓글[1] master  22-06-20
질문 atmeg128 질문이요 댓글[1] 첨부파일공대생er  22-06-18
질문 atmega128 초음파 센서로 신호등 시간초 늘리기 서동씨  22-06-18
답변 답변 : atmega128 초음파 센서로 신호등 시간초… 댓글[1] master  22-06-18
질문 atmega128 댓글[2] 망경이  22-06-18
질문 앱인벤터 이용해서 수동 자동 할라고하는데 ..잘안됩니다… 댓글[1] 따랑해영  22-06-18
답변 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 ..… 댓글[1] 첨부파일따랑해영  22-06-19
답변 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 .… 첨부파일따랑해영  22-06-19
질문 서보모터와 초음파센서 댓글[1] 브링미히어  22-06-17
질문 LCD 도와주세요 ㅜㅠㅠㅠ 댓글[2] 첨부파일dentist22  22-06-17
질문 안녕하세요 atmega128 질문드리고 싶습니다. (자… 댓글[3] dlcldl  22-06-17
질문 아두이노 delay를 millis로 바꾸고 싶습니다. 슨슨슨모  22-06-16
답변 답변 : 아두이노 delay를 millis로 바꾸고 싶… master  22-06-17
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전