Các bác xem chương trình của em có vấn đề j? mà khi chạy mô phỏng, động cơ chỉ quay được 2s rồi protues báo lỗi. Em sử dụng Timer 1, chế độ phase correct Pwm, 5 nút bấm, 1 nút quay thuận , 1 quay ngược, 1 dừng, 1 tăng tốc, 1 giảm tốc. Mà chương trình em viết sao LCD không hiển thị j cả? Sai ở đau không biết.
***Chương trinh*** viết bằng codevision avr
#include <mega16.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#define ipwm1 OCR1AL
#define RELAY PORTD.6
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTC=0xFF;
DDRC=0xFF;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTD=0xFF;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 3.906 kHz
// Mode: Ph. correct PWM top=00FFh
// OC1A output: Inverted
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xC1;
TCCR1B=0x05;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16);
while (1)
{
// Place your code here
if(PORTA=0x08) // nut CT1 duoc bam
{
delay_ms(20); // Delay 20 millisecond
lcd_putsf("speed 50");
delay_ms(10);
RELAY=1;
ipwm1=125; //Dong Co quay thuan voi toc do bang 50% toc do dinh muc
}
if(PORTA=0x04) //nut CT2 duoc bam
{
delay_ms(20);
lcd_putsf("speed 50");
RELAY=0; //DAO CHIEU QUAY DONG CO
ipwm1=125;
}
if(PORTA=0x02) // nut CT3 duoc bam
{
delay_ms(20);
lcd_putsf("Fast speed 100");
delay_ms(10);
RELAY=1;
ipwm1=255; //Tang toc DC toi toc do toi da theo chieu thuan
}
if(PORTA=0x01) // nut CT4 duoc bam
{
delay_ms(10);
RELAY=1; //Giam toc DC theo chieu thuan
delay_ms(10);
lcd_putsf("Slow speed 50");
ipwm1=125;
}
if(PORTA=0x08) // nut CT5 duoc bam
{
delay_ms(20);
lcd_putsf("stop");
ipwm1=0;
}
};
}
***Chương trinh*** viết bằng codevision avr
#include <mega16.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#define ipwm1 OCR1AL
#define RELAY PORTD.6
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTC=0xFF;
DDRC=0xFF;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTD=0xFF;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 3.906 kHz
// Mode: Ph. correct PWM top=00FFh
// OC1A output: Inverted
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xC1;
TCCR1B=0x05;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16);
while (1)
{
// Place your code here
if(PORTA=0x08) // nut CT1 duoc bam
{
delay_ms(20); // Delay 20 millisecond
lcd_putsf("speed 50");
delay_ms(10);
RELAY=1;
ipwm1=125; //Dong Co quay thuan voi toc do bang 50% toc do dinh muc
}
if(PORTA=0x04) //nut CT2 duoc bam
{
delay_ms(20);
lcd_putsf("speed 50");
RELAY=0; //DAO CHIEU QUAY DONG CO
ipwm1=125;
}
if(PORTA=0x02) // nut CT3 duoc bam
{
delay_ms(20);
lcd_putsf("Fast speed 100");
delay_ms(10);
RELAY=1;
ipwm1=255; //Tang toc DC toi toc do toi da theo chieu thuan
}
if(PORTA=0x01) // nut CT4 duoc bam
{
delay_ms(10);
RELAY=1; //Giam toc DC theo chieu thuan
delay_ms(10);
lcd_putsf("Slow speed 50");
ipwm1=125;
}
if(PORTA=0x08) // nut CT5 duoc bam
{
delay_ms(20);
lcd_putsf("stop");
ipwm1=0;
}
};
}