학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

통신으로 인젝터제어

학습목표

RS232 통신으로 자동차 인젝터를 제어한다.

학습주제

PC에서 문자 0~7 까지를 보내면 이에 따라 AVR에서 발생하는 펄스의 주기를 변화시켜서 자동차의 속도(인젝터 주기) 제어하는 프로그램을 만든다.

PC 프로그램은 원격제어2~3주차 프로그램을 그대로 사용한다.

좀더 정밀하게 주기와 듀티를 조절하려면 PWM1(10bit) 프로그램 해야 한다. (데이터북 참조)

예습내용

 

실습방법

   

아래 프로그램은 AVR 소스 프로그램이다.

전송된 문자에 따라 8가지의 모드로 펄스를 발생하는 프로그램이다.

인젝터의 연결은 [PC제어] [자동차 인젝터 만들기] 참조하고 그대로 연결한다.

J0/1-B4(AVR)  J0/2-B7(AVR)   포트에 연결하여 인젝터의 동작을 확인한다.

#include <mega128.h>  

#include <stdio.h>

 

// Alphanumeric LCD Module functions

#asm

   .equ __lcd_port=0x1B

#endasm

#include <lcd.h>

  

char rxd;   

char sbuf[20];

 

// USART0 Receiver interrupt service routine

interrupt [USART0_RXC] void uart0_rx_isr(void)

{

   // 전송전 문자를 받는다.

   rxd=getchar();

  

   // Mode 결정한다.

   if(rxd==0x30)

      TCCR0 = 0x68;          // (Mode=0)

   else if(rxd==0x31)

      TCCR0 = 0x69;        // 16M/(1*256)=62.5 KHz (Mode=1)

   else if(rxd==0x32)

      TCCR0 = 0x6a;          // 16M/(8*256)=7812.5 Hz (Mode=2)

   else if(rxd==0x33)

      TCCR0 = 0x6b;         // 16M/(32*256)=1953 Hz (Mode=3)

   else if(rxd==0x34)

      TCCR0 = 0x6c;          // 16M/(64*256)=976 Hz (Mode=4) 

   else if(rxd==0x35)

      TCCR0 = 0x6d;          // 16M/(128*256)=488 Hz (Mode=5)

   else if(rxd==0x36)

      TCCR0 = 0x6e;          // 16M/(256*256)=244 Hz (Mode=6)

   else if(rxd==0x37)

      TCCR0 = 0x6f;           // 16M/(1024*256)=61 Hz (Mode=7)

  

   // LCD 문자를 표시한다.

   sprintf(sbuf,"Mode: %c",rxd);

   lcd_gotoxy(0,0);

   lcd_puts(sbuf); 

}  

       

// USART0 Transmitter interrupt service routine

interrupt [USART0_TXC] void uart0_tx_isr(void)

{

  

}

 

// Declare your global variables here

 

void main(void)

{

// Port B initialization

// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out

// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0

PORTB=0x00;

DDRB=0xFF;

 

// USART0 initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART0 Receiver: On

// USART0 Transmitter: On

// USART0 Mode: Asynchronous

// USART0 Baud rate: 9600

UCSR0A=0x00;

UCSR0B=0xD8;

UCSR0C=0x06;

UBRR0H=0x00;

UBRR0L=0x67;

 

 

// LCD module initialization

lcd_init(16);

 

// Global enable interrupts

#asm("sei") 

 

TCCR0 = 0x68;      // (1) Fast PWM Mode   ATmega128(L) Data Book P100  주기조절

OCR0 = 0x80;        // ATmega128(L) Data Book P102   듀티비조절

 

while (1)

      {

      // Place your code here

     

      };

}

 

 

 

처음

   

1.       PC에서 노브를 만들고 이에 따라 AVR 인젝터가 동작하도록 하시오.

2.       AVR 듀티비도 조절할 있도록 프로그램 하시오.