Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

STM32 Не получается настроить термометр ds1621

Непрочитано 19.04.2013, 09:58  
sanstan
Прописка
 
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
sanstan на пути к лучшему
По умолчанию STM32 Не получается настроить термометр ds1621

Здравствуйте,
На МК STM32 Не получается настроить термометр ds1621. Дисплей показывает 0.00. Подскажите, что не так:

Код:
void delay(int time) {
	volatile uint32_t tmpvar;
	for (tmpvar=24000*time;tmpvar!=0;tmpvar--);	
}
int main(void){
	GPIO_InitTypeDef GPIO_InitStructure;
	SPI_InitTypeDef SPI_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_8 | GPIO_Pin_9);
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin=(GPIO_Pin_4 | GPIO_Pin_6 );
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	GPIO_InitStructure.GPIO_Pin=(GPIO_Pin_5 | GPIO_Pin_7 );
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING  ;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	//Заполняем структуру с параметрами SPI модуля
	SPI_InitStructure.SPI_Direction=SPI_Direction_2Lin  es_FullDuplex;//полный дуплекс
	SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;// передаем по 8 бит
	SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;// Полярность и
	SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;// фаза тактового сигнала
	SPI_InitStructure.SPI_NSS=SPI_NSS_Hard;// Управлять состоянием сигнала NSS аппаратно
	SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRa  tePrescaler_32;// Предделитель SCK
	SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;// Первым отправляется старший бит
	SPI_InitStructure.SPI_Mode=SPI_Mode_Master;	//Режим - мастер
	SPI_Init(SPI1,&SPI_InitStructure); ///Настраиваем SPI1
	SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_RXNE | SPI_I2S_IT_TXE,ENABLE);	//Включаем прерывание по приему байта
	SPI_Cmd(SPI1,ENABLE);	// Включаем модуль SPI1....

	SPI_I2S_SendData(SPI1, 0xA8);	//инициализация термометра
	delay(5);	//задержка 5мс
	SPI_I2S_SendData(SPI1, 0xEE);	//старт преобразований термометра
	delay(5);	//задержка 5мс

	float temperature;

	
	lcd_init(); //Инициализируем дисплей

	char buf[18]; // все равно максимальная точность на Intel платформе 17 знаков

	lcd_set_state(LCD_ENABLE, CURSOR_ENABLE, BLINK); //Включаем курсор и мигалку
	float h;
	int fDisplay=1;
	while (1) {
		fDisplay++;

		if (fDisplay › 100000) {
			SPI_I2S_SendData(SPI1, 0x90); ////Адрес микросхемы
			SPI_I2S_SendData(SPI1, 0xAA); //команда - прочитать температуру
			temperature=SPI_I2S_ReceiveData (SPI1);
			//temperature=temperature*0x0100 + SPI_I2S_ReceiveData (SPI1);	//2 байта
			h =(float) temperature;
			fDisplay = 0;
			sprintf(buf,"temper %5.2f", h);
			lcd_set_xy(0, 0);
			lcd_out(buf);
		}
	}
Реклама:
sanstan вне форума  
Непрочитано 19.04.2013, 10:06  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: STM32 Не получается настроить термометр ds1621

Могу только помочь настройками SPI.
Код:
void init_GPIO(SPI_TypeDef* SPIx)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	if (SPIx==SPI1)
	{
		GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPI  O_Pin_7;		 //alternative func for SPI
		GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
		GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
		GPIO_Init(GPIOA, &GPIO_InitStruct);	
	}
	if (SPIx==SPI2)
	{
		GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|G  PIO_Pin_15;	 //alternative func for SPI
		GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
		GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
		GPIO_Init(GPIOB, &GPIO_InitStruct);
	}
}
Код:
void init_SPI	(SPI_TypeDef* SPIx)
{
	SPI_InitTypeDef SPI_InitStruct;
	SPI_InitStruct.SPI_Direction=SPI_Direction_2Lines_  FullDuplex;
	SPI_InitStruct.SPI_Mode=SPI_Mode_Master;
	SPI_InitStruct.SPI_DataSize=SPI_DataSize_8b;
	SPI_InitStruct.SPI_CPOL=SPI_CPOL_Low;
	SPI_InitStruct.SPI_CPHA=SPI_CPHA_1Edge;
	SPI_InitStruct.SPI_NSS=SPI_NSS_Soft;
	SPI_InitStruct.SPI_BaudRatePrescaler=SPI_BaudRateP  rescaler_2;
	SPI_InitStruct.SPI_FirstBit=SPI_FirstBit_MSB;
	SPI_InitStruct.SPI_CRCPolynomial=7;
	SPI_Init(SPIx, &SPI_InitStruct);

	SPI_Cmd(SPIx, ENABLE);
}
Код:
void SPI_SendByte(SPI_TypeDef* SPIx,u8 byte)
{
	u8 tmp=SPI_ReadByte(SPIx,byte);	
}

u8 SPI_ReadByte(SPI_TypeDef* SPIx,u8 byte)
{
	#ifdef test_spi
		test_var=byte;
	#endif
    /* Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);

  /* Send byte through the SPI1 peripheral */
  SPI_I2S_SendData(SPIx, byte);

  /* Wait to receive a byte */
  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);

  /* Return the byte read from the SPI bus */
  return SPI_I2S_ReceiveData(SPIx);
}
Easyrider83 вне форума  
Непрочитано 19.04.2013, 13:05  
Vov123
Вид на жительство
 
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
Vov123 на пути к лучшему
По умолчанию Re: STM32 Не получается настроить термометр ds1621

Прошу извинить,а что у STM32 SPI и I2C одно и тоже?
Vov123 вне форума  
Непрочитано 19.04.2013, 15:21  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: STM32 Не получается настроить термометр ds1621

А где вы увидели I2C?

en.wikipedia.org/wiki/I²S
niXto вне форума  
Непрочитано 19.04.2013, 15:29  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: STM32 Не получается настроить термометр ds1621

У ds1621 интерфейс I2C
Yurkin2007 вне форума  
Сказали "Спасибо" Yurkin2007
sanstan (30.04.2013)
Непрочитано 19.04.2013, 15:32  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: STM32 Не получается настроить термометр ds1621

А зачем он тогда SPI инитиализирует?
Easyrider83 вне форума  
Непрочитано 19.04.2013, 15:43  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: STM32 Не получается настроить термометр ds1621

ну, промахнулся чуток ...
Yurkin2007 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с сенсором температуры DS1621 roer Микроконтроллеры, АЦП, память и т.д 0 02.08.2011 14:14
замена DS1621 на DS1631 demchic Микроконтроллеры, АЦП, память и т.д 10 03.07.2009 00:22
Подключение датчиков температуры ds1621 к LPT компьютера psionrevo Автоматика и аппаратура связи 0 14.01.2008 15:42
Работа с DS1621 CERGEI1982 Микроконтроллеры, АЦП, память и т.д 16 09.07.2007 06:24
mega8535+ds1621+CVAVR чё-то не хочет luck26 Микроконтроллеры, АЦП, память и т.д 6 13.05.2007 16:17


Часовой пояс GMT +4, время: 09:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.