Дисплей tm1637 не работает Жирным вsделена функция, написанная с ошибкой (должен быть ScanK ey).
Я переделал код под STM32:
volatile uint16_t Test_1 = 0;
unsigned char keydate = 0;
/// ==================== void I2CStart (void) // 1637 start < CLK_HIGH; SDA_HIGH; delay_us (2); SDA_LOW; > // ========= void I2Cask (void) // 1637 Answer < CLK_LOW; SDA_INPUT;/////////////////// delay_us (5); // After the falling edge of the eighth clock delay 5us, ACK signals the beginning of judgment while (SDA_STATE); SDA_OUTPUT;/////////////////// CLK_HIGH; delay_us (2); CLK_LOW; > // ==== void I2CStop (void) // 1637 Stop < CLK_LOW; delay_us (2); SDA_LOW; delay_us (2); CLK_HIGH; delay_us (2); SDA_HIGH; > // ===== void I2CWrByte (unsigned char oneByte) // write a byte < unsigned char i; for (i = 0; i > 1; CLK_HIGH; delay_us (3); > > // ———- — unsigned char ScanKey (void) // read buttons < unsigned char rekey,i; //rkey, was not used I2CStart (); I2CWrByte (0x42); // read command buttons I2Cask (); SDA_HIGH; // read keys before data lines pulled for (i = 0; i > 1; delay_us(30); CLK_HIGH; SDA_INPUT;/////////////////// delay_us(30); /////////////// if(SDA_STATE)///////////////////////////////////////////////////////////////////////Зависает ТУТ. < rekey=rekey|0x80; > else < rekey=rekey|0x00; > SDA_OUTPUT;/////////////////// delay_us(30); > I2Cask(); I2CStop(); return (rekey); > void SmgDisplay(void) // Write display register < unsigned char i; I2CStart(); I2CWrByte(0x40); //40H address is automatically incremented by 1 mode, 44H fixed address mode I2Cask(); I2CStop(); I2CStart(); I2CWrByte(0xc0); // Set the first address I2Cask(); for(i=0;i CFGR &=
RCC_CFGR_SW; //Очистка битов выбора источника тактового сигнала RCC->CR &=
RCC_CR_PLLON; //Отключаем генератор PLL RCC->CR &=
RCC_CR_HSEON; while((RCC->CR & RCC_CR_HSERDY)!=0) <>
RCC->CR |= RCC_CR_HSION; //Включить генератор HSI while((RCC->CR & RCC_CR_HSIRDY)==0) <> RCC->CFGR &=
RCC_CFGR_SW; //Выбрать источником тактового сигнала HSI while((RCC->CFGR & RCC_CFGR_SWS)!=0) <> // !=0 — HSI; !=4 — HSE; !=8 — PLL;
RCC_CFGR_PPRE1; while((RCC->CFGR & RCC_CFGR_PPRE1)!=0)<> // !=0 — Not devided; !=1024 — Dev=2; !=1280 — Dev=4; !=1536 — Dev=8; !=1792 — Dev=16;
init();// Initialization SmgDisplay(); // Write register and open display
while(1) < keydate = ScanKey(); // Read key value, the key value is not read out for treatment. > >
BSRR |= GPIO_BSRR_BS6) #define CLK_LOW (GPIOB->BSRR |= GPIO_BSRR_BR6) #define SDA_HIGH (GPIOB->BSRR |= GPIO_BSRR_BS7) #define SDA_LOW (GPIOB->BSRR |= GPIO_BSRR_BR7)
#define CLK_INPUT GPIOB->CRL &=
(GPIO_CRL_MODE6 | GPIO_CRL_CNF6); GPIOB->CRL |= (GPIO_CRL_CNF6_0) #define CLK_OUTPUT GPIOB->CRL &=
(GPIO_CRL_MODE6 | GPIO_CRL_CNF6); GPIOB->CRL |= (GPIO_CRL_MODE6_0 | GPIO_CRL_CNF6_0) #define SDA_INPUT GPIOB->CRL &=
(GPIO_CRL_MODE7 | GPIO_CRL_CNF7); GPIOB->CRL |= (GPIO_CRL_CNF7_0) #define SDA_OUTPUT GPIOB->CRL &=
(GPIO_CRL_MODE7 | GPIO_CRL_CNF7); GPIOB->CRL |= (GPIO_CRL_MODE7_0 | GPIO_CRL_CNF7_0)
#define CLK_STATE (GPIOB->IDR & GPIO_IDR_IDR6) #define SDA_STATE (GPIOB->IDR & GPIO_IDR_IDR7)
Вроде все правильно сделал, но код зависает в ожидании второго ACK.
Может кто-то делал подобное? Наверное есть какая-то особенность при запуске, про которую я не знаю.
isx Поставщик валерьянки для Кота
Карма: 11 Рейтинг сообщений: 26 Зарегистрирован: Вс июн 26, 2011 20:03:21Сообщений: 2305 Рейтинг сообщения: 0
Реклама JLCPCB, всего $2 за прототип печатной платы! Цвет — любой!
Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/cwc
Пока_без_кота Карма: 1 Рейтинг сообщений: 13 Зарегистрирован: Чт авг 08, 2013 01:06:54Сообщений: 340 Рейтинг сообщения: 1
>= 1) < TM1637_CLK_LOW(); _delay_us(TM1637_DELAY_US);
TM1637_CLK_LOW(); TM1637_DIO_INPUT(); TM1637_DIO_HIGH(); _delay_us(TM1637_DELAY_US); ack = TM1637_DIO_READ();
if (ack) < TM1637_DIO_OUTPUT(); TM1637_DIO_LOW(); >
_delay_us(TM1637_DELAY_US); TM1637_CLK_HIGH(); _delay_us(TM1637_DELAY_US); TM1637_CLK_LOW(); _delay_us(TM1637_DELAY_US); TM1637_DIO_OUTPUT(); return ack; >
Реклама Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет
BOB51 Карма: 88 Рейтинг сообщений: 1085 Зарегистрирован: Вт мар 16, 2010 22:02:27Сообщений: 12351Откуда: ДОНЕЦК (ЮГО-ВОСТОК ua/DPR) Рейтинг сообщения: 0
Последний раз редактировалось BOB51 Пт май 25, 2018 10:54:12, всего редактировалось 1 раз.
Реклама Компэл 28 октября приглашает всех желающих принять участие в вебинаре, где будет рассмотрена новая и перспективная продукция компании Traco. Мы подробно рассмотрим сильные стороны и преимущества продукции Traco, а также коснемся практических вопросов, связанных с измерением уровня шумов, промывкой изделий после пайки и отдельно разберем, как отличить поддельный ИП Traco от оригинала.
musor Карма: 116 Рейтинг сообщений: 7229 Зарегистрирован: Сб сен 13, 2014 16:27:32Сообщений: 32529Откуда: СпиртоГонск созвездия Омега Рейтинг сообщения: 0
_________________ Мудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет. и МЧС опаздает и таки теперь Дураки и Толерасты умирают по пятницам!
Реклама Замена традиционных реле и предохранителей в автомобильных системах распределения питания и управления нагрузками, а также в промышленных системах электропитания постоянного тока на интеллектуальные силовые ключи – массово идущий процесс. Ведущую роль в нем играют силовые ключи PROFET производства Infineon. Специалисты компании отвечают на основные вопросы, возникающие при этом у разработчиков.
BOB51 Карма: 88 Рейтинг сообщений: 1085 Зарегистрирован: Вт мар 16, 2010 22:02:27Сообщений: 12351Откуда: ДОНЕЦК (ЮГО-ВОСТОК ua/DPR) Рейтинг сообщения: 0
isx Поставщик валерьянки для Кота
Карма: 11 Рейтинг сообщений: 26 Зарегистрирован: Вс июн 26, 2011 20:03:21Сообщений: 2305 Рейтинг сообщения: 0
Пока_без_кота Карма: 1 Рейтинг сообщений: 13 Зарегистрирован: Чт авг 08, 2013 01:06:54Сообщений: 340 Рейтинг сообщения: 0
BOB51 Карма: 88 Рейтинг сообщений: 1085 Зарегистрирован: Вт мар 16, 2010 22:02:27Сообщений: 12351Откуда: ДОНЕЦК (ЮГО-ВОСТОК ua/DPR) Рейтинг сообщения: 0
isx Поставщик валерьянки для Кота
Карма: 11 Рейтинг сообщений: 26 Зарегистрирован: Вс июн 26, 2011 20:03:21Сообщений: 2305 Рейтинг сообщения: 0
Завелось таки. Основная проблема оказалась задержках. Нужно было увеличить их в 10 РАЗ. Скорее всего это связано с атомарным управлением пинами в STM32. Позже выложу готовый код. Щас надо в порядок его привести.
Есть еще вопрос. У меня есть такой код:
BSRR |= GPIO_BSRR_BS0) #define CLK_LOW (GPIOB->BSRR |= GPIO_BSRR_BR0) #define SDA_HIGH (GPIOB->BSRR |= GPIO_BSRR_BS1) #define SDA_LOW (GPIOB->BSRR |= GPIO_BSRR_BR1)
#define CLK_INPUT GPIOB->CRL &=
(GPIO_CRL_MODE0 | GPIO_CRL_CNF0); GPIOB->CRL |= (GPIO_CRL_CNF0_0) #define CLK_OUTPUT GPIOB->CRL &=
(GPIO_CRL_MODE0 | GPIO_CRL_CNF0); GPIOB->CRL |= (GPIO_CRL_MODE0_0 | GPIO_CRL_CNF0_0) #define SDA_INPUT GPIOB->CRL &=
(GPIO_CRL_MODE1 | GPIO_CRL_CNF1); GPIOB->CRL |= (GPIO_CRL_CNF1_0) #define SDA_OUTPUT GPIOB->CRL &=
(GPIO_CRL_MODE1 | GPIO_CRL_CNF1); GPIOB->CRL |= (GPIO_CRL_MODE1_0 | GPIO_CRL_CNF1_0)
#define CLK_STATE (GPIOB->IDR & GPIO_IDR_IDR0) #define SDA_STATE (GPIOB->IDR & GPIO_IDR_IDR1)
Как можно сделать настройку с помощью функции типа: pinsSet(GPIOB, 0, 1); ? Подозреваю, что это должно как-то быть связано с энумерацией, но пока не соображу чет.
BOB51 Карма: 88 Рейтинг сообщений: 1085 Зарегистрирован: Вт мар 16, 2010 22:02:27Сообщений: 12351Откуда: ДОНЕЦК (ЮГО-ВОСТОК ua/DPR) Рейтинг сообщения: 0
simq Зарегистрирован: Пт фев 06, 2015 07:13:23Сообщений: 29 Рейтинг сообщения: 0
Страница 1 из 1 [ Сообщений: 12 ]
Часовой пояс: UTC + 3 часа
Кто сейчас на форуме Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Источник
По умолчанию в телевизоре могут стоять задачи, которые
Для того, чтобы улучшить качество изображения и звука
Не у каждого человека в доме есть паяльник.
Не получится просматривать цифровое кабельное телевидение