Jump to content
    

AtTiny2313 + MBI5168 + 7sLED

TEMPO, Вы неправильно управляете Latch Enable, при сдвигах он должен быть =0, а после всех трёх сдвигов однократно единичный импульс. Не после каждого Write_Bit_8(...), а только после последнего.

Output Enable незачем дёргать во время сдвигов, держите его всегда =0. OE можно использовать для гашения всех индикаторов на время, или мигания, или управления яркостью, плавное гашение индикатора(FadeOut), например.

OE на сдвиги никак не влияет, а LE влияет: при LE=0 регистры — 'No Change'

MBI5168_LE.png.78487c6f849c17a8a56ac2d6eea2efd7.png MBI5168_TT.png.aff4c17cbcb05d98ab2813f4bf47b4ca.png

upd: противоречие в даташите, по диаграмме сдвиг при LE=0, по таблице при LE=1. Раз один способ не работает, надо проверить другой.

Share this post


Link to post
Share on other sites

27 минут назад, ae_ сказал:

TEMPO, Вы неправильно управляете Latch Enable, при сдвигах он должен быть =0, а после всех трёх сдвигов однократно единичный импульс. Не после каждого Write_Bit_8(...), а только после последнего.

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

Share this post


Link to post
Share on other sites

adnega, ae_, спасибо за помощь.

Вот так получается надо:

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

А ведь нужна небольшая задержка между LE High и LE Low?

Edited by TEMPO

Share this post


Link to post
Share on other sites

TEMPO, Проверьте схему так:

		PORTD &= ~(1 << OE); // OE Low
		PORTD |=  (1 << LE);  // LE High
		PORTD |=  (1 << DIN);  // DIN High
	
	while(1)
	{
		_delay_ms(250);
		PORTD |=  (1 << CLK);  // CLK High
		_delay_ms(250);
		PORTD &= ~(1 << CLK);  // CLK Low
	}

Должны последовательно загораться сегменты A..DP первого индикатора, затем второго и третьего. В итоге должны гореть все сегменты.

В этом тесте не используется защёлкивание, LE=1 выходы отображают реальные состояния сдвиговых регистров.

Данные не меняются, DIN всегда =1

Выходы всегда включены, /OE =0

Работает только сдвиг с интервалом 0,5 сек. за 12 с заполнятся все 8*3=24 разряда и останутся гореть.

upd: ок, заработало. опоздал с этой проверкой.

Share this post


Link to post
Share on other sites

ae_, спасибо, обязательно попробую, только сегодня железку забыл на работе(((

Share this post


Link to post
Share on other sites

45 минут назад, TEMPO сказал:

adnega, ae_, спасибо за помощь.

Вот так получается надо:

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

А ведь нужна небольшая задержка между LE High и LE Low?

Драйвер может работать на частотах порядка 25 МГц.

AtTiny2313 с ее частотой, да с учетом вашего использования портов в режиме чтение-модификация-запись - импульс LE будет с достаточным запасом.

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...