Перейти к содержанию
    

давно мониторю тему и здесь и у немцев

тоже вот кулибничеством решил позаниматься...

только успеха пока нет.

была у меня платка с Mega128L решил попробовать подключить туда дисплейчик на LS020...

уже все примеры что мог найти просмотрел, осциллом потыкался - все как доктор прописал, а он зараза молчит как пленный партизан.

посему вопрос к тем у кого этот дисплейчик заработал

при выдачи блоков инициализации на экране что-нибудь должно происходить? ну хоть что-нибудь чтоб понять что он работает.

А то у меня вообще 0 реакции.

немного о железе на чем пробую: ATMega128L 8Мгц (сейчас на 12Мгц, вроде работает) индикатор висит

на SPI вместе с другим (разные CS, другой индикатор работает). Пробовал все скорости SPI - никакой реакции. Паузы между блоками инициализации контроллировал на осциллографе - все как надо.

вобщем уже не знаю что еще пробовать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

давно мониторю тему и здесь и у немцев

тоже вот кулибничеством решил позаниматься...

только успеха пока нет.

была у меня платка с Mega128L решил попробовать подключить туда дисплейчик на LS020...

уже все примеры что мог найти просмотрел, осциллом потыкался - все как доктор прописал, а он зараза молчит как пленный партизан.

посему вопрос к тем у кого этот дисплейчик заработал

при выдачи блоков инициализации на экране что-нибудь должно происходить? ну хоть что-нибудь чтоб понять что он работает.

А то у меня вообще 0 реакции.

немного о железе на чем пробую: ATMega128L 8Мгц (сейчас на 12Мгц, вроде работает) индикатор висит

на SPI вместе с другим (разные CS, другой индикатор работает). Пробовал все скорости SPI - никакой реакции. Паузы между блоками инициализации контроллировал на осциллографе - все как надо.

вобщем уже не знаю что еще пробовать...

Вам надо проверить дисплей на исправность - воткните его в телефон.

Если же он живой, то надо разбираться.

 

Во время инициализации на экране ничего не происходит. Только после неё появляется цветной "мусор".

Проверьте тайминги после/перед всеми сигналами на SPI - у меня был затык с сигналом CS, я его поднимал сразу после передачи, а надо после небольшой паузы (1 мкс достаточно).

Также между передачей команд/данных надо поднять CS.

 

Длина проводов к дисплею должна быть минимальной (несколько сантиметров).

 

Можно попросить работающий код у тех, у кого всё работает.

 

По железу всё-ли подключено правильно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверьте тайминги после/перед всеми сигналами на SPI - у меня был затык с сигналом CS, я его поднимал сразу после передачи, а надо после небольшой паузы (1 мкс достаточно).

Также между передачей команд/данных надо поднять CS.

 

По железу всё-ли подключено правильно?

проверить негде, у одного знакомого есть такой тел, но представляю его реакцию типа "дай телефон я счас в него свой дисплей воткну проверю" :)

подключено вроде правильно благо проводов то немного.

а про паузы сейчас попробую...

 

увы паузы после поднятия CS не помогли...

Изменено пользователем _sR_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

увы паузы после поднятия CS не помогли...

Не после поднятия - а перед поднятием CS, то есть так:

Выставили RS, опускаем CS (low), передаём команды, пауза 1 мкс, поднимаем CS, меняем RS, опускаем CS, передаём данные, пауза 1 мкс, поднимаем CS.

 

Как у вас RESET управляется?

Провода к дисплею не длинные?

Питание 3.3 вольта и у меги, и у дисплея?

 

Фото монтажа нет?

И осциллограммы сигналов нельзя сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не после поднятия - а перед поднятием CS, то есть так:

Выставили RS, опускаем CS (low), передаём команды, пауза 1 мкс, поднимаем CS, меняем RS, опускаем CS, передаём данные, пауза 1 мкс, поднимаем CS.

 

Как у вас RESET управляется?

Провода к дисплею не длинные?

Питание 3.3 вольта и у меги, и у дисплея?

 

Фото монтажа нет?

И осциллограммы сигналов нельзя сделать?

Ну да перед поднятием...

сегодня сделал програмный SPI - без толку

ресет генерится монитором питания (1171СП20) общий и на контроллер и на индикатор, честно говоря есть на него подозрения что фронт там длинноват, но проверить только завтра на работе смогу.

провода сантиметров 20 с разъемом (програмному SPI не должны быть помехой)

питание 3,1 общее для меги и индикатора

выглядит все так

post-7077-1172410452_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

провода сантиметров 20 с разъемом (програмному SPI не должны быть помехой)

питание 3,1 общее для меги и индикатора

выглядит все так

Провода всё-же длинноваты.

Тут всё зависит от частоты SPI. Попробуйте или сделать короче (до 10 см макс.), или частоту клоков в минимум. Можно посмотреть осциллографом форму сигналов непосредственно на пинах дисплея. Должен быть меандр с минимальными искажениями.

И ещё - что-то не видно работающей подсветки. ЖКИ должен быть белого цвета, а у вас чёрный...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я ж говорю сделал програмный SPI с частотой клоков 50 кГц.

Подсветка есть просто т.к. питание у меня сейчас батарейное я занизил напругу подсветки до 9 В, ну и соглнышко на него светит.

Сегодня попробую Reset дисплейчика на ногу контроллера повесить...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я ж говорю сделал програмный SPI с частотой клоков 50 кГц.

Подсветка есть просто т.к. питание у меня сейчас батарейное я занизил напругу подсветки до 9 В, ну и соглнышко на него светит.

Сегодня попробую Reset дисплейчика на ногу контроллера повесить...

Возьми рабочий текст и сравни.

display.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тупик

на всякий случай, может у кого глаз не замылен и есть минутка свободная, привожу тот код который счас работает

инициализирующую последовательность и времена пауз взял из примера, предоставленного 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 );
 }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А приведите-ка нам распиновку вашего дисплея и как вы его подключаете к МК. Дело в том, что на супернемецком форуме были какие то грабли с распиновкой. Там ещё фотографии были, но контакты чуть-чуть по разному сделаны.

PS. А скорость SPI практически влиять не должна. Что программный, что аппаратный SPI работают одинаково. Пробовал я и 20см шлейф на частоте МК 20 МГц. Всё ОК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тупик

на всякий случай, может у кого глаз не замылен и есть минутка свободная, привожу тот код который счас работает

инициализирующую последовательность и времена пауз взял из примера, предоставленного 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 (да и других сигналов) становятся велики. Индуктивность проводов на высоких частотах играет свою роль, и об этом немцы сразу предупреждают :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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;
}

 

Одна надежда что в распиновке у меня ошибка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2. Наверное не в длительности периуда дело (допустим програмный SPI на 1 Гц), а во времени предустановки данных относительно переднего фронта CLK. Контроллер сейчас работает на 8 Мгц

длительность команды установки бита 2 такта (250 нс), что для схемы, работающей с тактовой чатотой 13 МГц не должно представлять проблемы. Да и на осцилле все сигналы вполне "красивые"...

Временные паузы взял из примера satellite-plus. У Вас такие?

 

Одна надежда что в распиновке у меня ошибка.

По пункту 2 - совершенно верно, я говорил про предустановку данных.

250 нс должно хватить.

 

Распиновка верная.

Временные паузы у меня такие-же.

Насчёт Sleep() - процедура инициализирует таймер на прерывание через 1 миллисекунду, но при частоте MCLK 16 Мгц. Так как у вас 8 - задержки идут в два раза больше, чем надо.

Замените везде строку TCNT0 = 6 на TCNT0 = 131.

 

ЗЫ: Опять-же, по осциллографу должны быть видны слишком большие задержки. Надо быть внимательнее, иначе проблему не решить :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насчёт Sleep() - процедура инициализирует таймер на прерывание через 1 миллисекунду, но при частоте MCLK 16 Мгц. Так как у вас 8 - задержки идут в два раза больше, чем надо.

Замените везде строку TCNT0 = 6 на TCNT0 = 131.

 

ЗЫ: Опять-же, по осциллографу должны быть видны слишком большие задержки. Надо быть внимательнее, иначе проблему не решить :)

ну-у-у-у

во первых осциллографом я смотрел, а во вторых...

смотрим табличку 56 (стр. 103) CS01 = 1; CS00 = 1 коэффициент 32 и того получаем

125 нс * 32 * 250 = 1 мс

 

но все равно я попробовал Ваш вариант

результат тот же

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Аллилуйа!

Тупо взял код satellite-plus и скопировал адаптировав ноги и заменив delay на свою Sleep

едрен батон

ЗАРАБОТАЛО!

"ё-мое, чтож я сделал" (С)

счас буду искать отличия

"видишь суслика? и я не вижу... а он есть"

 

огроменное спасибо satellite-plus за 100% исправный код!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...