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);
}
Сам дисплей МТ-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);
}