к1986ве92fi подключение датчика MAX6675_часть1

12+
12+

1 просмотр

день назад

ПожаловатьсяНарушение авторских прав

к1986ве92fi подключение датчика MAX6675_часть1

12+
12+

1 просмотр

день назад

ПожаловатьсяНарушение авторских прав
12+
12+

1 просмотр

день назад

#include "SPI_Prog.h" #define MAX6675_CS PORT_Pin_1 // PB1 #define MAX6675_SCK PORT_Pin_2 // PB2 #define MAX6675_SO PORT_Pin_0 // PB0 void MAX6675_Init(void) { PORT_InitTypeDef port; RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE); // CS как выход PORT_StructInit(&port); port.PORT_Pin = MAX6675_CS | MAX6675_SCK; port.PORT_OE = PORT_OE_OUT; port.PORT_MODE = PORT_MODE_DIGITAL; port.PORT_SPEED = PORT_SPEED_FAST; port.PORT_FUNC = PORT_FUNC_PORT; PORT_Init(MDR_PORTB, &port); PORT_SetBits(MDR_PORTB, MAX6675_CS); // CS = HIGH по умолчанию // SO как вход PORT_StructInit(&port); port.PORT_Pin = MAX6675_SO; port.PORT_OE = PORT_OE_IN; port.PORT_MODE = PORT_MODE_DIGITAL; port.PORT_SPEED = PORT_SPEED_FAST; port.PORT_FUNC = PORT_FUNC_PORT; PORT_Init(MDR_PORTB, &port); } uint16_t MAX6675_ReadRaw(void) { uint16_t data = 0; // CS = LOW PORT_ResetBits(MDR_PORTB, MAX6675_CS); Delay(10); for (int i = 15; i ﹥= 0; i--) { // SCK = LOW PORT_ResetBits(MDR_PORTB, MAX6675_SCK); Delay(10); // Читаем бит (по спаду SCK) if (PORT_ReadInputDataBit(MDR_PORTB, MAX6675_SO)) { data |= (1 ﹤﹤ i); } // SCK = HIGH PORT_SetBits(MDR_PORTB, MAX6675_SCK); Delay(10); } // CS = HIGH PORT_SetBits(MDR_PORTB, MAX6675_CS); return data; } float MAX6675_ReadTemperature(void) { uint16_t raw = MAX6675_ReadRaw(); // Проверка обрыва термопары (бит D2) if (raw & 0x0004) { return -999.0; // Ошибка: обрыв термопары } // Температура: (raw ﹥﹥ 3) * 0.25 return (raw ﹥﹥ 3) * 0.25f; }

, чтобы оставлять комментарии