Например TDA7294

Форум РадиоКот • Просмотр темы - Динамическая индикация на разных портах.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 11:21:09

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 23 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Динамическая индикация на разных портах.
СообщениеДобавлено: Сб май 21, 2016 15:56:00 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
Если разные порты входов-выходов, то единственный выход, отдельные переменные-буферы под входы и выходы.
Пусть у нас будет переменная segmentes (сегменты), com-outputs (общие светодиодов).
Пример под один порт сегментов, один порт общих выходов.
seven_segm_led_ind.h:
Спойлер
Код:
//==================
#ifndef SEVEN_SEGM_LED_IND_H

#define SEVEN_SEGM_LED_IND_H

#include "seven_segm_led_ind.h"
//==================

//==================
#include "main_def_func.h"
//==================

//==================
#define ANODS_PORT         PORTA
#define ANODS_PIN          PINA
#define ANODS_DDR          DDRA

//#define ANODS_2_PORT       PORTA
//#define ANODS_2_PIN        PINA
//#define ANODS_2_DDR        DDRA

#define KATODS_PORT        PORTC
#define KATODS_PIN         PINC
#define KATODS_DDR         DDRC
//==================

//==================
#define ANOD_1             1<<2
#define ANOD_2             1<<3
#define ANOD_3             1<<4
#define ANOD_4             1<<5
#define ANOD_5             1<<6
#define ANOD_6             1<<7
//----------
#define A                  1<<6
#define B                  1<<7 //     A
#define C                  1<<3 //   F   B
#define D                  1<<2 //     G
#define E                  1<<1 //   E   C
#define F                  1<<5 //     D
#define G                  1<<4
#define H                  1<<0
//----------
#define ZERO               (A | B | C | D | E | F)
#define ONE                (B | C)
#define TWO                (A | B | D | E | G)
#define THREE              (A | B | C | D | G)
#define FOUR               (B | C | F | G)
#define FIVE               (A | C | D | F | G)
#define SIX                (A | C | D | E | F | G)
#define SEVEN              (A | B | C)
#define EIGHT              (A | B | C | D | E | F | G)
#define NINE               (A | B | C | D | F | G)
#define SPACE              0

#define CHAR_SPACE         10
//==================

//==================
#define MAX_LED_INDS       6

#define ANODS_MASK         (ANOD_1 | ANOD_2 | ANOD_3 | ANOD_4 | ANOD_5 | ANOD_6)
#define KATODS_MASK        (A | B | C | D | E | F | G)
//==================

//==================
extern u08 dsp_buf [];

void clr_dsp_buf (void);
//==================

//==================
void _print_val_xxx (u08 x, u08 a);
#define print_val_xxx(x, a) _print_val_xxx(((x)-1), (a))
//==================

//==================
typedef struct index_anods
{
   u08 i;
   u08 anod;
} index_anods;
//==================

//==================
void set_proc_7_segm_ind_on (void);
void set_proc_7_segm_ind_off (void);
void proc_7_segm_ind (void);
//==================

//==================
#endif
//==================


seven_segm_led_ind.с:
Спойлер
Код:
//==================
#include "seven_segm_led_ind.h"
//==================

//==================
struct index_anods __flash tab_index_anods [] =
{
   {0x01,   ANOD_2},
   {0x02,   ANOD_3},
   {0x03,   ANOD_4},
   {0x04,   ANOD_5},
   {0x05,   ANOD_6},
   {0x00,   ANOD_1},
};

u08 __flash table_7_segm_char [11] =
{
   ZERO,    ONE,
   TWO,     THREE,
   FOUR,    FIVE,
   SIX,     SEVEN,
   EIGHT,   NINE,
   SPACE,
};
//==================

//==================
soft_timer ST_PROC_7_SEGM_IND;
//----------
u08 dsp_buf [MAX_LED_INDS];
//----------
// Î÷èñòêà áóôåðà äèñïëåÿ.

u08 dsp_buf [MAX_LED_INDS];

void clr_dsp_buf (void)
{
   for (u08 i = 0; i < MAX_LED_INDS; i++)
      dsp_buf [i] = CHAR_SPACE;
}
//==================

//==================
void _print_val_xxx (u08 x, u08 a) // Âûâîä ÷èñëà â ôîðìàòå xx,x.
{
   char *ptr = num_str_buf + 7;
 
   char_to_str (a);

   dsp_buf[x] = *ptr; // Âûâîä ñîòåí.
   dsp_buf[x++];
   ptr++;

   dsp_buf[x] = *ptr;
   dsp_buf[x++];
   ptr++;

   dsp_buf[x] = *ptr; // Âûâîä åäèíèö.
}
//==================

//==================
static u08 _proc_7_segm_ind;

void set_proc_7_segm_ind_on (void)
{
   _proc_7_segm_ind = 1;
}

void set_proc_7_segm_ind_off (void)
{
   ANODS_DDR = 0;
   ANODS_PORT = 0;
   KATODS_DDR = 0;

   _proc_7_segm_ind = 0;
}

void proc_7_segm_ind (void)
{
   static u08 cnt_7_segm_ind;

   switch (_proc_7_segm_ind)
   {
      case 0:
         break;

      case 1:
         ANODS_DDR = 0xFF;
         cnt_7_segm_ind = 0;
         set_soft_timer (ST_PROC_7_SEGM_IND, 1, 1);
         _proc_7_segm_ind = 2;
         break;

      case 2:
         if (handle_soft_timer (ST_PROC_7_SEGM_IND))
         {
            u08 cnt = cnt_7_segm_ind;

            u08 anods;
            u08 katods;

            ANODS_PORT = 0; // В этом месте отключаем светодиоды. Если разные порты,
            KATODS_DDR = 0; // значит будет функция или строки, в которых отключение всех пинов всех портов под светодиоды.

            cnt_7_segm_ind = tab_index_anods [cnt].i;
            anods = tab_index_anods [cnt].anod;

            katods = table_7_segm_char [dsp_buf [cnt_7_segm_ind]];

            ANODS_PORT = anods; // В этом месте будет функция или строки, пример которых ниже.
            KATODS_DDR = katods;
         }
         break;

      default:
         break;
   }
}
//==================


Дальше делаем так:
Спойлер
Код:
void proc_outputs (void)
{
// Вывод сегментов. katods - сегменты. В дальнейшем обзывайте переменные по собственному вкусу.
   if (katods & (1<<0)) // К примеру сегмент A
      set_bit (PORTB, 0)
   else
      clr_bit (PORTB, 0)

   if (katods & (1<<1)) // Сегмент B
      set_bit (PORTD, 0)
   else
      clr_bit (PORTD, 0)

// и так далее, принцип понятен.
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Динамическая индикация на разных портах.
СообщениеДобавлено: Сб май 21, 2016 17:04:39 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
ARV писал(а):
все мои таймеры скоммуниздены практически на каждый радиолюбительский сайт...

О каких таймерах идет речь? Можно ссылки?

P.S. Можно успокоить себя тем, что ваши поделки имеют популярность. Вы знаете, что это ваши проекты, и это самое главное. У меня был когда-то случай. Писал удаленный проект. Подразумевалось, что частнику. Потом я узнал, что этот проект оказался коммерческим, для серийного изделия.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Динамическая индикация на разных портах.
СообщениеДобавлено: Сб май 21, 2016 19:07:47 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
мне абсолютно все равно, что происходит с моими проектами после публикации.
просто задело, что теперь меня называют плагиатором

найдите 10 отличий:
http://radioparty.ru/device-avr/165-dailytimer-atmega8
http://radiokot.ru/circuit/digital/home/25/

кстати, этот же таймер какая-то фирма в Беларуси производит в виде "конструктора" - и тоже без указания авторства. нормальная практика в наше время...

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

Мой уютный бложик... заходите!


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 23 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 52


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y