-=FISHER=-

Members
  • Content count

    706
  • Joined

  • Last visited

Community Reputation

5 Обычный

About -=FISHER=-

  • Rank
    Завсегдатай

Информация

  • Город
    Уфа

Электроника

  • Стаж в электронике
    Менее года
  • Сфера радиоэлектроники
    Автоэлектрика

Recent Profile Visitors

1234 profile views
  1. Всем привет! Нашел в интернете пример для создания программного таймера, всё отлично заработало. Функция его создания выглядит так: enum StateTimer {IDLE, ACTIVE, DONE}; //состояния таймера - неработающий, активный, отработавший typedef struct{ unsigned long time; //через какое время сработает таймер unsigned int period; //период повторения enum StateTimer state; //текущее состояние void (*pFunc)(void); //указатель на функцию }SoftTimer; void CreateTimer(SoftTimer *CurSoftTimer, unsigned int time, unsigned int period, enum StateTimer state, void (*pFunc)()) { SoftTimers[AmountTimers] = CurSoftTimer; CurSoftTimer->time = time; CurSoftTimer->period = period; CurSoftTimer->state = state; CurSoftTimer->pFunc = pFunc; AmountTimers++; } В качестве функции, которая будет вызываться, когда время таймера истечет я сначала использовал обычную, без аргумента. И создавал таймер вот таким образом: CreateTimer(&Timer_CH1_Rise, timers_time[0], 0, IDLE, TimerDone); //создание таймера Всё прекрасно работало, но теперь у меня возникла необходимость вызывать при сработке таймера функцию с аргументом и я делаю это вот таким образом: CreateTimer(&Timer_CH1_Fall, timers_time[1], 0, IDLE, TimerDone(1)); //создание таймера Однако Atmel Studio теперь ругается на эту строчку и выдает мне ошибку invalid use of void expression Я понимаю что прикол кроется в указателях, но не могу разобраться самостоятельно что именно я делаю не так, помогите пожалуйста.
  2. Управление ШИМ по USART

    Изменено Проблема была в несоответствии скоростей. На модуле была скорость 38400, а в терминале на компьютере 115200. синхронизировал и ошибки ушли.
  3. Управление ШИМ по USART

    @artos5 в общем видимо Вы очень правы на счёт: Сейчас пытаюсь освоить передачу команд со смартфона через Bluetooth на МК AtMega8, в частности управлять ШИМ как Вы наверное догадались)) И вот чтобы исключить вероятность глючности софта, передаю шестнадцатиричные команды со смартфона через программу Bluetooth Terminal на связку модуля HC-05 и USART-USB переходника FT232RL. И в итоге с заведомо исправным софтом у меня частенько прилетает какой-то мусор, вместо того байта что я отправил! Как это можно объяснить и самый главный вопрос как от этого избавиться? Я 16 раз подряд отправил одну и ту же команду 0x7B (123 - в десятичной системе), и как видно 3 раза из 16 терминал принял ошибочные данные. А это почти 19% ошибок. Возможно ли с этим бороться только на стороне приёмника и как именно?
  4. Управление ШИМ по USART

    Но фактически если я присваиваю значения от 0 до 255 сразу регистру OCR1A, то 0 это будет минимальная скважность, а 255 максимальная? Просто если идти плавно от 0 к 255, то получается как бы меньшая разрешающая способность?
  5. Управление ШИМ по USART

    Вроде как в даташите написано что OCR1A это 16 битный регистр, (точнее регистровая пара OCR1AL и OCR1AH), и значит может принимать значения от 0 до 65535. Разве в таком случае значение 255 будет устанавливать ШИМ в максимум?
  6. Управление ШИМ по USART

    Хорошо, а если у меня только 1 канал ШИМ, и я просто передаю по UART байт данных который содержит значение регистра OCR1A в диапазоне 0-255 и сразу же в прерывании присваиваю это значение регистру OCR1A? Здесь всё правильно? Всё должно корректно работать? ISR(USART_RXC_vect) { OCR1A = UDR; }
  7. Управление ШИМ по USART

    Всем привет! Я уже ранее создавал тему (можно удалить ВОТ ЭТУ). Теперь вопрос немного изменился, как правильно изменять значения регистров аппаратной ШИМ (OCR1A и OCR1B МК AtMega8 через USART)? Делаю это в прерывании по приёму USART с помощью вот такого кода, который разделяет посылки на два канала ШИМ 0 (OCR1A) и 1 (OCR1B): USART инициализирован следующим образом: PWM инициализирован следующим образом: И всё вроде бы работает, но очень не стабильно и через раз. Что я делаю не правильно, подскажите пожалуйста.
  8. AtMega8 + Bluetooth HC-05 + MIT App Inventor 2

    В общем использовал Ваш пример, всё в целом заработало, только вот работает немного глючно. Чтобы не читать много букв, посмотрите пожалуйста короткое видео на Youtube, на не видно что яркость меняется скачками, а хотелось бы плавно...Интересно, может быть дело в том что что не желательно менять содержимое регистров OCR1A и B из прерывания или ещё в чем?.. .Видео
  9. AtMega8 + Bluetooth HC-05 + MIT App Inventor 2

    жёстко же я затупил
  10. AtMega8 + Bluetooth HC-05 + MIT App Inventor 2

    А что переменная не скинется в ноль автоматически при новом входе в прерывание??
  11. AtMega8 + Bluetooth HC-05 + MIT App Inventor 2

    Ну а как это будет выглядеть? Сначала отправляю байт с номером регистра, в прерывании становится понятно что это регистр A например, следом отправляю байт со значением регистра, мы заходим в прерывание снова и.... первый байт ведь уже потерян? я не понимаю сам механизм, сможете набросать код для примера пожалуйста?
  12. Всех приветствую! Сейчас разбираюсь с управлением МК через Bluetooth с помощью самодельного приложения для Android, которое создано при помощи бесплатной среды разработки MIT App Inventor 2. Для начала хочу научиться управлять двухканальным ШИМ через интерфейс из двух "Бегунков". Вот такой простейший интерфейс. Отправляются данные на МК с помощью вот такой простейшей программы. Обрабатывается событие, которое происходит после изменения положения "бегунка", на МК (к которому через HC-05 ранее было осуществленно подключение) отправляется байт данных, который содержит значение регистра OCR1A или OCR1B. А также для наглядности значение выводится в текстовое поле. МК в свою очередь обрабатывает эти данные в прерывании по приёму USART следующим образом: В целом всё работает, но когда добавляется второй канал ШИМ, возникает проблема, для решения которой я и обратился к Вам, как мне грамотнее разделить данные от первого и второго бегунка и распределить их по регистрам OCR1A и OCR1B ?
  13. В общем господа, видимо был косяк на плате. Сейчас снял шунт у отладочного светодиода и все светодиоды стали тухнуть до конца))) всем спасибо простите мою глупость пожалуйста
  14. Господа, наконец-то добрался до паяльника, ситуация следующая: Ничего не изменилось, светодиоды нагрузки и отладки всё так же еле-еле святятся. Когда впаян то 6,2 кОм, а если снять и мерить на столе, то мультиметр показывает обрыв. Всё равно светится. Ваши выводы? Косяк на плате? Но слишком уж четко, ровно 6.2 кОм, если снять мосфет, то показания при замере на контактных площадках стока и истока не меняются.... Если снимаю R7 то мультиметр и на плате начинает показывать обрыв...