Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

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

 
Опции темы

AVR и экран MT10T7

Непрочитано 16.07.2010, 13:23  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от st_1 Посмотреть сообщение
if (digits_h[c]&0x02) DB1_high; //Если бит 0010=H устанавливаем DB1=H
Пропустил ! Все таки 01:23 суток было. Спасибо!
Реклама:

Последний раз редактировалось harchenko_pavel; 16.07.2010 в 13:27.
harchenko_pavel вне форума  
Непрочитано 16.07.2010, 16:45  
Lockdog
Временная регистрация
 
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
Lockdog на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от st_1 Посмотреть сообщение
Может и в свинячий голос, а вдруг поможет эта МЭЛТовская шняга.
Вложение 9884
Я изначально и пользовался МЭЛТовским примером, выкладывал код в начале темы, но у меня не работало
Lockdog вне форума  
Непрочитано 16.07.2010, 16:47  
Lockdog
Временная регистрация
 
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
Lockdog на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от harchenko_pavel Посмотреть сообщение
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
}
Работает ещё хуже, чем было до этого - выводит одни "8".
Lockdog вне форума  
Непрочитано 16.07.2010, 22:17  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от Lockdog Посмотреть сообщение
Работает ещё хуже, чем было до этого - выводит одни "8".
Смотрел диаграммы в протеусе все по даташиту, добавил перед записью символа установку адреса и увеличил задержку.
Вобщем пальцем в небо!
Вложения:
Тип файла: rar main.rar (1.6 Кб, 43 просмотров)
harchenko_pavel вне форума  
Сказали "Спасибо" harchenko_pavel
Lockdog (18.07.2010)
Непрочитано 17.07.2010, 15:29  
Lockdog
Временная регистрация
 
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
Lockdog на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Запись чисел происходит нормально, но проблема в инициализации, думаю...
Lockdog вне форума  
Непрочитано 17.07.2010, 15:35  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от Lockdog Посмотреть сообщение
Запись чисел происходит нормально, но проблема в инициализации, думаю...
попробуй из инициализации убрать функцию mt_clear();
harchenko_pavel вне форума  
Непрочитано 17.07.2010, 20:06  
Lockdog
Временная регистрация
 
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
Lockdog на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от harchenko_pavel Посмотреть сообщение
попробуй из инициализации убрать функцию mt_clear();
Попробовал, не помогло.
Фото1: запись цифр после mt_init с mt_clear;
Фото2: просто mt_init с mt_clear;
Фото3: mt_init без mt_clear;
Миниатюры:
Нажмите на изображение для увеличения
Название: PIC122.jpg
Просмотров: 37
Размер:	113.0 Кб
ID:	9954   Нажмите на изображение для увеличения
Название: PIC123.jpg
Просмотров: 35
Размер:	114.4 Кб
ID:	9955   Нажмите на изображение для увеличения
Название: PIC124.jpg
Просмотров: 39
Размер:	112.8 Кб
ID:	9956  

Lockdog вне форума  
Непрочитано 18.07.2010, 10:23  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Почитал http://www.radiokot.ru/lab/controller/12/, очень удивила инициализация дисплея:
Код:
;*******************  Старт экрана

Display:	ldi Temp, 0x00
	rcall OutPD

	ldi Temp, 0b0111101  ; Начальное состояние
	rcall OutPD

	cbi PortD, 0
	sbi PortD, 1
	rcall Delay

	cbi PortD, 1
	rcall Delay

	ldi Temp, 0b0111101  ; Снятие блокировки
	rcall OutPD
	sbi PortD, 1
	rcall Delay
	cbi PortD, 1
	rcall Delay

	ldi Temp, 0b0000010  ; Адрес первого разряда
	rcall OutPD
	cbi PortD,1
	rcall Delay

	ret

;******************************
Для снятия блокировки мы записуем в шину данных не 0001, а 1111

Код подправил под кота, так что пробуй.
Вложения:
Тип файла: rar main.rar (1.6 Кб, 38 просмотров)
harchenko_pavel вне форума  
Сказали "Спасибо" harchenko_pavel
Lockdog (18.07.2010)
Непрочитано 18.07.2010, 10:49  
Vov123
Вид на жительство
 
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
Vov123 на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

В моём случае DB0-DB3 подключены к PORTX0-PORTX3,WR1 подключен к PORTX4,WR2-›GND,A0-›PORTX5,V0-›NC
Инициализация 2 строчки(смотри в начале темы).И вообще у меня голова закружилась от вашего кода,там всё проще,раз в 5 наверное.
Vov123 вне форума  
Непрочитано 18.07.2010, 11:39  
harchenko_pavel
Прописка
 
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
harchenko_pavel на пути к лучшему
По умолчанию Re: AVR и экран MT10T7

Сообщение от Vov123 Посмотреть сообщение
В моём случае DB0-DB3 подключены к PORTX0-PORTX3,WR1 подключен к PORTX4,WR2-›GND,A0-›PORTX5,V0-›NC
Инициализация 2 строчки(смотри в начале темы).И вообще у меня голова закружилась от вашего кода,там всё проще,раз в 5 наверное.
Если вы планируете использовать дисплей в других проектах ИМХО применение макросов просто обязательно.

От чего у Вас голова то закружилась, все закомментировано?

Да инициализация у Вас в две строчки и контроллер работает наверное на 1МГц, а заведите его на 16МГц и нечего не увидите на дисплее.

Если Вы в состоянии помочь человеку, то выложите свой код и скрины работающего дисплея.
harchenko_pavel вне форума  
 
Опции темы

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

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, время: 07:00.


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