Дисплей tm1637 не работает

Дисплей tm1637 не работает

Жирным вsделена функция, написанная с ошибкой (должен быть ScanKey).

Я переделал код под 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

Источник

Читайте также:  Не работает замок зажигания во втором положении
Оцените статью