определяется у меня так: Подключил индикатор, надо библиотеку LCD 4 бит, нашел тут: http://easystm32.ru/indication/24-library-for-hd44780 кривоватая там задержка, увеличил на порядок, заработало: PA5, так как там ETR (недокументированный) пришлось освободить, "RS" вывод индикатора теперь на PA6, в библиотеке он "CD" тестовый кодик: Спойлер
void SystemInit(void) { RCC->CR |= RCC_CR_HSEON; /* Wait till HSE is ready */ while((RCC->CR & RCC_CR_HSERDY) != (RCC_CR_HSERDY)); RCC->CR &= ~(RCC_CR_HSION); // This is potentially a dangerous function as it could // result in a system with an invalid clock signal - result: a stuck system // Set the PLL up // First ensure PLL is disabled RCC->CR &= ~RCC_CR_PLLON; while ((RCC->CR & RCC_CR_PLLRDY)); // wait for PLL ready to be cleared // set PLL multiplier to 6 (yielding 48MHz) // Warning here: if system clock is greater than 24MHz then wait-state(s) need to be // inserted into Flash memory interface FLASH->ACR |= FLASH_ACR_LATENCY; // Turn on FLASH prefetch buffer FLASH->ACR |= FLASH_ACR_PRFTBE; RCC->CFGR &= ~(RCC_CFGR_PLLMUL_3 | RCC_CFGR_PLLMUL_2 | RCC_CFGR_PLLMUL_1 | RCC_CFGR_PLLMUL_0); RCC->CFGR [code]|= (RCC_CFGR_SW_PLL | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL_2); // Need to limit ADC clock to below 14MHz so will change ADC prescaler to 4 RCC->CFGR |= RCC_CFGR_ADCPRE; // Do the following to push HSI clock out on PA8 (MCO) // for measurement purposes. Should be 8MHz or thereabouts (verified with oscilloscope) /* RCC->CFGR |= (RCC_CFGR_MCO_2 | RCC_CFGR_MCO_0); RCC->AHBENR |= RCC_AHBENR_GPIOAEN; GPIOA->MODER |= GPIO_MODER_MODER8_1; */ // and turn the PLL back on again RCC->CR |= RCC_CR_PLLON; // set PLL as system clock source RCC->CFGR |= RCC_CFGR_SW_1; }
int main(void) { // Power up PORTA RCC->AHBENR |= RCC_AHBENR_GPIOAEN; GPIOA->MODER |= (GPIO_MODER_MODER0_0 | GPIO_MODER_MODER1_0 | GPIO_MODER_MODER2_0 | GPIO_MODER_MODER3_0 | GPIO_MODER_MODER4_0 | GPIO_MODER_MODER6_0 ); // make bits an output lcd_init(); //Инициализируем дисплей lcd_out("Hello"); //Выводм надпись в нулевую строку lcd_set_xy(0,1); //переводим курсор в первую строку lcd_out("Radiokot"); for (;;) { } }
з.ы. индикатор из старых запасов, без подсветки - когда то давно по цене мусора купил мешок чужих неактульных устройств на AT89C2051 (SOIC) с такими индикаторами, индикаторы разошлись, один оставил для экспериментов, пригодилось.
Прежде всего, спасибо ТС Олегу за информативные сообщения о новинках электроники в этой теме. Это далеко не единственный мой источник подобной информации, но получилось так, что уже второй раз именно его сообщения подвинули меня для более подробного ознакомления с соответствующими изделиями при выборе элементной базы. В первый раз это было при упоминании здесь несколько лет назад изделий PSoC фирмы Cypress – сейчас я их вовсю использую. Теперь это ARM микроконтроллеры фирмы Infinion.
Для некоторых моих проектов представляют интерес МК в мелких корпусах QFN24/QFN16. Таковые выпускаются разными производителями, но МК XMC13xx выделяются среди других архитектуры ARM-CM0 наличием матeматического ко-процессора и возможностью тактирования некоторых периферийных модулей (в частности ко-процессора) на частоте выше, чем частота тактирования ядра (и шины APB). Ко-процессор ускоряет процесс вычисления частного и остатка при операции 32-битного целочисленного деления, а также ряда тригонометрических и других функций и вычислений связанных с ними. Так, согласно апноуту AP32307 фирмы, ускорение вычисления частного с ко-процессором по сравнению со стандартными библиотеками составляет 3 – 7 раз в зависимости от компилятора. При этом выигрыш при вычислении косинуса составляет 20 - 40 раз по числу тактов процессора.
Напомню, что в архитектуре CM0 отсутствует аппаратный делитель (есть только однотактовый умножитель). Делителем оснащены МК архитектуры CM3 и выше, но и в них отсутствует аппаратное вычисление других функций. Подчеркну, что в данном случае меня интересуют QFN корпуса с не более, чем 24 выводами. На настоящий момент мне известна лишь одна модель МК ARM-CM3 в QFN24, именно EFM32TG1xx фирмы Silicon Labs (если кто знает модели CM3 других фирм в таких корпусах, буду признателен за информацию). Однако, у них из 24 выводов корпуса целых 7 задействованы под выводы питания/блокирующих конденсаторов/ресета, в то время как у XMC13хх под это задействованы всего 2.
После предварительного знакомства с документацией я предметно поговорил с представителем фирмы на Arrow Tech Expo (про неё будет отдельный пост здесь). Он дал мне советы по среде отладки и для ускорения первого знакомства с семейством XMC и подарил отладочную платку XMC-2GO. Это, пожалуй, самая маленькая отладочная плата на рынке, также одна из самых дешёвых - всего 7 USD не в Китае, что дешевле суммарной стоимости компонентов на ней при покупке в розницу. Её длина сравнима со спичкой и выполнена она в виде брелка. На плате помимо МК установлен внутрисхемный отладчик JLink. Спойлер Хотя МК на плате не совсем тот, что меня интересовал, он имеет на борту 64К флеша и 16К RAM. Надо будет заказать ещё такую и перепаять на ней МК на XMC1301/1302. Пока-же я снял брелочный шнурок с платы и распаял колодки для установки платы на безпаячную монтажку (колодки к плате не прилагаются). Для сравнения рядом показана моя самодельная платка для МК Kinetis MKL03 в QFN16 с разъёмом для программирования. Спойлер Помимо стандартных IDE, таких как IAR или Keil, МК фирмы поддерживаются её собственным IDE DAVE, основанным на платформе Eclipse. Именно её мне и посоветовал представитель фирмы для первого знакомства. В состав DAVE входит графический конфигуратор ресурсов наподобии Cube-MX, позволяющий сконфигурировать ресурсы и выводы корпуса за несколько кликов мышкой. В придачу на вебсайте фирмы предлагается бесплатная и полноценная версия системы uC-Probe без всяких ограничений, заточенная эксклюзивно под МК фирмы. Это приложение для Windows позволяет мониторить различные процессы в МК в режиме реального времени и служит дополнением к отладчику. Разработано оно фирмой Micrium (сейчас она вошла в состав Silicon Labs) – я по ней в прошлом посетил уже дважды учения. Кто не знает что это такое – лучше попробовать свободную версию, работающую в течении минуты после каждого запуска. В общем, первое знакомство с семейством XMC состоялось и впечатление оставило положительное.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Пробуем сделать частотомер на STM32F030F4P6. Прямой счет. В принципе в Протеусе уже было все проверено, но было проверено то на серии F1, а у нас F0 и еще реальное железо. Таймера F1 и F0 практически очень похожи. Решил упростить - обойтись вообще без прерываний - все равно выводим результаты раз в секунду. TIM3 - секундный таймер, когда в режиме OPM програмно производим его запуск - он разрешает счет TIM2, по истечении секунды TIM3 останавливается и TIM2 далее не считает - в счетчике TIM2 искомое значение частоты. TIM2 32 бит - за 1 сек имхо не переполнится. Время измерения легко переключить - например на 0,1 сек или 10 сек. программка: Спойлер
void SystemInit(void) { RCC->CR |= RCC_CR_HSEON; /* Wait till HSE is ready */ while((RCC->CR & RCC_CR_HSERDY) != (RCC_CR_HSERDY)); RCC->CR &= ~(RCC_CR_HSION); // This is potentially a dangerous function as it could // result in a system with an invalid clock signal - result: a stuck system // Set the PLL up // First ensure PLL is disabled RCC->CR &= ~RCC_CR_PLLON; while ((RCC->CR & RCC_CR_PLLRDY)); // wait for PLL ready to be cleared // set PLL multiplier to 6 (yielding 48MHz) // Warning here: if system clock is greater than 24MHz then wait-state(s) need to be // inserted into Flash memory interface FLASH->ACR |= FLASH_ACR_LATENCY; // Turn on FLASH prefetch buffer FLASH->ACR |= FLASH_ACR_PRFTBE; RCC->CFGR &= ~(RCC_CFGR_PLLMUL_3 | RCC_CFGR_PLLMUL_2 | RCC_CFGR_PLLMUL_1 | RCC_CFGR_PLLMUL_0); RCC->CFGR |= (RCC_CFGR_SW_PLL | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL_2); // Need to limit ADC clock to below 14MHz so will change ADC prescaler to 4 RCC->CFGR |= RCC_CFGR_ADCPRE; // and turn the PLL back on again RCC->CR |= RCC_CR_PLLON; // set PLL as system clock source RCC->CFGR |= RCC_CFGR_SW_1; }
for (int i = 10; i >= 0; i--) { buf[i] = '0' + val % 10; val /= 10; if (!val) return buf + i; } return 0; }
void TIM3_Init(void) { TIM3->PSC = 48000-1; //48000000/48000 = 1000Hz TIM3->ARR = 1000-1; //1000/1000 = 1Hz /*Enable - the Counter enable signal, CNT_EN, is used as trigger output (TRGO). It is useful to start several timers at the same time or to control a window in which a slave timer is enabled. The Counter Enable signal is generated by a logic OR between CEN control bit and the trigger input when configured in gated mode. When the Counter Enable signal is controlled by the trigger input, there is a delay on TRGO, except if the master/slave mode is selected (see the MSM bit description in TIMx_SMCR register).*/ TIM3->CR2 |= TIM_CR2_MMS_0; /*Counter stops counting at the next update event (clearing the bit CEN) Counter enabled*/ TIM3->CR1 |= TIM_CR1_OPM; }
void TIM2_Init() { /*External clock mode 2 enabled. The counter is clocked by any active edge on the ETRF 002: Internal Trigger 2 (ITR2) TIM3_TRGO*/ TIM2->SMCR |= TIM_SMCR_ECE | TIM_SMCR_TS_1; /*101: Gated Mode - The counter clock is enabled when the trigger input (TRGI) is high. The counter stops (but is not reset) as soon as the trigger becomes low. Both start and stop of the counter are controlled.*/ TIM2->SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_2; /*010: Update - The update event is selected as trigger output (TRGO). For instance a master timer can then be used as a prescaler for a slave timer.*/ TIM2->CR2 |= TIM_CR2_MMS_1; TIM2->CR1 |= TIM_CR1_CEN; }
void GPIO_Init() { GPIOA->MODER |= (GPIO_MODER_MODER0_0 | GPIO_MODER_MODER1_0 | GPIO_MODER_MODER2_0 | GPIO_MODER_MODER3_0 | GPIO_MODER_MODER4_0 | GPIO_MODER_MODER5_1 | /*Select alternate function mode */ GPIO_MODER_MODER6_0 ); /*make bits an output*/ /**TIM2 GPIO Configuration PA5 ------> TIM2_ETR */ /*Configure gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port. Possible values are from AF0 to AF7 depending on target. GPIOA->AFR[0] |= ((((Pin * Pin) * Pin) * Pin) * Alternate));*/ /*PA5 Select alternate function 2*/ GPIOA->AFR[0] |= (((((uint32_t)(1<<5) * (uint32_t)(1<<5)) * (uint32_t)(1<<5)) * (uint32_t)(1<<5)) * (uint32_t)2); //=0x00200000 }
int main(void) { // Power up PORTA, TIM2, TIM3 RCC->AHBENR |= RCC_AHBENR_GPIOAEN; RCC->APB1ENR |= RCC_APB1ENR_TIM2EN | RCC_APB1ENR_TIM3EN; GPIO_Init(); lcd_init(); //Инициализируем дисплей lcd_out("Frequency"); //Выводм надпись в нулевую строку TIM2_Init(); TIM3_Init(); for (;;) { TIM2->CNT = 0; TIM3->CR1 |= TIM_CR1_CEN; while((TIM3->CR1 & TIM_CR1_CEN) == TIM_CR1_CEN) {} lcd_set_xy(0,1); //переводим курсор в первую строку lcd_out(" "); //clear lcd_set_xy(0,1); //переводим курсор в первую строку lcd_out(u32ToStr(TIM2->CNT)); lcd_out("Hz"); } }
Вроде как совсем не сложно получилось. Главное теперь частоту теперь найти, чтоб измерять. Нашел у себя кварцевый генератор 8.00000МГц, 3В питание - для тестов пойдет. Вот что показал наш частотомер: Показания иногда прыгают 1 Гц. От температуры (палец на кварце отладчной платы) показания увеличиваются - можно организовать измерение температуры с помощью кварца. Для проверки возможностей железа это имхо не принципиально.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
нашел на AVR частотомер, метод измерения несколько отличается, но не суть http://chipenable.ru/index.php/programm ... llere.html ну что сказать - труднее было раньше делать хоббийный частотомер, все таймера (3) похоже пришлось задействовать прерывания, переполнения, unsigned long, unsigned long long...
нашел на AVR частотомер, метод измерения несколько отличается, но не суть http://chipenable.ru/index.php/programm ... llere.html ну что сказать - труднее было раньше делать хоббийный частотомер, все таймера (3) похоже пришлось задействовать прерывания, переполнения, unsigned long, unsigned long long...
И максимально измеряемая частота на AVR меньше примерно в 3.5 раза относительно F0 и раз в 5 относительно F1.
ps. Код наглядно демонстрирует насколько сложны таймеры STM32, аж 4 регистра пришлось задействовать, а в простейшем случае хватило бы и трех. Это к тому, что некоторые рассказывают будто одни эти таймеры сложнее AVR в целом Конечно есть в них и более сложные режимы, но никто их использовать не заставляет...
Последний раз редактировалось aen Вт сен 19, 2017 10:08:19, всего редактировалось 1 раз.
Откуда эта непобедимая любовь к частотомерам? Стесняюсь спросить о сфере их применения... Когда занимался сантиметровым и верхним дециметровым диапазонами, частотомер доставал с полки раза 2 в год, когда сдавал тему представителю заказчика. А радиолюбителю..., ну разве часы откалибровать быстро, ну еще цифровую шкалу приемнику сбацать. В первом случае частота совсем низкая, а во втором не нужно высокое разрешение и единственный корпус за 5...10 рублей на входе дополнительно к МК (все равно формирователь на россыпи делать) решает вопросы верхней частоты радикально. Это я к тому, что доказывать на этой основе что АРМ лучше Атмела просто смешно. Никаких принципиальных отличий там нет. Реализуемо примерно одинаково на обеих платформах. Дело вкуса.
чукча не читатель - тут начало: viewtopic.php?p=3179216#p3179216 Отвлечемся немного - интересный семинар (имхо) от ST. STM32 hands-on workshop: Connect your long-range network to the cloud Полный день практического семинара Этот 1-дневный семинар включает в себя 3 различных практические тренинга эксперта STM32 о том , как подключить приложение IoT к облаку с помощью маломощного глобальной сети (LPWAN). Вы будете работать на платформе разработки STM32, полностью LoRa® и Sigfox совместимыми и узнаете , как создать свою собственную рабочую область на облачных вычислений службы Microsoft Azure.
Целевая аудитория Аппаратные и программные инженеры работающие над приложениями IoT иследующие возможности соединения облака через LPWAN.
Программа * Как настроить среду разработки STM32 * Технология указания для подключения STM32 на основе приложения к LPWAN * Основы LoRa® и Sigfox технологий * Практический опыт и примеры для репликации в Ваших помещениях * Прямой контакт с инженерно-техническим персоналом STM32 Бесплатно. Где, когда, подробнее, регистрация тут: http://www.st.com/content/st_com/en/abo ... cloud.html главное 12:00–13:00 Lunch не пропустить. видео "STM32L0 LoRa discovery kit Getting started" тут: https://www.youtube.com/watch?v=MgbTraRq0K8
Эта любовь иррациональна, как любовь к почтовым маркам или значкам...
нет, не совсем так. филателист редко когда хвалится количеством своих марок, а тут налицо чисто количественные характеристики, подтверждающие ЧСВ: частоту можно мерить с точностью до 1Гц в диапазоне до 10МГц! это ж как круто! с точностью в 0,5% такую частоту пусть лошары меряют (50 кГц)
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Откуда эта непобедимая любовь к частотомерам? Стесняюсь спросить о сфере их применения... Когда занимался сантиметровым и верхним дециметровым диапазонами, частотомер доставал с полки раза 2 в год, когда сдавал тему представителю заказчика. А радиолюбителю..., ну разве часы откалибровать быстро, ну еще цифровую шкалу приемнику сбацать.
Только недавно была тема, просили помочь настроить для AVR ШИМ на 30КГц, вот там бы частотомер точно не помешал Еще можно время выполнения кода косвенно измерять, даже я так иногда делаю, например, когда оптимизировал эмулятор спектрума, то отключал синхронизацию, периодически генерил на ножке импульс и измерял частоту кадров. Можно сделать небольшое изменение и получить +30 фпс А в целом согласен, потому и говорил, что частотомер как самостоятельное устройство для меня достаточно уныл...
Цитата:
В первом случае частота совсем низкая, а во втором не нужно высокое разрешение и единственный корпус за 5...10 рублей на входе дополнительно к МК (все равно формирователь на россыпи делать) решает вопросы верхней частоты радикально. Это я к тому, что доказывать на этой основе что АРМ лучше Атмела просто смешно. Никаких принципиальных отличий там нет. Реализуемо примерно одинаково на обеих платформах. Дело вкуса.
Думаю многим любителям 8-ми ногих тинек будет очень сложно доказать, что добавление единственного корпуса будет означать отсутствие принципиальных отличий Еще и точность после делителя упадет...
Не точность, милостивый государь, а разрешение. Да и то при определенных условиях. Если измерять захватом с включенным предделителем, то никуда разрешение не упадет... Как Вы уже знаете.
Не точность, милостивый государь, а разрешение. Да и то при определенных условиях. Если измерять захватом с включенным предделителем, то никуда разрешение не упадет... Как Вы уже знаете.
Допустим у мк предел измерений частоты 10MHz, а хочется измерять в 4 раза больше, тогда ставим делитель на 4, подаем 7 импульсов на частоте близкой к максимальной, ведь ради этого делитель и ставили, сколько насчитает мк?
Последний раз редактировалось aen Вт сен 19, 2017 11:59:34, всего редактировалось 1 раз.
Зачем допускать, если можно посмотреть в даташит. Опять же 10/4=2500000 гц, сиречь за 0,25 сек получим разрешение в 6 полных десятичных разрядов. Вы полагаете, что точность будет выше? И что Вы будкте применять в качестве эталона? Гиацинт?
Ну теперь можно опробовать и другие методы измерения частоты. Прямой счет, как мы убедились, оказалось легко реализовать. Вот еще нашел частотомер на ATtiny2313: http://www.mshopf.de/proj/avr/freq_meter.html утверждается что это reciprocal метод - надо разбираться, изучать матчасть. Так как ресурсов ATtiny2313 маловато - автор похоже применил самописную 64 бит математику на ассемблере. Про точность и проблемы реализации в железе по ссылке README.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 53
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения