_sR_ 0 24 февраля, 2007 Опубликовано 24 февраля, 2007 · Жалоба давно мониторю тему и здесь и у немцев тоже вот кулибничеством решил позаниматься... только успеха пока нет. была у меня платка с Mega128L решил попробовать подключить туда дисплейчик на LS020... уже все примеры что мог найти просмотрел, осциллом потыкался - все как доктор прописал, а он зараза молчит как пленный партизан. посему вопрос к тем у кого этот дисплейчик заработал при выдачи блоков инициализации на экране что-нибудь должно происходить? ну хоть что-нибудь чтоб понять что он работает. А то у меня вообще 0 реакции. немного о железе на чем пробую: ATMega128L 8Мгц (сейчас на 12Мгц, вроде работает) индикатор висит на SPI вместе с другим (разные CS, другой индикатор работает). Пробовал все скорости SPI - никакой реакции. Паузы между блоками инициализации контроллировал на осциллографе - все как надо. вобщем уже не знаю что еще пробовать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 24 февраля, 2007 Опубликовано 24 февраля, 2007 · Жалоба давно мониторю тему и здесь и у немцев тоже вот кулибничеством решил позаниматься... только успеха пока нет. была у меня платка с Mega128L решил попробовать подключить туда дисплейчик на LS020... уже все примеры что мог найти просмотрел, осциллом потыкался - все как доктор прописал, а он зараза молчит как пленный партизан. посему вопрос к тем у кого этот дисплейчик заработал при выдачи блоков инициализации на экране что-нибудь должно происходить? ну хоть что-нибудь чтоб понять что он работает. А то у меня вообще 0 реакции. немного о железе на чем пробую: ATMega128L 8Мгц (сейчас на 12Мгц, вроде работает) индикатор висит на SPI вместе с другим (разные CS, другой индикатор работает). Пробовал все скорости SPI - никакой реакции. Паузы между блоками инициализации контроллировал на осциллографе - все как надо. вобщем уже не знаю что еще пробовать... Вам надо проверить дисплей на исправность - воткните его в телефон. Если же он живой, то надо разбираться. Во время инициализации на экране ничего не происходит. Только после неё появляется цветной "мусор". Проверьте тайминги после/перед всеми сигналами на SPI - у меня был затык с сигналом CS, я его поднимал сразу после передачи, а надо после небольшой паузы (1 мкс достаточно). Также между передачей команд/данных надо поднять CS. Длина проводов к дисплею должна быть минимальной (несколько сантиметров). Можно попросить работающий код у тех, у кого всё работает. По железу всё-ли подключено правильно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sR_ 0 24 февраля, 2007 Опубликовано 24 февраля, 2007 (изменено) · Жалоба Проверьте тайминги после/перед всеми сигналами на SPI - у меня был затык с сигналом CS, я его поднимал сразу после передачи, а надо после небольшой паузы (1 мкс достаточно). Также между передачей команд/данных надо поднять CS. По железу всё-ли подключено правильно? проверить негде, у одного знакомого есть такой тел, но представляю его реакцию типа "дай телефон я счас в него свой дисплей воткну проверю" :) подключено вроде правильно благо проводов то немного. а про паузы сейчас попробую... увы паузы после поднятия CS не помогли... Изменено 24 февраля, 2007 пользователем _sR_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 25 февраля, 2007 Опубликовано 25 февраля, 2007 · Жалоба увы паузы после поднятия CS не помогли... Не после поднятия - а перед поднятием CS, то есть так: Выставили RS, опускаем CS (low), передаём команды, пауза 1 мкс, поднимаем CS, меняем RS, опускаем CS, передаём данные, пауза 1 мкс, поднимаем CS. Как у вас RESET управляется? Провода к дисплею не длинные? Питание 3.3 вольта и у меги, и у дисплея? Фото монтажа нет? И осциллограммы сигналов нельзя сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sR_ 0 25 февраля, 2007 Опубликовано 25 февраля, 2007 · Жалоба Не после поднятия - а перед поднятием CS, то есть так: Выставили RS, опускаем CS (low), передаём команды, пауза 1 мкс, поднимаем CS, меняем RS, опускаем CS, передаём данные, пауза 1 мкс, поднимаем CS. Как у вас RESET управляется? Провода к дисплею не длинные? Питание 3.3 вольта и у меги, и у дисплея? Фото монтажа нет? И осциллограммы сигналов нельзя сделать? Ну да перед поднятием... сегодня сделал програмный SPI - без толку ресет генерится монитором питания (1171СП20) общий и на контроллер и на индикатор, честно говоря есть на него подозрения что фронт там длинноват, но проверить только завтра на работе смогу. провода сантиметров 20 с разъемом (програмному SPI не должны быть помехой) питание 3,1 общее для меги и индикатора выглядит все так Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 25 февраля, 2007 Опубликовано 25 февраля, 2007 · Жалоба провода сантиметров 20 с разъемом (програмному SPI не должны быть помехой) питание 3,1 общее для меги и индикатора выглядит все так Провода всё-же длинноваты. Тут всё зависит от частоты SPI. Попробуйте или сделать короче (до 10 см макс.), или частоту клоков в минимум. Можно посмотреть осциллографом форму сигналов непосредственно на пинах дисплея. Должен быть меандр с минимальными искажениями. И ещё - что-то не видно работающей подсветки. ЖКИ должен быть белого цвета, а у вас чёрный... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sR_ 0 26 февраля, 2007 Опубликовано 26 февраля, 2007 · Жалоба Я ж говорю сделал програмный SPI с частотой клоков 50 кГц. Подсветка есть просто т.к. питание у меня сейчас батарейное я занизил напругу подсветки до 9 В, ну и соглнышко на него светит. Сегодня попробую Reset дисплейчика на ногу контроллера повесить... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
satellite-plus 0 26 февраля, 2007 Опубликовано 26 февраля, 2007 · Жалоба Я ж говорю сделал програмный SPI с частотой клоков 50 кГц. Подсветка есть просто т.к. питание у меня сейчас батарейное я занизил напругу подсветки до 9 В, ну и соглнышко на него светит. Сегодня попробую Reset дисплейчика на ногу контроллера повесить... Возьми рабочий текст и сравни. display.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sR_ 0 26 февраля, 2007 Опубликовано 26 февраля, 2007 · Жалоба тупик на всякий случай, может у кого глаз не замылен и есть минутка свободная, привожу тот код который счас работает инициализирующую последовательность и времена пауз взял из примера, предоставленного satellite-plus Встречал эту последовательность разбитую на 7 кусков и несколько другими временами, пробовал и так результата нет. Видимо всетаки трындец индикатору... int main() { PORTG_PORTG4 = 1; MCUInit(); Sleep(1);// Sleep(delay_in_ms) PORTD_PORTD1 = 1; //LCD RESET Sleep(1); S65Init(); S65StartBackLite(); return 0; } typedef const unsigned short __flash FlashCShortPtr; // INIT1: ; 24bytes FlashCShortPtr INIT1[12]={0xFDFD,0xFDFD,0xEF00,0xEE04, 0x1B04,0xFEFE,0xFEFE,0xEF90,0x4A04, 0x7F3F,0xEE04,0x4306}; //INIT2: ; 40bytes FlashCShortPtr INIT2[20]={0xEF90,0x0983,0x0800, 0x0BAF,0x0A00,0x0500,0x0600,0x0700,0xEF00, 0xEE0C,0xEF90,0x0080,0xEFB0,0x4902, 0xEF00,0x7F01,0xE181,0xE202,0xE276, 0xE183}; //INIT3: ; 2bytes FlashCShortPtr INIT3[1]={0x8001}; void S65Init() { SendSPICommandWords( sizeof(INIT1) >> 1, INIT1 ); Sleep(7); SendSPICommandWords( sizeof(INIT2) >> 1, INIT2 ); Sleep(50); SendSPICommandWords( sizeof(INIT3) >> 1, INIT3 ); Sleep(5); } void SendSPICommandWords(unsigned char size, FlashCShortPtr* arr) { // select command register and select display PORTB_PORTB0 = 1;//io_set_io( S65_IO_RS ); PORTB_PORTB1 = 0;//io_reset_io( S65_IO_CLK ); PORTD_PORTD5 = 0;//io_reset_io( S65_IO_CS ); //send commands for(unsigned char word_counter=0; word_counter < size; word_counter++ ) { s65_driver_send_word( *arr ); ++arr; } __delay_cycles(24); // deselect display PORTD_PORTD5 = 1;//io_set_io( S65_IO_CS ); } void s65_driver_send_word( unsigned short word ) { for( unsigned char bit_counter=0; bit_counter<16; bit_counter++ ) { if( (word &(0x0001<<bit_counter)) == 0x01 ) { PORTB_PORTB2 = 1;//io_set_io( S65_IO_DATA ); } else { PORTB_PORTB2 = 0;//io_reset_io( S65_IO_DATA ); } PORTB_PORTB1 = 1;//io_set_io( S65_IO_CLK ); __delay_cycles(24); PORTB_PORTB1 = 0;//io_reset_io( S65_IO_CLK ); } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nanobyte 0 26 февраля, 2007 Опубликовано 26 февраля, 2007 · Жалоба А приведите-ка нам распиновку вашего дисплея и как вы его подключаете к МК. Дело в том, что на супернемецком форуме были какие то грабли с распиновкой. Там ещё фотографии были, но контакты чуть-чуть по разному сделаны. PS. А скорость SPI практически влиять не должна. Что программный, что аппаратный SPI работают одинаково. Пробовал я и 20см шлейф на частоте МК 20 МГц. Всё ОК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 26 февраля, 2007 Опубликовано 26 февраля, 2007 · Жалоба тупик на всякий случай, может у кого глаз не замылен и есть минутка свободная, привожу тот код который счас работает инициализирующую последовательность и времена пауз взял из примера, предоставленного satellite-plus Встречал эту последовательность разбитую на 7 кусков и несколько другими временами, пробовал и так результата нет. Видимо всетаки трындец индикатору... По порядку: 1. Данные (и команды) на линию SDATA должны выставляться MSB first (старший (15) бит первый), а у вас наоборот. 2. Сразу после установки линии SDATA (перед установкой CLK в 1) должна следовать пауза длительностью 0,5 периода CLK. У вас никакой паузы нет. А вы хотите, чтобы дисплей заработал :( Также важна точность временных пауз во время инициализации. Опять-же цитирую немцев: If the time is too short or too long the display will not work! Какой у вас контроллер? На какой частоте работает? И можно увидеть код процедуры Sleep()? Повторюсь - лучший способ увидеть, что творится на пинах ЖКИ - взять двухканальный (хотя-бы) запоминающий осциллограф и посмотреть, всё ли в порядке. PS. А скорость SPI практически влиять не должна. Что программный, что аппаратный SPI работают одинаково. Пробовал я и 20см шлейф на частоте МК 20 МГц. Всё ОК. То есть при частоте SCLK 10 Мгц? Или даже 5 Мгц? У меня частота SCLK 12 Мгц, и при перегибе шлейфа (длиной 10 см) дисплей перестаёт реагировать на сигналы, так как искажения формы сигнала CLK (да и других сигналов) становятся велики. Индуктивность проводов на высоких частотах играет свою роль, и об этом немцы сразу предупреждают :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sR_ 0 26 февраля, 2007 Опубликовано 26 февраля, 2007 · Жалоба 2 Nanobyte распиновку брал из "Using the Siemens S65.pdf" (PDF by Benjamin Metz, April 18th, 2006) картинка с пинами вот. 2 sonycman 1. самое смешное что в первоначальном варианте на аппаратном SPI так и было, но потом я скачал примерчик у немцев и его воткнул (однако, не все примеры полезны). только что исправил функцию void s65_driver_send_word( unsigned short word ) на такую void s65_driver_send_word( unsigned short word ) { for( unsigned char bit_counter=0; bit_counter<16; bit_counter++ ) { if( (word &(0x8000>>bit_counter)) ) { PORTB_PORTB2 = 1;//io_set_io( S65_IO_DATA ); } else { PORTB_PORTB2 = 0;//io_reset_io( S65_IO_DATA ); } __delay_cycles(24); PORTB_PORTB1 = 1;//io_set_io( S65_IO_CLK ); __delay_cycles(24); PORTB_PORTB1 = 0;//io_reset_io( S65_IO_CLK ); __delay_cycles(24); } } НИФИГА, экран как был так и остался 2. Наверное не в длительности периуда дело (допустим програмный SPI на 1 Гц), а во времени предустановки данных относительно переднего фронта CLK. Контроллер сейчас работает на 8 Мгц длительность команды установки бита 2 такта (250 нс), что для схемы, работающей с тактовой чатотой 13 МГц не должно представлять проблемы. Да и на осцилле все сигналы вполне "красивые"... Временные паузы взял из примера satellite-plus. У Вас такие? код sleep __no_init volatile bool DelayComplete; #pragma vector=TIMER0_OVF_vect __interrupt void TIMER0_OVF_ISR( void ) { TCNT0 = 6; DelayComplete = true; } void Sleep(unsigned short delay) { TCNT0 = 6; TIMSK = 1 << TOIE0; TCCR0 = (1 << CS01) | (1 << CS00); __enable_interrupt(); while( delay-- ) { DelayComplete = false; do { __sleep(); }while( !DelayComplete ); } TCCR0 = 0; TIMSK = 0; } Одна надежда что в распиновке у меня ошибка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 26 февраля, 2007 Опубликовано 26 февраля, 2007 · Жалоба 2. Наверное не в длительности периуда дело (допустим програмный SPI на 1 Гц), а во времени предустановки данных относительно переднего фронта CLK. Контроллер сейчас работает на 8 Мгц длительность команды установки бита 2 такта (250 нс), что для схемы, работающей с тактовой чатотой 13 МГц не должно представлять проблемы. Да и на осцилле все сигналы вполне "красивые"... Временные паузы взял из примера satellite-plus. У Вас такие? Одна надежда что в распиновке у меня ошибка. По пункту 2 - совершенно верно, я говорил про предустановку данных. 250 нс должно хватить. Распиновка верная. Временные паузы у меня такие-же. Насчёт Sleep() - процедура инициализирует таймер на прерывание через 1 миллисекунду, но при частоте MCLK 16 Мгц. Так как у вас 8 - задержки идут в два раза больше, чем надо. Замените везде строку TCNT0 = 6 на TCNT0 = 131. ЗЫ: Опять-же, по осциллографу должны быть видны слишком большие задержки. Надо быть внимательнее, иначе проблему не решить :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sR_ 0 26 февраля, 2007 Опубликовано 26 февраля, 2007 · Жалоба Насчёт Sleep() - процедура инициализирует таймер на прерывание через 1 миллисекунду, но при частоте MCLK 16 Мгц. Так как у вас 8 - задержки идут в два раза больше, чем надо. Замените везде строку TCNT0 = 6 на TCNT0 = 131. ЗЫ: Опять-же, по осциллографу должны быть видны слишком большие задержки. Надо быть внимательнее, иначе проблему не решить :) ну-у-у-у во первых осциллографом я смотрел, а во вторых... смотрим табличку 56 (стр. 103) CS01 = 1; CS00 = 1 коэффициент 32 и того получаем 125 нс * 32 * 250 = 1 мс но все равно я попробовал Ваш вариант результат тот же Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sR_ 0 26 февраля, 2007 Опубликовано 26 февраля, 2007 · Жалоба Аллилуйа! Тупо взял код satellite-plus и скопировал адаптировав ноги и заменив delay на свою Sleep едрен батон ЗАРАБОТАЛО! "ё-мое, чтож я сделал" (С) счас буду искать отличия "видишь суслика? и я не вижу... а он есть" огроменное спасибо satellite-plus за 100% исправный код! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться