Цитата(John23 @ Jan 23 2008, 16:43)

применить к своей инициализации. У меня Atmega 128, с ней портом С подсоединён двустрочный LCD основаный на HD44780. Провожу всеми описываемую инициализацию, но результата нет.
Половина подобных проблем решается осциллографом.
Цитата
Имеется вот такой вот примитивчик инициализации...
Код
void delay_ms(unsigned short ms)
{
unsigned short outer1, outer2;
outer1 = 200;
while (outer1) {
outer2 = 1000;
while (outer2) {
while ( ms ) ms--;
outer2--;
}
outer1--;
}
}
Такой код НЕ РАБОТАЕТ в реальной жизни. Советую использовать один аппаратный таймер для счёта времени. Тем более если речь про миллисекунды, а не микро или наносекунды. Попутно этот таймер может ШИМ выдавать или чего-нибудь в этом роде.
Но это ещё не всё. Код в котором нужен delay(), опять же, не на микросекунды или наносекунды, а миллисекунды -- В РЕАЛЬНОЙ ЖИЗНИ НЕ РАБОТАЕТ. Просто потому, что из-за вот этой delay() колом встают все другие процессы, которые у вас есть, вроде же очевидно. Нет, я конечно немного лукавлю, и в простых совсем случаях именно такой код и работает, когда у вас кроме дисплея ничего нет, например.
Цитата
//VLED - PC0
//RS - PC1
//R/W - PC2
//E - PC3
//DB4..DB7 - PC4..PC7
Я обычно таким (см. выше) вещам даю символические имена. Иначе код неочевидный получается. Да хоть через #define.
Цитата
Код
void Write_8Bit(int value, int pause)
{
PORTC=value;
sbi(PORTC,3);
cbi(PORTC,3);
PORTC=0xF1;/установить DB4-DB7 в HI
delay_ms(pause);
}
Во-первых здесь не delay_ms() нужен, а delay(~15uS), насколько я помню, хотя могу и ошибаться. Во-вторых, к сожалению (опять же могу ошибаться), у вас только 4-битный интерфейс, а при использовании 8-битного имеется возможность читать бит готовности в 7-м бите и таким образом исключить задержки. Хотя, практически, с ними даже проще -- реализуется автомат который просыпается не чаще чем в 15мкс (или за сколько там команды выполняются, наизусть не помню) и посылает обновления по байтику.
Цитата
Подскажите что у меня не так.
Нечёткий код, весьма вероятно содержащий ошибку. Промоделируйте ситуацию на компьютере -- замените все "PORTC=" записью в файл выводимых битиков с отметкой времени (виртуального, понятно, или реализуйте честные задержки с помощью средств ОС) -- и смотрите в чём не сходится с даташитом.