Перейти к содержанию
    

Всем доброго вечера!

 

Подскажите, пожалуйста, как включить все сегменты по очереди на 3-х 7-сегментных индикаторах?

Тестовая плата на ATTiny2313 + MBI5168 (3шт) + 7sLED (3шт).

MBI5168 включены последовательно.

Набросал тестовый код, но только точки иногда мигают

Как правильно сформировать данные (число), которые нужно посылать в MBI5168?

 

N Segment         PIN         OUT       BIN        HEX

1 D                         #8           3             1000      8

2 C                         #7           2             0100      4

3 B                         #6           1             0010      2

4 A                         #5           0             0001      1

5 E                         #9           4            

6 F                         #10         5            

7 G                        #11         6            

8 DP                      #12         7            

 

#include <avr/io.h>
#include <util/delay.h>

#define DIN PD3
#define CLK PD4
#define LE PD5
#define OE PD6

#define GREEN PB3
#define RED PB4

void Write_Bit_8(int);

int main(void)
{
	
	DDRD |= (1 << DIN); // Port D, P3 = SDI
	DDRD |= (1 << CLK); // Port D, P4 = CLK
	DDRD |= (1 << LE); // Port D, P4 = LE
	DDRD |= (1 << OE); // Port D, P4 = OE
	
	DDRB |= (1 << GREEN); // Port B, P4 = Green
	DDRB |= (1 << RED);   // Port B, P3 = Red
	
	PORTB |=  (1 << RED);  // Green
	
	while(1)
	{
		_delay_ms(250);
		PORTD &= ~(1 << OE); // OE Low
		_delay_ms(10);
		// ---------------------------------
		
		PORTD |=  (1 << LE);  // LE High
		_delay_ms(10);
		// Send Data
		Write_Bit_8(0xFF); // 
		_delay_ms(10);
		PORTD &= ~(1 << LE); // LE Low
		_delay_ms(10);
		
		
		PORTD |=  (1 << LE);  // LE High
		_delay_ms(10);
		// Send Data
		Write_Bit_8(0xFF); // 
		_delay_ms(10);
		PORTD &= ~(1 << LE); // LE Low
		_delay_ms(10);
		
		
		PORTD |=  (1 << LE);  // LE High
		_delay_ms(10);
		// Send Data
		Write_Bit_8(0xFF); // 
		_delay_ms(10);
		PORTD &= ~(1 << LE); // LE Low
		_delay_ms(10);
		
		//  ----------------------------------
		PORTD |=  (1 << OE);	// OE High
		_delay_ms(100);
		
	}
}

void Write_Bit_8(int data)
{
	for (int i = 7; i >= 0; i--)
	{
		PORTD &= ~(1 << CLK);
		if (((data >> i) & 1) == 1)
		{
			PORTD |= (1 << DIN);
		}
		else
		{
			PORTD &= ~(1 << DIN);
		}
		PORTD |=(1 << CLK);
	}

	PORTD &= ~(1 << CLK);
	PORTD |= (1 << DIN);
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

		Write_Bit_8(0xFF); // первый
		Write_Bit_8(0xFF); // второй
		Write_Bit_8(0xFF); // третий
		PORTD |=  (1 << LE);  // LE High
		PORTD &= ~(1 << LE); // LE Low

А так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Питание 5В? И на МК, и на драйверах?

Резистор Rext для драйвера какого номинала?

Распиновка индикатора и тип Общий Анод правильно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, питание везде 5В.

Резистор 1К

Вот при такой комбинации, методом тыка, удалось включить два сегмента:

 

	PORTD |=  (1 << LE);  // LE High
        Write_Bit_8(0x10); // первый
        Write_Bit_8(0x10); // второй
        Write_Bit_8(0x10); // третий
        
        PORTD &= ~(1 << LE); // LE Low
        _delay_ms(100);
        
        PORTD |=  (1 << LE);  // LE High
        
        Write_Bit_8(0x1); // первый
        Write_Bit_8(0x1); // второй
        Write_Bit_8(0x1); // третий

	PORTD &= ~(1 << LE); // LE Low

 

Изменено пользователем TEMPO

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А конденсаторы керамические по 100 нФ у каждой микросхемы установлены? На схеме их нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

adnega, так и знал, что про это спросите))) да, всё есть, поэтому и написал, что схема отражает, что относится к логике работы с индикаторами)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все должно работать. А у вас осциллограф или логический анализатор есть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...