Перейти к содержанию

Вопросы от начинающих по МК


Рекомендуемые сообщения

11.02.2021 в 23:06, Yurkin2015 сказал:

То есть нажали и держим, достигли 200, занулили и вернули долгое нажатие. Но кнопку ещё не успели отпустить, счёт продолжается от 0.

if (button )//если кнопка нажата
{
    button_time ++;
    if(button_time >200&&button_time<300)
    {
        button_time =0;
        return button_long ;
    }

Хорошое замечание, а если так? От двух до трёх секунд запас по времени. Уловили срабатывание и отпустили кнопку.

Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 8,9т
  • Создана
  • Последний ответ

Топ авторов темы

42 minutes ago, Дмитрий Вас said:

&&button_time<300

Это дополнительное условие ничего не изменит, т.к. переменная button_time всегда меньше 300.

Изменено пользователем Yurkin2015
Ссылка на комментарий
Поделиться на другие сайты

я же сказал, что нужно ставить флаг блокировки кнопки.

тогда и счет не начнется с нуля, и даже более 200 счет не продолжится.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ответьте кто знает -  Какая реальная точность калибровки  RC-генератора у tiny13 с помощью avr studio ?  А то получается, что вручную можно точнее сделать .

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

2 часа назад, dodik сказал:

реальная точность калибровки  RC-генератора у tiny13

я встречал где то в дш написано, точнее не скажу

Ссылка на комментарий
Поделиться на другие сайты

40 минут назад, Дмитрий Вас сказал:

где то в дш

+/- 1% .  Aвтонастройка у 2-х экземляров дает  такой разброс . А если значение OSCALL вручную подобрать можно точнее .

Ссылка на комментарий
Поделиться на другие сайты

не знаю, какие калибровочные числа у tiny13, а у mega8 я встречал минимальное число для 1 МГц менее 160.

а это значит, что одна единичка даст изменение около 0,7%.

так что, очень точно подобрать невозможно.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Подскажите как передать в функцию адрес переменной из EPROM.  AtmelStudio6.2

uint16_t EEMEM servo_min_mem;//переменная в епром адресс которой надо передать в функцию
//функция принимающая адрес переменной в епром
void set_servo(какая то переменная принимающая адрес)
{	
	while(1)
	{
		if(timer_1s>=500){if(adc_n==0){print_adc(adc_data,60,0);CHANEL1; START_ADC;timer_1s=0;};}
		switch (key&0b00011100)// читаем порт кнопок
		{
			case 4:	if (key_button()){if(adc_n==0){servo_temp=adc_data; eeprom_update_word(адресс принятой переменной,adc_data);return;}; };
		}
	}
}
//вызов функции
set_servo(&servo_min_mem);//передаем адресс в функцию

 

Изменено пользователем Demonrostov
Ссылка на комментарий
Поделиться на другие сайты

11 часов назад, Alex сказал:
13 часов назад, Demonrostov сказал:

как передать в функцию адрес переменной

Вот же, Вы его передаёте :

А как правильно принять в самой функции и сохранить данные в еепром? Я в функции написал "какая то" не знаю что и как правильно вписать там, чтобы работало. 

Изменено пользователем Demonrostov
Ссылка на комментарий
Поделиться на другие сайты

@Demonrostov Если посмотреть на прототип функции

void eeprom_update_word (uint16_t* __p, uint16_t __value);

то первый параметр есть просто указатель на переменную типа uint16_t.

То есть в Вашей фукции нужен такой же тип параметра, назовите его, например, addr

void set_servo(uint16_t* addr)
{
	while(1)
	{

	....

	eeprom_update_word(addr, adc_data);

	....
	}
}

 

Ссылка на комментарий
Поделиться на другие сайты

Делаю что-то типа загрузчика по UART, и потому нужно принять bin файл по UART в ОЗУ, и дальше с ОЗУ прописать во флэш, но есть проблема UART 8 бит, а ОЗУ и флэш идут по 32бита(слово), и тут вопрос как правильно считыватть 8 бит для записи в 32бита в одну ячейку по 4 байта.

Делал и так(3310 количество байт в бинарнике)

Скрытый текст

for(uint32_t gh=0; gh<=3310/4; gh++){

for(uint8_t y=0;y<=3;y++){
  while(!USART1->SR & USART_SR_RXNE);
  *(__IO uint8_t*)adress=(uint8_t)USART1->DR;
        adress+=y;

}

 

и так

Скрытый текст

void writeAddr(uint32_t adress,uint32_t data){

*(__IO uint16_t*)adress=(uint16_t)data;
 adress+=2;
  data>>=16;
  *(__IO uint16_t*)adress = (uint16_t)data; //Пишем старшие 2 байта

}

uint8_t data35[5];
uint32_t data36=0;

for(uint32_t gh=0; gh<=3310/4; gh++){

  for(uint8_t y=0;y<=3;y++){
  while(!USART1->SR & USART_SR_RXNE);
   data35[y]=USART1->DR;
  }
  data36=data35[3]<<24|data35[2]<<16|data35[1]<<8|data35[0];

 writeAddr(0x20000400+gh,data36);
}

 

И значения есть, но они отличаются от того что в бинарнике. Вопрос как правильно разложить 8-ми битные данные в ОЗУ, потом буду пробовать правильно записать во флэш, может тоже не правильно переписываю с ОЗУ во флэш, но поидее ОЗУ и флеш по 32 бита, там просто можно писать, но пока думаю что я не правильно из UART во флэш пишу.

Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, Yurkin2015 сказал:

То есть в Вашей фукции нужен такой же тип параметра, назовите его, например, addr

Спасибо, работает. Ошибка моя была в некорректной симуляции протеуса.

 

6 часов назад, Электронщик сказал:

как правильно считыватть 8 бит

как я понимаю, принимаешь байт и пихаешь в 32-х битную переменную, делаешь сдвиг, потом "или" со следующим байтом и так пока все 4 байта не запихнешь.

Изменено пользователем Demonrostov
Ссылка на комментарий
Поделиться на другие сайты

17 минут назад, Demonrostov сказал:

как я понимаю, принимаешь байт и пихаешь в 32-х битную переменную, делаешь сдвиг, потом "или" со следующим байтом и так пока все 4 байта не запихнешь.

Так я так и делаю, но данные не те.

Ссылка на комментарий
Поделиться на другие сайты

смотри какой бит, байт идет первым от этого и пляши. скорее всего здесь не правильно собираешь

Изменено пользователем Demonrostov
Ссылка на комментарий
Поделиться на другие сайты

Так я пробовал местами менять все тоже самое. Может нужно по странично писать, по 256 слов, так как страница 1кб, и тогда все будет правильно?

Ссылка на комментарий
Поделиться на другие сайты

@Электронщик , запись во флеш всегда идёт блоками, а не байтами. Смотрите размер блока в ДШ на свой камень.
Приняли несколько байт (блок) - записали. Приняли - записали. ....

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Alex сказал:

Смотрите размер блока в ДШ на свой камень.

Блок - Вы имеете ввиду страница? То у меня страница 1кб. То есть в ОЗУ пишем словом(32бита), а во флэш страницей в 1кб?

Ссылка на комментарий
Поделиться на другие сайты

16.03.2021 в 13:35, Электронщик сказал:

может тоже не правильно переписываю с ОЗУ во флэш

наверно дело в том что прежде чем писать во флеш вы должны стереть флеш!, флеш стирается блоками, поэтому и писать лучше (но зависит от контекста) тоже блоками.

В общем перед записью во флеш надо убедиться что вы пишете в свободное место (в стертые байты, обычно это 0xFF) во флеш.

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

ДА все стерто, и все пишется, вопрос в том что правильно принять бинарный файл по UART собрать правильно его его в слова по 32бита, и правильно переписать во флэш, так как у меня это все работает, только значения не те что в бинарникею

40 минут назад, Eddy_Em сказал:

Нет же! Флеш только стирается страницами. А писать его можно блоками (которые, скажем, у STM32 — 4 байта).

Так я так и пишу.

Ссылка на комментарий
Поделиться на другие сайты

Вот оригинал бинарникаScreenshot_9.jpg.ec4b3cf766baa4536771816694514358.jpg

А вот то что во флэше получаетсяScreenshot_14.jpg.975fbb5641659976e01cef378ad5ac6d.jpg

То есть должно быть 60 04 00 20 в одном слове, а у меня получается первое слово 60606060, второе слово 60606060, третье слово 60606060, четвертое слово 60606060, пятое слово 04040404, шестое слово 04040404, седьмое слово 04040404, восьмое слово 04040404, девятое слово 00000000 десятое слово 00000000, одинацатое слово 00000000, двенадцатое слово 00000000, тринадцатое слово 20202020. То есть все что нужно но не в одном слове а растянуто на несколько слов.

 

 

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

Странности какие-то... Вы пишите по 4 раза одно и тоже.
Посто сделайте массив байтов, который заполняется из Уарта. И этот массив записывайте во флеш, по конкретному адресу.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...