Cruz21 0 16 июня, 2013 Опубликовано 16 июня, 2013 · Жалоба Добрый день, я собрал небольшую вставочную схему для отладчика 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 отключать. Помогите мне написать простенькую программу, хоть простой какой нибудь счетчик, чтоб я понял как взаимодействует простой индикатор без драйверов с МК. Как загнать образы в порта и выводить значения на индикаторе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 16 июня, 2013 Опубликовано 16 июня, 2013 · Жалоба Проблема в том что я не могу включить этот индикатор, точнее не знаю какой код прописать. Индикаторы есть разные - с общим катодом и с общим анодом (ваша схема рассчитана на общий анод). Какой у вас индикатор ? И номиналы резисторов на схеме не указаны. Начать советую с малого - засветите сегмент "A" первой цифры (цифра включена, если база ее транзистора заземлена). Дальше поймете сами ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Cruz21 0 16 июня, 2013 Опубликовано 16 июня, 2013 · Жалоба Индикаторы есть разные - с общим катодом и с общим анодом (ваша схема рассчитана на общий анод). Какой у вас индикатор ? И номиналы резисторов на схеме не указаны. Начать советую с малого - засветите сегмент "A" первой цифры (цифра включена, если база ее транзистора заземлена). Дальше поймете сами ... индикатор SM420364. R3...R11 С2-33-0,25-330 Ом ± 10%-А-В-В, R12...R1 С2-33-0,25-2,2 кОм ± 10%-А-В-В Индикаторы есть разные - с общим катодом и с общим анодом (ваша схема рассчитана на общий анод). Какой у вас индикатор ? И номиналы резисторов на схеме не указаны. Начать советую с малого - засветите сегмент "A" первой цифры (цифра включена, если база ее транзистора заземлена). Дальше поймете сами ... Как засветить сегмент А? Такой индикатор Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fractcon 0 16 июня, 2013 Опубликовано 16 июня, 2013 · Жалоба А не пробовали взять батарейку, резистор и два провода, и руками зажечь этот самый сегмент. А уж потом пытаться его зажечь через плату. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Cruz21 0 16 июня, 2013 Опубликовано 16 июня, 2013 · Жалоба А не пробовали взять батарейку, резистор и два провода, и руками зажечь этот самый сегмент. А уж потом пытаться его зажечь через плату. Пробовал, но через плату не получается Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 16 июня, 2013 Опубликовано 16 июня, 2013 · Жалоба индикатор 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мс устанавливать по-очереди выводы общих анодов/катодов в активное состояние, а на выводы сегментов синхронно с ними выводить число, соответствующее порядковому номеру цифры, используя таблицу преобразования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Cruz21 0 16 июня, 2013 Опубликовано 16 июня, 2013 · Жалоба 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? исходник программы нужен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 16 июня, 2013 Опубликовано 16 июня, 2013 · Жалоба исходник программы нужен. Ну знаете ли ... вы бы попробовали вначале сами что-то написать. То, что можно будет отрецензировать и указать на недочеты. А писать для вас код (даже простой) в 1-м часу ночи мне уже как-то лениво. :laughing: "Дорогу осилит идущий". Успехов! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Cruz21 0 16 июня, 2013 Опубликовано 16 июня, 2013 (изменено) · Жалоба Ну знаете ли ... вы бы попробовали вначале сами что-то написать. То, что можно будет отрецензировать и указать на недочеты. А писать для вас код (даже простой) в 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; } } вот, все что есть :( Изменено 16 июня, 2013 пользователем Cruz21 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 16 июня, 2013 Опубликовано 16 июня, 2013 · Жалоба Спасибо за помощь, я понять хочу как работает МК с дисплеем Но вы и не поймете, ибо не слушаете, что вам говорят. Напишите пару строк, засвечивающих сегмент первой цифры, без всякой динамической индикации. Это все, что от вас требуется ... Мало того, вы еще и не читаете ответы. SM420364 - собщим катодом (!!!), вам чуть выше человек ссылку для чего дал ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Cruz21 0 16 июня, 2013 Опубликовано 16 июня, 2013 · Жалоба void main(void) { P2DIR = 0xFF; P2OUT = BIT0+BIT1+BIT2+BIT4+BIT5; } Зажег A,B,F,D,H(точка) остальные биты не включается, в чем может быть проблема?(программная или аппаратная ошибка?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 16 июня, 2013 Опубликовано 16 июня, 2013 · Жалоба Зажег A,B,F,D,H(точка) остальные биты не включается, в чем может быть проблема?(программная или аппаратная ошибка?) В том, что вы не читаете сообщений. У вас индикатор с общим катодом. Вы понимаете разницу между общим катодом и общим анодом ? Вот это я для кого написал ? Индикаторы есть разные - с общим катодом и с общим анодом (ваша схема рассчитана на общий анод). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Cruz21 0 17 июня, 2013 Опубликовано 17 июня, 2013 (изменено) · Жалоба В том, что вы не читаете сообщений. У вас индикатор с общим катодом. Вы понимаете разницу между общим катодом и общим анодом ? Вот это я для кого написал ? Понял ошибку, сейчас транзисторы для общего катода запаяю Изменено 17 июня, 2013 пользователем Cruz21 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Cruz21 0 17 июня, 2013 Опубликовано 17 июня, 2013 · Жалоба Исправил схему Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Cruz21 0 17 июня, 2013 Опубликовано 17 июня, 2013 (изменено) · Жалоба Кто может указанные здесь 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; } Совсем запутался с портами, как с ними работать :( Изменено 17 июня, 2013 пользователем Cruz21 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться