Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Сб дек 11, 2010 20:02:11
Друг Кота
Карма: 67
Рейтинг сообщений: 1012
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 18809 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
T0lik писал(а):
Модераторы удалите предыдущее сообщение, вопрос снят, проблема была в задержке в вместо nop нужно было хотябы поставить 2uS
Сам бы взял, да удалил.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Вопрос вот в чём: В нём нет русского знакогенератора. Сделал свой на восьми "символах, программируемых пользователем". Коды $00 - $07.
1 Вывожу на экран слово. По русски :)
2 Программирую эти символы для другого слова, чтобы написать это другое слово.
После действия 2 первое нарисованное слово меняется на символы, зашитые в 2. Второе слово ещё не писал!
Т.е. контроллер выводит на экран не один раз и "навсегда" до вык. питания, а постоянно обновляет изображение из знакогенератора?
Получается невозможно нарисовать ОДНОВРЕМЕННО более 8ми своих символов?
При определении собственных символов перепрошивается ОЗУ знакогенератора. Естественно, символы, чьи коды находятся в ОЗУ дисплея изменят начертание. Сам ответил на свой вопрос - ДА не более 8 одновременно.
_________________ «Просите, и дано будет вам; ищите, и найдете; стучите, и отворят вам; ибо всякий просящий получает, и ищущий находит, и стучащему отворят». Матф.гл. 7, ст. 7—8
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Коты такой вопрос, сильно не пинайте новичок, есть индикатор WH1602D-TFH-CT (вернее могу купить), а надо (по схеме) HD44780, вопрос совместимы ли они, т.е. взаимозаменяемые ли они, могу я вместо HD44780 поставить WH1602D если AVR зашит под 1602...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Коты такой вопрос, сильно не пинайте новичок, есть индикатор WH1602D-TFH-CT (вернее могу купить), а надо (по схеме) HD44780, вопрос совместимы ли они, т.е. взаимозаменяемые ли они, могу я вместо HD44780 поставить WH1602D если AVR зашит под 1602...
HD44780 - тип контроллера дисплея, WH1602D-TFH-CT - это тип самого дисплея , в нем контроллер KS0066, если перечитать эту ветку с первой страницы, то про их совместимость много чего.
_________________ «Просите, и дано будет вам; ищите, и найдете; стучите, и отворят вам; ибо всякий просящий получает, и ищущий находит, и стучащему отворят». Матф.гл. 7, ст. 7—8
подозреваю что ошибка в документе, при 8 разрядном обмене такого нет, при 4х разрядном есть при инициализации, но работает и без отправки данных двух кодов команд - не описанных в спецификации.
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт дек 23, 2010 16:17:34
Друг Кота
Карма: 67
Рейтинг сообщений: 1012
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 18809 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
aam писал(а):
Куда надо подключать вывод Vo (контрастность) у индикатора WH0802, чтоб без подстроечника? К плюсу или к земле?
Цель? Просто куда-нить подключить или всё-таки увидеть что выводится на дисплей?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
А что при таком подключении я на нем ничего не увижу? Я думал, что чем больше контрастность, тем лучше.
если контраст максимальный ты увидишь ВСЕ засвеченные точки во ВСЕХ знакоместах! Резистивный делитель по любому. Напряжение 0,2-0,5В
_________________ «Просите, и дано будет вам; ищите, и найдете; стучите, и отворят вам; ибо всякий просящий получает, и ищущий находит, и стучащему отворят». Матф.гл. 7, ст. 7—8
.include "m8def.inc" ; Микроконтроллер Atmega8 .cseg .org 0 rjmp reset .org OVF0addr rjmp timer_0 ;******************************************************************** reset: ldi r16, low (RAMEND) ; Загрузим в рабочий регистр младший байт значения out SPL, r16 ldi r16, high (RAMEND) ; Загрузим в рабочий регистр старший байт значнеия out SPH, r16
ldi r16, 0b111 ; Настройка порта out ddrd, r16
ldi r16, 0b1111 ; Настройка порта out ddrc, r16 ;****************Прерывания от таймеров/счетчиков******************** ldi r16, 0b0 ; Настройка прерывания от переполнения T0 out TIMSK, r16 ;****************Настройка предделителей таймеров/счетчиков********** ldi r16, 0b1 ; Cброс предделителя out SFIOR, r16 ldi r16, 0b000 ; "Таймер/счетчик T0 остановлен" out TCCR0, r16 ;****************Инициализация LCD*********************************** ldi r16, 0b000 ; Загрузим в РОН "RS=0, RW=0, E=0" out portd, r16 rcall delay_20000us rcall init_8bit rcall delay_4100us rcall init_8bit rcall delay_100us rcall init_8bit rcall init_IR ;******************************************************************** delay_20000us: cli ; I=0 (SREG) ldi r16, 0b1 ; Разрешили прерывание по переполнению out TIMSK, r16 ldi r16, 0b10110010 ; Заносим в TCNT0 178 out TCNT0, r16 ldi r16, 0b100 ; TCCR0 предделитель 256 out TCCR0, r16 ; Поехали!!! A: in r16, TIFR sbrs r16, 0 ; Пропустить, если TOV0=1 rjmp A ; Переход A sei ; I=1 (SREG) ret ;******************************************************************** delay_4100us: cli ; I=0 (SREG) ldi r16, 0b1 ; Разрешили прерывание по переполнению out TIMSK, r16 ldi r16, 0b11000000 ; Заносим в TCNT0 192 out TCNT0, r16 ldi r16, 0b011 ; TCCR0 предделитель 64 out TCCR0, r16 ; Поехали!!! B: in r16, TIFR sbrs r16, 0 ; Пропустить, если TOV0=1 rjmp B ; Переход B sei ; I=1 (SREG) ret ;******************************************************************** delay_100us: cli ; I=0 (SREG) ldi r16, 0b1 ; Разрешили прерывание по переполнению out TIMSK, r16 ldi r16, 0b10011100 ; Заносим в TCNT0 156 out TCNT0, r16 ldi r16, 0b001 ; TCCR0 предделитель отсутсвтует (работа от clk0) out TCCR0, r16 ; Поехали!!! C: in r16, TIFR sbrs r16, 0 ; Пропустить, если TOV0=1 rjmp C ; Переход C sei ; I=1 (SREG) ret ;******************************************************************** timer_0: cli ; I=0 (SREG) ldi r16, 0b000 ; Остановим таймер out TCCR0, r16 ldi r16, 0b0 ; Запретили прерывание по переполнению out TIMSK, r16 reti ;******************************************************************** init_IR: ldi r18, 0b0010 ; Выбираем разрядность парралельной шины данных 4 бит rcall write_lcd8 ; Запись в lcd ldi r18, 0b0000 ; Старший байт ldi r19, 0b1000 ; Изображение выключено, курсоров нет rcall write_lcd4 ; Запись в lcd ldi r18, 0b0010 ; Старший байт ldi r19, 0b1000 ; Младший байт rcall write_lcd4 ldi r18, 0b0000 ; Старший байт ldi r19, 0b0110 ; Младший байт rcall write_lcd4 ldi r18, 0b0000 ; Старший байт ldi r19, 0b0001 ; Младший байт rcall write_lcd4 ret ;******************************************************************** init_8bit: ldi r16, 0b00 ; Загрузим в РОН "RS=0, RW=0" out portd, r16 ldi r16, 0b0011 ; Загрузим в РОН "Установка 8-бит режима" out portc, r16 ldi r16, 0b100 ; Загрузим в РОН "E=1" out portd, r16 clr r16 ; "E=0" ; Стробирование out portd, r16 ldi r16, 0b000 ; Data line Hi-Z out portd, r16 ret ;******************************************************************** write_lcd8: rcall test_BF ldi r17, 0b00 ; "RS=0, RW=0" out portd, r17 out portc, r18 ; Разрядность шины данных 4 бит ldi r17, 0b100 ; + "E=1" out portd, r17 ldi r17, 0b000 ; "E=0" out portd, r17 ldi r17, 0b000 ; Data line Hi-Z out portd, r17 ret ;******************************************************************** write_lcd4: rcall test_BF ldi r17, 0b00 ; "RS=0, RW=0" out portd, r17 out portc, r18 ; Запись старшего байта ldi r17, 0b100 ; + "E=1" out portd, r17 ldi r17, 0b000 ; "E=0" out portd, r17 out portd, r19 ; Запись младшего байта ldi r17, 0b100 ; + "E=1" out portd, r17 ldi r17, 0b000 ; "E=0" out portd, r17 ldi r17, 0b000 ; Data line Hi-Z out portd, r17 ret ;******************************************************************** test_BF: ldi r16, 0b10 ; "RS=0, RW=1" out portd, r16 ldi r16, 0b110 ; + "E=1" out portd, r16 in r16, pind ; Пересылка PIND=> r16 ldi r17, 0b010 ; "E=0" out portd, r17 sbrs r16, 7 ; Пропустить, если BF=1 ret rjmp test_BF ;********************************************************************
Эта программа ничего не выводит на экран, всего лишь делает N=1 (режим отображения 2 строки) Но код в железе нифига не работает... Странно, ведь все сделал правильно.
_________________ Не умеешь - не берись, но не взявшись не научишься...
Хотелось бы узнать. Можно ли делать некоторые операции с МК в промежутках между вот этими операциями, кроме E=1, E=0 т.е. после занесения старшей тетрады, или младшей...
Просто у меня еще выдержка есть между п. 4 и п. 5 Далее, между 4 и 5 у меня находится команда RS=0, RW=0, E=0 - этозначит, что DB0-DB7 - Hi-Z. Можно ли так?)
.include "m8def.inc" ; Микроконтроллер Atmega8 .cseg .org 0 rjmp reset .org OVF0addr rjmp timer_0 ;******************************************************************** reset: ldi r16, low (RAMEND) ; L байт стека out SPL, r16 ldi r16, high (RAMEND) ; H байт стека out SPH, r16 rcall init_m8_lcd ; Инициализация LCD
ldi r16, 0b11100000 ldi r19, 0b00000000 ; должен загореться курсор.... rcall lcd_text t: rjmp t
init_m8_lcd: rcall init_port_m8_enable ;****************Прерывания от таймеров/счетчиков******************** ldi r16, 0b00000001 ; Разрешить прерывание по переполнению T0 out TIMSK, r16 ;****************Инициализация LCD*********************************** ldi r16, 0b00000011 ; Выбор режима 8 бит ldi r18, 0b10110010 ; TCNT0=178 ldi r19, 0b00000000 ; RS=0, RW=0, E=0 (Data line Hi-Z) ldi r20, 0b00000100 ; Предделитель 256 rcall delay_n ; Пауза перед включением 20мс ldi r18, 0b11000000 ; TCNT0=192 ldi r20, 0b00000011 ; Предделитель 64 rcall delay_n ; Пауза 4,1мс ldi r18, 0b01000010 ; TCNT0=66 ldi r20, 0b00000001 ; Предделитель 1 rcall delay_n ; Пауза 100мкс rcall init_IR ; Настройка параметров lcd rcall init_port_m8_disable ; Восстановление портов ВВ C, D ret ;******************************************************************** delay_n: out TCNT0, r18 out TCCR0, r20 ; Запуск T0 test_TIFR: in r18, TIFR ; Считывание данных в r18 sbrs r18, 0 ; Проверка TOV0 rjmp test_TIFR ; Переход, если TOV0=0 sei ; I=1 nop ; 1 такт для обнаружения прерывания cli ; I=0 rcall init_8bit_4bit ret ;******************************************************************** timer_0: out TCCR0, r17 ; Останов T0 reti ;******************************************************************** init_8bit_4bit: out portd, r19 ; RS=(0, 1), RW=0, E=0 write_lcd: out portc, r16 ; Запись в lcd sbi portd, 2 ; E=1 cbi portd, 2 ; E=0 out portd, r17 ; Data line Hi-Z ret ;******************************************************************** init_IR: ldi r16, 0b00000010 ; Выбор режима 4 бит rcall init_8bit_4bit ldi r16, 0b10000010 ; Выбор режима 4 бит, N=1, F=0 rcall write_4bit ; Отправка байта ldi r16, 0b10000000 ; D=0, C=0, B=0 rcall write_4bit ; Отправка байта ldi r16, 0b00010000 ; Очистка дисплея, AC=0 rcall write_4bit ; Отправка байта ldi r16, 0b01100000 ; I/D=1, S=0 rcall write_4bit ; Отправка байта ret ;******************************************************************** write_4bit: rcall test_BF ; Проверка готовности rcall init_8bit_4bit ; Запись ниббла swap r16 ; Перестановка тетрад rcall write_lcd ; Запись ниббла ret ;******************************************************************** test_BF: out ddrc, r17 ; Настройка порта C sbi portd, 1 ; RW=1 A: rcall read_BF mov r0, r18 ; Копирование данных r18 в r0 rcall read_BF cbi portd, 1 ; RW=0 sbrc r0, 3 ; Проверка BF rjmp A ; Переход, если BF=1 ldi r18, 0b00001111 ; Настройка порта C out ddrc, r18 ret ;******************************************************************** read_BF: sbi portd, 2 ; E=1 in r18, pinc ; Считывание данных в r18 cbi portd, 2 ; E=0 ret ;******************************************************************** init_port_m8_enable: ldi r18, 0b00000101 ; PUD=1, сброс предделителеля T0 out SFIOR, r18 ldi r18, 0b00000111 ; Настройка порта D out ddrd, r18 ldi r18, 0b00001111 ; Настройка порта C out ddrc, r18 ldi r17, 0b00000000 ; RS=0, RW=0, E=0 (Data line Hi-Z) ret ;******************************************************************** lcd_text: rcall init_port_m8_enable rcall write_4bit ; Отправка байта init_port_m8_disable: out ddrc, r17 ; Настройка порта C out portc, r17 ; RES=0, Hi-Z out ddrd, r17 ; Настройка порта D out portd, r17 ; RES=0, Hi-Z out SFIOR, r17 ; PUD=0 ret
этот код всего лишь инициализирует лцд. выводит всего 2 строки и все. а символы не хочет как видно, я хотел зажечь в основной программе курсор в виде подчерка - ничего не горит...
_________________ Не умеешь - не берись, но не взявшись не научишься...
Здравствуйте. ИМХО, стало гораздо лучше,но... Работая с реальными устройствами, нужно учитывать их ограниченное быстродействие. В программе поставил небольшие задержки. Посмотрите этот документ. http://radioded.ru/component/option,com ... Itemid,34/
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения