Автор Тема: Библиотека UC1601s  (Прочитано 6296 раз)

0 Пользователей и 1 Гость просматривают эту тему.

zaman

  • Гость
Библиотека UC1601s
« : 06 Сентябрь 2012, 19:48:31 »
Запустил вашу библиотеку на PIC16f887 но на программном i2c(аппаратный не пошел).
Но наблюдается баг, особенно виден на "звездном небе", демке с прямоугольниками и логотипе MAGETEX.
Точки не отрисовываются, вместо них пустые вертикальные полоски.

Подскажите решение проблемы

Оффлайн Catcatcat

  • Администратор
  • Пользователь
  • *****
  • Сообщений: 66
  • Карма: 0
  • Пол: Мужской
  • -------------
    • Просмотр профиля
    • Мои альбомы
    • Светомузыка
Re: Библиотека UC1601s
« Ответ #1 : 07 Сентябрь 2012, 09:39:16 »
При использовании программного эмулятора И2С, есть несколько вариантов, почему драйвер индикатора пропускает байты данных.

Если драйвер не определил состояние стоп, то естественно об не поймет прием следующего байта. Только после нормального состояния стоп, прием данных начнется правильно.

Если не совсем правильно формируются импульсы синхронизации, т.е. "не много" не в то время. Поэтому драйвер начинает пропускать байты данных.

Сама библиотека обращается на индикатор как на запись данных, так и на чтение с индикатора, если при чтении данных драйвер индикатора не получить ноуаск об окончании чтения, он будет "тупить" при следующей операции записи или чтении данных.

Решение -
Все сводиться к тому, чтобы "поиграться" с длительностью сигналов которые формируют обмен между индикатором и контроллером и проверить как формируются ответы между устройствами. Но это предполагает наличия как минимум "хорошего" осциллографа.
Еще раз проверить по ходу программы правильно, ли формируется чтение данных с индикатора (на проблему ноуаск). Программный И2С это такая же библиотека написанная человеком и не стоит от нее требовать идеальной работы. Что бы "поиграться" тебе будет необходимо открыть файлы И2С библиотеки и разобраться в их работе.

Я бы порекомендовал попробовать запустить аппаратный И2С, это снимет целый ряд проблем. Я правда на 88х не тестил эту библиотеку, но на стареньких 87хА, и на "новеньких" 1936, 1938, 18хх, (то что качается 16 серии) работает без проблем. Я с 88х начал работать, но потом их оставил, т.к. новых в контроллерах расширили систему команд и это дало, что на ассемблере, что на Си как минимум 30 % уменьшить объем программного кода, и аппаратно они более привлекательны (и цена их ниже).

 p.s. На прямую, в лоб, я так ничего не могу посоветовать :(


zaman

  • Гость
Re: Библиотека UC1601s
« Ответ #2 : 07 Сентябрь 2012, 14:58:47 »
Есть логический анализатор, и место ошибки я похоже нашел.
Сбило меня с толку то, что надписи отрисовываются нормально, хотя каждый символ также, считывает то что в дисплее, а потом заменяет на свои данные

Оффлайн Catcatcat

  • Администратор
  • Пользователь
  • *****
  • Сообщений: 66
  • Карма: 0
  • Пол: Мужской
  • -------------
    • Просмотр профиля
    • Мои альбомы
    • Светомузыка
Re: Библиотека UC1601s
« Ответ #3 : 07 Сентябрь 2012, 16:07:23 »
Когда, что то рисуется, то новое изображение накладывается на фон, а фон считывается с дисплея. Так проще для обработки.

zaman

  • Гость
Re: Библиотека UC1601s
« Ответ #4 : 08 Сентябрь 2012, 12:18:22 »
При рисовании точек в месте
i2c_start(0x70,1,1); // 0x70 адрес индикатора, данные, чтениеиндикатор не дает ACK
На код который следует далее
i2c_read_ack();
fon=i2c_read_noack();
i2c_stop();
Индикатор дает ACK а потом как и положено прием завершается по NACK от ведущего
При этом считываются 0xff два раза




Еще нет ACK при записи в месте i2c_write(0b10110000 | Y); но почему я не понимаю
« Последнее редактирование: 08 Сентябрь 2012, 12:20:18 от zaman »

Оффлайн Catcatcat

  • Администратор
  • Пользователь
  • *****
  • Сообщений: 66
  • Карма: 0
  • Пол: Мужской
  • -------------
    • Просмотр профиля
    • Мои альбомы
    • Светомузыка
Re: Библиотека UC1601s
« Ответ #5 : 08 Сентябрь 2012, 13:40:05 »
Проблема, я так думаю, может быть в одном, не выдерживаются условие шины.
Для работы с интерфейсом I2C  я написал функции для работы с модулем MSSP. Попробуй использовать от другой библиотеки. Только нужно будет переделать функции i2c_start и i2c_restart. Для формирования команд.

Vavilon19

  • Гость
Re: Библиотека UC1601s
« Ответ #6 : 17 Октябрь 2012, 20:50:24 »
Здравствуйте! Может есть пример работы UC1601S на асме для 18 пика, хотя бы инициализации.Си пока мне не понятен, свой RDX0120 мучаю третий день, использую модуль MSSP, тактовая 32 мГц,скорость шины I2C 100кГц. Инициализацию проходит, но LCD молчит, с командами инициализации совсем запутался. 

Оффлайн Catcatcat

  • Администратор
  • Пользователь
  • *****
  • Сообщений: 66
  • Карма: 0
  • Пол: Мужской
  • -------------
    • Просмотр профиля
    • Мои альбомы
    • Светомузыка
Re: Библиотека UC1601s
« Ответ #7 : 17 Октябрь 2012, 22:51:34 »
Я ушел с ассемблера, потому что обленился, это кажется, что программирование в Си сложнее, наоборот. Если перейдешь на Си, потом вернуться на ассемблер сложно. Я выдрал из своих старых программ, написанные на ассемблере, функции для работы с I2C интерфейсом. Посмотри может у тебя, что-то не так используется, сравни или вообще возьми мои программы за основу, они полностью рабочие.

Последовательность инициализации одинакова, что в си, что в ассемблере.

RSETLCD=1; // индикатор вывести из сброса
_delay(160000);       // 16 000 = 1мС - 10мС
i2c_start(0x70,0,0);                      // 0x70 адрес индикатора, 0-команда, 0-запись
i2c_write(0b11100010);                //
i2c_stop();
_delay(160000); // 16 000 = 1мС - 10мС
i2c_start(0x70,0,0);                      // 0x70 адрес индикатора, 0-команда, 0-запись
i2c_write(0b11101011);            // BIAS 6
i2c_write(0b10000001);               // настройка Vbias
i2c_write(120);         // 124
i2c_write(0b11000110);            // настройка типа разветки свеху в низ, и слево на право
i2c_write(0b10101111);           // Включить дисплей
i2c_stop();

Если возникнут вопросы не стесняйся задавай.
« Последнее редактирование: 17 Октябрь 2012, 22:56:48 от Catcatcat »

Vavilon19

  • Гость
Re: Библиотека UC1601s
« Ответ #8 : 17 Октябрь 2012, 23:07:04 »
Спасибо, не ожидал, что так быстро ответите.Спасибо за код,завтра сравню.Вы не можете дать комментарий по этой строке:

i2c_write(120);                 // 124
 
 не пойму что за цифра в скобках.

Оффлайн Catcatcat

  • Администратор
  • Пользователь
  • *****
  • Сообщений: 66
  • Карма: 0
  • Пол: Мужской
  • -------------
    • Просмотр профиля
    • Мои альбомы
    • Светомузыка
Re: Библиотека UC1601s
« Ответ #9 : 18 Октябрь 2012, 06:57:48 »
это Set LCD Bias Ratio

три строки

        i2c_write(0b11101011);           // BIAS 6
i2c_write(0b10000001);           // настройка Vbias
i2c_write(120);         // 124

влияют на контрастность и яркость индикации, их я подбирал значения по лучшей индикации.

Vavilon19

  • Гость
Re: Библиотека UC1601s
« Ответ #10 : 19 Октябрь 2012, 11:41:54 »
Спасибо уважаемый гуру, действительно проблема была в неправильной настройке модуля MSSP, LCD ожил, разбираюсь дальше, жаль что ваша библиотека только на Си, сейчас вывел  первую надпись используя ваши таблицы, но ту красоту,которую вы продемонстрировали в своей программе ,боюсь без ваших подсказок мне не достичь, многое еще не понятно. Ничего, глаза боятся- руки делают, спасибо за ваш труд. С уважением  Владимир.