Перейти к содержанию

filter91

Members
  • Постов

    26
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Братск

Электроника

  • Стаж в электронике
    3-5 лет
  • Сфера радиоэлектроники
    Иркутская
  • Оборудование
    Паяльная станция, осциллограф, паяльники

Посетители профиля

1 088 просмотров профиля

Достижения filter91

Новобранец

Новобранец (2/14)

  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. filter91

    LCD 1602

    Добрый день, Уважаемые. Прошу Вас помочь разобраться в ситуации, а именно: Подключил китайский LCD 1602 (HD44780) к Atmega16. Дисплей всё исправно отображает, но после нескольких часов работы он начинает отображать, простите меня, кракозябры, иероглифы и т.д. Проблема решается перезагрузкой устройства. До вчерашнего дня думал, что это дисплей неисправный. Собрал совершенно другое устройство на Atmega8 с таким же дисплеем. Всё работает, но опять появилась ситуация как в случае выше - некорректное отображение информации через некоторый период времени. Решается так же перезагрузкой. Хочу добавить, что оба устройства продолжают выполнять свои функции, но корректное отображение пропадает. В проектах использовал библиотеку во вложении. Может быть в неё проблема. В итоге я сделал вывод, что что-то делаю неправильно, раз уже второе устройство с разными МК ведёт себя одинаково. В чём может быть моя ошибка? Заранее спасибо Вам за помощь. lcd_lib.c lcd_lib.h
  2. Добрый день. Можете отправить pdf файл, который со схемами для данного конструктора. Во время пайки оторвалась площадка вывода 1 от контроллера. Теперь не знаю, с чем её соединить. Заранее спасибо Схему нашёл. Первая ножка никуда не идёт. Другая проблема, что схема как бы зависает. В чём может быть проблема?
  3. filter91

    MT-16S2D-2YLG

    Добрый день. Я накидал на СИ процесс инициализации данного дисплея. Прошу Вас проверить и/или дать замечания. Так же прилагаю процедуру записи команд и данных (взятые с HD44780). Помогите пожалуйста их изменить под данный тип дисплея. Не охото у буржуев покупать WH1602. Поддерживаю Российского производителя. Дисплей подключен к порту D (MK Atmega16A - 16MHz): 0 - А0 1 - - 2 - Е 3 - - 4 - DB4 5 - DB5 6 - DB6 7 - DB7 # define F_CPU 16000000UL #include <avr/io.h> #include <avr/pgmspace.h> #include <util/delay.h> #include <stdio.h> #include "lcd_lib.h" // Инициализация дисплея void LCDinit(void) { DDRD = 0xFF; PORTD=0x00; _delay_ms(20); //При необходимости настроить здесь шину данных на вывод PORTD=0x03; //Установка типа интерфейса (8 бит) (0x03 - старший полубайт команды 0x30) - в начале ВСЕГДА переключаем индикатор в 8-ми битный режим работы _delay_us(40); //Это время предустановки адреса (tAS) PORTD |= (1<<PD2); //установка Е=1 _delay_us(40); //Время предустановки данных попало сюда (tDSW) PORTD &= ~(1<<PD2); // установка Е=0 _delay_us(40); //Пауза между командами PORTD |= (1<<PD2); //установка Е=1 _delay_us(230); //Минимально допустимая длительность сигнала E=1 PORTD &= ~(1<<PD2); // установка Е=0 _delay_us(40); //Пауза между командами PORTD |= (1<<PD2); //установка Е=1 _delay_us(230); PORTD &= ~(1<<PD2); // установка Е=0 _delay_us(40); //Пауза между командами PORTD=0x02; //Установка типа интерфейса (4 бит) (0x02 - старший полубайт команды 0x20) (при этом биты RW и A0 измениться не должны!) PORTD |= (1<<PD2); //установка Е=1 _delay_us(230); //Время предустановки данных попало сюда (tDSW) PORTD &= ~(1<<PD2); // установка Е=0 _delay_us(270); //Минимально допустимый интервал между сигналами E=1 //Здесь индикатор входит в рабочий режим с установленным типом интерфейса и можно подавать команды как обычно lcd_com(0x2A); //Настройка правильного режима ЖКИ lcd_com(0x0C); //Включение индикатора, курсор выключен lcd_com(0x01); //Очистка индикатора lcd_com(0x06); //Установка режима ввода данных: сдвигать курсор вправо } void lcd_dat(uint8_t ch) //Sends Char to LCD { LDP=(ch&0b11110000); LCP|=1<<LCD_RS; LCP|=1<<LCD_E; _delay_ms(1); LCP&=~(1<<LCD_E); LCP&=~(1<<LCD_RS); _delay_ms(1); LDP=((ch&0b00001111)<<4); LCP|=1<<LCD_RS; LCP|=1<<LCD_E; _delay_ms(1); LCP&=~(1<<LCD_E); LCP&=~(1<<LCD_RS); _delay_ms(1); } //***************************************************************************** void lcd_com(uint8_t cmd) //Sends Command to LCD { LDP=(cmd&0b11110000); LCP|=1<<LCD_E; _delay_ms(1); LCP&=~(1<<LCD_E); _delay_ms(1); LDP=((cmd&0b00001111)<<4); LCP|=1<<LCD_E; _delay_ms(1); LCP&=~(1<<LCD_E); _delay_ms(1); }
  4. filter91

    MT-16S2D-2YLG

    Добрый день. Хотелось бы попросить Вашей помощи в объяснении инициализации данного дисплея. Т.к. у него некоторые особенности работы в 4-х битном режиме, отличным от HD44780. У меня программа написана на библиотеке именно от HD44780. Как можно изменить код для работы с этим индикатором. Конкретно не понимаю, для чего мы отдаём конкретно один и ту же команду три раза. В примере от производителей МЭЛТ вообще не пониманию их код. Какие то определения и т.д. Да, я новичок в этом деле, может хоть поможете в поиске нужной литературы.... MT-16S2D.rar
  5. Спасибо большое Yurkin2015. Эффект не заставил себя ждать. Если не сложно, можете пояснить, почему сокращать именно на число 5?
  6. Так беспорядок в показаниях начинается после 2.5 вольт. Я согласен с вашей мыслью, но пока интересует именно текущая проблема. Спасибо. Кстати я пробовал ступенчато изменять формулу, и всё работало. Проблемы начинаются после деления на 655. Пробовал типы переменных менять с int на float. Ничего не помогает.
  7. Спасибо всем за ответы. Пойду дальше в изучении программирования. Вот снова не могу понять, написал такую формулу lcd_num_to_str(((readADC(1)-164)*100)/655,3); но на дисплей выводится, извиняюсь, всякая ерунда. Если просто такой функцией выдать значение ADC на дисплей, то показывает в норме. Но после пересчета возникают проблемы. Пробовал использовать пересчет в строку, но абсолютно не помогает после введения расчетов. Kottedj.rar
  8. Спасибо всем за ответы. Пойду дальше в изучении программирования.
  9. Добрый день ,уважаемые специалисты. Прошу Вашей помощи в решении задачи. Подключил промышленный датчик с токовой петлёй к МК Atmega16. Через шунт 200 Ом получается размах от 1 до 4 В.Опорное напряжение 5В. Шкала прибора должна быть 0-100% (т.е. 1В - 0%, 4В - 100%). Если говорить про ADC, то получается диапазон между 205-819. Сам вопрос: как правильно запрограммировать МК, чтобы вывести показания на HD44780 в этом диапазоне шкалы. Сейчас у меня при входе 1В - 20%. Я понимаю, что так и должно быть, но не могу дойти до того, как сдвинуть эти данные. Или как сделать, что бы при 1В у меня показывало 0%, а при 4В-100%. Я ещё учусь, поэтому прошу строго не судить меня.
  10. Добрый день, подскажите FUSE для данной статьи (проекта). Заранее благодарен. http://cxem.net/house/1-219.php
×
×
  • Создать...