Например TDA7294

Форум РадиоКот • Просмотр темы - Вывод информации на дисплей
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб апр 20, 2024 18:34:43

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Вывод информации на дисплей
СообщениеДобавлено: Пт май 26, 2017 16:51:45 
Родился

Зарегистрирован: Пт май 26, 2017 16:09:15
Сообщений: 10
Рейтинг сообщения: 0
Всем Привет.
Прошу не кидаться тапками за название темы, понимаю, что уже много опубликовано материалов по этому вопросу, однако все кроется в нюансах.
Итак, к проблеме.
Выполняю курсовую работу. Опыта в программировании минимум.
Имеется схема с МК ATmega8 и дисплеем LM044 на контроллере HD44780. При попытке вывести инфу на дисплей столкнулся с этими двумя рядами прямоугольников (к слову, дисплей 20х4).
СпойлерИзображение

Поначалу думал, что оторвались провода, которые соединяют дисплей с МК. Нет, все прозваниваются. Кстати, схема вся была спаяна преподавателем и раньше дисплей уже выводил инфу, но когда начал я ее прошил своей прогой, появилось, то что на фотке.
Потом пошли мысли, что неправильно настроил выводы в CodeVision AVR, в котором работаю.
Исходя из даташита МК и того, куда припаяны провода в схеме, настроил порты таким образом:
СпойлерИзображение

Думал, что теперь будет все норм, прошил снова - ничего. Начал уже бесится, изучил десятки страниц (уже не первый день работаю над схемой, думал все-таки смогу сделать сам, ан нет)
Решил начать с простого. Нашел в инете самый простой код по выводу инфы
Спойлер
Код:
/*************************************/
#include <mega8.h>
#include <lcd.h>
#include <delay.h>
#asm
   .equ __lcd_port=0x12; PORTD /* ЖКИ дисплей подключили к порту I/O D */
#endasm

void main(void)    /* Основная функция "main", с которой начинается выполнение всей программой процедуры */
{
   lcd_init(20); /* инициализация на 20 символов */
   lcd_clear();
   lcd_gotoxy(0,0);
   lcd_putsf("LCD 20x04");
   lcd_gotoxy(0,1);
   lcd_putsf("Hello World!");
   lcd_gotoxy(0,2);
   lcd_putsf("CodeVision AVR");
   lcd_gotoxy(0,3);
   lcd_putsf("ver. 1.25.3");
   while(1){}
}

Сделал стандартный проект в CodeVision AVR, вставил туда этот код, настроил настроил выводы на свои.
Спойлер
Код:
/*******************************************************
This program was created by the
CodeWizardAVR V3.12 Advanced
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 26.05.2017
Author  :
Company :
Comments:


Chip type               : ATmega8
Program type            : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*******************************************************/

#include <mega8.h>

// Alphanumeric LCD functions
#include <alcd.h>
#include <delay.h>
#asm
   .equ __lcd_port=0x12; PORTD /* ЖКИ дисплей подключили к порту I/O D */
#endasm

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);

// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);

// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 3
// D5 - PORTC Bit 4
// D6 - PORTC Bit 5
// D7 - PORTB Bit 2
// Characters/line: 20
lcd_init(20);
 lcd_clear();
   lcd_gotoxy(0,0);
   lcd_putsf("LCD 20x04");
   lcd_gotoxy(0,1);
   lcd_putsf("Hello World!");
   lcd_gotoxy(0,2);
   lcd_putsf("CodeVision AVR");
   lcd_gotoxy(0,3);
   lcd_putsf("ver. 1.25.3");

while (1)
      {
      // Place your code here

      }
}

Прошил в Протеусе МК и вуаля - в Протеусе инфа выводится!
СпойлерИзображение

На радостях решил, что теперь-то все получится - опять нет!
Прошивал МК через AVRDUDE PROG 3.0 через USBasp
Ребят, у меня к вам такие вопросы:
1. Что может быть не так с дисплеем?
2. Нужно ли как-то настраивать порты МК? Потому что я нигде не видел, чтобы хоть где-то пытались настроить порты МК при выводе инфы на экран. Даже в том коде, что я выложил.
Прошу вас, высказывайте любые идеи и мысли, ибо я реально хочу понять программирование и выяснить в чем же проблема.
Спасибо!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод информации на дисплей
СообщениеДобавлено: Пт май 26, 2017 21:07:35 
Родился

Зарегистрирован: Пт май 26, 2017 09:07:18
Сообщений: 6
Рейтинг сообщения: 0
У дисплея есть вывод отвечающий за его контраст. Его можно менять с помощью шим с контроллера либо с помощью переменного резистора. И скорее всего порт С настроить на вывод придётся , а именно DDRC = 0xFF, а у Вас настроен на вход (все выводы в ноль) , скорее всего и так пойдёт, но лучше настроить на выход.


Вложения:
IMG_2580.JPG [30.48 KiB]
Скачиваний: 558


Последний раз редактировалось tosh2000 Пт май 26, 2017 21:21:34, всего редактировалось 1 раз.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод информации на дисплей
СообщениеДобавлено: Пт май 26, 2017 21:19:47 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Дисплеи на контроллере HD44780 всегда показывают первую строку черной, а вторую белой после подачи питания, если инициализация дисплея не выполнена. 4-строчный дисплей реализован как двустрочный, в котором первая строка продолжается на третьей, потому у вас такая и картина. Кстати, распределение внутренней памяти для 4-строк тоже может внести некоторую путаницу, но на инициализацию это однозначно не повлияет.

А вот почему у вас инициализация не проходит - я не знаю, ибо в CVAVR не шарю совсем. Я пользуюсь AVR-GCC и библиотечкой от Peter Fleury - 4-строчный дисплей завелся с первой попытки, никаких проблем не было.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вывод информации на дисплей
СообщениеДобавлено: Пт май 26, 2017 21:46:03 
Родился

Зарегистрирован: Пт май 26, 2017 09:07:18
Сообщений: 6
Рейтинг сообщения: 0
Не знаю что в функции инициализации экрана, может стоит уточнить подходит ли она для этого типа.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вывод информации на дисплей
СообщениеДобавлено: Пт май 26, 2017 21:50:10 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 70
Зарегистрирован: Сб мар 05, 2011 09:19:01
Сообщений: 264
Рейтинг сообщения: 0
Все подходит. И контраст тут ни причем. Не проходит инициализация дисплея. Я вначале убедился бы, что программа вообще выполняется. На фьюзы посмотрите, что там в генераторе. Добавьте в код пару строк - поморгайте диодиком. Не ошиблись ли, как присоединены выводы к ЖКИ от МК. Что-то еще и придумать сложно.
Ну и не забудьте потом с нами радостью поделиться.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вывод информации на дисплей
СообщениеДобавлено: Вс май 28, 2017 18:27:40 
Встал на лапы
Аватар пользователя

Карма: 4
Рейтинг сообщений: 12
Зарегистрирован: Пн мар 07, 2011 15:06:32
Сообщений: 81
Откуда: Murom
Рейтинг сообщения: 0
Если новая Atmega8, то по умолчанию тактируется встроенным генератором 1Мгц, а вы прошили её вашим исходником с 8Мгц, не меняя частоту тактирования. Короче, скорее всего фьюзы проверяйте справка здесь, ну и "тупые" залипы\непропаи, не туда проводок...
И зачем в исходнике это:
Код:
#asm
   .equ __lcd_port=0x12; PORTD /* ЖКИ дисплей подключили к порту I/O D */
#endasm

У вас CVAVR 3 версии, и все LCD настройки в свойствах проекта. в программу их писать не надо


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y