본문 바로가기

프로테우스

MCU Port 확장하기 (74HC573) 기본적으로 포트확장에 많이 쓰이는 소자로써 3-STATE LATCH IC이며, MCU에 대한 포트확장 개념으로 많이 사용합니다. 아래 그림과 같이 로직 다이어그램으로 쉽게 볼 수 있다, - 포트구성에 따른 Description- -> D0~D7 데이터포트 -> Q0~Q7 Data_Output -> LE : Latch Enable (active High) -> /OE : Output Enable ((active Low) * Orcad 회로도를 그리고 싶었으나, 피곤하고 졸림으로 인하여, 프로테우스 시뮬레이션으로 대신 하였다. 시뮬레이션이기에 저항을 빼고 간단히 테스트 하였음을 명시함. Source Code * 간단하게 작성한 것이니, 실력을 평가하지는 말아주시기를 ^^ #include #include un.. 더보기
Relay 제어 (I/O로 FAN 제어 및 LED상태) 안녕하세요 숭덕이 입니다. 릴레이로 FAN 제어를 하였으며, 해당하는 FAN에 대하여 LED ON 되는것으로 짜보았습니다. 펌웨어는 IAR로 작성하였으며, 참고하시기 바랍ㄴ다. 펌웨어 (IAR) 회로도 ISIS(프로테우스로 작성) 더보기
통신 -LED 제어 #include #include #include #include char rx; interrupt[USART0_RXC]void usart0_rxc(void){ rx=UDR0; if(rx=='1')PORTC=1; if(rx=='2')PORTC=2; if(rx=='3')PORTC=4; if(rx=='4')PORTC=8; } void TX0_CHAR(char Sdata){ while(!(UCSR0A&0x20)); UDR0=Sdata; } // 송신함수 void main(void) { DDRC=0xff; //LED UCSR0B=0x98; UCSR0C=6; UBRR0H=0; UBRR0L=103; #asm("sei") } 더보기
서보모터 #include #include void main(void) { unsigned int i=0; DDRD=0xff; //PB5,6 입니다. while(1) { for(i=0; i 더보기
DC모터 제어해보기 #include void main(void) { DDRC=0xff; while(1) { PORTC.0=0; PORTC.1=1; } } 더보기
스테핑모터 -1상 여자방식 #include #include int i ; unsigned char motor_phase[4] = { 0x08, 0x04, 0x02, 0x01 } ; // 2상 여자 방식 void main ( void ) { DDRC=0xff; for ( i = 0 ; i 더보기
스테핑모터 - 시뮬 #include unsigned int cnt0; unsigned char step=0x88, onoff=1; interrupt [EXT_INT0] void exint0(void) { if(onoff == 0) onoff = 1; else onoff = 0; } interrupt [TIM0_OVF] void timerint0(void) { if(onoff == 0) if( ++cnt0 == 2 ) { cnt0 = 0; step >>= 1; if(step == 0x08) step=0x88; } PORTC = step; TCNT0 = 6; // 재정의 1msec = 64*(256-6)/16 시뮬레이션할 때는 조절할 필요가 있음 } void main(void) { DDRC = 0xff; // 포트C를 출력으로.. 더보기
LCD 구구단 시뮬레이션 #include #include #include #asm .equ __lcd_port=0x15 ;포트A #endasm #include void main(void){ char buf[20]; int a,b; lcd_init(16); // lcd초기화 lcd_gotoxy(0, 0); lcd_putsf("Park-Jae-Hyun"); // 첫째줄 표시 while(1){ for(a=2;a 더보기
LCD #include #include #asm .equ __lcd_port=0x15 ;포트C #endasm #include void main(void){ DDRC=0xff; // lcd 포트 출력으로 지정 lcd_init(16); // lcd초기화 while(1){ lcd_gotoxy(0, 0); lcd_putsf("BONGPJH"); // 첫째줄 표시 lcd_gotoxy(0, 1); lcd_putsf("Park-Jae-Hyun"); // 둘째줄 표시 delay_ms(1000); // 1초 딜레이 }; } 더보기
PWM을 이용한 LED 밝기제어 #include unsigned int step=5; interrupt [2] void exint0(void) { if( OCR0 step ) OCR0 -=step; } void main(void) { DDRB.4 = 1; // PORTB bit 4를 출력으로 SREG |= 0x80; //인터럽트 전체 허용 EIMSK |= 0b00000011; // INT0, 1 개별 허용 EICRA |= 0x0f; // INT0, 1 상승에지 트리거 TCCR0 |= 6; // 분주비를 256로 설정 TCCR0 |= 0b01001000; // 타이머0 FAST PWM 모드로 설정 TC.. 더보기