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

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

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

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

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

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


 
Опции темы
Непрочитано 31.01.2013, 01:33  
TAutomatic
Временная регистрация
 
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
TAutomatic на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Boba_spb Посмотреть сообщение
Да что Вы несете то. Основное это архитектура, переферия, память и тактовая частота.
Вы хоть где нить видели в характеристиках процессора упоминания о компиляторе?.
Да он мне до фонаря, если я буду на ASMe писать.
Вы документ-то почитали, ссылку на который я привел? Вы так долго добивались узнать, что это такое за double 4 байтовое. А теперь молчите как рыба об лед. Есть коментарии по поводу удовлетворенности ответом для начала? Или вы не смогли найти ответ?
Реклама:
TAutomatic вне форума  
Непрочитано 31.01.2013, 02:03  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Что там?
Просмотрел поиском все double
И что ? И где ?
Вот на это смотреть ?


Так это стандартный float,
И как float точнее float ?

Или я пропустил что то?
Миниатюры:
Нажмите на изображение для увеличения
Название: pic.JPG
Просмотров: 67
Размер:	58.8 Кб
ID:	42932  
Boba_spb вне форума  
Непрочитано 31.01.2013, 02:18  
TAutomatic
Временная регистрация
 
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
TAutomatic на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Boba_spb Посмотреть сообщение
Что там?
Просмотрел поиском все double
И что ? И где ?
Вот на это смотреть ?


Так это стандартный float,
И как float точнее float ?

Или я пропустил что то?
Это хорошо, что нашли. Надеюсь теперь вы получили ответ, что такое 4-х байтовое double? Для 16 разрядных ПИКов - это double, что собственно эквивалентно по размеру float. Для АРМа float - это тоже 4 байта. Надеюсь нет возражений. Так вот мой опыт показывает, что точность большого количества вычислений с этим типом данных для АРМа просто никуда не годится. У Вас есть другой опыт? С похожей точностью у Арма выполняются только операции с 8 байтовым double. Эти операции выполняются гораздо медленее, будете спорить? Если нет, так о чем вообще спорт -то затеяли? Ну хотели узнать,какого размера данные у ПИКА, узнали. Дальше что? А по моему вопросу есть что-то адекватное?
TAutomatic вне форума  
Непрочитано 31.01.2013, 09:43  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Какой то Вы странный, я уж писал, что в stm32F4 аппаратная плавающая арифметика. А такую мелочь как Ваши фильтры я без плавающей обхожу.

Ну уж если припрет, то, думаю, библиотеку найду где арифметика написана на ASMе, а не С.

Щас ради шутки гляну для STMf0xx как она считает float.
Boba_spb вне форума  
Непрочитано 31.01.2013, 10:08  
TAutomatic
Временная регистрация
 
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
TAutomatic на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от DanilinSA Посмотреть сообщение
Насчет I2С:
1) Приведите сюда нерабочий код. Если нет желания светить исходниками проекта - только секции инициализации + реализация обмена. Иначе советовать что либо сложно.
2) Неплохо пройтись эмулятором проца до процедуры обмена. Состояние флагов, частоты, состояния.
3) Постарайтесь выцепить момент, когда обмен встанет. В каком состоянии в этот момент стоит шина? Кто чего ждет? Можно после каждой операции в UART плевать строчку с номером шага. Или ещё как.

Библиотеки работы с шиной "ручные" или из стандартного комплекта?
Странно ... Погуглил - у всех с EPROM по I2C нормально работает, а у вас - нет.
Дело не в желании или не желании, исходники длинные, какой в них смысл.
Код:
#define		ClockSpeed          400000

void InitI2C(void)
{
	I2C_InitTypeDef I2C_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);	

	I2C_DeInit(I2C1);
	I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
	I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
	I2C_InitStructure.I2C_OwnAddress1 = 1;
	I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
	I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
	I2C_InitStructure.I2C_ClockSpeed = ClockSpeed;
	I2C_Init(I2C1, &I2C_InitStructure);

}
/**************************************************  ******/
void ReadWorkParamsFromEeprom(void) 
{
     ReadEepromBlock(0xA0, 0x00, (unsigned char*)&Parameters); 
}
/**************************************************  ******/
void SaveWorkParamsToEeprom(void) 
{
	unsigned char BlockCounter;
	unsigned char Address;
	unsigned char *OutBufferPtr;

																		
	Parameters.CRC = ProcedureCRC16((unsigned int*)&Parameters, sizeof(_EE) - 2);	
	Address = 0;	OutBufferPtr = (unsigned char*)&Parameters;	
	for (BlockCounter = 0; BlockCounter ‹ 32; BlockCounter++)
		{
		WriteEepromBlock(0xA0, Address, OutBufferPtr);
		Address += 8;	OutBufferPtr += 8;	
		}				
}
/**************************************************  */
unsigned char WriteEepromBlock(unsigned char SlaveAddress, unsigned char RegisterAddress, unsigned char *OutBuffer)
{
	unsigned char Result = 1;
 	unsigned char ByteCount;
	
	if (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY))
		I2C_SoftwareResetCmd(I2C1, ENABLE);
	
	I2C_GenerateSTART(I2C1, ENABLE);																																									/* Send START condition */
	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)){};																											/* Test on EV5 and clear it */

	I2C_Send7bitAddress(I2C1, SlaveAddress, I2C_Direction_Transmitter);																								/* Send EEPROM address for write */
	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) && Result)																/* Test on EV6 and clear it */
		{
		if (I2C_GetFlagStatus(I2C1, I2C_FLAG_PECERR | I2C_FLAG_OVR  | I2C_FLAG_AF | I2C_FLAG_ARLO | I2C_FLAG_BERR))	
			Result = 0;
		};	
	
	if (Result)
		{
		I2C_SendData(I2C1, RegisterAddress);																																							/* Send the EEPROM's internal address to write to : LSB of the address */
		while(! I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)){};																								/* Test on EV8 and clear it */
		for (ByteCount = 0; ByteCount ‹ 8; ++ByteCount)
			{
			I2C_SendData(I2C1, *(OutBuffer + ByteCount));
			while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)){};																							/* Test on EV8 and clear it */
			EepromWriteDelay = 6;
			while (EepromWriteDelay){};
			}
		}
	I2C_GenerateSTOP(I2C1, ENABLE);																																										/* Send STOP condition */
	while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));																																		/* While the bus is busy */	
		
	return Result;
 } 
/**************************************************  **************************************************  *******************/
void  ReadEepromBlock(unsigned char SlaveAddress, unsigned char RegisterAddress, unsigned char *OutData)
{  
	unsigned char ByteCount;
	
	if (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY))
		I2C_SoftwareResetCmd(I2C1, ENABLE);

	I2C_GenerateSTART(I2C1, ENABLE);																																									/* Send START condition */
	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)){};																											/* Test on EV5 and clear it */

	I2C_Send7bitAddress(I2C1, SlaveAddress, I2C_Direction_Transmitter);																								/* Send EEPROM address for write */
	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)){};																				/* Test on EV6 and clear it */

	I2C_SendData(I2C1, RegisterAddress); 																																							/* Send the EEPROM's internal address to read from: LSB of the address */ 
	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)){};																								/* Test on EV8 and clear it */
	I2C_GenerateSTOP(I2C1, ENABLE);																																										/* Send STOP Condition */
	
	I2C_GenerateSTART(I2C1, ENABLE);																																									/* Send STRAT condition a second time */
	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)){};																											/* Test on EV5 and clear it */
	I2C_Send7bitAddress(I2C1, SlaveAddress, I2C_Direction_Receiver);																									/* Send EEPROM address for read */
	while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_R  ECEIVED)){};																										/* Test on EV6 and clear it *///I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
	for (ByteCount = 0; ByteCount ‹ 255; ++ByteCount)
		{
		*OutData=I2C_ReceiveData(I2C1);
		I2C_AcknowledgeConfig(I2C1, ENABLE);
		++OutData;
		}
		
	*OutData=I2C_ReceiveData(I2C1);
	I2C_AcknowledgeConfig(I2C1, DISABLE);			
	I2C_GenerateSTOP(I2C1, ENABLE);																																										/* Send STOP Condition */	
	while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));																																		/* While the bus is busy */
}
Проц работает на частоте 24 МГц, она же на APB2. Ведомый - 24LC02B, подтяжки на SDA и SCL 2,2 кОм для максимальной скорости.
Код, который прекрасно работает на других контроллерах, не работает в этом случае.
Да, реализация простая, без анализа коллизий и всего прочего. Да и они, по моему опыту, на шине из одного мастера и одного слейва не нужны. Единственный анализ отсутствия ACK на первый байт при записи блока дает возможность писать блоками с задержкой записи применительно кконкретной микросхеме, а не устанавливать тупую задержку в 4, 5 или 6 мс.
В качестве отладчика используется J-link. Чтение проходит нормально. Иногда застревает на отправке DA. Остановка и зависание происходит при записи данных в момент записи DA, отладчиком вижу, что установлен AF. Почему? Чтение проходит, ножки памяти припаяны на A0. Почему не дает ответ - не понятно.
Кстати, насчет у всех работает - не совсем так. На многих конференциях часто встает этот вопрос вплоть до реализации программного обмена. Перед выбором контроллера я анализировал эту информацию, но счел, что как обычно в 90% случаев виноваты юзеры. Впрочем и в этом случае может быть такое, неотрицаю. Но проблему на могу найти уже 3 дня.
TAutomatic вне форума  
Непрочитано 31.01.2013, 10:15  
TAutomatic
Временная регистрация
 
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
TAutomatic на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Boba_spb Посмотреть сообщение
Какой то Вы странный, я уж писал, что в stm32F4 аппаратная плавающая арифметика. А такую мелочь как Ваши фильтры я без плавающей обхожу.
Скорее, какой-то Вы странный. Я уже в который раз повторяю: мне не нужно подобрать контроллер для реализации задачи. Она уже реализована. Была задача уменьшить стоимость. Образно говоря текущая реализация стоит 40 единиц, реализация на STM32F1 позволяет выйти на стоимость 20 единиц. Вы же предлагаете стоимость 60 единиц и выше. Зачем мне такой вариант? Мы же не рассуждаем тут, кто вообще выполняет быстрее операции с плавающей точкой. Наверно в таком случае Ваше предложение по STM32F4 уместно. Но мпеня оно не интересует.
Давайте прекратим срачь в теме и уменьшим работу админам по чистке постов
TAutomatic вне форума  
Непрочитано 31.01.2013, 10:29  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Может тогда попробовать на STM32F051 перейти - она вообще стоит копейки.
Boba_spb вне форума  
Непрочитано 31.01.2013, 10:45  
TAutomatic
Временная регистрация
 
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
TAutomatic на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Ну в крайности то не надо тоже брасаться. Цена-это хорошо, 12 битный АЦП тоже, другая периферия тоже есть. Но, к сожалению,как я уже написал, код размером 14кБ для пика портируется в аналогичный код АРМа уже размером в 24 кБ. Причем тоже в 16 разрядный. По некоторым причинам убежден, что это 16 разрядный код, переубедить меня еще не смогли доказательством противоположного. Разница очевиднаяи существенная.Так что подходящим я признал как возможную замену только STM32F1
TAutomatic вне форума  
Непрочитано 31.01.2013, 12:03  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Вас так память пугает? Тем ее 64 кило.

И так, IAR на работе у меню старенький.
Там токо stm32f1xx, ну и хорошо .

Вот что получулись

Если т.е. 1260001482 / 20000000 = 63 цикла на итеррацию.
На М0 48МГц тактовая - т.е это 1.5 мкс.

Ну и на последок специально для Вас - что б Вы понималии что такое суммирование 0.000001 в 32 и 64 битах (по Вашему это Double32, который (float), и Double).

А это на билдере и на гнутом С и на компе, а не микропрцессоре.
Миниатюры:
Нажмите на изображение для увеличения
Название: PIC.JPG
Просмотров: 67
Размер:	242.7 Кб
ID:	42965   Нажмите на изображение для увеличения
Название: PIC1.JPG
Просмотров: 70
Размер:	59.2 Кб
ID:	42966   Нажмите на изображение для увеличения
Название: PIC2.JPG
Просмотров: 60
Размер:	77.9 Кб
ID:	42967  

Boba_spb вне форума  
Непрочитано 31.01.2013, 12:05  
Oleg Galizin
Частый гость
 
Регистрация: 25.03.2010
Адрес: Voronezh
Сообщений: 35
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Oleg Galizin на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от TAutomatic Посмотреть сообщение
Но, к сожалению,как я уже написал, код размером 14кБ для пика портируется в аналогичный код АРМа уже размером в 24 кБ.
Вы достаточно много написали. Из этого видно, что Вы не очень хорошо изучили архитектуру и другие особенности. Например Вам был неизвестен факт отсутвия 32 битных операций на cortex-m3. Или например Вы не знаете сколько выделено под мантиссу и экспоненту в плавающих числах на pic и на arm.
Мое личное мнение, неправильно делать какие либо выводы не зная предмета.
Oleg Galizin вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


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


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