Счетчик импульсов с UART(снятие показаний)
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Счетчик импульсов с UART(снятие показаний)
ну, скажем, там будет не последнее значение
1 DDRB&=0xFE;
2 DDRB&=0xFD;
чистятся 2 младшие разряда.
Записывать нужно более информативно, например
#define CLOCK 0
#define ENBL 1
DDRB&=~((1 << CLOCK) | (1 << ENBL));
1 DDRB&=0xFE;
2 DDRB&=0xFD;
чистятся 2 младшие разряда.
Записывать нужно более информативно, например
#define CLOCK 0
#define ENBL 1
DDRB&=~((1 << CLOCK) | (1 << ENBL));
- Реклама
-
andrey_ims
- Открыл глаза
- Сообщения: 73
- Зарегистрирован: Пн июл 01, 2013 22:38:09
Re: Счетчик импульсов с UART(снятие показаний)
Информативно, это да. Но я ж правильно понимаю, что и моя запись по части достижения цели - корректная?urry писал(а):ну, скажем, там будет не последнее значение
1 DDRB&=0xFE;
2 DDRB&=0xFD;
чистятся 2 младшие разряда.
Записывать нужно более информативно, например
#define CLOCK 0
#define ENBL 1
DDRB&=~((1 << CLOCK) | (1 << ENBL));
-
andrey_ims
- Открыл глаза
- Сообщения: 73
- Зарегистрирован: Пн июл 01, 2013 22:38:09
Re: Счетчик импульсов с UART(снятие показаний)
Наконец-то программатор приехал и я собрал в железе то, что проектировал в протеусе.
С горечью обнаружил, что работает оно не так как в протеусе
Посему подскажите, люди добрые, пару вопросов:
1)Внешние прерывания (INT0, INT1) при замыкании ножки МК на ноль срабатывает многократно. Чем дольше контакт замкнут, тем больше прерываний и тем больше накручен счетчик. Протеус по какой-то причине этого не моделировал. Как правильно считать такие прерывания?(Чтобы одно замыкание - одно прерывание)
2)Я почему-то был уверен, что стабилизатор(L78L33ABZ-AP) напряжения, при падении входящего напряжения будет до победного держать на выходе 3.3В, а потом резко отрубится, а на практике выходит, что на выходе напряжение падает тоже плавно, это так и должно быть?
3)Я читал в мануале, что у ATTiny2313 есть встроенный Brown-out detection, т.е. когда контроллер вырубается, если напряжение стало слишком низким. Я хочу ее заюзать, но только не могу понять, контроллер потом сам включится, когда напряжение питание снова станет нормальным?
4)И еще я не совсем понимаю работу компаратора ATTiny2313. Если AIN1 станет меньше, чем AIN0, то прерывание сработает однократно, или будет постоянно срабатывать?
Спасибо.
С горечью обнаружил, что работает оно не так как в протеусе
Посему подскажите, люди добрые, пару вопросов:
1)Внешние прерывания (INT0, INT1) при замыкании ножки МК на ноль срабатывает многократно. Чем дольше контакт замкнут, тем больше прерываний и тем больше накручен счетчик. Протеус по какой-то причине этого не моделировал. Как правильно считать такие прерывания?(Чтобы одно замыкание - одно прерывание)
2)Я почему-то был уверен, что стабилизатор(L78L33ABZ-AP) напряжения, при падении входящего напряжения будет до победного держать на выходе 3.3В, а потом резко отрубится, а на практике выходит, что на выходе напряжение падает тоже плавно, это так и должно быть?
3)Я читал в мануале, что у ATTiny2313 есть встроенный Brown-out detection, т.е. когда контроллер вырубается, если напряжение стало слишком низким. Я хочу ее заюзать, но только не могу понять, контроллер потом сам включится, когда напряжение питание снова станет нормальным?
4)И еще я не совсем понимаю работу компаратора ATTiny2313. Если AIN1 станет меньше, чем AIN0, то прерывание сработает однократно, или будет постоянно срабатывать?
Спасибо.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Счетчик импульсов с UART(снятие показаний)
Прерывание по фронтам или по уровню настроено?andrey_ims писал(а):1)Внешние прерывания (INT0, INT1) при замыкании ножки МК на ноль срабатывает многократно.
В общем, да.andrey_ims писал(а):2)Я почему-то был уверен, что стабилизатор(L78L33ABZ-AP) напряжения, при падении входящего напряжения будет до победного держать на выходе 3.3В, а потом резко отрубится, а на практике выходит, что на выходе напряжение падает тоже плавно, это так и должно быть?
Это по сути, просто Reset, который нажимается когда напряжение ниже порога.andrey_ims писал(а):3)Я читал в мануале, что у ATTiny2313 есть встроенный Brown-out detection, т.е. когда контроллер вырубается, если напряжение стало слишком низким. Я хочу ее заюзать, но только не могу понять, контроллер потом сам включится, когда напряжение питание снова станет нормальным?
У Тиньки только по фронтам прерывание.andrey_ims писал(а):4)И еще я не совсем понимаю работу компаратора ATTiny2313. Если AIN1 станет меньше, чем AIN0, то прерывание сработает однократно, или будет постоянно срабатывать?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Счетчик импульсов с UART(снятие показаний)
По большей части это все базовые знания по электронике и работе контроллера.
Прерывания будут работать так как настроены - если настроено прерывание по фронтам то будет одно прерывание на импульс, если настроено на уровень - будет постоянно вызываться пока активен уровень. И про дребезг контактов не стоит забывать, он часто возникает в аналоговых цепях подключенных к цифровому входу.
Стабилизатор линейный, представляет собой транзистор управляемый несложной аналоговой схемой - с чего бы ему отрубаться если в нем даже компараторов нет. Более того стабилизатор не способен поддерживать напряжение на выходе если разница напряжений вход-выход меньше определенной величины(обычно это 0.7-1.5В).
т.е. при напряжении на входе меньше 4В на выходе оно уже начнет падать.
Прерывания будут работать так как настроены - если настроено прерывание по фронтам то будет одно прерывание на импульс, если настроено на уровень - будет постоянно вызываться пока активен уровень. И про дребезг контактов не стоит забывать, он часто возникает в аналоговых цепях подключенных к цифровому входу.
Стабилизатор линейный, представляет собой транзистор управляемый несложной аналоговой схемой - с чего бы ему отрубаться если в нем даже компараторов нет. Более того стабилизатор не способен поддерживать напряжение на выходе если разница напряжений вход-выход меньше определенной величины(обычно это 0.7-1.5В).
т.е. при напряжении на входе меньше 4В на выходе оно уже начнет падать.
- Реклама
-
andrey_ims
- Открыл глаза
- Сообщения: 73
- Зарегистрирован: Пн июл 01, 2013 22:38:09
Re: Счетчик импульсов с UART(снятие показаний)
Все прерывания настроены по фронту
Код: Выделить всё
//Set external interrupter settings
PCMSK |= (1<<PIND2); //What is it?
MCUCR = (1<<ISC01) | (1<<ISC00); // INT0 will be interrupt by rising side of impulse
MCUCR = (1<<ISC11) | (1<<ISC10); // INT1 will be interrupt by rising side of impulse
GIMSK |= (1<<INT0); // Enable int0 interrupt
GIMSK |= (1<<INT1); // Enable int1 interrupt
//Set comparator settings
ACSR |= (1<<ACI); // clear Analog Comparator interrupt
ACSR |=
(0<<ACD) | // Comparator ON
//(0<<ACBG) | // Disconnect 1.23V reference from AIN0 (use AIN0 and AIN1 pins)
(1<<ACIE) | // Comparator Interrupt enabled
//(0<<ACIC) | // input capture disabled
(1<<ACIS1) | // set interrupt bit on positive edge
(1<<ACIS0); // (ACIS1 and ACIS0 == 11), so comparator do interrupt by rising side of impulse
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Счетчик импульсов с UART(снятие показаний)
Если прерывания настроены на фронты и они все же возникают при постоянном уровне на входе - значит имеют место быть достаточно сильные помехи.
-
andrey_ims
- Открыл глаза
- Сообщения: 73
- Зарегистрирован: Пн июл 01, 2013 22:38:09
Re: Счетчик импульсов с UART(снятие показаний)
Я вот сейчас еще заметил, что я в своем прерывании не отключаю обработку прерывания:Alexeyslav писал(а):Если прерывания настроены на фронты и они все же возникают при постоянном уровне на входе - значит имеют место быть достаточно сильные помехи.
Код: Выделить всё
ISR(INT0_vect)
{
waterCounter++;
}
Код: Выделить всё
SIGNAL(SIG_INTERRUPT1)//обработка прерываний INT1
{
cli();//запрещение прерываний на время обработки прерывания
s = s+5000;//увеличиваем переменную s на 5000
sei();//разрешение прерываний
}
А если помехи - то откуда им взяться?
Последний раз редактировалось andrey_ims Пн авг 05, 2013 10:50:38, всего редактировалось 1 раз.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Счетчик импульсов с UART(снятие показаний)
Есть такая штука — дребезг контактов, которого в Шпротеусе нет.andrey_ims писал(а):Все прерывания настроены по фронту
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
andrey_ims
- Открыл глаза
- Сообщения: 73
- Зарегистрирован: Пн июл 01, 2013 22:38:09
Re: Счетчик импульсов с UART(снятие показаний)
Не, ну я понимаю конечно дребезг, ну не до такой-же степени. Причем видна явная зависимость от времени замкнутого контакта, а ведь дребезг на замыкании/размыкании в основном.Gudd-Head писал(а):Есть такая штука — дребезг контактов, которого в Шпротеусе нет.andrey_ims писал(а):Все прерывания настроены по фронту
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Счетчик импульсов с UART(снятие показаний)
ПЗДЦandrey_ims писал(а):Все прерывания настроены по фронтуКод: Выделить всё
MCUCR = (1<<ISC01) | (1<<ISC00); // INT0 will be interrupt by rising side of impulse MCUCR = (1<<ISC11) | (1<<ISC10); // INT1 will be interrupt by rising side of impulse
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
andrey_ims
- Открыл глаза
- Сообщения: 73
- Зарегистрирован: Пн июл 01, 2013 22:38:09
Re: Счетчик импульсов с UART(снятие показаний)
Кажется я понял суть проблемы:
Вот это тут явно лишнее, откуда я его вообще взял))
Вот это тут явно лишнее, откуда я его вообще взял))
Код: Выделить всё
PCMSK |= (1<<PIND2); //What is it?
-
andrey_ims
- Открыл глаза
- Сообщения: 73
- Зарегистрирован: Пн июл 01, 2013 22:38:09
Re: Счетчик импульсов с UART(снятие показаний)
Блин, тут наверное так нужно было:Gudd-Head писал(а):ПЗДЦandrey_ims писал(а):Все прерывания настроены по фронтуКод: Выделить всё
MCUCR = (1<<ISC01) | (1<<ISC00); // INT0 will be interrupt by rising side of impulse MCUCR = (1<<ISC11) | (1<<ISC10); // INT1 will be interrupt by rising side of impulse
Код: Выделить всё
MCUCR |= (11<<ISC00); // INT0 will be interrupt by rising side of impulse
MCUCR |= (11<<ISC10); // INT1 will be interrupt by rising side of impulse
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Счетчик импульсов с UART(снятие показаний)
Шпротеус — это просто симулятор, он мог ваше нажатие на кнопку отрабатывать как чёрт знает что.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Счетчик импульсов с UART(снятие показаний)
Откуда угодно. Цифровые схемы они очень чувствительны к разводке, особенно масса проблем возникает на макетках.А если помехи - то откуда им взяться?
Вам бы почитать книжки "конструирование высокоскоростных цифровых устройств. начальный курс черной магии.". Недостаточно просто соединить все выводы дорожкой, важно сделать это правильно чтобы одна цепь не влияла на другую.
-
andrey_ims
- Открыл глаза
- Сообщения: 73
- Зарегистрирован: Пн июл 01, 2013 22:38:09
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Счетчик импульсов с UART(снятие показаний)
Если только отсутствие резисторов у светодиодов.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
andrey_ims
- Открыл глаза
- Сообщения: 73
- Зарегистрирован: Пн июл 01, 2013 22:38:09
Re: Счетчик импульсов с UART(снятие показаний)
А для чего там резисторы? У диодов вполне приличное сопротивлениеGudd-Head писал(а):Если только отсутствие резисторов у светодиодов.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Счетчик импульсов с UART(снятие показаний)
Просто поверьте что так надо. Иначе светики сгорят, прихватив с собой порты Тиньки.andrey_ims писал(а):По специальности я программист, и имею только общее представление о схемотехнике.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
andrey_ims
- Открыл глаза
- Сообщения: 73
- Зарегистрирован: Пн июл 01, 2013 22:38:09


