Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 25996
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

FireProoF писал(а):как передать по UART число с точкой
Вероятно, передав в нужном месте эту самую точку... :)))
Вопрос странный...
Вы не в курсе относительно форматирования вывода в sprintf или относительно того, что в терминал нужно передавать ASCII?
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Сообщение FireProoF »

Я вот с точкой понял. Т.е. сначала передаем целую часть, потом знак точки, потом дробную. Дробную часть придётся урезать. ПРост думал, может что получше есть)
Реклама
Chettuser

Сообщение Chettuser »

Постигаю просветление с DMA в STM32. А вот как народ умудряется с GPIO через DMA работать? На картинках в RM в разделе DMA про GPIO ничего нету, это и понятно. Как я понимаю вместо начального адреса памяти надо прописать адрес порта и без инкремента? А какой тогда режим выставлять - "память-периферия" или "память-память"? И как тут быть с сигналом "Event"?
Спасибо.
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Сообщение FireProoF »

Столкнулся с необъяснимым) Есть L3GD20. Это ДУС с термометром. Выходной регистр термометра размером в один байт. Масштабный коэффициент 1 град/бит. Вроде всё здорово). Считываю показания: 0х12 = 18 град. Тут мне пришла мне мысль нагреть его феном. Грею, а показания температуры стали опускаться! Даж в минус уходит.
За основу взял STэмовскую библиотеку под stm32f3discovery
Спойлер

Код: Выделить всё

void Demo_GyroReadTempRaw (uint8_t* pfData, uint8_t* pfDataSign)
{
  uint8_t rawData = 0;
  int i =0;
  
  L3GD20_Read(&rawData,L3GD20_OUT_TEMP_ADDR,1);
  
	if(((uint8_t)rawData > 0x7F) == 0) { *pfDataSign = 0;}
	else
	{
		*pfDataSign = 1;
		rawData &= 0x7F;
		rawData = 0x7F - rawData;
	}
		
	*pfData = rawData;
}
Кто-нибудь может это объяснить?
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Сообщение FireProoF »

Всем привет. На stm32f3-discovery АЦП имеют верхний предел в 3,3В, а нужно измерять 5В. Можно ли применить преобразователь логических уровней?
Реклама
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Что Вы имеете в виду под фразой "преобразователь логических уровней" ? Если это обычный резистивный делитель, то можно.
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Сообщение FireProoF »

Про делитель я спрашивал уже у того, кто мне эту задачку задал) Мне сказали, что сопротивление самого датчика внесёт погрешность (как я понял, постоянную) и почему-то такая схема не будет работать на "больших" частотах (до 1кГц).
Предложили собрать схему на ОУ. Пока есть время, хочу поискать готовые решения.
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Если для датчика нужен высокоимпедансный вход, то решение с ОУ самое правильное.
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Сообщение FireProoF »

Есть такой вот датчик и stm32f3d.
Я просто не понял про высокоимпедансный вход. Это, типо, точный АЦП?)
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

FireProoF писал(а):Я просто не понял про высокоимпедансный вход.
Всё просто - https://www.yandex.ru/yandsearch?clid=9 ... 63204370.1
:)
Друг Кота
Аватара пользователя
Сообщения: 6349
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Немножко уводящая в сторону ссылка. Z - состояние имеет смысл для логических выходов. В данном случае, как я понял, речь идет об АЦП. И для него высокий импеданс - в переводе на рабоче-крестьянский язык - это просто высокое входное сопротивление АЦП, не нагружающее нижнее плечо делителя и не искажающее таким образом коэффициент передачи. Частотные свойства останутся приемлемыми, если не сильно задирать номиналы резисторов делителя, да и подкорректировать их можно емкостью, как делают, к примеру, в выносных делителях осциллов.
Конечно, если вход многофункциональный, логическую часть его следует перевести в Z - состояние, чтоб не мешала.
Изображение
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Да, затупил немного, прошу прощения :oops:
Конечно же, я имел в виду - высокой входное сопротивление.

ПыСы. До сегодняшнего дня, я думал, что высокоимпедансное - это с высоким сопротивлением. А оказывается, это Z-состояние :facepalm:
Встал на лапы
Сообщения: 135
Зарегистрирован: Ср фев 04, 2015 21:08:59

Сообщение креазот »

привет
микроконтроллер ATmega64A
правильно ли я понимаю что на вывод AVCC подается +5В напряжения питания?

вот из даташита:
AV CC is the supply voltage pin for Port F and the A/D Converter. It should be externally connected to V CC ,
even if the ADC is not used. If the ADC is used, it should be connected to V CC through a low-pass filter


и еще вопрос, нужно ко всем выводам питания которые обозначены на рисунке подводить напряжение питания? или можно только к одному выводу GND подвести минус, и к одному VCC плюс? или ко всем GND и VCC тянуть напряжение питания?
микрокотроллера у меня еще нет на руках
Вложения
nnnnvvvv.png
(102.42 КБ) 394 скачивания
Друг Кота
Аватара пользователя
Сообщения: 25996
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Питание и земли ОБЯЗАТЕЛЬНО подводить ко всем выводам питания и земли.
Эти выводы делают для разгрузки внутренних шин.
На вход аналогового питания подают либо само питание, либо его же, но через фильтр.
Аналоговую землю соединяют с цифровой землей в районе самого этого пина, но тонким проводником. При этом все аналоговые земли соединяют именно с аналоговой землей контроллера. Таким образом образуется ДВЕ земли. Чистая и грязная.
Встал на лапы
Сообщения: 135
Зарегистрирован: Ср фев 04, 2015 21:08:59

Сообщение креазот »

КРАМ, спасибо за развернутый ответ. интересно
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Сообщение FireProoF »

Всем привет. Кто-нибудь может портировать участок кода, отвечающий за запуск SPI на stm32f1 на stm32f3?
Спойлер

Код: Выделить всё

RCC->APB2ENR |=  RCC_APB2ENR_AFIOEN;//включить тактирование альтернативных функций
  RCC->APB2ENR |=  RCC_APB2ENR_IOPAEN;//включить тактирование порта А
 
  //вывод управления SS: выход двухтактный, общего назначения,50MHz
  GPIOA->CRL   |=  GPIO_CRL_MODE4;    //
  GPIOA->CRL   &= ~GPIO_CRL_CNF4;     //
  GPIOA->BSRR   =  GPIO_BSRR_BS4;     //
 
  //вывод SCK: выход двухтактный, альтернативная функция, 50MHz
  GPIOA->CRL   |=  GPIO_CRL_MODE5;    //
  GPIOA->CRL   &= ~GPIO_CRL_CNF5;     //
  GPIOA->CRL   |=  GPIO_CRL_CNF5_1;   //
 
  //вывод MISO: вход цифровой с подтягивающим резистором, подтяжка к плюсу
  GPIOA->CRL   &= ~GPIO_CRL_MODE6;    //
  GPIOA->CRL   &= ~GPIO_CRL_CNF6;     //
  GPIOA->CRL   |=  GPIO_CRL_CNF6_1;   //
  GPIOA->BSRR   =  GPIO_BSRR_BS6;     //
 
  //вывод MOSI: выход двухтактный, альтернативная функция, 50MHz
  GPIOA->CRL   |=  GPIO_CRL_MODE7;    //
  GPIOA->CRL   &= ~GPIO_CRL_CNF7;     //
  GPIOA->CRL   |=  GPIO_CRL_CNF7_1;   //
 
  //настроить модуль SPI
  RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; //подать тактирование
  SPI1->CR2     = 0x0000;             //
  SPI1->CR1     = SPI_CR1_MSTR;       //контроллер должен быть мастером,конечно    
  SPI1->CR1    |= SPI_CR1_BR_0;         //для начала зададим маленькую скорость
  SPI1->CR1    |= SPI_CR1_SSI;
  SPI1->CR1    |= SPI_CR1_SSM;
  SPI1->CR1    |= SPI_CR1_SPE;        //разрешить работу модуля SPI
А то я уже 500й раз ищу баг, и глаза уже замылились.
Переписал вот так:
Спойлер

Код: Выделить всё

GPIO_InitTypeDef gpio;
	SPI_InitTypeDef spi;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
	
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
	
	//GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_5);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_5);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_5);
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_5);/**/
	
	gpio.GPIO_Mode = GPIO_Mode_AF;
  gpio.GPIO_Pin = /*GPIO_Pin_12 | */GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  gpio.GPIO_OType = GPIO_OType_PP;
	gpio.GPIO_PuPd  = GPIO_PuPd_NOPULL;//GPIO_PuPd_DOWN;
  gpio.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &gpio);
	
	gpio.GPIO_Mode = GPIO_Mode_OUT;
  gpio.GPIO_Pin = GPIO_Pin_12;
  gpio.GPIO_OType = GPIO_OType_PP;
	gpio.GPIO_PuPd  = GPIO_PuPd_DOWN;//GPIO_PuPd_DOWN;
  gpio.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &gpio);
	
	SPI_I2S_DeInit(SPI2);
	
	spi.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  spi.SPI_DataSize = SPI_DataSize_8b;
  spi.SPI_CPOL = SPI_CPOL_Low;
  spi.SPI_CPHA = SPI_CPHA_1Edge;
  spi.SPI_NSS = SPI_NSS_Soft;
  spi.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
  spi.SPI_FirstBit = SPI_FirstBit_MSB;
  spi.SPI_CRCPolynomial = 7;
  spi.SPI_Mode = SPI_Mode_Master;
  SPI_Init(SPI2, &spi);

	/* Configure the RX FIFO Threshold */
  SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF);
	
	SPI_Cmd(SPI2, ENABLE);
Но CS при передаче не дергается(
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 29
Зарегистрирован: Пт апр 15, 2016 20:41:44

Сообщение Studentos »

Здравствуйте, вопрос новичка. В цикле чтения при обмене данными в шине микропроцессорной системы присутствуют такие вещи как sync, din, rply. Что это, отдельные разряды шины и для чего ?
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Сообщение FireProoF »

Всем привет. К stm32 подключено несколько датчиков. Данные записываются как только проходит цикл опроса. Так вот некоторые датчики опрашиваются не всегда, поэтому частота опроса разная. Вопрос: можно ли использовать счётчик таймера для выставления отметок времени в логе?
Друг Кота
Аватара пользователя
Сообщения: 6349
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Studentos писал(а): В цикле чтения при обмене данными в шине микропроцессорной системы присутствуют такие вещи как sync, din, rply. Что это, отдельные разряды шины и для чего ?
Я понимаю, тема секретная, :) но хоть намеком - что за шина, что за микропр. система ?
Изображение
Родился
Сообщения: 2
Зарегистрирован: Сб июл 25, 2015 09:44:18

Сообщение hostmit »

Ребят, подскажите чем можно прошить MBM29F800BA-70PFTN? Флешка на одном девайсе.
Ответить

Вернуться в «Разные вопросы по МК»