Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Ответ
Опции темы

AVR и экран MT10T7

Непрочитано 16.07.2010, 01:42   #31
SHIM1
Временная регистрация
 
Аватар для SHIM1
 
Регистрация: 19.04.2010
Сообщений: 90
Сказал спасибо: 29
Сказали Спасибо 83 раз(а) в 37 сообщении(ях)
SHIM1 на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от harchenko_pavel Посмотреть сообщение
Как вы думаете проще написать PORTA |= (1‹‹0) | (1‹‹1) | (1‹‹2);
или
PORTA |= (1‹‹0) ;
PORTB |= (1‹‹0) ;
PORTC |= (1‹‹0);
Я ничего не думаю, я медленно дурею. Я просто поинтересовался у уважаемого человека подробностями о TIC33 или TIC55 дисплеях фирмы Ampire.
P.S. Блажен кто верит во всемогущество языка С. А если добрый дядя не "слепил" библиотеки чисто конкретно для MT10T7, то мы наблюдаем полный паралич дееспособности программиста. Более того такая же ветка того же автора есть в Радиокоте. Поэтому проблему можно считать глобальной без преувеличения.
Реклама:
SHIM1 вне форума   Ответить с цитированием
Непрочитано 16.07.2010, 01:49   #32
Lockdog
Временная регистрация
 
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
Lockdog на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от SHIM1 Посмотреть сообщение
Блажен кто верит во всемогущество языка С. А если добрый дядя не "слепил" библиотеки чисто конкретно для MT10T7, то мы наблюдаем полный паралич дееспособности программиста. Более того такая же ветка того же автора есть в Радиокоте. Поэтому проблему можно считать глобальной без преувеличения.
Вы никогда не сталкивались с проблемой, с которой не в состоянии самостоятельно справиться? Пусть даже она покажется кому-то ещё банальной и простой. Не надо тут холиварить по поводу Си. И я не буду изучать асм в АВР, лишь для того, чтобы подключить дисплей.

А что плохого, что я спросил ещё и на другом форуме? Или везде одни и те же люди сидят?
Lockdog вне форума   Ответить с цитированием
Непрочитано 16.07.2010, 01:58   #33
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от SHIM1 Посмотреть сообщение
Я просто поинтересовался у уважаемого человека подробностями о TIC33 или TIC55 дисплеях фирмы Ampire.
Драйвер ML1001, цена 2 бакса.
st_1 вне форума   Ответить с цитированием
Непрочитано 16.07.2010, 02:02   #34
SHIM1
Временная регистрация
 
Аватар для SHIM1
 
Регистрация: 19.04.2010
Сообщений: 90
Сказал спасибо: 29
Сказали Спасибо 83 раз(а) в 37 сообщении(ях)
SHIM1 на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от Lockdog Посмотреть сообщение
Вы никогда не сталкивались с проблемой, с которой не в состоянии самостоятельно справиться? Пусть даже она покажется кому-то ещё банальной и простой. Не надо тут холиварить по поводу Си. И я не буду изучать асм в АВР, лишь для того, чтобы подключить дисплей.
Сталкивался.
Не изучайте.
Спокойной ночи.
P.S.
Поймите, это ЛОГИКА и методом "тыка" она не решается. И если Вы зависаете на таких простых девайсах, то лучше все-таки чего-нибудь изучить ИМХО.
P.P.S.
Не обижайтесь, я по доброму.
SHIM1 вне форума   Ответить с цитированием
Непрочитано 16.07.2010, 02:02   #35
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Lockdog, а что происходит если не выводить символ, а только вызвать функцию mt_init(); ?
harchenko_pavel вне форума   Ответить с цитированием
Непрочитано 16.07.2010, 02:09   #36
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Может и в свинячий голос, а вдруг поможет эта МЭЛТовская шняга.
MELT_file2136.zip
st_1 вне форума   Ответить с цитированием
Сказали "Спасибо" st_1
harchenko_pavel (16.07.2010)
Непрочитано 16.07.2010, 02:23   #37
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

st_1, Спасибо поправил под МЭЛТовский пример
Код:
#include ‹ioavr.h›
#include ‹intrinsics.h›

//Макросы задержек в мкс, мс
#define XTAL_MHz 8.0
#define _delay_us(us) __delay_cycles((unsigned long int)us*XTAL_MHz)
#define _delay_ms(ms) _delay_us(ms*1000)

#define FALSE 0
#define TRUE  1

//Конфигурация выводов микроконтроллера
//Шина дреса/данных DB0
#define DDR_DB0   DDRD
#define PORT_DB0  PORTD
#define DB0       PD3
//Шина дреса/данных DB1
#define DDR_DB1   DDRD
#define PORT_DB1  PORTD
#define DB1       PD4
//Шина дреса/данных DB2
#define DDR_DB2   DDRD
#define PORT_DB2  PORTD
#define DB2       PD5
//Шина дреса/данных DB3
#define DDR_DB3   DDRD
#define PORT_DB3  PORTD
#define DB3       PD6
//Запись  вмодуль (активный уровень high)
#define DDR_WR1  DDRB
#define PORT_WR1 PORTB
#define WR1      PB0
//Выбор адрес (А0 low)/данные (A0 high)
#define DDR_A0   DDRB
#define PORT_A0  PORTB
#define A0       PB1
//Длительность сигнала записи/удержания
#define delay_mt _delay_us(10)

#define SetBit(reg, bit) reg |= (1‹‹bit)
#define ClrBit(reg, bit) reg &= (~(1‹‹bit))

#define DDR_MT_set  SetBit(DDR_DB0,DB0);\
                    SetBit(DDR_DB1,DB1);\
	            SetBit(DDR_DB2,DB2);\
	            SetBit(DDR_DB3,DB3);\
		    SetBit(DDR_WR1,WR1);\
		    SetBit(DDR_A0,A0)
					
#define DB_all_low  ClrBit(PORT_DB0,DB0);\
                    ClrBit(PORT_DB1,DB1);\
		    ClrBit(PORT_DB2,DB2);\
		    ClrBit(PORT_DB3,DB3)

#define DB_all_high SetBit(PORT_DB0,DB0);\
                    SetBit(PORT_DB1,DB1);\
		    SetBit(PORT_DB2,DB2);\
		    SetBit(PORT_DB3,DB3)			  

#define DB0_low     ClrBit(PORT_DB0,DB0)
#define DB0_high    SetBit(PORT_DB0,DB0)

#define DB1_low     ClrBit(PORT_DB1,DB1)
#define DB1_high    SetBit(PORT_DB1,DB1)

#define DB2_low     ClrBit(PORT_DB2,DB2)
#define DB2_high    SetBit(PORT_DB2,DB2)

#define DB3_low     ClrBit(PORT_DB3,DB3)
#define DB3_high    SetBit(PORT_DB3,DB3)

#define WR1_low     ClrBit(PORT_WR1,WR1)
#define WR1_high    SetBit(PORT_WR1,WR1)

#define A0_low      ClrBit(PORT_A0,A0)
#define A0_high     SetBit(PORT_A0,A0)


void mt_setp(char position);
void mt_init(void);
void mt_clear(void);               
void mt_putc(char c, char point);        

int main( void )
{
  char i;

  mt_init();

  for (i=0; i‹=9; i++) mt_putc(i,FALSE);
  
  while(1);
}

/*
        Инициализация (разблокировка дисплея)
*/ 
void mt_init()
{
    // разблокировка шины     
    mt_setp(0x0f); //Устанавливаем адрес 0Fh
    A0_high;       //Переключаемся в регистр данных
    DB_all_low;    //Устанавливаем шину данных в LOW
    DB0_high;      //Устанавливаем DB0=H
    WR1_high;      //Записываем DB0=H по адресу 0Fh
    delay_mt;      //Задержка сигнала записи - tWR   
    WR1_low;       //Конец записи
    delay_mt;      //Задержка удержания - tHAD
    mt_clear();    //Очистка индикатора
}         

/*
        очистка дисплея представляет из себя отключение всех сегментов индикатора
*/     
void mt_clear(void)
{        
    char i=0;

    mt_setp(0x00);   //Устанавливаем адрес 00h
    while (i++!=20)  //Очистка сегментов Sg1-Sg10
    {  
        delay_mt;    //Задержка между записью - tHW
	WR1_high;    //Записываем DB0(L),DB1(L),DB2(L),DB3(L) по адресу 00h - 09h
        delay_mt;    //Задержка сигнала записи - tWR   
	WR1_low;     //Конец записи
        delay_mt;    //Задержка удержания - tHAD
    }
    mt_setp(0x00);   //Устанавливаем адрес 00h
}

/*
        Установка позиции производится при установки 
        значения position: 0x00 - 0x09, 0x0f 
*/               
void mt_setp(char position)
{
    
    if (position&0x01) DB0_high; //Если бит 0001=H устанавливаем DB0=H
    else DB0_low;                //Иначе устанавливаем DB0=L
    if (position&0x02) DB1_high; //Если бит 0010=H устанавливаем DB1=H
    else DB1_low;                //Иначе устанавливаем DB1=L
    if (position&0x04) DB2_high; //Если бит 0100=H устанавливаем DB2=H
    else DB2_low;                //Иначе устанавливаем DB2=L
    if (position&0x08) DB3_high; //Если бит 1000=H устанавливаем DB3=H
    else DB3_low;                //Иначе устанавливаем DB3=L
    A0_low;                      //Переключаемся в регистр адреса
    WR1_high;                    //Начало записи
    delay_mt;                    //Задержка сигнала записи - tWR
    WR1_low;                     //Конец записи
    delay_mt;                    //Задержка удержания - tHAD 
} 

/*
        Вывод одиночной цифры
        параметры: с     - цифра от 0 до 9
                   point - TRUE (отображать точку), FALSE (не отображать) 
*/
void mt_putc(char c, char point)
{ 
    char digits_l[]= {0xe,0x0,0xf,0xd,0x1,0xd,0xf,0x8,0xf,0xd};//младшая тетрада
    char digits_h[]= {0xe,0x6,0x2,0x6,0xe,0xc,0xc,0x6,0xe,0xe};//старшая тетрада
     
    //Устанавливаем на шине данных значение запиываемое в младшую тетраду
    A0_high;                        //Переключаемся в регистр данных
    if (digits_l[c]&0x01) DB0_high; //Если бит 0001=H устанавливаем DB0=H
    else  DB0_low;                  //Иначе устанавливаем DB0=L
    if (digits_l[c]&0x02) DB1_high; //Если бит 0010=H устанавливаем DB1=H
    else  DB1_low;                  //Иначе устанавливаем DB1=L
    if (digits_l[c]&0x04) DB2_high; //Если бит 0100=H устанавливаем DB2=H
    else  DB2_low;                  //Иначе устанавливаем DB2=L
    if (digits_l[c]&0x08) DB3_high; //Если бит 1000=H устанавливаем DB3=H
    else  DB3_low;                  //Иначе устанавливаем DB3=L
    delay_mt;                       //Задержка между записью - tHW
    WR1_high;                       //Записываем в младшую тетраду значения DB0,DB1,DB2,DB3
    delay_mt;                       //Задержка сигнала записи - tWR   
    WR1_low;                        //Конец записи
    delay_mt;                       //Задержка удержания - tHAD
	
    //Устанавливаем на шине данных значение запиываемое в старшую тетраду
    else  DB1_low;                  //Иначе устанавливаем DB1=L
    if (digits_h[c]&0x04) DB2_high; //Если бит 0100=H устанавливаем DB2=H
    else  DB2_low;                  //Иначе устанавливаем DB2=L
    if (digits_h[c]&0x08) DB3_high; //Если бит 1000=H устанавливаем DB3=H
    else  DB3_low;                   //Иначе устанавливаем DB3=L
    if (point) DB0_high;            //Если point-TRUE устанавливаем DB0=H
    else  DB0_low;                  //Иначе устанавливаем DB0=L
    delay_mt;                       //Задержка между записью - tHW
    WR1_high;                       //Записываем в старшую тетраду значения DB0,DB1,DB2,DB3
    delay_mt;                       //Задержка сигнала записи - tWR   
    WR1_low;                        //Конец записи
    delay_mt;                       //Задержка удержания - tHAD
}
harchenko_pavel вне форума   Ответить с цитированием
Непрочитано 16.07.2010, 02:53   #38
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от harchenko_pavel Посмотреть сообщение
Код:
    //Устанавливаем на шине данных значение запиываемое в старшую тетраду
    else  DB1_low;                  //Иначе устанавливаем DB1=L
    if (digits_h[c]&0x04) DB2_high; //Если бит 0100=H устанавливаем DB2=H
    else  DB2_low;                  //Иначе устанавливаем DB2=L
    if (digits_h[c]&0x08) DB3_high; //Если бит 1000=H устанавливаем DB3=H
    else  DB3_low;                   //Иначе устанавливаем DB3=L
    if (point) DB0_high;            //Если point-TRUE устанавливаем DB0=H
    else  DB0_low;                  //Иначе устанавливаем DB0=L
    delay_mt;                       //Задержка между записью - tHW
    WR1_high;                       //Записываем в старшую тетраду значения DB0,DB1,DB2,DB3
    delay_mt;                       //Задержка сигнала записи - tWR   
    WR1_low;                        //Конец записи
    delay_mt;                       //Задержка удержания - tHAD
}
ИМХО, здесь чего-то не хватает.
st_1 вне форума   Ответить с цитированием
Непрочитано 16.07.2010, 09:19   #39
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от st_1 Посмотреть сообщение
ИМХО, здесь чего-то не хватает.
Код:
//Процедура выдачи байта в индикатор
void WriteByte(byte b) {

	LCD.A0=1;		//Будем записывать данные

        //Младшая тетрада
	LCD.D=b&0x0F;		//Выдача индикатору младших 4-х битов
	LCD.WR1=1;
	Delay(›100ns);		//Минимально допустимая длительность сигнала записи tWR
	LCD.WR1=0;
	Delay(›100ns);		//Минимальное время удержания данных tHAD

       //Старшая тетрада
	LCD.D=b››4;		//Выдача индикатору старших 4-х битов
	Delay(›(200ns-100ns));	//Минимально допустимая пауза между сигналами записи tP, 100нс из которых попало в время удержания tHAD
	LCD.WR1=1;
	Delay(›100ns);		//Минимально допустимая длительность сигнала записи tWR
	LCD.WR1=0;
	Delay(›200ns);		//Минимально допустимая пауза между сигналами записи tP (сюда же попало время удержания tHAD)
}
Это пример из архива выше разницы не вижу
harchenko_pavel вне форума   Ответить с цитированием
Непрочитано 16.07.2010, 11:35   #40
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Если ничего не пропустил, то, ИМХО, должно быть так.

Код:
/*
        Вывод одиночной цифры
        параметры: с     - цифра от 0 до 9
                   point - TRUE (отображать точку), FALSE (не отображать) 
*/
void mt_putc(char c, char point)
{ 
    char digits_l[]= {0xe,0x0,0xf,0xd,0x1,0xd,0xf,0x8,0xf,0xd};//младшая тетрада
    char digits_h[]= {0xe,0x6,0x2,0x6,0xe,0xc,0xc,0x6,0xe,0xe};//старшая тетрада
     
    //Устанавливаем на шине данных значение запиываемое в младшую тетраду
    A0_high;                        //Переключаемся в регистр данных
    if (digits_l[c]&0x01) DB0_high; //Если бит 0001=H устанавливаем DB0=H
    else  DB0_low;                  //Иначе устанавливаем DB0=L
    if (digits_l[c]&0x02) DB1_high; //Если бит 0010=H устанавливаем DB1=H
    else  DB1_low;                  //Иначе устанавливаем DB1=L
    if (digits_l[c]&0x04) DB2_high; //Если бит 0100=H устанавливаем DB2=H
    else  DB2_low;                  //Иначе устанавливаем DB2=L
    if (digits_l[c]&0x08) DB3_high; //Если бит 1000=H устанавливаем DB3=H
    else  DB3_low;                  //Иначе устанавливаем DB3=L
    delay_mt;                       //Задержка между записью - tHW
    WR1_high;                       //Записываем в младшую тетраду значения DB0,DB1,DB2,DB3
    delay_mt;                       //Задержка сигнала записи - tWR   
    WR1_low;                        //Конец записи
    delay_mt;                       //Задержка удержания - tHAD
	
    //Устанавливаем на шине данных значение запиываемое в старшую тетраду
    if (digits_h[c]&0x02) DB1_high; //Если бит 0010=H устанавливаем DB1=H
    else  DB1_low;                  //Иначе устанавливаем DB1=L
    if (digits_h[c]&0x04) DB2_high; //Если бит 0100=H устанавливаем DB2=H
    else  DB2_low;                  //Иначе устанавливаем DB2=L
    if (digits_h[c]&0x08) DB3_high; //Если бит 1000=H устанавливаем DB3=H
    else  DB3_low;                   //Иначе устанавливаем DB3=L
    if (point) DB0_high;            //Если point-TRUE устанавливаем DB0=H
    else  DB0_low;                  //Иначе устанавливаем DB0=L
    delay_mt;                       //Задержка между записью - tHW
    WR1_high;                       //Записываем в старшую тетраду значения DB0,DB1,DB2,DB3
    delay_mt;                       //Задержка сигнала записи - tWR   
    WR1_low;                        //Конец записи
    delay_mt;                       //Задержка удержания - tHAD
}
st_1 вне форума   Ответить с цитированием
Сказали "Спасибо" st_1
harchenko_pavel (16.07.2010)
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги dosikus Электронная библиотека 11242 29.12.2015 23:45
AVR JTAGICE MKII - проблемы firmware... Luxurious AVR 25 20.10.2014 10:50
На WinAVR + AVR Studio c CVAVR Vetal-soft Embedd С 87 03.03.2013 20:31


Часовой пояс GMT +4, время: 00:08.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.