реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> порт ввода срабатывает от наводок, а не от реального нажатия, что-то в конфигурации порта?
svlad
сообщение Feb 13 2007, 16:07
Сообщение #1





Группа: Новичок
Сообщений: 12
Регистрация: 2-02-07
Пользователь №: 24 971



Код
void main(void)
{
DDRD = 0xFF;
PORTD = 0x00;

for (;;)
{
   PORTD = 0x00;
if (signal(left))    on(led_r1);
if (signal(right))  on(led_r2);
if (signal(up))     on(led_g1);
if (signal(down)) on(led_g2);
if (signal(select))
  {
   on(led_r1);
   on(led_r2);
   on(led_g1);
   on(led_g2);
  }

}
}


я только подношу палец к джойстику диоды начинают мигать blink.gif
а нажимаю - фигушки

Сообщение отредактировал svlad - Feb 13 2007, 16:08
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 13 2007, 18:24
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Исходник не полный.
Но тем не менее, чтобы ноги порта не болтались в воздухе, ловя наводки от пальца, неплохо бы включить хотя бы внутреннюю подтяжку (если нет внешней) установкой 1 в соответствующем бите PORTx, где x - порт, который работает на вход.
Go to the top of the page
 
+Quote Post
svlad
сообщение Feb 13 2007, 21:00
Сообщение #3





Группа: Новичок
Сообщений: 12
Регистрация: 2-02-07
Пользователь №: 24 971



Цитата(IgorKossak @ Feb 13 2007, 18:24) *
Исходник не полный.
Но тем не менее, чтобы ноги порта не болтались в воздухе, ловя наводки от пальца, неплохо бы включить хотя бы внутреннюю подтяжку (если нет внешней) установкой 1 в соответствующем бите PORTx, где x - порт, который работает на вход.

теперь у меня
Код
//_____  I N C L U D E S ___________________________________________________

#include "config.h"

//_____ M A C R O S ________________________________________________________
    #define _setL(port,bit)         do { port &= ~(1 << bit); } while(0)
    #define _setH(port,bit)         do { port |= (1 << bit); } while(0)
    #define _clrL(port,bit)         do { port |= (1 << bit); } while(0)
    #define _clrH(port,bit)         do { port &= ~(1 << bit); } while(0)
    #define _bitL(port,bit)         (!(port & (1 << bit)))
    #define _bitH(port,bit)         (port & (1 << bit))
    #define _cpl(port,bit,val)      do {port ^= (1 << bit); } while(0)


#define dir_out(x)              _dir_out (x)
#define dir_in(x)               _dir_in (x)
#define dir(x)                  _dir (x)

#define _set(port,bit,val)      _set##val(port,bit)
#define on(x)                   _set (x)

#define _clr(port,bit,val)      _clr##val(port,bit)
#define off(x)                  _clr (x)

#define _bit(port,bit,val)      _bit##val(port,bit)
#define signal(x)               (!! _bit (x))

#define cpl(x)                  _cpl (x)


//_____ D E F I N I T I O N S ______________________________________________

#define  left    PINB, 6, H
#define  right   PINE, 7, H
#define  up      PINB, 6, H
#define  down    PINE, 5, H
#define  select  PINB, 5, H

#define led_r1 PORTD, 4, H
#define led_g1 PORTD, 5, H
#define led_r2 PORTD, 7, H
#define led_g2 PORTD, 6, H

void main(void)
{

DDRD = 0xFF;
PORTB = 0xFF;
PORTE = 0xFF;
PORTD = 0x00;

for (;;)
  {
    PORTD = 0x00;
    if (signal(left))
      on(led_r1);

    if (signal(right))
      on(led_r2);

    if (signal(up))
      on(led_g1);

    if (signal(down))
      on(led_g2);

    if (signal(select))
      {
        on(led_r1);
        on(led_r2);
        on(led_g1);
        on(led_g2);
      }
   }
}


у меня USB kit так что не я делал этот джойстик, а он стандартный

после того как я установил 1 в порте ввода у меня теперь горят все светодиоды
и легкое изменение свечения происходит по время нажfтия на left и down
мммм, что же делать
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 14 2007, 10:49
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



1. определения left и up у Вас одинаковые.
2. программа так и должна работать пока Вы не скажете как она должна работать по Вашему.
3. Попробуйте доработать так:
- уберите PORTD = 0x00; в цикле.
- измените четыре оператора if
Код
    if (signal(left) | signal(select))
      on(led_r1);
    else
      off(led_r1);
остальные три аналогично....

последний if уберите.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 14 2007, 12:13
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(IgorKossak @ Feb 14 2007, 09:49) *
2. программа так и должна работать пока Вы не скажете как она должна работать по Вашему.
Да. И еще, поскольку кнопки у вас замыкают вход на землю - активный уровень низкий
Код
#define  left    PINB, 6, L
#define  right   PINE, 7, L
#define  up      PINB, 6, L
#define  down    PINE, 5, L
#define  select  PINB, 5, L


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.0267 секунд с 7
ELECTRONIX ©2004-2016