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

ARV

Members
  • Постов

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

  • Посещение

  • Победитель дней

    19

Весь контент ARV

  1. Вам нужно разделять процесс управления ШИМ-ом и процесс формирования ШИМа. Управление делается в главном цикле, без прерываний (как вариант), генерация же делается по прерываниям. Т.е. главный цикл вторичен, он не мешает формированию ШИМа, потому что может быть прерван в любой момент. Поэтому в главном цикле в можете прекрасно использовать любые "медленные" функции вроде printf, делать сколь угодно долгие "тупые задержки" (в циклах) и вообще тратить ресурсы, как угодно. // где-то у вас есть код, где по прерываниям от таймера делаются выборки из массива синусов для управления ШИМ-ом // а здесь только та часть, которая ШИМ-ом управлеяет. uint8_t get_buton(void){ // в этой функции вы опрашиваете кнопки, давите дребезг // и возвращаете код нажатой кнопки } // а вот так выглядит ваш главный цикл while(1){ switch(get_button()){ case BTN_STOP: // кнопка "стоп" // здесь меняете переменные так, чтобы ШИМ выключился (или как вы там останавливаете) printf("STOP\n"); break; case BTN_FORWARD: // кнопка "вперед" // здесь задаете параметры ШИМа для разгона в одну сторону printf("FORWARD\n"); break; case BTN_REVERSE: // кнопка "назад" // здесь, очевидно, настраиваете ШИМ для вращения в обратную сторону printf("REVERSE\n"); break; } // далее делаете остальное, что надо в главном цикле } Как-то так в общих чертах. И никаких прерваний для кнопок, никаких printf-ов внутри обработчика прерываний, никаких задержек в прерываниях. Да, еще логичнее по кнопкам менять состояния в автомате состояний, если вы понимаете, о чем я, ведь процесс смены направления вращения должен быть растянут во времени... Поэтому логично не просто настраивать ШИМ, а менять его параметры плавно, пока не будет достигнута нужная скорость. Но это уже детали.
  2. https://t.me/rt_russian/45273 Документы, говорите, предъявлять нужно?
  3. https://t.me/rt_russian/45273 Документы, говорите, предъявлять нужно?
  4. Сколько там это "противостояние" длится? Месяц уже? Значит, как минимум 3000 арестованных должно быть, а если верить "сотням", то ближе к 10000. Интересно, способны ли местные околотки вместить столько заключенных?
  5. Ничего новенького, все по методичке: спровоцировать и снять на видео. Крайне лицемерно, между прочим, требовать показать удостоверение, в котором есть персональные данные работника полиции, и при этом эти самые данные затем использовать для угроз им и их семьям. Неспроста балаклавы стали носить - так ведь?
  6. И почему я не удивлен такому результату?
  7. Выживание гражданина после отравления его боевым веществом специально обученными людьми так же объявляет наши спецслужбы ни на что не годными. Вроде как наши заявили, что "на нашей территории в организме Навального "новичка" не было". Интересно, откуда он взялся в его организме после пребывания в Германии? Снова опыты на русских людях немцы ставят?!
  8. Вы или тему переименуйте, или придерживайтесь её. А то тема про Си и кнопки, а речь пошла про электронику и всякое такое...
  9. Проще всего будет заплатить тому, кто за вас все сделает.
  10. Вот этот процент и надо сделать самому. Потом 2, потом 3... постепенно нагрузку увеличивать надо. Вам прямо говорят: СДЕЛАЙТЕ САМИ, не ищите готовое! Не найдете все равно на 100% подходящее, снова на 1% споткнетесь и начнете страдать.
  11. Мне кажется, вам нужно все-таки заняться изучением Си. Простейшая задача, на 99% уже решенная, вами не может быть доведена до победного конца... Просто копипастя чужой код вы никогда не научитесь ничего делать самостоятельно. У вас же есть студия, в ней можно просимулировать исполнение программы, посмотреть, что происходит НЕ ТАК, как вам надо... Разобраться, что нужно изменить в коде, чтобы СТАЛО ТАК, как нужно... Кто сделает это за вас?!
  12. У вас не 8 кнопок? Тогда лишние биты надо маскировать внутри функции get_button();
  13. Так правильно или не правильно - это зависит от постановки задачи. Согласен, что обычно между нажатием кнопки и реакцией на это есть этап анализа. Но если хочется поделиться знаниями, надо оставлять "недосказанность", а иначе получится демонстрация знаний. Знания, как таблетку, не примешь, они появляются сами от напряжения мозга.
  14. Изначально я хотел показать, как следует делать по самому первому моему совету - с анализом кодов кнопок. Но потом поленился. Хотя и сейчас это можно сделать в порядке обучения. Меня ж критиковали за отсутствие switch - вот, можно и добавить
  15. Да. Это никогда не поздно. Да. Но как раз в этом зарыта собака "почему опрос кнопок в отдельной функции" - там легко сделать нужную проверку. Код демонстрационно-учебный, так что я не вижу оснований для его критики.
  16. Работает Конкретно вот этот код: #include <avr/io.h> #include <util/delay.h> uint8_t get_button(void){ uint8_t tmp = ~PIND; _delay_ms(10); if(tmp != (uint8_t)~PIND) return 0; else return tmp; } int main(void){ DDRB = 0xFF; // порт светодиодов на выход PORTD = 0xFF; // подтяжки на входы порта кнопок, кнопки на землю uint8_t tmp; uint8_t state = 1; while(1){ PORTB = state; // включаем светодиоды tmp = get_button(); if(tmp) state = tmp; // обновляем состояние } } Компилируется без ошибок:
  17. Потому, что ваш код ужасен. После того, как я исправил свой косячок, мой код отлично работает, не хуже вашего. И он прост и понятен.
  18. Ну... виноват. Косячок допустил. Но вот так 100% будет работать: #include <avr/io.h> #include <util/delay.h> uint8_t get_button(void){ uint8_t tmp = ~PIND; _delay_ms(10); if(tmp != (uint8_t)~PIND) return 0; else return tmp; } int main(void){ DDRB = 0xFF; // порт светодиодов на выход PORTD = 0xFF; // подтяжки на входы порта кнопок, кнопки на землю uint8_t state = 1; uint8_t tmp; while(1){ PORTB = state; // включаем светодиоды if(tmp = get_button()) state = tmp; // обновляем состояние, если нажата кнопка } } Светодиоды светятся, когда на порту высокий уровень, а кнопки замыкают порт на общий провод.
  19. У вас любовь к простыням кода? Те короткие примеры, что вам тут давал я и другие, не подходят, потому что слишком простые и ошибиться в них сложнее?
  20. Не знаю, кому в наше время может понадобиться городить свой вариант СВП, но если надо, то можно сделать, как я и говорил, чуть ли не на attiny25 : на ОУ сделать усилитель напряжения с максимумом 30 или сколько там надо вольт, на вход этого усилителя подавать сигнал с R-2R ЦАП на 595-ых регистрах, а на 597-ых регистрах можно сделать 100500 кнопок. Схема будет не сложной, хотя и объемной по числу корпусов. Но стоимость будет копеечная. Ну, конечно, можно и на МК с большим количеством ног и качественным ЦАПом...
  21. Потому что хочу помочь вам научиться программировать. Умение читать - это ваш навык, совершенствуйте его. Научитесь читать, научитесь и писать тоже.
×
×
  • Создать...