TEMPO 0 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба Всем доброго вечера! Подскажите, пожалуйста, как включить все сегменты по очереди на 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); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба Write_Bit_8(0xFF); // первый Write_Bit_8(0xFF); // второй Write_Bit_8(0xFF); // третий PORTD |= (1 << LE); // LE High PORTD &= ~(1 << LE); // LE Low А так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TEMPO 0 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба adnega, тоже самое, только точки мигают ((( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба Попробуйте OE не включать, т.е. OE должен быть в 0 всегда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TEMPO 0 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба adnega, сделал OE в 0, теперь точки просто горят Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба Должны гореть все сегменты. Это так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TEMPO 0 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба Нет, только точки горят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба Тогда схему в студию! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TEMPO 0 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба Хорошо, завтра тогда срисую схему с платы, но там всё банально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 20 февраля, 2022 Опубликовано 20 февраля, 2022 · Жалоба Питание 5В? И на МК, и на драйверах? Резистор Rext для драйвера какого номинала? Распиновка индикатора и тип Общий Анод правильно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TEMPO 0 20 февраля, 2022 Опубликовано 20 февраля, 2022 (изменено) · Жалоба Да, питание везде 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 Изменено 20 февраля, 2022 пользователем TEMPO Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TEMPO 0 21 февраля, 2022 Опубликовано 21 февраля, 2022 · Жалоба adnega, а вот и схема (начертил, только относящееся к индикаторам) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 22 февраля, 2022 Опубликовано 22 февраля, 2022 · Жалоба А конденсаторы керамические по 100 нФ у каждой микросхемы установлены? На схеме их нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TEMPO 0 22 февраля, 2022 Опубликовано 22 февраля, 2022 · Жалоба adnega, так и знал, что про это спросите))) да, всё есть, поэтому и написал, что схема отражает, что относится к логике работы с индикаторами))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 22 февраля, 2022 Опубликовано 22 февраля, 2022 · Жалоба Все должно работать. А у вас осциллограф или логический анализатор есть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться