roboforum.ru

Технический форум по робототехнике.

Нужна помощь mega8 + LCD c I2C

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

Нужна помощь mega8 + LCD c I2C

Сообщение СержБабенко » 19 фев 2013, 22:08

Всем доброго времени суток.
Возникла проблема, собираю некое устройство где требуется счетчик циклов реализованный на основе такого дисплея -
http://www.melt.com.ru/docs/MT-10T11.pdf
На AVRке использую аппаратный TWI.
Подключал по такой схеме:Изображение
Код чисто пробный (без проверок статуса), протеус говорит что все фурычит как надо
Код: Выделить всёРазвернуть
#include <mega8.h>

void I2C_Start (unsigned char d) {
    unsigned char result = 0x0;
    TWCR = 0xa4;  //формируем событие старт
    while (result != 0x80) {
        result = TWCR & 0x80;
    }
    result = 0x0;
    TWDR = d; //адрес приемника и бит направления передачи (0 - передача)
    TWCR = 0x84; //шлем адрес
    while (result != 0x80) {
        result = TWCR & 0x80;
    }
}

void I2C_SendByte (unsigned char d) {
    unsigned char result = 0x0;
    TWDR = d;
    TWCR = 0x84; //шлем адрес
    while (result != 0x80) {
        result = TWCR & 0x80;
    }
}

void I2C_Stop (void) {
    TWCR = 0x94; //формируем событие стоп
}

void main(void)
{

unsigned char i = 0;
unsigned char Logo10[10]={0xC0,0xB3,0xA7,0x80,0xF9,0x80,0xB8,0x80,0xF8,0x40};
unsigned char Init [5]={0xCE,0xE0,0xF8,0xF0,0x00};

DDRB = 0xfe;
DDRC = 0x00;
PORTB = 0x0;


// скорость работы интерфейса
TWBR = 0xf;
TWSR = 0x0;

//while (1){

//      if (PINB.0 == 1) {
      I2C_Start (0xa0);
      for (i=0; i<5; i++) {
        I2C_SendByte(Init[i]); // Инициализация дисплея
        }
     for(i=0; i<10; i++) {   //Цикл вывода байтов изображения
       I2C_SendByte(Logo10[i]);//Вывод очередного байта в индикатор
       }
      I2C_Stop();
      }
//      }
//}


В коде использовал стандартные байты данных для настройки дисплея и в качестве изображения долен появится логотип "МЭЛТ"
Проблема вот в чем: Тыкал осциллографом - видно что линия SDA байты шлет, а вот SCL молчит (высокий уровень). Дорожки мерил и так и этак. На ум приходят 3 вещи:
1) отгорела нога контроллера
2) кривой код
3) кривое подключение (схемотехника)
Во всех областях новичок и самоучка. Осциллограф стащил с работы на время)
СержБабенко
 
Сообщения: 6
Зарегистрирован: 19 фев 2013, 21:35

Re: Нужна помощь mega8 + LCD c I2C

Сообщение Madf » 20 фев 2013, 11:31

думаю проблема с включением дисплея (изначально)....вопрос, почему не запитали всё от 3В по человечески?

зы: по накрутили ппц сколько...

Добавлено спустя 5 минут 46 секунд:
(отвечаю и рассуждаю сам себе)

Так: http://www.atmel.com/images/doc2486.pdf - понятно, эта мега с 4.5В только работает (прискорбно).
В общем надо делать полноценный преобразователь уровней и питать дисплей 3 вольтами.

Вообще ужас какой-то, МК с этим экраном - не совместимы, точнее гемороя больше.
Мне кажется нужно либо взять мегу версии L или вообще Тиньку...ну или дисплей нормальный на 3.3 вольта хотябы.
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Нужна помощь mega8 + LCD c I2C

Сообщение СержБабенко » 20 фев 2013, 12:00

Madf писал(а):думаю проблема с включением дисплея (изначально)....вопрос, почему не запитали всё от 3В по человечески?

зы: по накрутили ппц сколько...

Добавлено спустя 5 минут 46 секунд:
(отвечаю и рассуждаю сам себе)

Так: http://www.atmel.com/images/doc2486.pdf - понятно, эта мега с 4.5В только работает (прискорбно).
В общем надо делать полноценный преобразователь уровней и питать дисплей 3 вольтами.

Вообще ужас какой-то, МК с этим экраном - не совместимы, точнее гемороя больше.
Мне кажется нужно либо взять мегу версии L или вообще Тиньку...ну или дисплей нормальный на 3.3 вольта хотябы.

Я так полагаю самое простое это купить мегу версии L и перейти на 3 V... что ж попробуем, о результатах отпишусь если кому интересно
СержБабенко
 
Сообщения: 6
Зарегистрирован: 19 фев 2013, 21:35

Re: Нужна помощь mega8 + LCD c I2C

Сообщение Madf » 20 фев 2013, 13:05

Только учтите, что она 8МГц.
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Нужна помощь mega8 + LCD c I2C

Сообщение СержБабенко » 20 фев 2013, 13:18

Я все таки не понял...
Во-первых, причем тут 8 МГц? частота шины I2C выставляется в соответствующих регистрах контроллера;
Во-вторых, даже если предположить что мои проблемы из-за неправильного дисплея. Мастер же у нас АВРка, она шлет данные и формирует сигнал SCL. Однако данные идут, а SCL вообще молчит, ну ни единого дрыга
СержБабенко
 
Сообщения: 6
Зарегистрирован: 19 фев 2013, 21:35

Re: Нужна помощь mega8 + LCD c I2C

Сообщение Madf » 20 фев 2013, 13:55

Частота тут при том, что я не знаю для чего и как вы там собрались использовать МК, может вам нужна скорость 16МГц, а тут 8.
У вас тут пока куча проблем с железом (куча диодов, резисторов..), вообще для I2C надо всего два резюка, я везде в своих проектах использую 10К, китайцы смотрю любят в районе 4к ставить..
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Нужна помощь mega8 + LCD c I2C

Сообщение СержБабенко » 20 фев 2013, 15:15

Насчет частоты 8 МГц вполне устраивает. А вот с тактовым сигналом придется видимо ломать голову дальше
СержБабенко
 
Сообщения: 6
Зарегистрирован: 19 фев 2013, 21:35

Re: Нужна помощь mega8 + LCD c I2C

Сообщение Madf » 20 фев 2013, 16:15

Ну с Сии помочь не могу, ибо либо на баскоме пишу и на крайняк асм-вставки (редко).
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Нужна помощь mega8 + LCD c I2C

Сообщение Romikgy » 20 фев 2013, 17:04

если в протеусе код запустился , то попробуй поменять авр .....
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

Re: Нужна помощь mega8 + LCD c I2C

Сообщение СержБабенко » 20 фев 2013, 19:53

Romikgy писал(а):если в протеусе код запустился , то попробуй поменять авр .....


так для начала и сделаю

Добавлено спустя 2 часа 30 минут 40 секунд:
Ох уж этот МЭЛТ. У них на сайте в каталогах продукции напротив каждой позиции ссылка на пдфник с даташитом, в котором указано напряжение питания 3В. Так вот, он тупо скопирован, а напряжение надо смотреть в маркировке конкретного ЖК индикатора. В моем случае оказалось оно 5В.
Повыкидывав на радостях стабилитроны, и подав питание, выяснилось... что ничего не изменилось, жк молчит. Но осцил показывает веселые дерганья ног SDA и SCL. Теперь грешу на резистор подтянутый к UCC индикатора. Завтра от него избавлюсь...
СержБабенко
 
Сообщения: 6
Зарегистрирован: 19 фев 2013, 21:35

Re: Нужна помощь mega8 + LCD c I2C

Сообщение СержБабенко » 21 фев 2013, 20:02

Заработало. Помимо дилеммы с МЭЛТовской документацией была еще ошибка в адресе слэйв устройства. Я обращался к устройству с адресом 0хА0, а надо было общаться с адресом 0х70. Спасибо Madf и Romikgy за попытку помочь)
СержБабенко
 
Сообщения: 6
Зарегистрирован: 19 фев 2013, 21:35

Re: Нужна помощь mega8 + LCD c I2C

Сообщение Myp » 21 фев 2013, 22:12

мэлт славен неразберихой в даташитах и множеством чуть чуть разных но очень похожих экранов
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич


Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16