Мысли останавливаются.
Пытаюсь подключить LSD s65 ls020.
Включил по схеме из Using the Siemens S65 – Display.pdf
Контроллер ATMega32.
Среда CodeVisionAVR 1.2.5.8.
За основу взят код для ATMega8 пользователя k34Nex (стр.5х темы)
Перевесил соответственно выводы, внес соответствующие изменения в прогу. Результат нулевой.
Замечу, что выполнение программы останавливается на
void lcd_wrcmd16(ui16 cmd)
{
LCD_CS=0;
LCD_RS=1;
SPDR=(cmd>>8);
while (SPSR.7!=1); // вот тут бесконечный цикл получается
delay_us(5);
SPDR=cmd;
while (SPSR.7!=1);
delay_us(5);
LCD_CS=1;
}
выяснил это морганием на ноге PA0.
Вопрос.
Linker error: global RAM variables size: 2142 bytes is too large - как этот же код компилится на ATMega8
Код:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.5 Standard
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.comProject :
Version :
Date : 10.10.2008
Author : F4CG
Company : F4CG
Comments:
Chip type : ATmega32
Program type : Application
Clock frequency : 20,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/
char textcolor;
char backcolor;
#include <mega32.h>
#include <spi.h>
#include <fonts.h>
#include <defines.c>
#include <delay.h>
#include <disp.lib>
#include <delay.h>
void putbyte(char byte,char x,char y){
char a,i,c=0b1000000;
for (i=0;i<8;i++){
a=(byte & c);
if (a) {lcd_pset(x,y,textcolor);}
else {lcd_pset(x,y,backcolor);};
c=c/10;
y++;
}
}
void init_avr(void)
{
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=Out Func4=In Func3=Out Func2=Out Func1=In Func0=In
// State7=T State6=T State5=0 State4=T State3=0 State2=0 State1=T State0=T
PORTB=0x00;
DDRB=0x2C;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0xFF;
// 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;
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 250,000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x50;
SPSR=0x00;
}
void main(void)
{
char f,i;
init_avr();
textcolor = red;
backcolor = white;
LCD_RESET=1;
lcd_init();
fill_screen(red);
lcd_str_fl("HELLO",0,black);
//lcd_fillrect(0, 30, 132, 60,grey);
//lcd_fillrect(0, 60, 132, 90,violet);
//lcd_fillrect(0, 90, 132, 120,brown);
//lcd_fillrect(0, 120, 132, 150,orange);
//lcd_fillrect(0, 150, 132, 176,sky);
PORTA = 0x00;
DDRA = 0x01;
while (1)
{
PORTA.0 = 0;
delay_ms(1000);
PORTA.0 = 1;
delay_ms(1000);
}
}
P.S. Если в ф-ции включить void put_char(char c,u08 font,ui16 color) вместо первого ch=font8x14... поставить ch=font8x8, то компилится.
На экране ничего.
Чё не так делаю. Это первый опыт с LCD.