Дмитрий Вас Опубликовано 15 февраля, 2021 Поделиться Опубликовано 15 февраля, 2021 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 ; } Хорошое замечание, а если так? От двух до трёх секунд запас по времени. Уловили срабатывание и отпустили кнопку. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 15 февраля, 2021 Поделиться Опубликовано 15 февраля, 2021 (изменено) 42 minutes ago, Дмитрий Вас said: &&button_time<300 Это дополнительное условие ничего не изменит, т.к. переменная button_time всегда меньше 300. Изменено 15 февраля, 2021 пользователем Yurkin2015 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Starichok Опубликовано 15 февраля, 2021 Поделиться Опубликовано 15 февраля, 2021 я же сказал, что нужно ставить флаг блокировки кнопки. тогда и счет не начнется с нуля, и даже более 200 счет не продолжится. 0 Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду. Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Дмитрий Вас Опубликовано 15 февраля, 2021 Поделиться Опубликовано 15 февраля, 2021 (изменено) Косячу Изменено 15 февраля, 2021 пользователем Дмитрий Вас 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
dodik Опубликовано 17 февраля, 2021 Поделиться Опубликовано 17 февраля, 2021 Ответьте кто знает - Какая реальная точность калибровки RC-генератора у tiny13 с помощью avr studio ? А то получается, что вручную можно точнее сделать . 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Дмитрий Вас Опубликовано 17 февраля, 2021 Поделиться Опубликовано 17 февраля, 2021 2 часа назад, dodik сказал: реальная точность калибровки RC-генератора у tiny13 я встречал где то в дш написано, точнее не скажу 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
dodik Опубликовано 17 февраля, 2021 Поделиться Опубликовано 17 февраля, 2021 40 минут назад, Дмитрий Вас сказал: где то в дш +/- 1% . Aвтонастройка у 2-х экземляров дает такой разброс . А если значение OSCALL вручную подобрать можно точнее . 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Starichok Опубликовано 17 февраля, 2021 Поделиться Опубликовано 17 февраля, 2021 не знаю, какие калибровочные числа у tiny13, а у mega8 я встречал минимальное число для 1 МГц менее 160. а это значит, что одна единичка даст изменение около 0,7%. так что, очень точно подобрать невозможно. 1 Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду. Ссылка на комментарий Поделиться на другие сайты Поделиться
Demonrostov Опубликовано 15 марта, 2021 Поделиться Опубликовано 15 марта, 2021 (изменено) Подскажите как передать в функцию адрес переменной из 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);//передаем адресс в функцию Изменено 15 марта, 2021 пользователем Demonrostov 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 15 марта, 2021 Поделиться Опубликовано 15 марта, 2021 1 час назад, Demonrostov сказал: как передать в функцию адрес переменной Вот же, Вы его передаёте : set_servo(&servo_min_mem);//передаем адресс в функцию 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Demonrostov Опубликовано 16 марта, 2021 Поделиться Опубликовано 16 марта, 2021 (изменено) 11 часов назад, Alex сказал: 13 часов назад, Demonrostov сказал: как передать в функцию адрес переменной Вот же, Вы его передаёте : А как правильно принять в самой функции и сохранить данные в еепром? Я в функции написал "какая то" не знаю что и как правильно вписать там, чтобы работало. Изменено 16 марта, 2021 пользователем Demonrostov 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 16 марта, 2021 Поделиться Опубликовано 16 марта, 2021 @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); .... } } 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Электронщик Опубликовано 16 марта, 2021 Поделиться Опубликовано 16 марта, 2021 Делаю что-то типа загрузчика по 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 во флэш пишу. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Demonrostov Опубликовано 16 марта, 2021 Поделиться Опубликовано 16 марта, 2021 (изменено) 7 часов назад, Yurkin2015 сказал: То есть в Вашей фукции нужен такой же тип параметра, назовите его, например, addr Спасибо, работает. Ошибка моя была в некорректной симуляции протеуса. 6 часов назад, Электронщик сказал: как правильно считыватть 8 бит как я понимаю, принимаешь байт и пихаешь в 32-х битную переменную, делаешь сдвиг, потом "или" со следующим байтом и так пока все 4 байта не запихнешь. Изменено 16 марта, 2021 пользователем Demonrostov 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Электронщик Опубликовано 16 марта, 2021 Поделиться Опубликовано 16 марта, 2021 17 минут назад, Demonrostov сказал: как я понимаю, принимаешь байт и пихаешь в 32-х битную переменную, делаешь сдвиг, потом "или" со следующим байтом и так пока все 4 байта не запихнешь. Так я так и делаю, но данные не те. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Demonrostov Опубликовано 16 марта, 2021 Поделиться Опубликовано 16 марта, 2021 (изменено) смотри какой бит, байт идет первым от этого и пляши. скорее всего здесь не правильно собираешь Изменено 16 марта, 2021 пользователем Demonrostov 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Электронщик Опубликовано 16 марта, 2021 Поделиться Опубликовано 16 марта, 2021 Так я пробовал местами менять все тоже самое. Может нужно по странично писать, по 256 слов, так как страница 1кб, и тогда все будет правильно? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Demonrostov Опубликовано 16 марта, 2021 Поделиться Опубликовано 16 марта, 2021 начни с записи одного 32бит слова, потом страницы писать будешь 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 17 марта, 2021 Поделиться Опубликовано 17 марта, 2021 @Электронщик , запись во флеш всегда идёт блоками, а не байтами. Смотрите размер блока в ДШ на свой камень. Приняли несколько байт (блок) - записали. Приняли - записали. .... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Электронщик Опубликовано 17 марта, 2021 Поделиться Опубликовано 17 марта, 2021 4 часа назад, Alex сказал: Смотрите размер блока в ДШ на свой камень. Блок - Вы имеете ввиду страница? То у меня страница 1кб. То есть в ОЗУ пишем словом(32бита), а во флэш страницей в 1кб? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Eddy_Em Опубликовано 17 марта, 2021 Поделиться Опубликовано 17 марта, 2021 Нет же! Флеш только стирается страницами. А писать его можно блоками (которые, скажем, у STM32 — 4 байта). 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
ruhi Опубликовано 17 марта, 2021 Поделиться Опубликовано 17 марта, 2021 16.03.2021 в 13:35, Электронщик сказал: может тоже не правильно переписываю с ОЗУ во флэш наверно дело в том что прежде чем писать во флеш вы должны стереть флеш!, флеш стирается блоками, поэтому и писать лучше (но зависит от контекста) тоже блоками. В общем перед записью во флеш надо убедиться что вы пишете в свободное место (в стертые байты, обычно это 0xFF) во флеш. 0 Можно сделать все! Но чем больше можно, тем больше нельзя! Ссылка на комментарий Поделиться на другие сайты Поделиться
Электронщик Опубликовано 17 марта, 2021 Поделиться Опубликовано 17 марта, 2021 ДА все стерто, и все пишется, вопрос в том что правильно принять бинарный файл по UART собрать правильно его его в слова по 32бита, и правильно переписать во флэш, так как у меня это все работает, только значения не те что в бинарникею 40 минут назад, Eddy_Em сказал: Нет же! Флеш только стирается страницами. А писать его можно блоками (которые, скажем, у STM32 — 4 байта). Так я так и пишу. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Электронщик Опубликовано 17 марта, 2021 Поделиться Опубликовано 17 марта, 2021 (изменено) Вот оригинал бинарника А вот то что во флэше получается То есть должно быть 60 04 00 20 в одном слове, а у меня получается первое слово 60606060, второе слово 60606060, третье слово 60606060, четвертое слово 60606060, пятое слово 04040404, шестое слово 04040404, седьмое слово 04040404, восьмое слово 04040404, девятое слово 00000000 десятое слово 00000000, одинацатое слово 00000000, двенадцатое слово 00000000, тринадцатое слово 20202020. То есть все что нужно но не в одном слове а растянуто на несколько слов. Изменено 17 марта, 2021 пользователем Электронщик 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 17 марта, 2021 Поделиться Опубликовано 17 марта, 2021 Странности какие-то... Вы пишите по 4 раза одно и тоже. Посто сделайте массив байтов, который заполняется из Уарта. И этот массив записывайте во флеш, по конкретному адресу. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.