Перейти к содержанию
    

Подключение 7-сегментного индикатора к msp430g24523

Добрый день, я собрал небольшую вставочную схему для отладчика LaunchPad на МК msp430g2452(фото прикреплен), где содержатся 7-сегментный, 4хразрядный индикатор. 7 сегментов я вывел на второй порт (Р2), а разряды на первый порт (Р1). Проблема в том что я не могу включить этот индикатор, точнее не знаю какой код прописать. Таблицы образов написал, а как заработал этот индикатор не знаю :wacko:

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 отключать. Помогите мне написать простенькую программу, хоть простой какой нибудь счетчик, чтоб я понял как взаимодействует простой индикатор без драйверов с МК. Как загнать образы в порта и выводить значения на индикаторе?

post-75313-1371395145_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема в том что я не могу включить этот индикатор, точнее не знаю какой код прописать.

Индикаторы есть разные - с общим катодом и с общим анодом (ваша схема рассчитана на общий анод). Какой у вас индикатор ? И номиналы резисторов на схеме не указаны.

Начать советую с малого - засветите сегмент "A" первой цифры (цифра включена, если база ее транзистора заземлена). Дальше поймете сами ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Индикаторы есть разные - с общим катодом и с общим анодом (ваша схема рассчитана на общий анод). Какой у вас индикатор ? И номиналы резисторов на схеме не указаны.

Начать советую с малого - засветите сегмент "A" первой цифры (цифра включена, если база ее транзистора заземлена). Дальше поймете сами ...

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

 

Индикаторы есть разные - с общим катодом и с общим анодом (ваша схема рассчитана на общий анод). Какой у вас индикатор ? И номиналы резисторов на схеме не указаны.

Начать советую с малого - засветите сегмент "A" первой цифры (цифра включена, если база ее транзистора заземлена). Дальше поймете сами ...

Как засветить сегмент А?

Такой индикатор led4dig_0r56_36_1.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А не пробовали взять батарейку, резистор и два провода, и руками зажечь этот самый сегмент. А уж потом пытаться его зажечь через плату.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А не пробовали взять батарейку, резистор и два провода, и руками зажечь этот самый сегмент. А уж потом пытаться его зажечь через плату.

Пробовал, но через плату не получается

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

индикатор SM420364.

http://www.yxztdz.com/EnProductShow.asp?ID=240

Как засветить сегмент А?

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

Такой индикатор

На фото изображен аналогичный, но другой по распиновке индикатор - 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мс устанавливать по-очереди выводы общих анодов/катодов в активное состояние, а на выводы сегментов синхронно с ними выводить число, соответствующее порядковому номеру цифры, используя таблицу преобразования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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?

исходник программы нужен.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

исходник программы нужен.

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Спасибо за помощь, я понять хочу как работает МК с дисплеем, хочу вывести хоть одну цифру, чтобы понять. Но у меня не получается что то ничего. А сама программа она должна выводить на 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;
  }
}

 

вот, все что есть :(

Изменено пользователем Cruz21

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за помощь, я понять хочу как работает МК с дисплеем

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

 

Мало того, вы еще и не читаете ответы. SM420364 - собщим катодом (!!!), вам чуть выше человек ссылку для чего дал ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Зажег A,B,F,D,H(точка) остальные биты не включается, в чем может быть проблема?(программная или аппаратная ошибка?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зажег A,B,F,D,H(точка) остальные биты не включается, в чем может быть проблема?(программная или аппаратная ошибка?)

В том, что вы не читаете сообщений. У вас индикатор с общим катодом. Вы понимаете разницу между общим катодом и общим анодом ? Вот это я для кого написал ?

Индикаторы есть разные - с общим катодом и с общим анодом (ваша схема рассчитана на общий анод).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В том, что вы не читаете сообщений. У вас индикатор с общим катодом. Вы понимаете разницу между общим катодом и общим анодом ? Вот это я для кого написал ?

Понял ошибку, сейчас транзисторы для общего катода запаяю

Изменено пользователем Cruz21

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто может указанные здесь AVRсоком коде, порты переименовать на наш msp430cкий

#include <ioavr.h>
#include <intrinsics.h>

unsigned char number[] = 
{
  0x3f, //0
  0x06, //1
  0x5b, //2
  0x4f, //3   
  0x66, //4
  0x6d, //5 
  0x7d, //6
  0x07, //7   
  0x7f, //8
  0x6f  //9    
};

unsigned char count = 0;

//числа для вывода на индикатор
unsigned char data1 = 2;
unsigned char data2 = 5;

int main( void )
{
  //порт, к которому подкл. сегменты
  PORTB = 0xff;
  DDRB = 0xff;
  
  //порт, к которому подкл. катод
  PORTD = 0;
  DDRD = (1<<1)|(1<<0); 
  
  while(1){

    //гасим оба разряда
    PORTD &= ~((1<<1)| (1<<0));

    //выводим в порт код цифры
    //и зажигаем следующий разряд
    if (count == 0) {
      PORTB = number[data2];
      PORTD |= (1<<1);
    }
    if (count == 1) {
      PORTB = number[data1];
      PORTD |= (1<<0);
    }
    
    count++;
    if (count == 2) count = 0;

    //частота смены разрядов будет 100 Гц при кварце 8МГц
    __delay_cycles(800000);    
  }  
  return 0;
}

Совсем запутался с портами, как с ними работать :(

Изменено пользователем Cruz21

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...