реклама на сайте
подробности

 
 
> AVR+LCD1602+новичёк в си, Ступор.....
T00T
сообщение Jan 5 2016, 17:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 25-05-15
Пользователь №: 86 867



В общем как уже сказано в СИ я новичёк, но АСМ - вроде очень неплохо.

Итак, в качестве первого проекта хотел написать библиотечку для работы с LCD1602+HD44780.
Всё перепробовал, походу не правильно инициализируется дисплей. Ничего не кажет.
Чего то я не пойму....

Делать пытался по прототипу.
Наверно что то в lcdSendNibble(). Тока не пойму что не работает.
Прикрепленные файлы
Прикрепленный файл  mylibrary_c.txt ( 6.24 килобайт ) Кол-во скачиваний: 18
Прикрепленный файл  mylibrary_h.txt ( 6.67 килобайт ) Кол-во скачиваний: 13
Прикрепленный файл  LCD_HW_c.txt ( 291 байт ) Кол-во скачиваний: 17
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
kovigor
сообщение Jan 5 2016, 17:38
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(T00T @ Jan 5 2016, 21:29) *
Итак, в качестве первого проекта хотел написать библиотечку для работы с LCD1602+HD44780.


В Codevision есть функции для работы с этим индикатором. Или вы хотите именно написать свою реализацию ?
Go to the top of the page
 
+Quote Post
T00T
сообщение Jan 5 2016, 17:43
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 25-05-15
Пользователь №: 86 867



В общем то я пытаюсь С асма на си перелезть немного, и поэтому хочется самому попробовать. Но чёт какие то грабли......
Все вроде на данном примере ясно, но работать не желает......
Ну вроде некоторого элемента обучения.....

А ещё никак не получается сделать вот так:
Код
char stringOne[] PROGMEM = "HELLO";
int main(void)
{
........
    while(1)
    {

    }
}

Ну типа как глобальный массив объявить stringOne[].

Как записать правильно stringOne[], что бы он разместился во FLASH.

Сообщение отредактировал IgorKossak - Jan 5 2016, 19:18
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
_pv
сообщение Jan 5 2016, 17:52
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(T00T @ Jan 6 2016, 00:29) *
Наверно что то в lcdSendNibble(). Тока не пойму что не работает.

наверное потому что в порт от D7 записывается бит от D5.
SET(LCD_D7_PORT,LCD_D5_BIT);

чтобы вот этого вот онанизма, с указыванием везде и портов и масок, избежать, давно придуманы т.н. макросы Волкова, когда и порт и маска и активный уровень (и еще чего угодно, на что фантазии хватит) указываются в одном единственном дефайне через запятую.
#define LCD_D7 D,1<<6,H
а потом используется как
if (data & 0x08) ON(LCD_D7); else OFF(LCD_D7);

Код
#define _setL(port,mask)          do { PORT##port &= ~mask; } while(0)
#define _setH(port,mask)          do { PORT##port |= mask; } while(0)
#define _clrL(port,mask)          do { PORT##port |= mask; } while(0)
#define _clrH(port,mask)          do { PORT##port &= ~mask; } while(0)
#define _bitL(port,mask)          (!(PIN##port & mask))
#define _bitH(port,mask)          (!!(PIN##port & mask))
#define _dir_out(port,mask,val)   do { DDR##port |= mask; } while(0)
#define _dir_in(port,mask,val)    do { DDR##port &= ~mask; } while(0)
#define _set(port,mask,val)       _set##val(port,mask)
#define _clr(port,mask,val)       _clr##val(port,mask)
#define _bit(port,mask,val)       _bit##val(port,mask)

////////////////////////////////////////////////////////////////////////////////////

#define dir_out(x)                _dir_out(x)
#define dir_in(x)                 _dir_in(x)
#define on(x)                     _set(x)
#define off(x)                    _clr(x)
#define active(x)                 _bit(x)
#define toggle(x)                 _inv(x)

Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Jan 5 2016, 17:56
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Вы раньше такие индикаторы запускали? Не то некоторые забывают вход регулирования контрастности подключить, и потом долго ищут ошибку в коде (сам так попадал sm.gif )... Или вот мой недавний пример: удачно замаскировавшаяся "сопля" между двумя линиями параллельной шины к индикатору доставила много неудовольствия... Просто тема HD44780 изучена вдоль и поперёк и в коде сложно налажать (по-моему).
Go to the top of the page
 
+Quote Post
T00T
сообщение Jan 5 2016, 18:04
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 25-05-15
Пользователь №: 86 867



Не, ну с непривычки....
И действительно.....
SET(LCD_D7_PORT,LCD_D5_BIT);

_PV очень помог.............
Спасибо, прочитаю про т.н. макросы Волкова.
Яж не волшебник, просто учусь.

Сообщение отредактировал T00T - Jan 5 2016, 19:05
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01413 секунд с 7
ELECTRONIX ©2004-2016