Простейшая программа на Си

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Аватара пользователя
Сообщения: 9
Зарегистрирован: Пн мар 03, 2008 14:59:48

Сообщение kasper »

Хочу реализовать такую простую задачу на AVR:
1.При замыкании кнопкой PIND.0 на землю - на PINB.0 появляется минус (соответственно при размыкании кнопки исчезает)
2.При нажатой кнопке более 30секунд и дальнейшем удержании на PINB.0 должен появляется плюс.
Я совсем начинающий. Первый пункт сделать получается (PORTB.0=PIND.0) С временными интервалами вроде разобрался,но как реализовать второй пункт не доходит.
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина

Сообщение Томатный »

if(кнопка нажата) {
Порт Б = низний уровень;
пауза(30сек);
if(кнопка нажата) Порт Б = высокий уровень;
}

наверно так.
Контактная информация:
Реклама
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

ИМХО не верно. Во время паузы кнопку могут и отпустить-с.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Родился
Аватара пользователя
Сообщения: 9
Зарегистрирован: Пн мар 03, 2008 14:59:48

Сообщение kasper »

if(кнопка нажата) {
Порт Б = низний уровень;
пауза(30сек);
if(кнопка нажата) Порт Б = высокий уровень;
}
Проверил такой вариант не работает.Устройство так и должно работать:Кнопку должны отпустить в течении этих 30 секунд,если не отпустили или кнопка запала на PINB.0 должен быть восстановлен высокий уровень.
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Чт окт 18, 2007 16:45:30
Откуда: из Питера

Сообщение MetEl »

что то я забыл, алгоритмические схемы (где бы их найти) ?
Есть у когонить ссылко.

Я бвы так начал:

Имеем.
- ВХОД = PIND.0 (порт D, линия(бит) 0 (первая) настроен на вход данных, изначально присутствует (есть "пождтяжка") лог.1)
- ВЫХОД = PORTB.0 (порт В, линия 0, изначально лог 0)

Алгоритм. схема. (примерная, для начала...)

1.1 вкыл-сброс.
1.2. инициализация(кто я и что из себя представляю)
(на ВХОДе 1, на ВЫХОДе 0.)

2. Начало (постоянный(бесконечный) цикл)
2.1 опрос ВХОДа
присвоение ВХОДа за переменной и проверка условия
да (1)/(0) нет
да- вернутся на 2.1.
нет - " включить" счётчик.
проверить переменную счетчика,
условие более 30сек
да - выдать на ВЫХОД 1, вернуться на 2.1.
нет - выдать(установить) на ВЫХОД 0, вернутся на 2.1.


Реaлизация.
unsigned long int a; // какая тактовая частота ?

while(1){
if (!PIND.0){
a++;
if(a>30 000 000){ // допустим кварц на 1 МГц
PORTB.0=1;
a--; }
esle{PORTB.0=0; };
}
else{a=0;PORTB.0=1;};

};

Може гдето и ошибся, т.к. дел не в проворот. Но, ничего исправлюсь.
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина

Сообщение Томатный »

опередили меня, тоже думал такой алгоритм придложить :)
а зачем тут
else{a=0;PORTB.0=1;};
устанавливать PORTB.0=1; ? тогда Всегда порт Б будит 1 или как?

а если кнопку отключат на период, меньший чем период такта проца? шутка :))
Контактная информация:
Реклама
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Чт окт 18, 2007 16:45:30
Откуда: из Питера

Сообщение MetEl »

А где он 1 будет? (это вся программа, если я правильно ТЗ понял. Где + где лог 1 написана... Ну в общем, главное алгоритм... )
Я бы смотрел на время установки регистров МК и их опросов.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина

Сообщение Томатный »

MetEl писал(а):А где он 1 будет? (это вся программа, если я правильно ТЗ понял. Где + где лог 1 написана... Ну в общем, главное алгоритм... )
Я бы смотрел на время установки регистров МК и их опросов.

if (!PIND.0){
a++;
if(a>30 000 000){ // если а зашкалило
PORTB.0=1; // то порт Б = 1
a--; }
esle{PORTB.0=0; }; // иначе 0
}
else{a=0;PORTB.0=1;}; // Если кнопка не была нажата, то а=0 И Порт Б = 1 << !!!
помоему это лишнее

или я что-то не догнал?
Контактная информация:
Родился
Аватара пользователя
Сообщения: 9
Зарегистрирован: Пн мар 03, 2008 14:59:48

Сообщение kasper »

Всем спасибо.Сделал так как предложил MetEl - всё работает так как нужно.Строчка "else{a=0;PORTB.0=1;}; " нужна,без неё при отпускании кнопки на PINB.0 остаётся логический 0.Вообщем сделал так:
while (1)
{if(!PIND.0){a++;if(a>4100000){PORTB.0=1;a--;}
else{PORTB.0=0;};}
else{a=0;PORTB.0=1;};
Теперь буду во всё это вникать и пытаться писать программу дальше.
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Чт окт 18, 2007 16:45:30
Откуда: из Питера

Сообщение MetEl »

Томатный писал(а):***

или я что-то не догнал?
Там всёвремя просили 1-цу держать.
Иначе зачем её в ноль переводить, при нажатии клавиши?

kasper, рад что ты/вы сразу всё понял (???).

Возникла идея, а нет ли в колуарах Кота, некоего хранилища програмных решений. Ну типа, интересных подходов, скажем перевод в десятичную систему или ещё чтонибуть, антидребезг какойнить... каждый год ведь, одно и тоже спрашивают.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина

Сообщение Томатный »

MetEl писал(а):
Томатный писал(а):***

или я что-то не догнал?
Там всёвремя просили 1-цу держать.
Иначе зачем её в ноль переводить, при нажатии клавиши?

сорри то я затупил, потом дошло, что так и просили :)
Контактная информация:
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Чт окт 18, 2007 16:45:30
Откуда: из Питера

Сообщение MetEl »

я лишь хочу, всего лишь заметить... что:

Строчка "else{a=0;PORTB.0=1;}; - это не строчка а пункт, точнее шаг. Тут как в фахматах, предложил решение решение в два хода...

f(a>30 000 000){ // если а зашкалило - не зашкалило, а набрало. Ибо зашкалило это когда уже больше 4 294 967 295, для переменной unsigned long int.

И Порт Б = 1 << !!! сперва подумал, что это сдвиг... потом подумал на "как"?!

Ну это я просто, высказатся хочу... соррииии...
Закрыто

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