Jump to content
    

AtTiny2313 + MBI5168 + 7sLED

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

 

Подскажите, пожалуйста, как включить все сегменты по очереди на 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);
}

 

Share this post


Link to post
Share on other sites

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

А так?

Share this post


Link to post
Share on other sites

Попробуйте OE не включать, т.е. OE должен быть в 0 всегда.

Share this post


Link to post
Share on other sites

adnega, сделал OE в 0, теперь точки просто горят

Share this post


Link to post
Share on other sites

Должны гореть все сегменты. Это так?

Share this post


Link to post
Share on other sites

Хорошо, завтра тогда срисую схему с платы, но там всё банально.

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Да, питание везде 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

 

Edited by TEMPO

Share this post


Link to post
Share on other sites

adnega, а вот и схема (начертил, только относящееся к индикаторам)

sch.png

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...