реклама на сайте
подробности

 
 
> Подключение 7-сегментного индикатора к msp430g24523, программирование
Cruz21
сообщение Jun 16 2013, 15:19
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 23-01-13
Пользователь №: 75 313



Добрый день, я собрал небольшую вставочную схему для отладчика LaunchPad на МК msp430g2452(фото прикреплен), где содержатся 7-сегментный, 4хразрядный индикатор. 7 сегментов я вывел на второй порт (Р2), а разряды на первый порт (Р1). Проблема в том что я не могу включить этот индикатор, точнее не знаю какой код прописать. Таблицы образов написал, а как заработал этот индикатор не знаю wacko.gif
static const u_char TBL_IMAGE[ ] =
0x40, // 0
0x79, // 1
0x24, // 2
0x30, // 3
0x19, // 4
0x12, // 5
0x02, // 6
0x78, // 7
0x00, // 8
0x10, // 9
static const u_char TBL_COM[ ] =
0xF8, // А1
0xF4, // А2
0xEC, // А3
0xDC, // А4
Идея такая, если взять какое нибудь число и его код в шестнадцатеричном коде и перевести в двоичный, то 0 должные зажигать LED подсветки, а 1 отключать. Помогите мне написать простенькую программу, хоть простой какой нибудь счетчик, чтоб я понял как взаимодействует простой индикатор без драйверов с МК. Как загнать образы в порта и выводить значения на индикаторе?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kovigor
сообщение Jun 16 2013, 15:54
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Cruz21 @ Jun 16 2013, 18:19) *
Проблема в том что я не могу включить этот индикатор, точнее не знаю какой код прописать.

Индикаторы есть разные - с общим катодом и с общим анодом (ваша схема рассчитана на общий анод). Какой у вас индикатор ? И номиналы резисторов на схеме не указаны.
Начать советую с малого - засветите сегмент "A" первой цифры (цифра включена, если база ее транзистора заземлена). Дальше поймете сами ...
Go to the top of the page
 
+Quote Post
Cruz21
сообщение Jun 16 2013, 17:19
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 23-01-13
Пользователь №: 75 313



Цитата(kovigor @ Jun 16 2013, 19:54) *
Индикаторы есть разные - с общим катодом и с общим анодом (ваша схема рассчитана на общий анод). Какой у вас индикатор ? И номиналы резисторов на схеме не указаны.
Начать советую с малого - засветите сегмент "A" первой цифры (цифра включена, если база ее транзистора заземлена). Дальше поймете сами ...

индикатор SM420364. R3...R11 С2-33-0,25-330 Ом ± 10%-А-В-В, R12...R1 С2-33-0,25-2,2 кОм ± 10%-А-В-В

Цитата(kovigor @ Jun 16 2013, 19:54) *
Индикаторы есть разные - с общим катодом и с общим анодом (ваша схема рассчитана на общий анод). Какой у вас индикатор ? И номиналы резисторов на схеме не указаны.
Начать советую с малого - засветите сегмент "A" первой цифры (цифра включена, если база ее транзистора заземлена). Дальше поймете сами ...

Как засветить сегмент А?
Такой индикатор
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 16 2013, 17:51
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Cruz21 @ Jun 16 2013, 22:19) *
индикатор SM420364.

http://www.yxztdz.com/EnProductShow.asp?ID=240
Цитата(Cruz21 @ Jun 16 2013, 22:19) *
Как засветить сегмент А?

Например, подать через токоограничивающий резистор "+" на 11 пин и "-" на 12 пин индикатора. Должен светиться сегмент A первой цифры.
Цитата(Cruz21 @ Jun 16 2013, 22:19) *
Такой индикатор

На фото изображен аналогичный, но другой по распиновке индикатор - CA56-11GWA фирмы Kingbright http://www.kingbrightusa.com/images/catalo.../ca56-11gwa.pdf
Вашему "китайцу" более соответствует (по распиновке) CC56-12SRWA http://www.kingbrightusa.com/images/catalo...CC56-12SRWA.pdf

Вообще программу для управления семисегментником нужно писать немного не так. Обозначьте сегменты символьными именами в виде макроподстановок. Тогда вся настройка под конкретный индикатор будет заключаться в редактировании макросов, а подстановка - выбором из таблицы по индексу.
Код
#define SG_A    (1U<<6)
#define SG_B    (1U<<7)
#define SG_C    (1U<<5)
#define SG_D    (1U<<4)
#define SG_E    (1U<<3)
#define SG_F    (1U<<2)
#define SG_G    (1U<<1)
#define SG_H    (1U<<0)

//таблица символов 0-9
unsigned char Symb7SegTab[]=
{ SG_A | SG_B | SG_C | SG_D | SG_E | SG_F,        // 0
  SG_B | SG_C,                                    // 1
  SG_A | SG_B | SG_G | SG_E | SG_D,               // 2
  SG_A | SG_B | SG_C | SG_D | SG_G,               // 3
  SG_F | SG_G | SG_B | SG_C,                      // 4
  SG_A | SG_F | SG_G | SG_C | SG_D,               // 5
  SG_A | SG_F | SG_E | SG_D | SG_C | SG_G,        // 6
  SG_A | SG_B | SG_C,                             // 7
  SG_A | SG_B | SG_C | SG_D | SG_E | SG_F | SG_G, // 8
  SG_A | SG_B | SG_C | SG_D | SG_F | SG_G,        // 9
};

Для управления сегментами нужно вначале проинициализировать функции пинов как выходов GPIO.
Код
P1SEL &= BIT2 | BIT3 | BIT4 | BIT5;
P1DIR |= BIT2 | BIT3 | BIT4 | BIT5;
P1OUT &= BIT2 | BIT3 | BIT4 | BIT5;
P2SEL = 0x00;
P2DIR = 0xFF;
P2OUT = 0x00;

Поскольку выводы управления анодами и катодами совмещены, то вам нужно реализовать динамическую индикацию. Т.е. в цикле с интервалом 1-5мс устанавливать по-очереди выводы общих анодов/катодов в активное состояние, а на выводы сегментов синхронно с ними выводить число, соответствующее порядковому номеру цифры, используя таблицу преобразования.
Go to the top of the page
 
+Quote Post
Cruz21
сообщение Jun 16 2013, 17:57
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 23-01-13
Пользователь №: 75 313



Цитата(rezident @ Jun 16 2013, 21:51) *
http://www.yxztdz.com/EnProductShow.asp?ID=240

Например, подать через токоограничивающий резистор "+" на 11 пин и "-" на 12 пин индикатора. Должен светиться сегмент A первой цифры.

На фото изображен аналогичный, но другой по распиновке индикатор - CA56-11GWA фирмы Kingbright http://www.kingbrightusa.com/images/catalo.../ca56-11gwa.pdf
Вашему "китайцу" более соответствует (по распиновке) CA56-12SRWA http://www.kingbrightusa.com/images/catalo...CA56-12SRWA.pdf

Вообще программу для управления семисегментником нужно писать немного не так. Обозначьте сегменты символьными именами в виде макроподстановок. Тогда вся настройка под конкретный индикатор будет заключаться в редактировании макросов, а подстановка - выбором из таблицы по индексу.
Код
#define SG_A    (1U<<6)
#define SG_B    (1U<<7)
#define SG_C    (1U<<5)
#define SG_D    (1U<<4)
#define SG_E    (1U<<3)
#define SG_F    (1U<<2)
#define SG_G    (1U<<1)
#define SG_H    (1U<<0)

//таблица символов 0-9
unsigned char Symb7SegTab[]=
{ SG_A | SG_B | SG_C | SG_D | SG_E | SG_F,        // 0
  SG_B | SG_C,                                    // 1
  SG_A | SG_B | SG_G | SG_E | SG_D,               // 2
  SG_A | SG_B | SG_C | SG_D | SG_G,               // 3
  SG_F | SG_G | SG_B | SG_C,                      // 4
  SG_A | SG_F | SG_G | SG_C | SG_D,               // 5
  SG_A | SG_F | SG_E | SG_D | SG_C | SG_G,        // 6
  SG_A | SG_B | SG_C,                             // 7
  SG_A | SG_B | SG_C | SG_D | SG_E | SG_F | SG_G, // 8
  SG_A | SG_B | SG_C | SG_D | SG_F | SG_G,        // 9
};

как мне через этот код зажечь числа 1 2 3 4?
исходник программы нужен.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 16 2013, 18:09
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Cruz21 @ Jun 16 2013, 22:57) *
исходник программы нужен.

Ну знаете ли ... вы бы попробовали вначале сами что-то написать. То, что можно будет отрецензировать и указать на недочеты. А писать для вас код (даже простой) в 1-м часу ночи мне уже как-то лениво. laughing.gif "Дорогу осилит идущий". Успехов!
Go to the top of the page
 
+Quote Post
Cruz21
сообщение Jun 16 2013, 18:34
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 23-01-13
Пользователь №: 75 313



Цитата(rezident @ Jun 16 2013, 22:09) *
Ну знаете ли ... вы бы попробовали вначале сами что-то написать. То, что можно будет отрецензировать и указать на недочеты. А писать для вас код (даже простой) в 1-м часу ночи мне уже как-то лениво. laughing.gif "Дорогу осилит идущий". Успехов!

Спасибо за помощь, я понять хочу как работает МК с дисплеем, хочу вывести хоть одну цифру, чтобы понять. Но у меня не получается что то ничего. А сама программа она должна выводить на LED индикатор частоту и период. Потому что я делаю генератор прямоугольных импульсов на МК msp430


Код
#include  <msp430g2452.h>
#define u_char unsigned char
#define s_u_char static unsigned char
#define u_int  unsigned int
#define A0  BIT0
#define A1  BIT1
// -------- таблица образов цифр семисегментного индикатора -------
static const u_char TBL_IMAGE[10] =
{
  0x40,             // 0  
  0x79,             // 1
  0x24,             // 2
  0x30,             // 3
  0x19,             // 4
  0x12,             // 5
  0x02,             // 6
  0x78,             // 7
  0x00,             // 8
  0x10,             // 9
};

// таблица сигналов управления анодами 4 цифр светодиодного дисплея
static const u_char TBL_COM[4] =
{    
    0xF8,           // COM1 (cur_nom = 0)
    0xF4,           // COM2 (cur_nom = 1)
    0xEC,           // COM3 (cur_nom = 2)
    0xDC,           // COM4 (cur_nom = 3)
};

void main(void)
{
  
  WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
  IE1 |=WDTIE;
  BCSCTL1 = CALBC1_1MHZ;  // Устанавливаем частоту DCO на калиброванные 1 MHz.
  DCOCTL = CALDCO_1MHZ;
  TACTL = TASSEL_2 + ID_3 + MC_1;
  TACCTL1 = OUTMOD_7;
  ADC10CTL1 = INCH_1 + CONSEQ_3;
  ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + SREF_0 + ADC10IE;
  ADC10AE0 |= A0 + A1;
  P1DIR |=BIT6;
  P1SEL |=BIT6;
  while(1)
  {
    ADC10CTL0 &=~ENC;
    while(ADC10CTL1 & BUSY);
    ADC10SA = 0x200;
    ADC10CTL0 |= ENC + ADC10SC;
    TACCR0 = ADC10MEM;
    TACCR1 = ADC10MEM;
  }
}


вот, все что есть sad.gif

Сообщение отредактировал Cruz21 - Jun 16 2013, 18:38
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jun 16 2013, 20:24
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Cruz21 @ Jun 16 2013, 21:34) *
Спасибо за помощь, я понять хочу как работает МК с дисплеем

Но вы и не поймете, ибо не слушаете, что вам говорят. Напишите пару строк, засвечивающих сегмент первой цифры, без всякой динамической индикации. Это все, что от вас требуется ...

Мало того, вы еще и не читаете ответы. SM420364 - собщим катодом (!!!), вам чуть выше человек ссылку для чего дал ?
Go to the top of the page
 
+Quote Post
Cruz21
сообщение Jun 16 2013, 20:53
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 23-01-13
Пользователь №: 75 313



Код
void main(void)
{
P2DIR = 0xFF;
P2OUT = BIT0+BIT1+BIT2+BIT4+BIT5;
}


Зажег A,B,F,D,H(точка) остальные биты не включается, в чем может быть проблема?(программная или аппаратная ошибка?)
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jun 16 2013, 21:00
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Cruz21 @ Jun 16 2013, 23:53) *
Зажег A,B,F,D,H(точка) остальные биты не включается, в чем может быть проблема?(программная или аппаратная ошибка?)

В том, что вы не читаете сообщений. У вас индикатор с общим катодом. Вы понимаете разницу между общим катодом и общим анодом ? Вот это я для кого написал ?
Цитата
Индикаторы есть разные - с общим катодом и с общим анодом (ваша схема рассчитана на общий анод).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Cruz21   Подключение 7-сегментного индикатора к msp430g24523   Jun 16 2013, 15:19
|- - Cruz21   Цитата(kovigor @ Jun 17 2013, 01:00) В то...   Jun 17 2013, 05:58
- - fractcon   А не пробовали взять батарейку, резистор и два про...   Jun 16 2013, 17:29
|- - Cruz21   Цитата(fractcon @ Jun 16 2013, 21:29) А н...   Jun 16 2013, 17:40
- - Cruz21   Исправил схему   Jun 17 2013, 08:49
- - Cruz21   Кто может указанные здесь AVRсоком коде, порты пер...   Jun 17 2013, 16:11
|- - haker_fox   QUOTE (Cruz21 @ Jun 18 2013, 01:11) Кто м...   Jun 18 2013, 12:12
- - rezident   Цитата(Cruz21 @ Jun 17 2013, 13:49) Испра...   Jun 18 2013, 19:42
|- - Cruz21   Цитата(rezident @ Jun 18 2013, 23:42) Пло...   Jun 18 2013, 19:52
|- - rezident   Цитата(Cruz21 @ Jun 19 2013, 00:52) Я пер...   Jun 18 2013, 19:58
|- - Cruz21   Цитата(rezident @ Jun 18 2013, 23:58) Я ж...   Jun 18 2013, 20:06
- - Cruz21   Наконец то собрал схему правильно, программно тоже...   Jun 19 2013, 18:43
|- - kovigor   Цитата(Cruz21 @ Jun 19 2013, 21:43) Након...   Jun 19 2013, 19:58
- - Cruz21   Код#include <msp430g2452.h> #define IND1...   Jun 23 2013, 12:29
- - rezident   Рискну предложить свой "перелопаченный" ...   Jun 23 2013, 18:32
- - ARV   почитайте вот эту статью о динамической индикации ...   Jun 25 2013, 08:01


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 02:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01474 секунд с 7
ELECTRONIX ©2004-2016