Код сформировал в CodeVisionAVR.
Код:
/*****************************************************
Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 4,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
typedef unsigned char byte;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
}
// Declare your global variables here
void main(void)
{
byte i,j,d;
// 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=Out
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=0
PORTA=0x00;
DDRA=0x01;
// 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=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
PORTC=0x00;
DDRC=0x00;
// Port D 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
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 4000,000 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x01;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
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: Timer2 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=0x01;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
PORTA.0 = 1; /* LED on */
// LCD module initialization
lcd_init(20);
// Global enable interrupts
#asm("sei")
/* switch to writing in Display RAM */
lcd_gotoxy(0,0);
lcd_putsf("00000000000000000000");
PORTA.0 = 0; /* LED off */
while (1)
{
for (i = 0; i < 254; i++){
for (j = 0; j < 254; j++){
for (d = 0; d < 254; d++){
; // Это просто задержка, знаю что не красиво:-)
}
}
}
PORTA.0 = 1;
lcd_putsf("11111111111111111111");
for (i = 0; i < 254; i++){
for (j = 0; j < 254; j++){
for (d = 0; d < 254; d++){
;
}
}
}
PORTA.0 = 0;
lcd_putsf("00000000000000000000");
};
}
Пробовал подавать напряжение сначала на дисплейчик потом на контроллер. Не помогает. Иногда на дисплее подсвечены первая и третья строка, иногда ни одна не подсвечена (как будто инициализация прошла успешно), но ни чего не выводится.
Если вообще отключаю проводки дисплейчика от контроллера то программа видимо зависает, т.к. лампочка не моргает а просто горит.
Как-то получилось вывести курсор на дисплейчике, но не программно ). Просто вставлял светодиод на ножку контроллера которая идет на EN(PIN6) дисплея, чтобы проверить подается ли туда напряжение.
На схемен ни чего нет практически. Питание на контроллер 5 вольт через стабилизатор, светодиод на A0 (так проверяю что контроллер выполняет программу). И на PORTC - сам LCD дисплейчик.
Добавлено спустя 12 минут 13 секунд:УРА!!!
Дисплейчик заработал!!!
Нужно было отключить JTAG interface.