roboforum.ru

Технический форум по робототехнике.

 

порты не работают на вход :(

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

порты не работают на вход :(

Сообщение Grover » 03 фев 2008, 16:21

схема простая работает на "штуке" (см топик "наши достижения").
ATmega8 + L293D

прошиваю вот такую программу (WinAVR):
Код: Выделить всёРазвернуть
   #include <avr/io.h>
   #include <avr/delay.h>
   #define F_CPU 8000000UL  // 16 MHz
   
   void M_Front(void)
   {
      PORTD |= _BV(PD0);      // установить "1"
      PORTD |= _BV(PD1);      // установить "1"
      PORTD &=~_BV(PD2);      // установить "0"
      PORTD |= _BV(PD3);      // установить "1"
      PORTD &=~_BV(PD4);      // установить "0"
   }
   void M_Stop(void)
   {
      PORTD &= ~_BV(PD0);      // установить "0"
      PORTD &= ~_BV(PD1);      // установить "0"
      PORTD &= ~_BV(PD2);      // установить "0"
      PORTD &= ~_BV(PD3);      // установить "0"
      PORTD &= ~_BV(PD4);      // установить "0"
   }
   int main(void)              // начало основой программы
   {
   short i;
   DDRD = 0b00011111;            // все выводы порта D сконфигурировать как выходы+
 
    while (1) {
   if (PIND & (1<<5)){
              M_Front();
           for (i = 1; i < 8; i = i + 1)
           {
           _delay_ms(250);   // Ждем 0.25 сек.
           }
   
           M_Stop();  // установить "0" на всех линиях порта D
           for (i = 1; i < 16; i = i + 1)
           {
      _delay_ms(250);   // Ждем 0.25 сек.
           }
            }
}       // закрывающая скобка бесконечного цикла
}      // закрывающая скобка основной программы


беда в том, что при не подключенном PD5 двигалели вращаются.
т.е. (PIND & (1<<5)) возвращает True, хотя 100% ножка МК висит в воздухе.
Мои странички в интернете: http://groversuper.ucoz.ru
Аватара пользователя
Grover
 
Сообщения: 78
Зарегистрирован: 28 янв 2008, 09:27
Откуда: Россия

Re: порты не работают на вход :(

Сообщение rig » 03 фев 2008, 19:23

так там не понятно что на ножке, вот если ее подтянуть к 0 или 1 резистором совсем по другому будет.
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: порты не работают на вход :(

Сообщение avr123.nm.ru » 03 фев 2008, 19:27

Grover писал(а): 100% ножка МК висит в воздухе.


А зачем она висит ? Не любишь определенности ?
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: порты не работают на вход :(

Сообщение Grover » 03 фев 2008, 20:12

что означает слово "подтянуть" ?
Мои странички в интернете: http://groversuper.ucoz.ru
Аватара пользователя
Grover
 
Сообщения: 78
Зарегистрирован: 28 янв 2008, 09:27
Откуда: Россия

Re: порты не работают на вход :(

Сообщение Myp » 03 фев 2008, 20:15

Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 15948
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: порты не работают на вход :(

Сообщение rig » 03 фев 2008, 20:19

соединить через резистор 10-100 ком с + или -
будет гарантированно + или -
можно воспользоватся внутренним резистором, есть там такой.
в курсе действительно подробно описан этот момент
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: порты не работают на вход :(

Сообщение Grover » 03 фев 2008, 21:22

прошу меня простить :oops:

я сделал вывод: "Прочитал? Понял! - молодец, прочитай еще раз."

да, действительно, в avr123 есть ответ на мой вопрос.
Мои странички в интернете: http://groversuper.ucoz.ru
Аватара пользователя
Grover
 
Сообщения: 78
Зарегистрирован: 28 янв 2008, 09:27
Откуда: Россия

Re: порты не работают на вход :(

Сообщение Myp » 03 фев 2008, 21:30

а теперь буть добр напиши сюда
чтобы можно было новичкам посмотреть твою тему и найти решение
либо просто прочитать и узнать чтото новое


короче понял сам расскажи другому :)
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 15948
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: порты не работают на вход :(

Сообщение Grover » 03 фев 2008, 21:58

угу, как смогу :)

в программе:
Код: Выделить всёРазвернуть
...
...
DDRD = 0b00011111;       // пины с 0 по 4 выходы, а пины 5,6,7 - входы.
PORTD = 0b11100000;    // ВАЖНО: на пины 0 - 4 установил 0 (нет сигнала), а пины 5,6,7 установил 1, т.е. МК сама подаст логическую 1.
...
...
// Вместо if (PIND & (1<<5)), что означало если пин 5 содержит логическую 1, то ...
// пишем:
if (!(PIND & (1<<5))){ // означает: Если пин 5 НЕ содержит лог.1, то ...


на плате:
ножку МК, которая отвечает за ПИН 5 порта D (на atmega8 это №11), припаеваем к кнопке, кнопку с "другой стороны" припаеваем к резистору, а резистор на МИНУС !!!.

Что получилось:
получилось, что МК с программой реагирует не на наличие сигнала, а на его отсутствие.

какой в этом смысл:
как начал делать я : ножка через кнопку висит на ПЛЮС МК, а программа ждет пока кнопку нажмут и на кнопке появится ПЛЮС (лог.1)

именно тут и возникает трудность, если ножка ни к чему не присоединена, то это еще не значит, что на ней ни чего нет !!!.

И Я стал действовать от обратного: на ножке всегда ПЛЮС (лог.1) - это делает сама МК без пояльника - для этого и записываем в пин входа единицу, и если эту ножку "закоротить" на минус (коротить не надо - через резистор), то ток с пина убежит к МИНУСУ, а на ПИНЕ останется НОЛЬ.
И программу переделал так, что работает по отсутствии сигнала.

короче, по принципу от обратного.

во... правильно? я свободен? :roll:
Мои странички в интернете: http://groversuper.ucoz.ru
Аватара пользователя
Grover
 
Сообщения: 78
Зарегистрирован: 28 янв 2008, 09:27
Откуда: Россия

Re: порты не работают на вход :(

Сообщение rig » 03 фев 2008, 22:21

не, ни фига не свободен. садись тройка.
Grover писал(а):DDRD = 0b00011111; // пины с 0 по 4 выходы, а пины 5,6,7 - входы.PORTD = 0b11100000; // ВАЖНО: на пины 0 - 4 установил 0 (нет сигнала), а пины 5,6,7 установил 1, т.е. МК сама подаст логическую 1.

все правильно кроме последней фразы, хотя смысл рядом
Grover писал(а):пины 5,6,7 установил 1, т.е. МК сама подаст логическую 1.

это называется включил подтягивающие резисторы
Port is an 8-bit bi-directional I/O port with internal pull-up resistors (selected for each
bit).
1.jpg

Grover писал(а):если эту ножку "закоротить" на минус (коротить не надо - через резистор), то ток с пина убежит к МИНУСУ, а на ПИНЕ останется НОЛЬ.

резистор совсем не обязательно, яб сказал больше он там не нужен если схема не требует.
с подтягивающим резистором всегда получаешь 1 на входе, садишь любым способом ногу на землю получаешь НОЛЬ.
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: порты не работают на вход :(

Сообщение Grover » 03 фев 2008, 22:40

так, а если ну вот очень надо реагировать на ПЛЮС ?
Мои странички в интернете: http://groversuper.ucoz.ru
Аватара пользователя
Grover
 
Сообщения: 78
Зарегистрирован: 28 янв 2008, 09:27
Откуда: Россия

Re: порты не работают на вход :(

Сообщение rig » 03 фев 2008, 22:48

а если хоть немножко подумать?
подсказка: все перевернуть с ног на голову
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: порты не работают на вход :(

Сообщение Grover » 04 фев 2008, 09:26

с ног на голову...
подтянуть МИНУС к пину, т.е. в программе в пин входа записываю 0 (Z состояние), на схеме подключаю ножку к МИНУСУ.
Кнопка будет соединять этот же пин с плюсом? сразу догадываюсь, что тут без сопративления на минус надо ставить...

?
Мои странички в интернете: http://groversuper.ucoz.ru
Аватара пользователя
Grover
 
Сообщения: 78
Зарегистрирован: 28 янв 2008, 09:27
Откуда: Россия

Re: порты не работают на вход :(

Сообщение $ilent » 04 фев 2008, 10:24

Минусы вообще не подтягиваются.
Исправь обработку кнопки if (PIND & (1<<5)) и всё.
$ilent
 

Re: порты не работают на вход :(

Сообщение rig » 04 фев 2008, 14:59

$ilent писал(а):Минусы вообще не подтягиваются.

почему нет? В МК переход 1-0-1 примерно по середине питания.
легко можно ножку через резистор на минус и кнопкой коммутировать на плюс. яб сделал без зазрений совести.
Grover писал(а):подтянуть МИНУС к пину, т.е. в программе в пин входа записываю 0 (Z состояние),

получаем ножку ни к чему не подсоединенную - это не подтяжка.
подтяжка будет внешним резистором.
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

След.

Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: MSNbot Media и гости: 3

Mail.ru counter