PDA

Просмотр полной версии : Специалисты по МК, подскажите..


Hits
09.05.2009, 14:33
Камрады, наверняка есть среди форумчан специалисты по микроконтроллерам - помогите решить вопросик.. дали моему братишке младшому курсовой в инсте.. в 2 словах суть его сводится к тому, что есть 2 устройства - оба на Atmega16, одно из них берет данные с термодатчика и по сети 220 перебрасывает их на второе, которое выводит эти данные на дисплей.. сами платы я собрал, а вот с программой для меги возникла проблема на ровном месте.. не могу ничего вывести на дисплей..
Сам дисплей МТ-10Т7-7T (http://www.chip-dip.ru/library/DOC000076089.pdf) регистровый, без встроенного контроллера, подключен к меге к порту A по порядку PA0-A0, PA1-WR2, PA2-WR1, PA3-DB3 и т.д. вот накидал программку в CodeVisionAvr, чтоб для теста вывести на дисплей нули.. даже этого не получается.. подскажите пожалуйста, где я ошибаюсь..

#include <mega16.h>
#include <delay.h>

#define A0 PORTA.0
#define WR1 PORTA.2

char D[10]={0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xE E};

void Strobe_WR1(void)
{
WR1=1;
delay_ms(8);
WR1=0;
delay_ms(8);
}

void Strobe_Adr(void)
{
A0=0;
delay_ms(8);
Strobe_WR1();
A0=1;
}

void Write(unsigned char byte)
{
if (byte&0x01) PORTA.3=1; else PORTA.3=0;
if (byte&0x02) PORTA.4=1; else PORTA.4=0;
if (byte&0x04) PORTA.5=1; else PORTA.5=0;
if (byte&0x08) PORTA.6=1; else PORTA.6=0;
delay_ms(8);
}

void Write_Adr(unsigned char adr)
{
Write(adr);
Strobe_Adr();
}

void Write_Data(unsigned char data)
{
Write(data);
Strobe_WR1();
Write(data>>4);
Strobe_WR1();
}

void Init_LCD(void)
{
unsigned char i;
Write_Adr(0x0F);
Write_Data(0x01);
Write_Adr(0x00);
for (i=0;i<10;i++) {Write_Data(0x30);}
Write_Adr(0x00);
}

void Display(void)
{
unsigned char i;
for (i=0;i<10;i++) {Write_Data(D[i]);}
}

void main(void)
{
PORTA=0xFF;
DDRA=0xFF; // Порт A на выход ЖКИ
Init_LCD();
Display();
while(1);
}

vth
09.05.2009, 17:46
Я бы попросил схему устройства (так виднее) и минимум комментариев к коду.

И да, термодатчик работает?

Jurik_G
09.05.2009, 21:30
С таким типом дисплеев работать не приходилось. Но. Сам столкнулся не так давно с отсутствием отображения символов на дисплее с контроллером Hitachi. Все оказалось банально просто. На вывод управления контрастностью надо было подать напряжение через переменный резистор. Попробуйте подобрать напряжение так, чтобы сегменты как бы чуть-чуть подсвечивались. Тогда будет видно, пытается индикатор отобразить Ваши данные или ему что-то не хватает.