Оба варианта
Если у тебя всё хорошо а у меня нет, то где-то что-то не так…
Мне стало интересно. Проблема ещё не решилась? Я смогу после шести заняться, если что. Только не хочется, если проблема уже решена. Если нет, скиньте протеусную схему, хоть скриншотом.
Кстати, какая версия протеуса? У меня 8.8 SP1.
Уточняю,(см выше #18) проверил на ATtiny24.
Сейчас надо немного отойти. Если будет время, проверю на ATtiny13
Фактически нет, так как работает только если отбросить (а точнее не читать совсем ADCL).
Моя версия протеуса:
Если нужно, можно скачать у меня из облака:
а проект
а вставь ка перед чтением ADCH вот это
while (ADCSRA & _BV(ADSC));
Зачем? ADCH нормально читается и так.
ну вставь, жалко что ли))
ISR(ADC_vect) {
while (ADCSRA & _BV(ADSC));
highb = ADCH;
lowb = ADCL;
analogData = (lowb + (highb << 8));
}
Ща, минутку.
Вот такое ошибку не выдает:
ISR(ADC_vect) {
uint8_t lowb, highb;
while (ADCSRA & (1<<ADSC));
highb = ADCH;
lowb = ADCL;
analogData = (lowb + (highb << 8));
}
Я видел подобное решение в функциях, где вместо прерывания (ADC_vect) использовалась задержка в 250 us. Как оно работает в прерывании так - я не понимаю. Если кто объяснит - буду благодарен!
Вот, хотите верьте, хотите - нет, но я внёс одно (ОДНО!) изменение в код и у меня всё работает. Изменение (№1 на картинке) – читаю регистр ADC сразу. Как видите журнал чистый (№2), хотя симуляция идёт уже давно (№3).
Видел, что Вы и сами прбовали такое изменение, но … у меня тут два варианта:
- или Вы пробовали это изменение, забыв что что-то ещё уже поправлено;
- или в Вашей версии протеуса модель 13-ой кривая.
Попробуйте в чистую копипастнуть код из первого сообщения в студию, поправить в нём одну строку как у меня и запустите. Если не заработает, значит у Вас кривая модель.
Кстати, пока не поправил эту строчку, у меня было то же самое сообщение, что и у Вас и лезло постоянно.
Евгений Петрович, я уже пробовал ADC.
Но мне не сложно, сейчас создам новые проекты…
ЗЫ: Вы в атмел студио выбирали Attiny13 или Attiny13A?
Но, у меня ж работает. Если никак, то разница только в версии протеуса, могу предположить, что модель кривая.
Кстати, если не секрет, зачем Вам фрираннинг? Я как-то заметил, что так часто обычно не нужно и ставлю автотриггеринг по таймеру.
Я так и не понял где и когда я умудрился начудить )))
Действительно вот так всё работает:
Я еще с предделителем “игрался”, может это как-то повлияло…
Пол дня с этим “бьюсь”, глаз уже замылин (да и устал). Хватит, думаю, на сегодня.
Если завтра что “вылезет” - напишу.
Мне показалось так проще. Идея хорошая, возьму на заметку.
И напоследок - мозги отказываются работать
Настроена внутренняя опора 1.1В
Туплю - не могу формулу составить вычисления напряжения на входе АЦП по его значению… )))) Памаггите ))))
// mvRefference - опорное напряжение в милливольтах
// divider - 1024 (или 512 если 9 бит - это бывает на 85-ой тиньке)
// value - попугаи, снятые с АЦП
// результат в милливольтах
Vmv = (mvRefference * value + divider / 2) / divider;