|
Подключение 7-сегментного индикатора к msp430g24523, программирование |
|
|
|
Jun 16 2013, 15:19
|
Участник

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

|
Добрый день, я собрал небольшую вставочную схему для отладчика LaunchPad на МК msp430g2452(фото прикреплен), где содержатся 7-сегментный, 4хразрядный индикатор. 7 сегментов я вывел на второй порт (Р2), а разряды на первый порт (Р1). Проблема в том что я не могу включить этот индикатор, точнее не знаю какой код прописать. Таблицы образов написал, а как заработал этот индикатор не знаю 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 отключать. Помогите мне написать простенькую программу, хоть простой какой нибудь счетчик, чтоб я понял как взаимодействует простой индикатор без драйверов с МК. Как загнать образы в порта и выводить значения на индикаторе?
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Jun 16 2013, 17:19
|
Участник

Группа: Участник
Сообщений: 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" первой цифры (цифра включена, если база ее транзистора заземлена). Дальше поймете сами ... Как засветить сегмент А? Такой индикатор
|
|
|
|
|
Jun 16 2013, 17:51
|
Гуру
     
Группа: Свой
Сообщений: 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Вашему "китайцу" более соответствует (по распиновке) C C56-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мс устанавливать по-очереди выводы общих анодов/катодов в активное состояние, а на выводы сегментов синхронно с ними выводить число, соответствующее порядковому номеру цифры, используя таблицу преобразования.
|
|
|
|
|
Jun 16 2013, 17:57
|
Участник

Группа: Участник
Сообщений: 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? исходник программы нужен.
|
|
|
|
|
Jun 16 2013, 18:34
|
Участник

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

|
Цитата(rezident @ Jun 16 2013, 22:09)  Ну знаете ли ... вы бы попробовали вначале сами что-то написать. То, что можно будет отрецензировать и указать на недочеты. А писать для вас код (даже простой) в 1-м часу ночи мне уже как-то лениво.  "Дорогу осилит идущий". Успехов! Спасибо за помощь, я понять хочу как работает МК с дисплеем, хочу вывести хоть одну цифру, чтобы понять. Но у меня не получается что то ничего. А сама программа она должна выводить на 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 - Jun 16 2013, 18:38
|
|
|
|
|
Jun 16 2013, 20:24
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(Cruz21 @ Jun 16 2013, 21:34)  Спасибо за помощь, я понять хочу как работает МК с дисплеем Но вы и не поймете, ибо не слушаете, что вам говорят. Напишите пару строк, засвечивающих сегмент первой цифры, без всякой динамической индикации. Это все, что от вас требуется ... Мало того, вы еще и не читаете ответы. SM420364 - собщим катодом (!!!), вам чуть выше человек ссылку для чего дал ?
|
|
|
|
|
Jun 16 2013, 20:53
|
Участник

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

|
Код void main(void) { P2DIR = 0xFF; P2OUT = BIT0+BIT1+BIT2+BIT4+BIT5; } Зажег A,B,F,D,H(точка) остальные биты не включается, в чем может быть проблема?(программная или аппаратная ошибка?)
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|