Драйвер для LCD от Nokia 3310

Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Ответить
Опытный кот
Аватара пользователя
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк

Сообщение sachok »

Испытал библиотеку на экране 3410, там все тоже, просто больше разрешение. Основная проблема что у меня возникла - это скорость програмного SPI. Для сравнения можно посмотреть видео.
hard SPI
soft SPI
Ну и стоит обратить внимание на то как выглядит батарейка.
Я не Сашок!!!
Контактная информация:
Реклама
Прорезались зубы
Сообщения: 228
Зарегистрирован: Пн окт 04, 2010 11:55:41

Сообщение neid »

Всем привет! Решил покурить данную статью http://radiokot.ru/articles/29/, взял за основу драйвер второй с поправками(внизу статьи) и исходники, переписал вывод информации для двух ds18b20 и запустил в Протусе. Вот что получилось:
Изображение мало того это дело все еще мигает в Протусе, появитяс пропадет, появится пропадет.
Думал в Протусе че то не так, собрал в железе таже фигня, при чем надпись "Термометр" очень тусклая, инфа с датчиков четкая, но не мигает уже
В чем причина может быть. Пробывал закоментить #define china 1, при компиляции ошибка появляется(в форуме кто то упоминал)
вот выложил исходники свои, помогите советом.
Вложения
02.rar
(167.06 КБ) 444 скачивания
Реклама
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Если отличается "яркость" надписей на экране, значит, часть экрана Вы обновляете через стирание, а часть - нет... Пока только такая мысль в голову приходит. Если отображение по сути корректное, то china здесь не при чем, оно не для того.
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Прорезались зубы
Сообщения: 228
Зарегистрирован: Пн окт 04, 2010 11:55:41

Сообщение neid »

Aheir писал(а):Если отличается "яркость" надписей на экране, значит, часть экрана Вы обновляете через стирание, а часть - нет... Пока только такая мысль в голову приходит. Если отображение по сути корректное, то china здесь не при чем, оно не для того.
Разобрался, все коректно выводится и все одного оттенка, осталось только мерцание изображеняи, в чем причина понять не могу. :cry:
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Шо за мерцание?
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Реклама
Прорезались зубы
Сообщения: 228
Зарегистрирован: Пн окт 04, 2010 11:55:41

Сообщение neid »

Aheir писал(а):Шо за мерцание?
на доли секунду пропадает избражение, прям на очень маленькие доли. и с определенной частотой, поэтому получается мерцание.
Вот еще раз выложу свой исходник поправленный и модель в протусе.
Вложения
02.rar
(198.47 КБ) 416 скачиваний
Реклама
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Такое встречал, только когда сам косячил с программой... Таки похоже, что что-то с обновлением экрана...
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Прорезались зубы
Сообщения: 228
Зарегистрирован: Пн окт 04, 2010 11:55:41

Сообщение neid »

Код: Выделить всё

while (1)
      { 
        delay_ms(50);   // задержка для устранения дребезга контактов кнопок и она же - шаг изменения значений яркости 
        // чтобы режим не менялся каждые 50mS, при нажатии на кнопку разрешаем только одно изменение режима
        if (Mode_Change_Enabled)
        {
            if (MODE_Button)                        // если нажата кнопка смены режима 
            {  
                if ((++Mode) == 3) Mode = 0;   // меняем режим по кольцу
                Mode_Change_Enabled = 0;       // запрещаем при нажатой кнопке повторную смену режима
            };
        }
        // когда кнопка отжата, опять разрешаем смену режима
        else if (!MODE_Button) {Mode_Change_Enabled = 1;};
        
        
        LcdClear();
        switch (Mode)                                   // если ручной режим
        { 
            case Manual:
            {   
                
                sprintf (lcd_buf, "ЯРКОСТЬ");LcdString (5,1);
                                               
               
               if (UP_Button)                           // если нажата кнопка увеличение яркости
                    {   
                        if (OCR1A < 255) OCR1A++;
                        
                    };
                if (DOWN_Button)                      // если нажата кнопка уменьшения яркости
                    {
                        if (OCR1A) OCR1A--;
                    };
                
                /****Заполняем шкалу по процентам****/
                x1=((OCR1A*100)/254); //Расчет % яркости
                x2=x1;                //Переменная двывода % яркости
                x1=(x1*83)/100;       //Расчет заполенния по % яркости относительно Х
                
                LcdLine (1,34,x1,34,2);  //
                LcdLine (1,35,x1,35,2);  //Рисуем заполение шкалы
                LcdLine (1,36,x1,36,2);  //
                
                
                LcdLine (0,32,0,37,2);    //
                LcdLine (83,32,83,37,2);  //  Пустая шкала
                LcdLine (0,32,83,32,2);   //
                LcdLine (0,37,83,37,2);   //
                /****************************************/
                
                sprintf (lcd_buf, " <          >");LcdString (1,6); //Знаки больше и меньше по краям экрана
                sprintf (lcd_buf, "%i",x2);LcdStringBold (6,3);     //Вывод процента яркости
                LcdUpdate();
                delay_ms(10);
                
                break;
            }; 
            LcdMode (2);
            
            case Auto:                              // авто тремрметр и вольтметр
            {   
            
                ind=((100.0*(adc_data[0]<<2))/204)*4;   //Расчте напряжения 
                
              
                sprintf (lcd_buf, " ( Термометр");LcdString (1,1); //Символ ( это часть значки термометра

                temperature(); //Вызов функции температурной

                /*ПЕРВЫЙ ДАТЧИК*/
                sprintf (lcd_buf, " )  IN %i'C", temper[0]); LcdString(1,2);  //вывод температуры 1ого датчика, символ ) это часть значки термометра

                /*ВТОРОЙ ДАТЧИК*/
                sprintf (lcd_buf, " *  OUT %i'C", temper[1]); LcdString(1,3); //вывод температуры 2ого датчика, символ * это часть значки термометра

                #asm("sei")
                sprintf (lcd_buf, "Вольтметр");LcdString (1,5); 
                sprintf (lcd_buf, "  %u.%uV",ind/100,ind%100);LcdString (1,6);  //Вывод напряжения

                LcdBar(65, 27, 75, 45, 10*(3+1));   //Вывод значка батареи
                LcdUpdate();
                delay_ms(10);
                
                
                break;          
            };
            LcdMode (2);
            
            
            case Max:    
            {  
                
                sprintf (lcd_buf, "Режим 3",); LcdString(1,2);  //пока не придумал третий режим
                LcdUpdate();
                delay_ms(10);
                
                break; 
            };
            LcdMode (2);
        };
      }
что не так делаю?
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Зачем LcdClear(); в основном цикле каждые 50 мс? Отсюда и мерцание.... Да и LcdMode (2); не нужно постоянно дергать...
LcdClear(); физически очищает экран, для очистки только буфера напишите свою функцию или дождитесь новой версии от меня)
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Прорезались зубы
Сообщения: 228
Зарегистрирован: Пн окт 04, 2010 11:55:41

Сообщение neid »

Aheir писал(а):Зачем LcdClear(); в основном цикле каждые 50 мс? Отсюда и мерцание.... Да и LcdMode (2); не нужно постоянно дергать...
LcdClear(); физически очищает экран, для очистки только буфера напишите свою функцию или дождитесь новой версии от меня)
Разобрался с библиотекой! Все мерцаний нет, работает!)))
Сненерировал картинку не знаю как её вывести?
почему файл рисунка не выкладываете, или объясните как картину выводить?
Опытный кот
Аватара пользователя
Сообщения: 754
Зарегистрирован: Пт апр 15, 2011 21:11:22
Откуда: Россия

Сообщение BigallS »

neid писал(а): Разобрался с библиотекой! Все мерцаний нет, работает!)))
Сненерировал картинку не знаю как её вывести?
почему файл рисунка не выкладываете, или объясните как картину выводить?

Вот здесь пример посмотри, там картинка есть http://we.easyelectronics.ru/lcd_gfx/bi ... -3310.html
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Есть примеры вывода картинки:
http://radiokot.ru/circuit/digital/measure/34/
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Здесь как бе обсуждается вполне конкретная реализация из соответствующей статьи, Ваш пример был бы в кассу в другой теме форума по этому экрану (она есть в разделе по микроконтроллерам)
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Родился
Сообщения: 4
Зарегистрирован: Пн янв 10, 2011 18:55:48

Сообщение CanceR »

Здравствуйте. Помогите перевернуть экран. Через функцию LcdUpdate или может есть команда аппаратного переворачивания, в даташите я не нашел. Экран влезает в мою коробочку тока контактами вниз. Строчки символов перевернуты. Заранее спасибо.
Встал на лапы
Аватара пользователя
Сообщения: 92
Зарегистрирован: Пт окт 07, 2011 13:16:48

Сообщение -=Orion=- »

CanceR писал(а):Здравствуйте. Помогите перевернуть экран. Через функцию LcdUpdate или может есть команда аппаратного переворачивания, в даташите я не нашел. Экран влезает в мою коробочку тока контактами вниз. Строчки символов перевернуты. Заранее спасибо.
перевернуть шрифт
Родился
Сообщения: 1
Зарегистрирован: Ср фев 02, 2011 16:30:45
Откуда: Смоленск

Сообщение Monchik »

Компилятор CV2.05 не понимает директиву #elif. Написал ему #else. Так, вроде, работает.
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 244
Зарегистрирован: Ср авг 31, 2005 20:09:08
Откуда: Петрозаводск, Карелия.

Сообщение Pa5ha »

Не завелось у меня ничего почему-то. Пытался дисплей от нокии 6030 заюзать - мертв. Подпаял от 3310 оригинальный, с надписью. Тоже признаков жизни не подает. На порты подпаяны светодиоды. Моргают - вывод идет. Мега питается от 5в, дисплеи от 3.3 l78l33, к портам подпаяны через делители 2кОм + 3.3 кОм.
Куда потыкать тестером даже не знаю.
2kb of eeprom should be enought for everybody (C) Bill Gates` cat :)
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 192
Зарегистрирован: Вс окт 04, 2009 21:19:32
Откуда: Украина , Житомир

Сообщение valexus »

Ну светодиоды с портов лучше убрать, сигнал они конкретно искажают. И еще проверь напряжение на кондере вольтдобавки дисплея, там около 9 вольт должно быть.
Заело -- нажми посильнее, сломалось -- не страшно , все равно надо было менять.
Прорезались зубы
Аватара пользователя
Сообщения: 244
Зарегистрирован: Ср авг 31, 2005 20:09:08
Откуда: Петрозаводск, Карелия.

Сообщение Pa5ha »

Светодиоды? Хм, окай )
Кондер, который 4.7 мкф на 7, 8 ногах висит? Ок.

Вообще, оказалось, что у меня одна нога была не пропаяна. Но результат после исправления не поменялся. На контактах дисплея напруга есть, но при подаче питания он никак не реагирует. Мелтовский когда заводил - там хоть развертка сразу появлялась, было видно, что дисплей отреагировал, хоть и не инициализирован и ничего не показывает.
2kb of eeprom should be enought for everybody (C) Bill Gates` cat :)
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

А дисплей-то жив? Есть уверенность? Вообще, так, чтобы совсем ничего не показывал, не бывает. Ищите косяки с подключением и настройкой в программе.
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Ответить

Вернуться в «Статьи»