attiny85 и arduino — аналоговое чтение + pwmOut
Я использую Arduino IDE для программирования attiny85. Я хочу снять входящее аналоговое показание, а затем на основе этого показания вывести определенное значение ШИМ. Вот моя схема:
и вот мой код:
// для запуска на attiny85
const byte pwmPin = 0;
const byte analogInPin = A2;
void setup() {
pinMode(pwmPin, OUTPUT);
}
void loop() {
int analogIn = analogRead(analogInPin);
analogWrite(pwmPin, analogIn);
}
должно быть очень просто — у меня нет проблем с загрузкой кода в attiny85, и нет проблем с простыми тестами, такими как вывод определенного значения ШИМ (не на основе аналогового чтения). но когда я пытаюсь объединить два значения — прочитать, а затем записать это значение, у меня ничего не получается. Например, в этой схеме я получаю показание 1023 (5 В) на микросхеме Arduino вместо показания ~ 790 (3,85 В), чего я и должен ожидать. Я использовал мультиметр для проверки напряжения в этой схеме, поэтому думаю, что либо я делаю что-то не так с моими ожиданиями относительно того, как подключить или запрограммировать attiny85.
@GradeSchool, 👍5
Обсуждение2 ответа
Аналоговое чтение имеет размер 10 бит (2^10 = диапазон 0–1023), аналоговая запись — 8 бит (2^8 = диапазон 0–255). Отбросьте два младших бита результата, выполнив:
analogIn = analogIn >> 2;
который можно сократить до:
analogIn >>= 2;
Или вы можете использовать довольно сложную функцию карты:
analogIn = map( analogIn(0, 1023, 0, 255) )
Извините, не увидел ответа в комментариях., @Cybergibbons
+1 Не проблема. В любом случае хорошо, если все это изложено в правильном ответе., @Ricardo
Мне нужно было изменить диапазон 10-битного входа на 8-битный для ШИМ-выхода.
// для запуска на attiny85
const byte pwmPin = 0;
const byte analogInPin = A2;
void setup() {
}
void loop() {
pinMode(pwmPin, OUTPUT);
int analogIn = analogRead(analogInPin);
analogIn = map(analogIn, 0, 1023, 0, 255);
analogWrite(pwmPin, analogIn);
}
функция map
занимает *много* тактов по сравнению с битовым сдвигом, описанным в ответе Кибергиббонса., @TheDoctor
- Двигатель постоянного тока шумит, но не вращается
- Можно ли использовать цифровые контакты в качестве выхода ШИМ?
- Как прочитать значение PIN PWM-выхода?
- Задержка PWM без блокировки кода
- Arduino вылетает и перезагружается
- Быстрый ШИМ с Arduino, входы-выходы не работают
- Почему переменные PWM в этом фрагменте кода RC обрабатываются таким образом? Что такое магические числа?
- Как объявить массив переменного размера (глобально)
Схема вашей схемы, вероятно, будет более полезной, чем схема реализации на макетной плате. Есть ли у вас такая схема? Если да, добавьте это к своему вопросу., @jfpoilpret
Я не вижу часов (кварцевого или керамического резонатора) для вашего ATtiny, это нормально?, @jfpoilpret
@jfpoilpret да, у вас есть несколько вариантов использования внутренних часов., @sachleen
Вы пытались добавить небольшую задержку в свой цикл? Что может случиться, так это то, что ваш цикл работает слишком быстро, и каждый новый вызов AnalogWrite() будет «сбрасывать» ШИМ вывода, делая его всегда включенным (нет времени на использование ШИМ). Я бы попробовал для начала Delay(1000)., @jfpoilpret
Ваш мультиметр показал напряжение 3,85 В после фильтра нижних частот? (так что прямо на входном контакте Micro), @sachleen
мне нужно было изменить диапазон ввода на 8 бит.
analogIn = map(analogIn, 0, 1023, 0, 255);
, @GradeSchoolон работает нормально. Кстати, я использую внутренний 8 МГц — attiny85. также используется крошечное ядро Arduino. Спасибо за все ваши предложения., @GradeSchool
просто чтобы уточнить: входной сигнал АЦП на attiny85 составляет 10 бит. выход ШИМ 8 бит. таким образом, карта()., @GradeSchool
@GradeSchool Было бы полезно, если бы вы могли написать свое решение в виде реального ответа, чтобы будущим посетителям было легче его найти. Спасибо!, @Peter Bloomfield
Я пытался это сделать, но этот сайт не позволит мне еще около 8 часов. я сделаю это, как только смогу., @GradeSchool
Не могли бы вы добавить в текст заглавные буквы, чтобы улучшить читабельность? Также очень поможет правильная принципиальная схема, а не схема подключения., @jippie