| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
AVR и экран MT10T7
16.07.2010, 01:42
|
#31
|
|
Временная регистрация
Регистрация: 19.04.2010
Сообщений: 90
Сказал спасибо: 29
Сказали Спасибо 83 раз(а) в 37 сообщении(ях)
|
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, то мы наблюдаем полный паралич дееспособности программиста. Более того такая же ветка того же автора есть в Радиокоте. Поэтому проблему можно считать глобальной без преувеличения  .
|
|
|
|
16.07.2010, 01:49
|
#32
|
|
Временная регистрация
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: AVR и экран MT10T7
Сообщение от SHIM1
|
Блажен кто верит во всемогущество языка С. А если добрый дядя не "слепил" библиотеки чисто конкретно для MT10T7, то мы наблюдаем полный паралич дееспособности программиста. Более того такая же ветка того же автора есть в Радиокоте. Поэтому проблему можно считать глобальной без преувеличения .
|
Вы никогда не сталкивались с проблемой, с которой не в состоянии самостоятельно справиться? Пусть даже она покажется кому-то ещё банальной и простой. Не надо тут холиварить по поводу Си. И я не буду изучать асм в АВР, лишь для того, чтобы подключить дисплей.
А что плохого, что я спросил ещё и на другом форуме? Или везде одни и те же люди сидят?
|
|
|
|
16.07.2010, 01:58
|
#33
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
|
Re: AVR и экран MT10T7
Сообщение от SHIM1
|
|
Я просто поинтересовался у уважаемого человека подробностями о TIC33 или TIC55 дисплеях фирмы Ampire.
|
Драйвер ML1001, цена 2 бакса.
|
|
|
|
16.07.2010, 02:02
|
#34
|
|
Временная регистрация
Регистрация: 19.04.2010
Сообщений: 90
Сказал спасибо: 29
Сказали Спасибо 83 раз(а) в 37 сообщении(ях)
|
Re: AVR и экран MT10T7
Сообщение от Lockdog
|
|
Вы никогда не сталкивались с проблемой, с которой не в состоянии самостоятельно справиться? Пусть даже она покажется кому-то ещё банальной и простой. Не надо тут холиварить по поводу Си. И я не буду изучать асм в АВР, лишь для того, чтобы подключить дисплей.
|
Сталкивался.
Не изучайте.
Спокойной ночи.
P.S.
Поймите, это ЛОГИКА и методом "тыка" она не решается. И если Вы зависаете на таких простых девайсах, то лучше все-таки чего-нибудь изучить ИМХО.
P.P.S.
Не обижайтесь, я по доброму.
|
|
|
|
16.07.2010, 02:02
|
#35
|
|
Прописка
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
|
Re: AVR и экран MT10T7
Lockdog, а что происходит если не выводить символ, а только вызвать функцию mt_init(); ?
|
|
|
|
16.07.2010, 02:09
|
#36
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
|
Re: AVR и экран MT10T7
Может и в свинячий голос, а вдруг поможет эта МЭЛТовская шняга.
MELT_file2136.zip
|
|
|
|
16.07.2010, 02:23
|
#37
|
|
Прописка
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
|
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
} |
|
|
|
|
16.07.2010, 02:53
|
#38
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
|
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
} |
|
ИМХО, здесь чего-то не хватает.
|
|
|
|
16.07.2010, 09:19
|
#39
|
|
Прописка
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
|
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)
} |
Это пример из архива выше разницы не вижу
|
|
|
|
16.07.2010, 11:35
|
#40
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
|
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
} |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:08.
|
|