Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Atmega8 + lcd3310 + gcc, Проблемы с выводом тектовых строк 
:(
    Опции темы
bend
Дата 10.3.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.3.2009

Репутация: нет
Всего: нет



возникла проблема с библиотекой NokiaLCD.c и не только у меня одного, не работает нормально функция LcdStr()
Дело в том, что если выводить 2-4 и более строк дисплэй или ничего вообще не выводит или выводит чушь. Дисплэй 100 процентов исправен, заполнял его весь и линиями и пикселами и разными символами. 
    Если даже прописать const char *string[5]={"1","2","3","4","5"} всеравно больше 3 строк нормально не выводится. Дак вот почитал на форумах что с такой же проблемой сталкнулся народ и есть выход разместить строковые константы в eeprom. Но как это сделать на avr-gcc???  
PM MAIL   Вверх
Mazzi
Дата 11.3.2009, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



А что пишут по этому поводу в руководстве компилятора?


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
bend
Дата 11.3.2009, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.3.2009

Репутация: нет
Всего: нет



Да ничего особого, есть там 6 основных команд запись байта, слова и буфера, разобрался с сзаписью в eeprom, разместил там строки, но ничего не изменилось  smile  Попрежнему нормально не работает вывод строк на дисплей. Я думаю проблема в каких-то опциях компилятора, нужно как-то объяснить компилятору чтобы он строковые константы оставлял как есть, а то создаеться впечатление что он их- как-то искажает. Кстати одна и таже строка выводиться несколько раз нормально, разные строки выводяться косячно... Пробовал собирать и с оптимизацией и без (опции -O0 -O3) никакого эффекта. От размещения в eeprom сразу отказался, ибо запись в него медленная и чтение и занимает много ресурсов. Но вот как разместить строки в памяти чтобы они не искажались? Я так понимаю адреса под строковые константы должен выделять сам компилятор, он это делает хренова, поэтому может как-то не опускаясь до асма можно выделить адреса под строковые константы и потом с ними нормально работать...
PM MAIL   Вверх
Mazzi
Дата 12.3.2009, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



У меня компилятор не GCC, поэтому не могу точно сказать что тебе делать.
Вот смотри пример от моего компилятора CodeVisionAVR:

Код

eeprom char a[2] = {'s','d'};
..................
.................

a[0] = anything;
a[1] = a[0] + a[0];

...................


Для размещения строк в памяти программ:
Код

flash char KeyCodes[]={'#','3','0','2',
            '*','1','D','A',
            '9','6','8','5',
            '7','4','C','B'};
..................
.................





--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
bend
Дата 13.3.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.3.2009

Репутация: нет
Всего: нет



После 4 дней напряженных боев, выяснилось что глюк происходит если в строке передаваемой функции LcdStr(), содержаться пробелы цифры и проч небуквенные знаки. Хотя по умолчанию компилятор должен жевать в utf8, и отдельно символы любые выводяться через LcdChr(), пока непонятно Вот функция 
Код

void LcdStr ( LcdFontSize size, char *dataPtr )
{

while (*dataPtr)
    {
        LcdChr( size, *dataPtr++ );

    }


}


походу загвоздка именно здесь, при разбивке всей строки на байты как-то косячно передаються коды небуквенных символов...
Я плохо пока понимать с++  smile  если не сложно хотелось бы увидеть простенький текст для проверки скан кодов клавиш дабы проверить их с теми что использует программа. Просто наживаешь клавишу - на экране скан-код. Хочу сравнить его с тем что используеться в таблице моей проги..
PM MAIL   Вверх
bend
Дата 26.3.2009, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.3.2009

Репутация: нет
Всего: нет



Бои закончились победой с моей стороны smile  Пришлось изучать с++, раньше он мне не нравился, но теперь я понял что он почти как ассемблер, тока чуть удобнее. Порыскав инете я нашел несколько библиотек для работы с дисплеем 3310, большенство их было клоном той что я использовал, но я таки нашол нормальную либу для дисплея, с толковым описанием и с дополнительными функциями, типа вывода бмп картинки на экран и проч. Прикупив кварц на 10MHz, я прошил фьюзы, все стало работать намного быстрее  smile 
Попутно пришлось изучить eeprom, теперь я написал процедуру привязки новых устройств к шине 1-wire, можно былоб конечно намутить автораспознование устройств на шине, но у меня устройств мало и если один датчик сгорит, то пришить новый к системе можно будет не перешивая МК. Идея проста, подключаем новое устройство (например датчик температуры) к шине, остальные устройства от шины отключаем, сканируем его персональный код и записываем его в eeprom.
Ну и для пущей картины сегодня подключил русские буквы, дабы русифицировать меню. Было немнога геммороя, дело в том что в линукс везде практически кодировка UTF8, (т.е. мультибайтная), я вышел из положения просто добавив в makefile, перекодировку из utf8 в cp866 перед компиляцией. Ну и русские буквы должны быть в строгости с ascii, а там после буквы "п", идет псевдографика 48байт, потом остальные русские буквы. 
Пока подключил 3 датчика температуры, ну и конечно потом занес все серийники с ключей-таблеток от домофона, (на будующее для отмычки домофонов).
Линию пробовал и 2-х проводную с подтягивающим резистором, все работало. Питаю все это дело от нокиовской батарейки smile 

Как лучше сделать клавиатуру? Нашел схему матрицы типа крест накрест выводы портов, но как тогда избежать дребезга? Вообще посоветуйте хорошую схему клавиатуры кнопок из 5-9?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.1118 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.