Технический форум по робототехнике.
СержБабенко » 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) кривое подключение (схемотехника)
Во всех областях новичок и самоучка. Осциллограф стащил с работы на время)
Madf » 20 фев 2013, 11:31
думаю проблема с включением дисплея (изначально)....вопрос, почему не запитали всё от 3В по человечески?
зы: по накрутили ппц сколько...
Добавлено спустя 5 минут 46 секунд:(отвечаю и рассуждаю сам себе)
Так:
http://www.atmel.com/images/doc2486.pdf - понятно, эта мега с 4.5В только работает (прискорбно).
В общем надо делать полноценный преобразователь уровней и питать дисплей 3 вольтами.
Вообще ужас какой-то, МК с этим экраном - не совместимы, точнее гемороя больше.
Мне кажется нужно либо взять мегу версии L или вообще Тиньку...ну или дисплей нормальный на 3.3 вольта хотябы.
СержБабенко » 20 фев 2013, 12:00
Madf писал(а):думаю проблема с включением дисплея (изначально)....вопрос, почему не запитали всё от 3В по человечески?
зы: по накрутили ппц сколько...
Добавлено спустя 5 минут 46 секунд:(отвечаю и рассуждаю сам себе)
Так:
http://www.atmel.com/images/doc2486.pdf - понятно, эта мега с 4.5В только работает (прискорбно).
В общем надо делать полноценный преобразователь уровней и питать дисплей 3 вольтами.
Вообще ужас какой-то, МК с этим экраном - не совместимы, точнее гемороя больше.
Мне кажется нужно либо взять мегу версии L или вообще Тиньку...ну или дисплей нормальный на 3.3 вольта хотябы.
Я так полагаю самое простое это купить мегу версии L и перейти на 3 V... что ж попробуем, о результатах отпишусь если кому интересно
Madf » 20 фев 2013, 13:05
Только учтите, что она 8МГц.
СержБабенко » 20 фев 2013, 13:18
Я все таки не понял...
Во-первых, причем тут 8 МГц? частота шины I2C выставляется в соответствующих регистрах контроллера;
Во-вторых, даже если предположить что мои проблемы из-за неправильного дисплея. Мастер же у нас АВРка, она шлет данные и формирует сигнал SCL. Однако данные идут, а SCL вообще молчит, ну ни единого дрыга
Madf » 20 фев 2013, 13:55
Частота тут при том, что я не знаю для чего и как вы там собрались использовать МК, может вам нужна скорость 16МГц, а тут 8.
У вас тут пока куча проблем с железом (куча диодов, резисторов..), вообще для I2C надо всего два резюка, я везде в своих проектах использую 10К, китайцы смотрю любят в районе 4к ставить..
СержБабенко » 20 фев 2013, 15:15
Насчет частоты 8 МГц вполне устраивает. А вот с тактовым сигналом придется видимо ломать голову дальше
Madf » 20 фев 2013, 16:15
Ну с Сии помочь не могу, ибо либо на баскоме пишу и на крайняк асм-вставки (редко).
Romikgy » 20 фев 2013, 17:04
если в протеусе код запустился , то попробуй поменять авр .....
СержБабенко » 20 фев 2013, 19:53
Romikgy писал(а):если в протеусе код запустился , то попробуй поменять авр .....
так для начала и сделаю
Добавлено спустя 2 часа 30 минут 40 секунд:Ох уж этот МЭЛТ. У них на сайте в каталогах продукции напротив каждой позиции ссылка на пдфник с даташитом, в котором указано напряжение питания 3В. Так вот, он тупо скопирован, а напряжение надо смотреть в маркировке конкретного ЖК индикатора. В моем случае оказалось оно 5В.
Повыкидывав на радостях стабилитроны, и подав питание, выяснилось... что ничего не изменилось, жк молчит. Но осцил показывает веселые дерганья ног SDA и SCL. Теперь грешу на резистор подтянутый к UCC индикатора. Завтра от него избавлюсь...
СержБабенко » 21 фев 2013, 20:02
Заработало. Помимо дилеммы с МЭЛТовской документацией была еще ошибка в адресе слэйв устройства. Я обращался к устройству с адресом 0хА0, а надо было общаться с адресом 0х70. Спасибо Madf и Romikgy за попытку помочь)
Myp » 21 фев 2013, 22:12
мэлт славен неразберихой в даташитах и множеством чуть чуть разных но очень похожих экранов