Проблема с подсчетом импульсов ATmega8

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Insase
Родился
Сообщения: 17
Зарегистрирован: Ср мар 18, 2009 13:37:19

Проблема с подсчетом импульсов ATmega8

Сообщение Insase »

Здравствуйте. Значит купил себе МК ATmega8 поставил внешний кварц на 16 Mhz, прошил фьюзы для его активации, организовал обмен с Com-портом и сел в лужу на самом простом - на подсчете импульсов с ноги МК.

Изначально хотел читать с ноги PC4 ее состояние и от этого рулить:

Код на CVAVR:
while (1) {
if(PINC.4==1) PORTC.5=1; //(LED)
else PORTC.5=0;
};

Но вот тут вся загвоздка: подаю я на PC4-ножку 4.5 вольта и мгновенно срабатывает условие, т.е. в моем случае загорается лампочка, но когда убрать питание от ноги, то происходит непонятная штука - лампочка горит еще несколько секунд, а потом гаснет...

Погрыз я гранит науки, покопался в интернете и пришел к выводу, что нужно счетчик реализовывать с помощью таймера МК. Теории в интернете полно, а вот практики практически нет.

Я думаю задача всем знакомая, может кто-нибудь помочь с этой проблемой? Желательно на CVAVR, т.к. другими компиляторами не я пользовался, да и новичек я в этой области знаний.

Изначальная же задача звучит так: Задано число импульсов - N. Импульсы имеют разную скважность. Требуется посчитать время за которое происходят эти N импульсов и послать значение на com-порт.
Реклама
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Самое простое-использовать внешнее прерывание.
В обработчике инкрементировать переменную, а по таймеру выводить её значение и сбрасывать.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Реклама
Insase
Родился
Сообщения: 17
Зарегистрирован: Ср мар 18, 2009 13:37:19

Сообщение Insase »

Pooher писал(а):Самое простое-использовать внешнее прерывание.
В обработчике инкрементировать переменную, а по таймеру выводить её значение и сбрасывать.

Проблема в том что с таймером я разобраться то и не могу
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Сообщение Vov123 »

А может подтяжки входу не хватает?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Re: Проблема с подсчетом импульсов ATmega8

Сообщение ikarab »

Insase писал(а): подаю я на PC4-ножку 4.5 вольта и мгновенно срабатывает условие, т.е. в моем случае загорается лампочка, но когда убрать питание от ноги, то происходит непонятная штука - лампочка горит еще несколько секунд, а потом гаснет...


Подтяжку на ножку включите или резистором определите на ней четко "0" или "1".
Реклама
Insase
Родился
Сообщения: 17
Зарегистрирован: Ср мар 18, 2009 13:37:19

Сообщение Insase »

как я понял подтяжка это что то на подобии транзистора?
Посоветуйте какой поставить, если честно нет у меня знаний таких широких
Реклама
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Сообщение Vov123 »

сделайте
void main (void)
{
DDRC.4=0;//направление вход
PORTC.4=1//подтяжка на вход
Insase
Родился
Сообщения: 17
Зарегистрирован: Ср мар 18, 2009 13:37:19

Сообщение Insase »

Vov123 писал(а):сделайте
void main (void)
{
DDRC.4=0;//направление вход
PORTC.4=1//подтяжка на вход

Сделал:
DDRC.4=0;
PORTC.4=1;
while (1)
{
if(PINC.4==1) PORTC.5=1;
else PORTC.5=0;
};

Диод загорелся и не гаснет.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Vov123 писал(а):сделайте
void main (void)
{
DDRC.4=0;//направление вход
PORTC.4=1//подтяжка на вход
вы забыли сказать, что при этом подавать на ножку надо 0, а не 4,5В, как было раньше... и условие в программе, соответственно, изменить на обратное... а еще надо подавлять дребезг, если "подавание" делается каким-то контактом... не все так просто, как кажется :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Insase
Родился
Сообщения: 17
Зарегистрирован: Ср мар 18, 2009 13:37:19

Сообщение Insase »

"подавание" делается с помощью оптоэлектронного реле "5П7".
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Insase писал(а):"подавание" делается с помощью оптоэлектронного реле "5П7".
тогда дребезга скорее всего не будет :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Insase
Родился
Сообщения: 17
Зарегистрирован: Ср мар 18, 2009 13:37:19

Сообщение Insase »

Спасибо всем все заработало, осталось понять как с помощью реле подавать не 5V, а теперь уже землю..
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Insase писал(а):Спасибо всем все заработало, осталось понять как с помощью реле подавать не 5V, а теперь уже землю..
есть два пути:
1. включить реле между выводом и общим проводом
2. плюнуть на "подтяжку" и прилепить резистор 1К с вывода на общий, оставив реле, как было (т.е. продолжая подавать 5В)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Сообщение Vov123 »

Не просто,а очень просто.Можно,считать низкоуровневые ипульсы,можно поставить подтяжку реальную на землю.
А антидребезг,кому может надо,как вариант
if(!PINB.0){
какой-то код


delay_ms(z);
if(!PINB.0){};//ждём пока отпустим кнопку
delay_ms(z);
}
Ясен перец,что здесь кнопка подключена к земле.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»