회원가입 ID/PW 찾기
AA

//ICC-AVR application builder
// Target : M128
// Crystal: 16Mhz

#include <iom128v.h>
#include <macros.h>

void delay(int n);


const char segment_data[10] = {63, 6,91,79,102,109,125,39,127,103};

unsigned char display_num[4]={0,0,0,0};         // Seven segment 4자리 숫자 출력 버퍼


void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0xff;
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00; //m103 output only
 DDRC  = 0x0f;
 PORTD = 0x00;
 DDRD  = 0x00;
 PORTE = 0x00;
 DDRE  = 0x00;
 PORTF = 0x00;
 DDRF  = 0x00;
 PORTG = 0x00;
 DDRG  = 0x03;
}

//TIMER0 initialize - prescale:64
// WGM: Normal
// desired value: 1KHz
// actual value:  1.000KHz (0.0%)
void timer0_init(void)
{
 TCCR0 = 0x00; //stop
 ASSR  = 0x00; //set async mode
 TCNT0 = 0x06; //set count
 OCR0  = 0xFA;
 TCCR0 = 0x04; //start timer
}

unsigned char digit_num=0;

#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr(void)
{
    TCNT0 = 0x06; //reload counter value
    digit_num++;
    digit_num = digit_num%4;
 PORTC = 0x0f;
 PORTA = segment_data[display_num[digit_num]];
 PORTC = ~(0x01 << digit_num);        <--------------------------이 부 분을 모르겠습니다!! 왜 not을하는건지,,,

}

//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 XDIV  = 0x00; //xtal divider
 XMCRA = 0x00; //external memory
 port_init();
 timer0_init();

 MCUCR = 0x00;
 EICRA = 0x00; //extended ext ints
 EICRB = 0x00; //extended ext ints
 EIMSK = 0x00;
 TIMSK = 0x01; //timer interrupt sources
 ETIMSK = 0x00; //extended timer interrupt sources
 SEI(); //re-enable interrupts
 //all peripherals are now initialized
}

void main(void)
{
 int i=0;
 init_devices();
 
 while(1){
        i++;
        display_num[0] = (i%10000)/1000;
        display_num[1] = (i%1000)/100;
        display_num[2] = (i%100)/10;
        display_num[3] = (i%10);
        delay(2000);
  
 }
}


void delay(int n)
{
 volatile int i,j;
 for(i=1;i<n;i++)
 {
     for(j=1;j<600;j++);
 }
}

 

 

4개의 세그먼트를 작동시키는 기초소스입니당.

 

제가 화살표로 표시한부분이 이해가 안가네요...

 

여기서 PORTA는 세그먼트 값이구요

 

PORTC는 4개의 새그먼트의 DIG를 나타냅니당..

 

답변 주시면 감사하겠습니다!! 아참 이 소스 예제(icc avr용)를

 

avr studio에서 돌리려면 에러가 나더라구요,...헤더파일이 달라서 그런가...

 

이 소스를 어떻게 수정해야 avr studio에서 돌릴수 있는지,.. 알려주세요!

댓글 3
  • No Profile

    PORTC = ~(0x01 << digit_num);   

     

    이 소스는 0x01을 왼쪽으로 쉬프트 시키는거지요 digit_num수만큼

     

    digit_num이 3이라면 2진수로 0 0001000이 되는것입니다.

     

    여기서 ~를 해준것은 led가 + 제어를 할것인지 -제어할것인지에 달려있습니다.

     

    쉽게 말해서 해당 led가 0이 되어야 led가 켜지므로 1110111이 들어가는 겁니다.

  • No Profile

    회로도를 보면 포트A는 세그먼트의 8가지 요소(디지트를 표시하는 7개와 도트)와 포트C는 각 자릿수의 커먼 시그널에 연결되어 있습니다. 코드와 회로도를 함께 보면 각 디지트 정보에 1을 인가하고 있는 것을 확인할 수 있습니다. 이 때 해당 자릿수의 커먼 시그널(D1, D2, D3, D4)중 0이 되는 쪽이 전류가 흐를 수 있는 조건이 성립되기 때문에 해당 자릿수에 불이 들어옵니다. 이는 사용한 세그먼트의 특성이 디지트에서 커먼쪽으로 전류가 흐르는 제품을 사용했기 때문입니다. 따라서 윗분께서 포트명을 반대로 설명하셨는데 포트A에 1110111을 출력하고 포트C의 해당 자릿수에 0을 인가하면 그 자릿수가 표시되게 됩니다. 나머지 자릿수는 1이 되어 디지트 값과 상관없이 역방향 다이오드가 되기 때문에 전류가 흐르지 않아 LED가 켜지지 않습니다.

  • No Profile

    아마도 PORTC가 FND의 Common 단자로 판단이 됩니다. 인터럽트 루틴에서 처음에 PORTC = 0x0F로 한다는 건 모든 FND를 끄도록 하는 것이며 마지막에 PORTC = ~(0x01 <<  digit_num);은 FND 하나씩 Common을 Low Level로 만들어 켜기 위한 것 같네요.

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

search
번호 분류 제목 글쓴이 조회 수 날짜
476 Analog & Mixed-Signal 설계 HOT포토 커플러? 기본 개념 부탁드려요1 초보탈출!! 1943 2011.01.25
475 Analog & Mixed-Signal 설계 HOT풀업 & 풀다운 설명 부탁드려요...2 초보탈출!! 1427 2011.01.24
474 Analog & Mixed-Signal 설계 HOT포토커플러 이용 28V 스위치 회로도 문의2 유럽여행 4185 2011.01.24
473 Sensor 설계 HOT비드란? 그 외 질문2 혈청 1799 2011.01.24
472 Analog & Mixed-Signal 설계 HOT질문] 적외선 리모컨 에 대하여 관한 질문 입ㄴㅣ다1 라인걸어서 1663 2011.01.19
471 전기전자 아무거나 HOTSMPS 설계를 준비하고 있습니다.2 마임부우 1489 2011.01.19
470 Sensor 설계 HOT오실레이터와 크리스탈 인공호흡1 다시 1504 2011.01.14
469 Analog & Mixed-Signal 설계 HOTw5300 회로도좀 검토해주세요.3 Touch_inkoo 1851 2011.01.14
468 전기전자 아무거나 HOT클럭노이즈 개선방안1 멋쟁이짱 1696 2011.01.12
467 전기전자 아무거나 HOT노이즈 없애는 방법1 멋쟁이짱 1504 2011.01.12
466 Analog & Mixed-Signal 설계 HOT정전압 전원회로2 멋쟁이짱 1691 2011.01.12
465 Analog & Mixed-Signal 설계 HOTLED 정전류 구동이유에 대한 글입니다. 이해안되는 부분이 있어서 설명 부탁드립니다. 엘이디 2044 2011.01.11
464 Analog & Mixed-Signal 설계 HOT댓글 systec 930 2011.01.07
463 Analog & Mixed-Signal 설계 HOT라인트레서 모터부(구동부)대한 질문 점 해도 될까요?1 라인걸어서 2007 2011.01.07
462 Analog & Mixed-Signal 설계 HOT7805를 이용한 정전압회로에서요..5 v천아v 2188 2011.01.06
461 Analog & Mixed-Signal 설계 HOT플라이백 컨버터 기반 LED 조명을 설계 해볼려고 합니다. 고수님들 조언이 필요합니다 엘이디 1883 2011.01.03
460 Analog & Mixed-Signal 설계 HOTorcad 파일 오픈이안되요 에러나요3 전자지존되고싶어요 1314 2010.12.30
459 Analog & Mixed-Signal 설계 HOT플라이백 컨버터 설계 질문입니다. comment 부탁 드립니다.2 엘이디 1926 2010.12.28
458 Analog & Mixed-Signal 설계 HOTLNA 설계 놀부 1926 2010.12.28
457 Analog & Mixed-Signal 설계 HOT라인트레이서 회로도 입니다.3 Gentlewolf 4285 2010.12.28
Prev 1 ... 11 12 13 14 15 16 17 18 19 20 ... 39 Next
  • 훌륭한 사람들은 실패를 통해 지혜롭게 되었기 때문에 훌륭하다. 성공으로부터는 별로 지혜를 얻지 못한다.
    - 샤로안
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.