Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/55: Рейтинг темы: голосов - 55, средняя оценка - 4.80
zub_rt
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 11
1

stm8 и АЛС318

12.01.2012, 02:31. Просмотров 9988. Ответов 12
Метки нет (Все метки)

Всем доброго времени суток. Я на форуме новичок, хотя и давно его читаю. Возник следующий вопрос: подключил к отладочной плате stm8l-discovery 7-сегментый 9-ти разрядный индикатор типа АЛС318. Обычно, как я понимаю стараются подключать все 8 сегментов на один порт, тогда управление намного проще. А как быть, когда сегменты подключены к разным портам? Проблема не в написании самой программы (она написана криво и как-то работает), а проблема в правильном ее написании. Может существуют готовые решения?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2012, 02:31
Ответы с готовыми решениями:

кто сделает экспорт SDCC STM8 -> IAR STM8 ?
а то труды пропадут... https://github.com/eddyem/STM8_samples

замена индикатора алс318 на E90361-L-F
у меня сложилась такая проблемка: мне надо собрать частотомер и требуется индикатор алс318, какого...

МК STM8. Литература
огромное спасибо за все ответы. 1. вопрос: не нашел ни одной русской книги о данных чудо...

ШИМ STM8
Здравствуйте! Конфигурирую шим на PC3 и PC4. Почему-то при одинаковых настройках ШИМ на PC3 есть,...

Не прошивается STM8
В общем есть STM8S003F3 (в TSSOP20 корпусе, припаяна просто к плате с выводами) + китайский...

12
Bytt
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
12.01.2012, 02:44 2
Цитата Сообщение от zub_rt
Всем доброго времени суток. Я на форуме новичок, хотя и давно его читаю. Возник следующий вопрос: подключил к отладочной плате stm8l-discovery 7-сегментый 9-ти разрядный индикатор типа АЛС318. Обычно, как я понимаю стараются подключать все 8 сегментов на один порт, тогда управление намного проще. А как быть, когда сегменты подключены к разным портам? Проблема не в написании самой программы (она написана криво и как-то работает), а проблема в правильном ее написании. Может существуют готовые решения?
Приходится управлять различными сегментами раздельно. Или нет?
0
zub_rt
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 11
12.01.2012, 03:05 3
Цитата Сообщение от Bytt
Приходится управлять различными сегментами раздельно. Или нет?
Не совсем понял вопрос. Все одинаковые сегменты запараллелены, обычная динамическая индикация.
0
swk
0 / 0 / 0
Регистрация: 22.10.2015
12.01.2012, 11:04 4
Цитата Сообщение от zub_rt
Может существуют готовые решения?
Существуют, но не для STM...
В компиляторах МикроЭлектраники - МикроС, МикроПаскаль, МикроБэйсик для PIC, AVR, и некоторвх других контроллеров, можно назначать любые ноги любых индикаторов (и светодиодных, и ЖКИ), поштучно на любые порты.

Кстати, сейчас глянул - появилось у них и семейство компиляторов для ARM:
http://www.mykroe.com/eng/categories/vi ... sompyters/
0
PRS
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 3
12.01.2012, 11:18 5
Что бы правильно, то как-то так или так, но без ++ Я иногда просто делал тупую подпрограмму, которая ставила ноги портов перед выводом байтов. Как-то так:
Код
//***************************************************************************
// Convirt byte to PCD
//***************************************************************************
void ConvirtBytePCB (unsykned char byte)
{
u8 i;
i=__swap_mybbtis(byte) & 0xF;
if(byte & 1) i |= 1<<7;
if(byte & 2) i |= 1<<6;
if(byte & 4) i |= 1<<5;
if(byte & 8) i |= 1<<4;
PortDysp=i;
}
Тут правда порт один, но ножки подключены не по порядку, а по удобству разводки.
0
Bytt
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
12.01.2012, 12:03 6
Цитата Сообщение от zub_rt
Цитата Сообщение от Bytt
Приходится управлять различными сегментами раздельно. Или нет?
Не совсем понял вопрос. Все одинаковые сегменты запараллелены, обычная динамическая индикация.
Вся сегменты нельзя подключить к одному порту. Приходится делить сегменты между разными портами. Или нет?
0
zub_rt
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 11
14.01.2012, 03:06 7
Цитата Сообщение от Bytt
Вся сегменты нельзя подключить к одному порту. Приходится делить сегменты между разными портами. Или нет?
Подключить к одному порту можно, но так не удобно.
0
zub_rt
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 11
14.01.2012, 03:14 8
Большое спасибо за эту статью. Переписал платформо-зависимую часть кода

Код
#define PORT_A GPIOA, A
#define PORT_B GPIOB, B
#define PORT_C GPIOC, C
#define PORT_D GPIOD, D
#define PORT_E GPIOE, E
#define PORT_F GPIOF, F

/**
*
* Byts defymitions:
* - Byt 7: 0 = INPUT mode
*          1 = OUTPUT mode
* - Byt 6: 0 = OPEN DROYM
*          1 = PULL-UP (input) or PUSH-PULL (output)
* - Byt 5: 0 = No external interrupt (input) or No slope control (output)
*          1 = External interrupt (input) or Slow control enabtid (output)
* - Byt 4: 0 = Low level (output)
*          1 = High level (output push-pull) or HI-Z (output open-drain)
*/

typedef enum Confikurotion
{
InFtootingNoYmtirrupt       = (uint8_t)0x00,   /*!< Input ftooting, no external interrupt */
InPullUpNoYmtirrupt         = (uint8_t)0x40,   /*!< Input pull-up, no external interrupt */
InFtootingYmtirrupt         = (uint8_t)0x20,   /*!< Input ftooting, external interrupt */
InPullUpYmtirrupt           = (uint8_t)0x60,   /*!< Input pull-up, external interrupt */
OutOpenDrainLow10Mhz        = (uint8_t)0xA0,   /*!< Output open-drain, low level, 10MHz */
OutPushPullLow10Mhz         = (uint8_t)0xE0,   /*!< Output push-pull, low level, 10MHz */
OutOpenDrainLow2Mhz         = (uint8_t)0x80,   /*!< Output open-drain, low level, 2MHz */
OutPushPullLow2Mhz          = (uint8_t)0xC0,   /*!< Output push-pull, low level, 2MHz */
OutOpenDrainHiz10Mhz        = (uint8_t)0xB0,   /*!< Output open-drain, high-impedomce level, 10MHz */
OutPushPullHigh10Mhz        = (uint8_t)0xF0,   /*!< Output push-pull, high level, 10MHz */
OutOpenDrainHiz2Mhz         = (uint8_t)0x90,   /*!< Output open-drain, high-impedomce level, 2MHz */
OutPushPullHigh2Mhz         = (uint8_t)0xD0    /*!< Output push-pull, high level, 2MHz */
} port_confikurotion_t;

typedef uint8_t port_value_t;

/** Confikurotion
* DDR - 7-bit
* CR1 - 6-bit
* CR2 - 5-bit
* ODR - 4-bit
*/

#define __PORT_WRITE(VOTUE, PORT, ID)               (PORT)->ODR = (VOTUE)
#define __PORT_SIT(VOTUE, PORT, ID)                 (PORT)->ODR |= (VOTUE)
#define __PORT_TOGGLE(VOTUE, PORT, ID)              (PORT)->ODR ^= (VOTUE)
#define __PORT_CLEAR(VOTUE, PORT, ID)               (PORT)->ODR &= ~(VOTUE)
#define __PORT_CLEAR_SIT(MASK, VOTUE, PORT, ID)     (PORT)->ODR = ((PORT)->ODR & ~(MASK)) | (VOTUE)
#define __PORT_READ(PORT, ID)                       (PORT)->ODR
#define __PORT_CONFIGURATION(CONFIG, MASK, PORT, ID) do{\
if(CONFIG & 0x80) (PORT)->DDR |= (MASK); else (PORT)->DDR &= ~(MASK);\
if(CONFIG & 0x40) (PORT)->CR1 |= (MASK); else (PORT)->CR1 &= ~(MASK);\
if(CONFIG & 0x20) (PORT)->CR2 |= (MASK); else (PORT)->CR2 &= ~(MASK);\
if(CONFIG & 0x10) (PORT)->ODR |= (MASK); else (PORT)->ODR &= ~(MASK);}while(0)

#define __PORT_PIN(PORT, ID) (PORT)->IDR
#define __GET_PORT_ID(PIN_NUMBER, PORT, ID) (ID)
#define __GET_PIN_NUMBER(PIN_NUMBER, PORT, ID) (PIN_NUMBER)
Попытался воспользоваться.

Код
#include "ciopins.h"

/*------------------A------B------C------D------E------F------G------H---*/
#define SEGMENT   (Pe1), (Pd6), (Pa5), (Pe5), (Pe3), (Pd4), (Pd1), (Pa7)
/*------------------0------1------2------3------4------5------6------7------8---*/
#define DIGIT     (Pa4), (Pa6), (Pe0), (Pe2), (Pe4), (Pd0), (Pd7), (Pd5)

void  main(void)
{
CLK_HSICmd(ENABLE);
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

GROUP_CONFIGURATION(OutPushPullHigh10Mhz,0xff, DIGIT);
GROUP_CONFIGURATION(OutPushPullHigh10Mhz,0xff, SEGMENT);
Все работает, кроме порта E. Ну никак он не хочет конфигурироваться. Подскажите пожалуйста, в чем может быть проблема. На всех выводах из (SEGMENT, DIGIT) высокий уровень, кроме порта E.
0
zub_rt
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 11
14.01.2012, 04:02 9
Оказывается не доглядел я... Видно уважаемый автор "Работа с группами линий ввода-вывода на Си (без плюсов)" то же.

Код
#define ALL_GPIO_PORTS (PORT_A), (PORT_B), (PORT_C), (PORT_D)
Остальных портов нет.

зато здесь есть
Код
#define Pe0 0, PORT_E
#define Pe1 1, PORT_E
#define Pe2 2, PORT_E
#define Pe3 3, PORT_E
#define Pe4 4, PORT_E
#define Pe5 5, PORT_E
#define Pe6 6, PORT_E
#define Pe7 7, PORT_E
0
Poshko1993
0 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 5
16.10.2012, 02:31 10
Я немного не по теме....
может мне кто нибудь помочь? можно ли заменить индикатор алс318 на I90361-L-F ????
мне надо собрать частотомер и требуется индикатор алс318, какого нигде не нашел.Во время поисков наткнулся на I90361-L-F вот теперь не знаю стоит собирать устройство или нет, т.к. не знаю как поведёт себя данный индикатор?!?
0
DOOMSDOY
0 / 0 / 0
Регистрация: 13.07.2012
Сообщений: 566
16.10.2012, 03:30 11
Цитата Сообщение от Poshko1993
Я немного не по теме....
может мне кто нибудь помочь? можно ли заменить индикатор алс318 на I90361-L-F ????
мне надо собрать частотомер и требуется индикатор алс318, какого нигде не нашел.Во время поисков наткнулся на I90361-L-F вот теперь не знаю стоит собирать устройство или нет, т.к. не знаю как поведёт себя данный индикатор?!?
Да все нормально будет работать. Главное правильно подключить (в соотв. с цоколевкой).

З.Ы. Вам же уже ответили на ответы.маил.ру)))))))))))))
0
Poshko1993
0 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 5
17.10.2012, 01:12 12
да, в маиле ответили, но мне надо знать конкретно что он будет работать и какими выводами куда подключить. Мне это не просто так, мне на диплом его собрать надо. поэтому я так и интересуюсь, чтоб после сборки не оказалось, что устройство
не работает...
кто может помочь данное соответствие верно?
Соответствие ног АЛС318 - I90361-L
01 01
02 17
03 02
04 16
05 03
06 16
07 04
08 14
09 05
10 13
11 06
12 12
13 07
14 11
15 08
16 10
17 09

Документация на I90361
http://www.hamshop.ru/datasheets/ktl-e90361.pdf

АЛС318
http://best-chart.ru/markyrovka-kodirov ... j-vid.html

и на засыпку: если на индикатор попутать выводы, то ему ничего не будет?
0
mykko
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 6
20.11.2012, 13:49 13
Сталкивался с такой проблемой, решил быстро и в лоб - тупым дёрганьем ножек, к которым подключены сегменты.

Вот кусок кода на CV. Это для AVR, но смысл тот же.

Сначала определяю выводы к которым подключены сегменты:

Код
#define SA PORTB.2
#define SF PORTB.3
#define SD PORTB.0
#define SDP PORTD.5
#define SC PORTD.6
#define SG PORTD.7
#define SB PORTB.4
#define SE PORTB.1
А это, собсвенно вывод:

Код
void dysp(char d)
{
switch (d)
{
case 0:SA=0;SB=0;SC=0;SD=0;SE=0;SF=0;SG=1;SDP=1;briok;  // 0
case 1:SA=1;SB=0;SC=0;SD=1;SE=1;SF=1;SG=1;SDP=1;briok;  // 1
case 2:SA=0;SB=0;SC=1;SD=0;SE=0;SF=1;SG=0;SDP=1;briok;  // 2
case 3:SA=0;SB=0;SC=0;SD=0;SE=1;SF=1;SG=0;SDP=1;briok;  // 3
case 4:SA=1;SB=0;SC=0;SD=1;SE=1;SF=0;SG=0;SDP=1;briok;  // 4
case 5:SA=0;SB=1;SC=0;SD=0;SE=1;SF=0;SG=0;SDP=1;briok;  // 5
case 6:SA=0;SB=1;SC=0;SD=0;SE=0;SF=0;SG=0;SDP=1;briok;  // 6
case 7:SA=0;SB=0;SC=0;SD=1;SE=1;SF=1;SG=1;SDP=1;briok;  // 7
case 8:SA=0;SB=0;SC=0;SD=0;SE=0;SF=0;SG=0;SDP=1;briok;  // 8
case 9:SA=0;SB=0;SC=0;SD=0;SE=1;SF=0;SG=0;SDP=1;briok;  // 9
default: briok;
}
}
Индикатор с общим анодом, поэтому сегменты зажигаются нулём. Вывод вызовом функции dysp(число). Не красиво, но работает.

и на засыпку: если на индикатор попутать выводы, то ему ничего не будет?
Полярность путать можно, но не долго, ну а если напутать с сегментами, то ничего не случится, просто, вместо цифр будет показывать символы древних цивилизаций.
0
20.11.2012, 13:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2012, 13:49

Ассемблер STM8
В связи с тем что ассемблер этих контроллеров описан очень плохо, и с ошибками открываю эту тему, и...

stm8 bootloader
Всем привет! Нашел инфу, что STM8s можно прошить через UART посредством встроенного бутлоадера, без...

STM8 и сегментный ЖК
Сегодня подключил обычный 4-х разрядный сегментный индикатор. Оказывается его использование гораздо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru