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

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

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

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

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

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


 
Опции темы
Непрочитано 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,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
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.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: STM32 Не получается настроить термометр ds1621

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

en.wikipedia.org/wiki/I²S
niXto вне форума  
Непрочитано 19.04.2013, 15:29  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 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,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: STM32 Не получается настроить термометр ds1621

А зачем он тогда SPI инитиализирует?
Easyrider83 вне форума  
Непрочитано 19.04.2013, 15:43  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 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, время: 00:35.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot