Jump to content
ViktorS

Сравнение Данных По Usart И Нажатий Кнопки

Recommended Posts

Доброго времени суток!

Я по USART передаю цифру, например 5, ко второму МК. Также ко второму МК подключена кнопка и настроен он на прерывания от нее. В нем (втором МК) хочу сравнить данные пришедшие от первого МК и количество нажатий кнопки. И после их совпадения, подать логическую единицу или ноль на любую ножку, например PC1.

МК - две восьмые Атмеги

вот часть кода:

\\данные из другого МК по USART

i=UDR;

i=5;

int num0 = 0;

\\вектор прерывания. который при срабатывании увеличивает num0 на один

ISR( INT0_vect) {

num0 ++;

}

\\ сам код без инициализации юсартов и векторов прерываний с ними все в порядке, проверял

\\ проблема в самом коде или в векторе прерывания

int main(void)

{

while(1)

{

if (num0 = i)

{

PORTC |= (1<<PC1);

}

}

}

не работает сравнение! Что делаю не так?

Edited by ViktorS

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

Ну и прежде чем задавать вопрос на форуме стоит прогнать код в пошаговой отладке и определить, какой конкретно участок не работает.


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

Безмостовые ККМ для 99% КПД!

Схема коррекции коэффициента мощности (ККМ) на основе так называемого «тотемного столба» (Totem Pole) обладает минимально возможными потерями и потенциально может обеспечить самые жесткие требования к энергоэффективности источников питания. Компания Wolfspeed представляет референсную разработку – плату ККМ CRD-02AD065N на базе собственных карбид-кремниевых MOSFET и диодов с наилучшими в отрасли характеристиками.

Подробнее

тип данных и там и там char

переделал код.

while(1)

{

PORTC = num;

PORTB = i;

if (num == i){

PORTC = (1<<PC0);

}

}

строки

PORTC = num;

PORTB = i;

выводят на ножки числа. i - приходи с другого микроконтроллера. num - счет нажатий кнопки. когда ножки двух портов одинаково выдают сигнал, то условие срабатывает. Если удалить эти строки, то условие срабатывает с самого начала симуляции. Хотя числа не равны!!!

Почему ?

Edited by ViktorS

Share this post


Link to post
Share on other sites

Гибридные IGBT - сила Si и SiC в одном корпусе!

Компания Infineon представила новые гибридные IGBT-транзисторы на 650 В, которые сочетают в себе преимущества технологий TRENCHSTOP и CoolSiC. Использование SiC-диода Шоттки позволяет значительно расширить возможности IGBT и снизить уровень энергии, необходимой для включения транзистора (Eon), а также уменьшить потери на переключение.

Подробнее

Вы сами то поняли что написали ? Я раз 10 прочитал, так и не понял о чём идёт речь. Ну неужели трудно нормально объяснить, чтобы люди не мучились с перевариванием этой каши ? :wall:

Ну и второе. Вам уже сказали - прогоните свой код в режиме отладки и найдите конкретное место проблемы.

Share this post


Link to post
Share on other sites

Вебинар «Параметры выше, цена ниже. Обновление в линейке AC/DC- и DC/DC-преобразователей MORNSUN» (26.01.2021)

Приглашаем 26 января на бесплатный вебинар, посвящённый преимуществам и отличиям новых источников питания и DC/DC-преобразователей Mornsun. На вебинаре будут рассмотрены изолированные и неизолированные DC/DC-преобразователи последнего, четвертого, поколения (R4) и компактные модульные источники питания второго и третьего поколений (семейства LS/R3 и LD/R2) на плату. Рассмотрим новую группу продукции – встраиваемые источники питания в кожухе.

Подробнее

Вы сами то поняли что написали ? Я раз 10 прочитал, так и не понял о чём идёт речь. Ну неужели трудно нормально объяснить, чтобы люди не мучились с перевариванием этой каши ? :wall:

Ну и второе. Вам уже сказали - прогоните свой код в режиме отладки и найдите конкретное место проблемы.

Да, Вы абсолютно правы! Можно эту тему удалить? потому что, как я понимаю, эта тема уже не сюда. А в раздел программирования. Я заново там ее создам и стараюсь болееточно описать. Спасибо.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Принесли данное зарядное в ремонт, до меня "ковыряли". При поиске неисправностей заменил полевик, шим и токовый резистор. Начало запускаться но с уходом в защиту. Выпаял из снаббера конденсатор, был не родной, без нагрузки работает как надо, под нагрузкой не запускал. В интернете схемы нет. Может у кого есть такое же, посмотрите пожалуйста номиналы снабберной цепи С13, R4  и токового R6. 
    • Китайские GC-1028 считаются одним из видов копии Garrett Ace 250. Т.е. датчики от этой популярной модели должны подойти. Придётся только разъём перепаять. "А как это сделать" - кому надо, тот и разбирается. Информации на профильных форумах по МД и кладоискательству полно -  люди собирали и самодельные датчики для этих приборов, и адаптировали имеющиеся. Купить готовую катушку - разные там "о-эл-икс", "авито" и ebay никто ещё не закрыл...
    • не смейте, порежу на ремни Я знаю как щелкает акм 
    • Дней через 10-12, если все нормально, положу схему с петлевым под 80 дБ на 20 кГц, в инверте, с защитой по току, так же с тройкой на выходе и балансировкой нуля. Макет уже работает. Искажения в симуляторе 0.0003% на 20 кГц, 80 Вт.
    • @BAFI , "многа букафф", половину которых я, честно говоря, не понял. Хотя бы функциональную схему приведите (подобно моей).
    • А чьи - мои, что ли? Мне своих хватает.
    • помогите найти на плате ключ (транзистор) шумоподавителя

  • Модуль приемопередатчика LoRa SX1278, UART, 433 МГц, 1 Вт (30 дБм), дальность до 8км

  • Similar Content

    • By Timofey Shilov
      Пытаюсь разобраться в программировании этого контроллера и при попытке настроить USART для приема/передачи данных возникла проблема:
      Пытаюсь принять байт и после нажатия кнопки отправить его обратно, но на выходе получается совсем не то что ожидаю.

      При отправке 0 должно вернуть 0, но возвращает вот это. В чем может быть проблема?
      ASCII                                BIN                   DEC         HEX

      Подозрения падают на настройку baud rate, но вроде всё как в мануалах.

      Полный код:
      #include "stm32f4xx.h" #include "stm32f4xx_hal_gpio.h" #include "stm32f4xx_hal_rcc.h" #include "stm32f4xx_hal_cortex.h" #include "stdint.h" #include "math.h" //define Internal RC frequencies #define XTAL 16000000UL //define busses prescalers #define AHB_PRE 1 #define APB1_PRE 2 #define APB2_PRE 1 #define SysTicksClk 10000 //calculate peripheral frequencies #define SYSCLK 84000000 #define AHB SYSCLK/AHB_PRE #define APB1 AHB/APB1_PRE #define APB1_TIM APB1*2 #define APB2 AHB/APB2_PRE #define APB2_TIM APB2*1 #define SysTicks AHB/SysTicksClk #define USART_BAUDRATE 19200 #define BUF_LEN 1 struct Data { char Msg[BUF_LEN]; } Message; void USART2_IRQHandler(void) { if (!(USART2->SR & USART_SR_TXE)) { if (Message.Msg[0] == (char)0x00) GPIOA->ODR |= 1 << 1; if (Message.Msg[0] == (char)0x01) GPIOA->ODR |= 0 << 1; } if (USART2->SR & USART_SR_RXNE) { Message.Msg[0] = USART2->DR; } } int main() { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOBEN; GPIOA->MODER |= 1 << 1*2; //Set GPIOA pins output mode GPIOB->MODER |= 0 << 0*2; GPIOA->MODER |= 0xA0; GPIOA->AFR[0] |= 0x7700; RCC->APB1ENR |= RCC_APB1ENR_USART2EN; USART2->CR1 |= USART_CR1_UE; //usart enable USART2->CR1 |= USART_CR1_TE; //transmitter enable USART2->CR1 |= USART_CR1_RE; //receiver enable float div = (float)APB1 /(16*(float)USART_BAUDRATE); int integer = APB1 / (16*USART_BAUDRATE); float flo = (div - (float)integer)*16; int floatt = round(flo); USART2->BRR = (( integer << 4 ) + floatt); NVIC_EnableIRQ(USART2_IRQn); USART2->CR1 |= USART_CR1_TXEIE; USART2->CR1 |= USART_CR1_RXNEIE; int i; while(1) { if (!(GPIOB->IDR & GPIO_IDR_ID0)) { i = 1; } else { if(i == 1) { USART2->DR &= Message.Msg[0]; while(!(USART2->SR & USART_SR_TC)); i = 0; } } } }  
      Сама схема:

    • By IgnatiusF
      Не удается проинициализировать работу UART2 на скорость 19200 бод.
      Не вызывается прервание совсем, отсылаются постоянно нули на всех скоростях, если ставить System clock switch в 01 (HSE). При работе от RC генератора выдает уже просто не то, что нужно. 
      Кварц рабочий, и вообще все работает, при использовании библиотек HAL.
      SysTick выключил потому, что были подозрения на конлфикт приоритетов.
      Внизу представлена именно та часть кода программы, которая не работает, то есть сам UART.
      Проект скоро сдавать, а использовать готовую библиотеку HAL не хочется совсем, уже несколько дней парюсь и не могу найти проблему. Попробовал разобраться что пишет в регистры HAL, однако не смог т.к. не хватает знаний, значения регистров все такие же, кроме PLL (не используется) и RCC_CR1 (в HAL почему-то полностью равен 0). Проверял передачей данных по UART. Регистр BRR не удалось считать т.к. он только для записи. У меня записано так:
      USART1->BRR = 0x412;  //20MHz/16/19200 = 65,104.
      Где искать следует ошибку?
    • By IgnatiusF
      На схеме программатора USBasp заметил подключенные порты RXD и TXD к разъему, и появился вопрос, а для чего они там? Знаю, что при помощи них можно передавать и принимать данные через UART/USART между устройствами, а можно ли используюя USBasp передавать информацию по UART от МК к компьютеру и наоборот? И если можно, то как?
    • Guest Александр
      By Guest Александр
      Добрый день
      Проблема с оценочной платой STM32F4-DISCOVERY в части работы USART
      суть вопроса
      по USART шлется и принимается блоки данных по 3 байта (в принципе сколько угодно) при этом если подключен USB разъем ST-LINKа то все работает должным образом (данные снуют туда сюда без проблем), но при отключении USB ST-LINKа данные из платы STM32F4-DISCOVERY идут а вот принимать данные плата отказывается (естественно подаю внешнее питание +5 вольт на одноименный контакт). Если кто сталкивался с подобной проблемой прошу хотя бы направить в сторону железа или софта.
      На плате STM32F4-DISCOVERY убраны перемычки SB11(T_NRST) и SB12(T_SWO) а так же отпаян резистор R68 (MCO). Плата при этом прошивается без проблем, и стартует при внешнем питании(не от USB ST-LINKа) тоже без каких то заморочек.
      код прикладывать на данный момент не вижу смысла там все просто, при чем при подключении USB ST-LINKа программа работает.
      Проект пишется на IARe, конфигурация формируется в STM32Cube.
      Заранее спасибо за ответ
    • By LoKeR
      Доброго времени суток, нашел хорошую статью Usart прием и отправка строки. Настроил на порт Usart3 перестал работать, попробовал на Usart2 перекинуть тоже не работает, как правильно переделать подскажите...
      stm32-uart-spl.rar
×
×
  • Create New...