• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!

motoalex

Members
  • Публикации

    77
  • Зарегистрирован

  • Посещение

Репутация

-1 Плохой

О motoalex

  • Звание
    Осваивающийся
  • День рождения 20.06.1990

Контакты

  • ICQ
    447233720

Информация

  • Пол
    Мужчина
  • Интересы
    Гимнастика, лёгкий бег, турник, электроника,природа.
  • Город
    Донецк, Украина
  1. Stm32 Прием Данных По Usart И Вывод На Hd44780

    Огромное спасибо, тем, кто мне помог) Тему можно закрыть.
  2. Stm32 Прием Данных По Usart И Вывод На Hd44780

    Вы очень сильно мне помогли, все работает, как часики. хочу Вас попросить об последней просьбе.Как сравнить два массива (один в памяти, а другой принятый по usart). char massive[]={'S','U','P','R','I','M','A','1','2','3','4','5'}; // massive buffer *********************************** while(1) { if(f2==1) // флаг на конец строки { if (f4==0) флаг на работу с массивами { if (massive[i3]==str1[i3]) // сравниваем наши массивы { i3++; if(i3==12) { f4=1; //обнуляем флаг f3=1; // идем на печать строки в ЖКИ } } } if(f3==1) { LCD_Send_String8(0, str1); i3=0; f2=0; f3=0; } } } } В моем случае не правильно сравниваю данные в массиве. Точней не правильно пишу алгоритм.
  3. Stm32 Прием Данных По Usart И Вывод На Hd44780

    Огромное спасибо Вам, Уважаемый, сделал почти как Вы говорите,но есть пару нюансов: 1. sprintf(str1, "%s", USART_ReceiveData(USART2)); - не корректно выводит данные на ЖКИ, Я в прерывании по выставлению флага, сделал ещё одно условие и там пишу в Recieve_buff[Recieve_W]. И его уже вывожу на ЖКИ - всё славно. 2. Конец строки ловлю тоже в прерывании символом конца строки. Но есть ещё пару вопросов, когда лучше обнулять переменную Recieve_W буфера Recieve_buff[], так как выполнение этой операции в прерывании не всегда выводит последний отправленный символ.
  4. Здравствуйте уважаемые любители МК) Пытаюсь организовать такую задачу на STM32f407VG: 1. Принимаем данные по USART, помещаем их во временный буфер( Recieve_buff). 2. Если попадается символ '+' читаем (Recieve_buff) и записываем данные после '+' в массив данных (massive). 3. Выводим данные на жки wh1602. с 1 и 3 пунктом проблем как бы нет, но вот со вторым вовсе не клеится. К примеру: отправляю +suprima, после 1, а то и 3 отправки приходит только один символ 's', т.е. и не каждый раз выводятся данные. Прошу помощи у Гуру сообщества. Всем Благ! #include "main.h" uint16_t delay_count=0; uint32_t i; uint32_t i3; int i2=123; char str1[50]; uint8_t massive[256]; // massive buffer uint8_t Recieve_buff[256]; // recieved buffer uint8_t Recieve_W=0, Recieve_R=0, Recieve_C=0; char Send_buffer[100]; uint8_t Send_count=0; void SysTick_Handler(void)// counter { if (delay_count > 0) { delay_count --; } } void(delay_ms(uint16_t delay_temp)) // schitayem nashe vremya, kotoroe zadano v osnovnom tele { delay_count = delay_temp; while(delay_count) {} } //---------------------------------------------------// //recieved data interrupt //---------------------------------------------------// void USART2_IRQHandler(void) { if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET) // if flag interrupt set up we will do next... { USART_ClearITPendingBit(USART2, USART_IT_RXNE); // reset interrupt Recieve_buff[Recieve_W] =USART_ReceiveData(USART2); Recieve_W++; Recieve_C++; } } //---------------------------------------------------// int main(void) { USART2_init(); SystemCoreClockUpdate(); SysTick_Config(SystemCoreClock/1000);// 1ms delay_ms(50); LCD_ini(); while(1) { if(Recieve_C>0) { if(Recieve_buff[Recieve_R++]=='+') { massive[i3++]=Recieve_buff[Recieve_R++]; sprintf(str1, "%s", massive); //sprintf(str7, "%s %d %s", "one", i2, str); LCD_Send_String8(0,str1); } Recieve_C--; Recieve_R++; } } }
  5. Энкодер + Шаговый Двигатель

    В общем сменил компилятор CVAVR на AVR Studio 6.1 и все заработало. Проблема в том, что код у них отличается и придется все наново лопатить. Всем спасибо!
  6. Энкодер + Шаговый Двигатель

    Ребята запустил два таймера ( Т0 и Т1), но работает к сожалению только один (Т1). А второй завис. Прошивку прилагаю. menu.rar
  7. Энкодер + Шаговый Двигатель

    Исправил! Ребята а кто может подсказать по таймерам в code wizard Интересует Timer0: 1. Во вкладке clock source ( есть три параметра: system clock; T1 pin Falling Edge; T1 pin Rising Edge) - в первом случае считает от кварца, со второго и третьего по спаданию или возрастанию значения, где (порт или нога МК) и какая величина должна изменяться? 2. Вкладка MODE, что к чему не пойму? 3. Вкладка OUTPUT: Toggle on compare match - переключение по совпадению; Clear on compare match - Очистить, по совпадению; Set on compare match - Установить по совпадению. Как их можно использовать, точней как они работают? 4. Ну и последнее, есть два окна: Timer Value и Compare, что сделать, чтобы у меня прерывание выполнялось 1 раз за секунду. В Timer2 я брал значение Clock Value и переводил его в 16-ный код, получал 4 числа после их записывал в окно Compare, в timer0 в это окно помещается только два значения. Спасибо, тем кто откликнулся! menu.rar
  8. Энкодер + Шаговый Двигатель

    Понял, а как изменить код, чтобы он выполнял только по прерыванию столько раз, сколько передает энкодер?
  9. Энкодер + Шаговый Двигатель

    Смотрите, цикл будет выполняться пока значение посередине не станет ложным, т.е., когда будет i=2, цикл for должен завершиться и программа должна выполняться дальше!
  10. Энкодер + Шаговый Двигатель

    Дико извиняюсь, когда писал тему, выбрал файл, но не прикрепил его!
  11. Энкодер + Шаговый Двигатель

    Ну это да, где конкретно стратил, и почему -1 поставили?
  12. Энкодер + Шаговый Двигатель

    Всем привет! Поставил задачу управление шаговым двигателем комбинированными импульсами с помощью энкодера. Двигатель 28byj-48; драйвер ULN2003; компилятор Code Vision Avr. Значит задача такова: при вращении в определенном направлении программа определяет значение переменной Vol (+... или -...) также ведем подсчет импульсов т.е. если наш энкодер выполнил 30 шагов, значит и шаговый должен сделать 30 циклов импульсов. Написал программу, но вращаю энкодер, двигатель вращается и не останавливается, закинул в цикл for код для вывода инф. на ЛСД переменная (i) скачет, что дурная. Т.е. переменная (Vol) выбила на дисплее 2, а переменная (i) прыгает от 0 до 2. В чем может быть проблема? Спасибо! menu.rar
  13. Меню Для Часов

    Спасибо ребята, разобрался! Если кому нужен будет код обращайтесь!
  14. Меню Для Часов

    Ну ребята, куда пропали?
  15. Меню Для Часов

    Не совсем понял, а как программно (кусок кода) вернуться в предыдущее меню, с сохранением заданного времени я этого как раз понять и не могу. Проверьте пожалуйста мой синтаксис и напишите кусок кода который бы возвращал программу в меню с сохранением измененных данных. lcd and timer.txt