회원가입 ID/PW 찾기

1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.

콘텐츠 수 185
판매자 치토스 판매 납포인트 무료 평점 3.8점 / 총 5명 참여

회로첨부가 안되서 여기가면 회로볼수있습니다
http://cafe.naver.com/jarb  하드웨어자료-> atmega128자료

실제회로처럼 세그먼트로 가는 부분에 470옴 저항을 연결해야 하는에 없어서 일단 그냥했습니다

나중에 달아야겠습니다 ...

세그먼트는 공통애노드형 3461AG써도 됩니다

그리기 힘들어서. 실은 잘몰라서 세그먼트를 좀 허접하게 그렸습니다 아래6핀 위에 6핀입니다

세그먼트자료는 인터넷에 많이 있으니깐요...

74ls47을 쓰면 포트수도 줄일수 있고 좀 편안하게 소스를 코딩가능합니다 BCD 로 입력을 받기때문입니다

 

예 )   10(세그먼트)-> 1010 으로 (PD4~PD7)으로 출력하면 됩니다

        DS12C8987은 자동으로 BCD로 출력하기 때문에

 

  PORTC=0X04;    //출력할 세그먼트선택 (PC0~PC3)
  PORTD= sec/10<<4;      //그냥 sec값을 바로포트에 대입했습니다 단 십의 자리 일의 자리구분해야 합니다

                                    //저는 하다보니 포트를 하위비트(PD4~7을 써서 좌로 시프트한것 뿐입니다)   
  timer_delay_ms(3);        // 계속 세그먼트를 4개 돌려야하기에 딜레이 잠시주고 반복적으로 찍음

                                    // 밝기가 완벽히 조화되진 않았네요 저항을 안달아서 그런가....

                                   

  UART로도 찍을수 있게 되있는데 변환기를 놔두고 와서 ..  테스트하고 올릴까 했는데 생각날때 안하면

  카페에 올릴 시간이 없을것 같아서   미완성이지만 올렸습니다         죄송~ 꾸벅  

 

아래 부분은 소스입니다

/*-----------------------------------------------------------------------------------------------------

교수님이 짜신 파일에 세그먼트부분, 딜레이 함수 추가했습니다
세그먼트는 정상적으로 찍힘 , 현재는 분,초만 표시
UART 점검해봐야 함  변환기를 학원에 두고 옴....
mcu: atme128
2010.7.1 전기홍
-----------------------------------------------------------------------------------------------------*/

//-----------------------------------------------------------------------------------------------------
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>

//-----------------------------------------------------------------------------------------------------
void port_init();
void Write_Address(unsigned char addr);
void Write_Data(unsigned char addr,unsigned char data);
void rtc_init();
void TX0ch(char ch);
void TX0str(char *str);
void uart0_init();
char Read_Data(unsigned char addr);
void timer_init();
void timer_delay_ms(unsigned int limit);

//-----------------------------------------------------------------------------------------------------
unsigned int count;  //오버플로 카운트
unsigned int x;      //딜레이 시간결정
unsigned int t_flag=0;
unsigned int flag;   //오버플로가 끝나면 timer_delay_sec함수를 빠져나오는 역할

//-----------------------------------------------------------------------------------------------------
SIGNAL(SIG_OVERFLOW0)
{
 cli();
 count++;
 if(count==x)
 {
 count=0;
 t_flag=1;
 }
 sei();
}

//-----------------------------------------------------------------------------------------------------
int main()
{
 char sData[50],sec=0,min=0,hour=0,date=0,mon=0,year=0;

 port_init();
 rtc_init();
 timer_init();
 uart0_init();

 sei();

 TX0str("START");

 while(1)
 {  
  sec = Read_Data(0X00);
  year = Read_Data(0X09);//year
  mon = Read_Data(0X08);//월
  date = Read_Data(0X07);//일
  hour = Read_Data(0X04);//시
  min = Read_Data(0X02);//분
  sprintf(sData,"%u-%u-%u %u:%u:%u \n\r",year,mon,date,hour,min,sec);
  TX0str(sData);
  timer_delay_ms(3);   //딜레이추가해야 에러(분의 십의자리 못가져옴)안남 
  
  PORTC=0X01;
  PORTD=min/10<<4;
  timer_delay_ms(3);

 

  PORTC=0X02;
  PORTD=min%10<<4;
  timer_delay_ms(3);

 

  PORTC=0X04;
  PORTD= sec/10<<4;
  timer_delay_ms(3);
       
  PORTC=0X08;
  PORTD= sec%10<<4;
  timer_delay_ms(3);
 }
}

//-----------------------------------------------------------------------------------------------------
void port_init()
{
 DDRA = 0XFF;
 DDRG = 0X07;
 PORTG = 0X03;

 DDRD=0XF0;    //상위 4비트 BCD출력으로 설정(74LS47입력)
 PORTD=0X00;   //초기화
 DDRC=0X0F;    //하위 4비트 세그먼트 선택스위치로 설정
 PORTC=0X00;   //초기화
}

//-----------------------------------------------------------------------------------------------------
void Write_Address(unsigned char addr)
{
 DDRA = 0XFF;
 PORTA = addr;
 PORTG = PORTG | 0X04;
 PORTG = PORTG & ~0X04;//어드레스 0X0A LATCH
}

//-----------------------------------------------------------------------------------------------------
void Write_Data(unsigned char addr,unsigned char data)
{
 Write_Address(addr);
 DDRA = 0XFF;
 PORTA = data;
 PORTG = PORTG & ~0X01;//데이타 WRITE, RW LOW
 PORTG = PORTG | 0X01;//데이타 WRITE, RW HIGH


}

//-----------------------------------------------------------------------------------------------------
void rtc_init() //처음시간셋팅시만 사용할것
{
 Write_Data(0X0A,0X20);  //RTC 동작 , 4HZ출력
 Write_Data(0X0B,0X14);  //초기 시간입력시는 SETBIT,DM,12HOUR비트 설정할것
                           
 Write_Data(0X09,10);    //year
 Write_Data(0X08,5);     //월
 Write_Data(0X07,27);    //일
 Write_Data(0X04,10);    //시
 Write_Data(0x02,20);    //분
 Write_Data(0X00,20);    //초  
}

//-----------------------------------------------------------------------------------------------------
void TX0ch(char ch)
{
 while(!(UCSR0A&0X20));
 UDR0 = ch;
}

//-----------------------------------------------------------------------------------------------------
void TX0str(char *str)
{
 while(*str)
 {
  TX0ch(*str);
  str++;
 }
}

//-----------------------------------------------------------------------------------------------------
void uart0_init()//57600
{
 UCSR0B = 0X98;
 UBRR0L = 16;
}

//-----------------------------------------------------------------------------------------------------
char Read_Data(unsigned char addr)
{
 Write_Address(addr);//초

 DDRA = 0X00;
 PORTG = PORTG & ~0X02;//데이타 READ LOW
 PORTG = PORTG | 0X02;//데이타 READ, RW HIGH
 return PINA;
}

//-----------------------------------------------------------------------------------------------------
void timer_init()
{
 TCNT0= 6;
 TCCR0= 0X24;
 TIMSK|= (1<<TOIE0);
}

//-----------------------------------------------------------------------------------------------------
void timer_delay_ms(unsigned int limit)  //int 형으로바꾸는 게 변환이 용이하다 char는8비트 128?까지밖에
{
 count=0;            //초기 카운트 값 초기화
 x=limit;       //1ms*1000=1초  원하는 값을 설정가능함
 while(!(t_flag));     //flag가 1이면 빠과나온다 지연효과를 줌
 t_flag=0;
}

 



 

 

 

 


profile
dfaskldfjkla 2010.08.18 12:10
좋은 정보 감사합니다.
profile
start 2011.02.07 09:13

감사합니다.

profile
초열 2012.05.21 10:34
좋은정보 감사합니다
profile
수풀새 2014.01.18 19:49
감사합니다
profile
nogaring 2014.12.04 16:44
감사해요
search
List of Articles
번호 분류 제목 평점 포인트 판매자 등록일 구매수 조회 수
공지 공공의 목적으로 공유하고자 하는 소프트웨어는 '소프트웨어 자료실'에 업로드를 요청드립니다.
공지 구매후 평점 댓글을 남겨주시면 구매포인트의 20%를 돌려드립니다.
165 자작품 & 회로도 모음 Current Sense 회로 모음 [38] 무료 bbkbbk 2012-04-03 0 6005
164 자작품 & 회로도 모음 우리나라 최초의 금성(LG)TV회로도 [18] 무료 마산마구 2012-03-20 0 4202
163 자작품 & 회로도 모음 단전원 OPAMP 회로 모음 [28] 5P bbkbbk 2011-11-30 9 8087
162 자작품 & 회로도 모음 GPS수신정보 표시기 [35] 무료 무소 2011-10-29 0 4320
161 자작품 & 회로도 모음 ATmega8을 이용한 온도.전압.전류 측정기 자작 [39] 무료 무소 2011-10-10 0 4873
160 자작품 & 회로도 모음 opamp 회로 모음.. [34] 50P 나다날르다3 2011-03-09 7 7261
159 자작품 & 회로도 모음 밑에 글 용량 부족으로 하나 더 입니다. [8] 무료 참치머신 2011-01-25 0 2511
158 자작품 & 회로도 모음 9v 전원으로 17v-25v-33v 만들기 [20] 5P 다소미 2011-01-10 11 5607
157 자작품 & 회로도 모음 초음파 센서를 이용한 거리측정 자료 [18] 10P 가이버33 2010-12-15 3 6014
156 자작품 & 회로도 모음 [잡담] ±500 Volt Protection Circuit [4] 무료 빛나는 영혼 2010-12-14 0 3416
155 자작품 & 회로도 모음 op-amp 관련 회로 [19] 5P regy 2010-10-26 2 4789
154 자작품 & 회로도 모음 정전압IC에 대한 자료 [14] 5P 연규림 2010-10-17 1 4276
153 자작품 & 회로도 모음 FND와74시리즈를_이용한_시계회로도_입니다. [5] 무료 연규림 2010-09-24 0 3977
152 자작품 & 회로도 모음 PCM Control 센서 [4] 무료 주항빠 2010-09-20 0 3528
151 자작품 & 회로도 모음 -9V 만드는 회로도 [3] 무료 아크마 2010-09-08 0 4372
150 자작품 & 회로도 모음 12v -> 3v 전압강하 [6] 무료 아크마 2010-09-08 0 4260
149 자작품 & 회로도 모음 cds 센서를이용한 led제어 입니다!! [1] 무료 전자는내애인 2010-08-29 0 8019
148 자작품 & 회로도 모음 TTL IC를 이용한 디지털 도어락 (3비트) [5] 10P labis 2010-08-15 4 6524
147 자작품 & 회로도 모음 자작 DC모터 H브릿지회로입니다 [5] 무료 치토스 2010-07-29 0 7956
» 자작품 & 회로도 모음 ds12c887 (atmega128)소스입니다 ~~ [5] 무료 치토스 2010-07-29 0 5500
  • 인간의 나약함이 우리를 사교적으로 만든다. 공통의 불행이 우리의 마음을 결합시킨다.
    - 루소
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.