Например TDA7294

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



Текущее время: Сб ноя 18, 2017 09:29:46



Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Динамическая индикация на 74HC597
СообщениеДобавлено: Ср ноя 15, 2017 04:52:41 
Прорезались зубы

Карма: 3
Зарегистрирован: Ср май 03, 2017 04:22:26
Сообщений: 214
Рейтинг сообщения: 0
Запускаю симуляцию в протеусе динамическая индикация отображается "кракозябрами"(раньше дин.индикация всегда отображалась в протеусе корректно).

Вот и закралась мысль ко мне может я чего то не знаю ?(
Может кто подсказать где кроется ошибка?
Схема:

Фулл код



Код Функции динамической индикации:
Код:
//Функция включения сегментов + кодировка.
#define SEG_PORT EightOUT.ByteRegister
#define SEGA 0
#define SEGB 1
#define SEGC 2
#define SEGD 3
#define SEGE 4
#define SEGF 5
#define SEGG 6
#define SEGH 7

#define ANOD1 SevenOUT.Register.DO5
#define ANOD2 SevenOUT.Register.DO6
#define ANOD3 SevenOUT.Register.DO7

static void segchar (unsigned char seg)
{
   switch (seg)
   {
      case 0:
      SEG_PORT=(0<<SEGA)|(0<<SEGB)|(0<<SEGC)|(0<<SEGD)|(0<<SEGE)|(0<<SEGF)|(1<<SEGG)|(1<<SEGH);break;
      case 1:
      SEG_PORT=(1<<SEGA)|(0<<SEGB)|(0<<SEGC)|(1<<SEGD)|(1<<SEGE)|(1<<SEGF)|(1<<SEGG)|(1<<SEGH);break;
      case 2:
      SEG_PORT=(0<<SEGA)|(0<<SEGB)|(1<<SEGC)|(0<<SEGD)|(0<<SEGE)|(1<<SEGF)|(0<<SEGG)|(1<<SEGH);break;
      case 3:
      SEG_PORT=(0<<SEGA)|(0<<SEGB)|(0<<SEGC)|(0<<SEGD)|(1<<SEGE)|(1<<SEGF)|(0<<SEGG)|(1<<SEGH);break;
      case 4:
      SEG_PORT=(1<<SEGA)|(0<<SEGB)|(0<<SEGC)|(1<<SEGD)|(1<<SEGE)|(0<<SEGF)|(0<<SEGG)|(1<<SEGH);break;
      case 5:
      SEG_PORT=(0<<SEGA)|(1<<SEGB)|(0<<SEGC)|(0<<SEGD)|(1<<SEGE)|(0<<SEGF)|(0<<SEGG)|(1<<SEGH);break;
      case 6:
      SEG_PORT=(0<<SEGA)|(1<<SEGB)|(0<<SEGC)|(0<<SEGD)|(0<<SEGE)|(0<<SEGF)|(0<<SEGG)|(1<<SEGH);break;
      case 7:
      SEG_PORT=(0<<SEGA)|(0<<SEGB)|(0<<SEGC)|(1<<SEGD)|(1<<SEGE)|(1<<SEGF)|(1<<SEGG)|(1<<SEGH);break;
      case 8:
      SEG_PORT=(0<<SEGA)|(0<<SEGB)|(0<<SEGC)|(0<<SEGD)|(0<<SEGE)|(0<<SEGF)|(0<<SEGG)|(1<<SEGH);break;
      case 9:
      SEG_PORT=(0<<SEGA)|(0<<SEGB)|(0<<SEGC)|(0<<SEGD)|(1<<SEGE)|(0<<SEGF)|(0<<SEGG)|(1<<SEGH);break;
      case 99: //OFF Все сегменты
      SEG_PORT=(1<<SEGA)|(1<<SEGB)|(1<<SEGC)|(1<<SEGD)|(1<<SEGE)|(1<<SEGF)|(1<<SEGG)|(1<<SEGH);break;
   }
}
volatile uint8_t data1=0;
volatile uint8_t data2=0;
volatile uint8_t AnodCount=0;

void WriteSegNumber(uint8_t Seg3,uint8_t NeberChar)
{
   data1=NeberChar%10;
   data2=NeberChar/10;
   AnodCount++;
   switch (AnodCount)
   {
      case 1:   
      segchar(data1);
      ANOD2=1;
      ANOD3=1;
      ANOD1=0;break;
      case 2:
      segchar(data2);
      ANOD1=1;
      ANOD3=1;
      ANOD2=0;break;
      case 3:
      segchar(Seg3);
      ANOD1=1;
      ANOD2=1;
      ANOD3=0;
      AnodCount = 0;break;
   }
}

_________________
ICQ - 721612848
andrei23061996@gmail.com
................................................................................................................................


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Динамическая индикация на 74HC597
СообщениеДобавлено: Ср ноя 15, 2017 08:22:10 
Первый раз сказал Мяу!

Зарегистрирован: Вс дек 25, 2016 09:34:54
Сообщений: 35
Рейтинг сообщения: 0
У вас
Код:
SEG_PORT=(1<<SEGA)|(0<<SEGB)|(0<<SEGC)|(1<<SEGD)|(1<<SEGE)|(1<<SEGF)|(1<<SEGG)|(1<<SEGH);break;

К примеру SEGG- это 1(первый) бит, а в схеме R8ANOD G подключен на 6 бит ---- это правильно?


Вернуться наверх
 Профиль  
 
JLCPCB Prototype, $2 за 10 печатных плат (2 слоя, 100×100мм).

Крупнейший производитель печатных плат в Китае, 290,000+ заказчиков, 8,000+ он-лайн заказов в день.

Узнать цену прямо сейчас!

LCSC Parts: Экономия до 50%, большой выбор компонентов в наличии, отправка заказа в день оплаты.

Не в сети
 Заголовок сообщения: Re: Динамическая индикация на 74HC597
СообщениеДобавлено: Ср ноя 15, 2017 08:48:35 
Прорезались зубы

Карма: 3
Зарегистрирован: Ср май 03, 2017 04:22:26
Сообщений: 214
Рейтинг сообщения: 0
Это пологаю что это правильно т.к SEGG находиться в структуре :: EightOUT.ByteRegister
Код:
struct UnionBits
{
   unsigned DO0: 1;
   unsigned DO1: 1;
   unsigned DO2: 1;
   unsigned DO3: 1;
   unsigned DO4: 1;
   unsigned DO5: 1;
   unsigned DO6: 1;
   unsigned DO7: 1;
};

union Byte {
   uint8_t ByteRegister;
   struct UnionBits Register;
};
union Byte EightOUT;



и при передачи (1<<SEGG), т.е мы установим 1 в EightOUT.Register.DO6 , а это битовое поле как раз и отвечает за Q6 в регистре "R8ANOD".

Добавлено after 6 minutes 34 seconds:
Такая если конечно можно выразиться "инверсия" происходит из-за SPI и принципа работы сдвиговых регистров.
Код:
uint8_t SPI_UpdataByte(uint8_t data)
{
   uint8_t report;
   SPDR = data;
   while(!(SPSR & (1<<SPIF)));
   report = SPDR;
   return report;
}
void SpiOutRegister()
{
   SPI_PORT &= ~(1<<SPI_SS);
   OneIN.ByteRegister=SPI_UpdataByte(EightOUT.ByteRegister);
   TwoIN.ByteRegister=SPI_UpdataByte(SevenOUT.ByteRegister);
   ThreeIN.ByteRegister=SPI_UpdataByte(SixOUT.ByteRegister);
   FourIN.ByteRegister=SPI_UpdataByte(FifthOUT.ByteRegister);
   FifthIN.ByteRegister=SPI_UpdataByte(FourOUT.ByteRegister);
   SixIN.ByteRegister=SPI_UpdataByte(ThreeOUT.ByteRegister);
   SevenIN.ByteRegister=SPI_UpdataByte(TwoOUT.ByteRegister);
   EightIN.ByteRegister=SPI_UpdataByte(OneOUT.ByteRegister);
   SPI_PORT |= (1<<SPI_SS);
}

_________________
ICQ - 721612848
andrei23061996@gmail.com
................................................................................................................................


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: Динамическая индикация на 74HC597
СообщениеДобавлено: Ср ноя 15, 2017 16:57:52 
Первый раз сказал Мяу!

Зарегистрирован: Вс дек 25, 2016 09:34:54
Сообщений: 35
Рейтинг сообщения: 1
Все таки я ее заставил работать, видос


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: Динамическая индикация на 74HC597
СообщениеДобавлено: Чт ноя 16, 2017 05:24:36 
Прорезались зубы

Карма: 3
Зарегистрирован: Ср май 03, 2017 04:22:26
Сообщений: 214
Рейтинг сообщения: 0
Dimon456, Поздравляю ) а исходником не поделитесь ?)

Добавлено after 35 minutes 34 seconds:
Видос как она ̶Р̶а̶б̶о̶т̶а̶е̶т̶ не работает у меня (

_________________
ICQ - 721612848
andrei23061996@gmail.com
................................................................................................................................


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Динамическая индикация на 74HC597
СообщениеДобавлено: Чт ноя 16, 2017 16:55:13 
Первый раз сказал Мяу!

Зарегистрирован: Вс дек 25, 2016 09:34:54
Сообщений: 35
Рейтинг сообщения: 0
Исходник я не менял, он ваш полностью и всецело.

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


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Динамическая индикация на 74HC597
СообщениеДобавлено: Пт ноя 17, 2017 03:46:43 
Прорезались зубы

Карма: 3
Зарегистрирован: Ср май 03, 2017 04:22:26
Сообщений: 214
Рейтинг сообщения: 0
я тогда предполагаю что это настройки пртеуса. System->Set display options и System->Animation Options.

_________________
ICQ - 721612848
andrei23061996@gmail.com
................................................................................................................................


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Динамическая индикация на 74HC597
СообщениеДобавлено: Пт ноя 17, 2017 09:58:49 
Первый раз сказал Мяу!

Зарегистрирован: Вс дек 25, 2016 09:34:54
Сообщений: 35
Рейтинг сообщения: 0
Я же написал, странно, ну да ладно.

Нет, неверно, но если ваш компутер переваривает 100 кадр/сек, можете поставить. Я туда не лазил.

Просто отсоедините вывод OE микрух R3R и R8ANOD от общей схемы, что бы они в воздухе оказались, соедините их между собой, подсоедините это соединение OE через инвертор к точке соединения выводов ST_CP микрух R3R и R8ANOD.

Если не понятно вот схема
Еще раз говорю, исходный код тот же, ни чего не надо там менять, это только для отладки в протеусе, в реальной схеме будет работать и без этого.
Это только для вашего кода, вы неверно формируете импульс ST_CP для 74HC595, хотя этот импульс может быть верен для 74HC165 (не разбирался с ней, не знаю). Это только для протеуса. Инвертор формирует правильный импульс для вывода OE. Не зацикливайтесь на этом.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 



Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

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


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