| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
AVR и экран MT10T7
13.07.2010, 14:10
|
|
|
Временная регистрация
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: AVR и экран MT10T7
Не работает, сам вот ковыряюсь, ничего не выходит...
|
|
|
|
14.07.2010, 15:25
|
|
|
Вид на жительство
Регистрация: 09.10.2009
Сообщений: 353
Сказал спасибо: 20
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
|
AVR и экран MT10T7
Советую использовать TIC33 или TIC55 дисплеи фирмы Ampire, дешевле стоят, интерфейс последовательный я-ля SPI с Latch-ем, подсветку можно сотворить свою или купить готовую любых цветов хоть RGB, по толщине гораздо меньше (COG, чип на стекле), при программно организованном интерфейсе дисплей у меня работает вообще без задержек.
__________________
Делая дело нужно в него верить на все 100%, иначе неизбежно будут возникать ошибки подпитывающие подсознательное сомнение.
|
|
|
|
15.07.2010, 19:42
|
|
|
Прописка
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
|
Re: AVR и экран MT10T7
Lockdog, Ну как успехи?
|
|
|
|
15.07.2010, 21:46
|
|
|
Прописка
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
|
Re: AVR и экран MT10T7
Поправил код по даташиту
|
Код:
|
#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 ClrBit(reg, bit) reg |= (1‹‹bit)
#define SetBit(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()
{
// разблокировка шины
DDR_MT_set; //Настраиваем регистры DDR
DB_all_high; //Устанавливаем адрес 0Fh
A0_low; //Переключаемся в регистр адреса
WR1_high; //Начало записи
delay_mt; //Задержка сигнала записи - tWR
WR1_low; //Конец записи
delay_mt; //Задержка удержания - tHAD
A0_high; //Переключаемся в регистр данных
DB_all_low; //Устанавливаем шину данных в LOW
delay_mt; //Задержка между записью - tHW
DB0_high; //Устанавливаем DB0=H
WR1_high; //Записываем DB0=H по адресу 0Fh
delay_mt; //Задержка сигнала записи - tWR
WR1_low; //Конец записи
delay_mt; //Задержка удержания - tHAD
DB_all_low; //Устанавливаем шину данных в LOW
mt_clear(); //Очистка индикатора
}
/*
очистка дисплея представляет из себя отключение всех сегментов индикатора
*/
void mt_clear(void)
{
char i=0;
DB_all_low; //Устанавливаем адрес 00h
A0_low; //Переключаемся в регистр адреса
WR1_high; //Начало записи
delay_mt; //Задержка сигнала записи - tWR
WR1_low; //Конец записи
delay_mt; //Задержка удержания - tHAD
A0_high; //Переключаемся в регистр данных
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
*/
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
A0_high; //Переключаемся в регистр данных
DB_all_low; //Устанавливаем шину данных в LOW
delay_mt; //Задержка между записью - tHW
}
/*
Вывод одиночной цифры
параметры: с - цифра от 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};//старшая тетрада
//Устанавливаем на шине данных значение запиываемое в младшую тетраду
DB_all_low; //Устанавливаем шину данных в LOW
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
DB_all_low; //Устанавливаем шину данных в LOW
delay_mt; //Задержка между записью - tHW
//Устанавливаем на шине данных значение запиываемое в старшую тетраду
if (digits_h[c]&0x01) DB0_high; //Если бит 0001=H устанавливаем DB0=H
else DB0_low; //Иначе устанавливаем DB0=L
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 (point) DB3_high; //Если point-TRUE устанавливаем DB3=H
else DB3_low; //Иначе устанавливаем DB3=L
delay_mt; //Задержка между записью - tHW
WR1_high; //Записываем в старшую тетраду значения DB0,DB1,DB2,DB3
delay_mt; //Задержка сигнала записи - tWR
WR1_low; //Конец записи
delay_mt; //Задержка удержания - tHAD
DB_all_low; //Устанавливаем шину данных в LOW
delay_mt; //Задержка между записью - tHW
} |
З.Ы. Нашел пару косяков
Последний раз редактировалось harchenko_pavel; 16.07.2010 в 00:31.
|
|
|
|
Сказали "Спасибо" harchenko_pavel
|
|
|
15.07.2010, 23:01
|
|
|
Временная регистрация
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: AVR и экран MT10T7
Пытаюсь скомпилировать и выдаёт ошибки:
|
Код:
|
Building configuration: lcd - Release
Updating build tree...
main.c
Error[Pe077]: this declaration has no storage class or type specifier C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 42
Error[Pe101]: "DDRD" has already been declared in the current scope (at line 145 of "G:\Development\IAR Systems\Embedded Workbench 5.4\avr\INC\ C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 42
iotiny2313.h")
Error[Pe065]: expected a ";" C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 42
Error[Pe077]: this declaration has no storage class or type specifier C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 43
Error[Pe065]: expected a ";" C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 43
Error[Pe077]: this declaration has no storage class or type specifier C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 44
Error[Pe101]: "DDRB" has already been declared in the current scope (at line 139 of "G:\Development\IAR Systems\Embedded Workbench 5.4\avr\INC\ C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 44
iotiny2313.h")
Error[Pe065]: expected a ";" C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 44
Error[Pe077]: this declaration has no storage class or type specifier C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 45
Error[Pe065]: expected a ";" C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 45
Warning[Pe012]: parsing restarts here after previous syntax error C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 49
Error[Pe077]: this declaration has no storage class or type specifier C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 50
Error[Pe101]: "PORTD" has already been declared in the current scope (at line 144 of "G:\Development\IAR Systems\Embedded Workbench 5.4\avr\ C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 50
INC\iotiny2313.h")
Error[Pe065]: expected a ";" C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 50
Warning[Pe012]: parsing restarts here after previous syntax error C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 54
Error[Pe077]: this declaration has no storage class or type specifier C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 55
Error[Pe065]: expected a ";" C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 55
Warning[Pe012]: parsing restarts here after previous syntax error C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 76
Warning[Pe223]: function "mt_setp" declared implicitly C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 87
Error[Pe159]: declaration is incompatible with previous "mt_setp" (declared at line 87) C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 147
Error while running C/C++ Compiler
Total number of errors: 16
Total number of warnings: 4 |
|
|
|
|
15.07.2010, 23:18
|
|
|
Прописка
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
|
Re: AVR и экран MT10T7
Сообщение от Lockdog
|
Пытаюсь скомпилировать и выдаёт ошибки:
|
Код:
|
Building configuration: lcd - Release
Updating build tree...
main.c
Error[Pe077]: this declaration has no storage class or type specifier C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 42
Error[Pe101]: "DDRD" has already been declared in the current scope (at line 145 of "G:\Development\IAR Systems\Embedded Workbench 5.4\avr\INC\ C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 42
iotiny2313.h")
Error[Pe065]: expected a ";" C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 42
Error[Pe077]: this declaration has no storage class or type specifier C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 43
Error[Pe065]: expected a ";" C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 43
Error[Pe077]: this declaration has no storage class or type specifier C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 44
Error[Pe101]: "DDRB" has already been declared in the current scope (at line 139 of "G:\Development\IAR Systems\Embedded Workbench 5.4\avr\INC\ C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 44
iotiny2313.h")
Error[Pe065]: expected a ";" C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 44
Error[Pe077]: this declaration has no storage class or type specifier C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 45
Error[Pe065]: expected a ";" C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 45
Warning[Pe012]: parsing restarts here after previous syntax error C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 49
Error[Pe077]: this declaration has no storage class or type specifier C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 50
Error[Pe101]: "PORTD" has already been declared in the current scope (at line 144 of "G:\Development\IAR Systems\Embedded Workbench 5.4\avr\ C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 50
INC\iotiny2313.h")
Error[Pe065]: expected a ";" C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 50
Warning[Pe012]: parsing restarts here after previous syntax error C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 54
Error[Pe077]: this declaration has no storage class or type specifier C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 55
Error[Pe065]: expected a ";" C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 55
Warning[Pe012]: parsing restarts here after previous syntax error C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 76
Warning[Pe223]: function "mt_setp" declared implicitly C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 87
Error[Pe159]: declaration is incompatible with previous "mt_setp" (declared at line 87) C:\Users\Lockdog\Desktop\StepMotor\LCD\main.c 147
Error while running C/C++ Compiler
Total number of errors: 16
Total number of warnings: 4 |
|
Только что скомпилил матюкнулся тока на FALSE, добавил:
#define FALSE 0
#define TRUE 1
Получил на выходе:
Building configuration: mt10t7 - Debug
Updating build tree...
main.c
Linking
Total number of errors: 0
Total number of warnings: 0
Приложил main.c который компилил в IAR C/C++ Compiler for AVR
5.50.0 (5.50.0.50277)
Последний раз редактировалось harchenko_pavel; 16.07.2010 в 00:34.
|
|
|
|
Сказали "Спасибо" harchenko_pavel
|
|
|
16.07.2010, 00:06
|
|
|
Временная регистрация
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: AVR и экран MT10T7
Не компилировалось, видимо из-за того что слэши в define не везде стояли, сейчас всё скомпилилось, но на экран выводятся только цифры "5" с точками... я в отчаянии, пины прозванивал - всё подключено правильно, ничего не коротит
Ещё раз, большое спасибо за исходник.
|
|
|
|
16.07.2010, 00:16
|
|
|
Прописка
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
|
Re: AVR и экран MT10T7
Lockdog, В исходнике было несколько ошибок в макросах, сейчас поправил.
Если не поможет - попробуй увеличить задержку как в оригинале до 40мкс
Последний раз редактировалось harchenko_pavel; 16.07.2010 в 00:33.
|
|
|
|
16.07.2010, 00:27
|
|
|
Временная регистрация
Регистрация: 19.04.2010
Сообщений: 90
Сказал спасибо: 29
Сказали Спасибо 83 раз(а) в 37 сообщении(ях)
|
Re: AVR и экран MT10T7
Сообщение от OneTech
|
|
Советую использовать TIC33 или TIC55 дисплеи фирмы Ampire...
|
Если можно, то чуть подробнее о документации. Хотя по моим понятиям, дешевле и проще MT10T7 ничего быть не может. В свое время их (MT10T7) активно юзал. Не помню, правда, чтобы были километры строк программы, а помню, что все работало сразу и безоговорочно, ведь в даташите разжевано буквально все. Главный недостаток MT10T7 слишком много ног ИМХО и это напрягает  .
|
|
|
|
16.07.2010, 00:31
|
|
|
Временная регистрация
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: AVR и экран MT10T7
Я это сразу попробовал =(
P.S. пробовал и последнее исправленное, не помогает(((
Последний раз редактировалось Lockdog; 16.07.2010 в 00:38.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:47.
|
|