Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: порт ввода срабатывает от наводок, а не от реального нажатия
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
svlad
Код
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
а нажимаю - фигушки
IgorKossak
Исходник не полный.
Но тем не менее, чтобы ноги порта не болтались в воздухе, ловя наводки от пальца, неплохо бы включить хотя бы внутреннюю подтяжку (если нет внешней) установкой 1 в соответствующем бите PORTx, где x - порт, который работает на вход.
svlad
Цитата(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
мммм, что же делать
IgorKossak
1. определения left и up у Вас одинаковые.
2. программа так и должна работать пока Вы не скажете как она должна работать по Вашему.
3. Попробуйте доработать так:
- уберите PORTD = 0x00; в цикле.
- измените четыре оператора if
Код
    if (signal(left) | signal(select))
      on(led_r1);
    else
      off(led_r1);
остальные три аналогично....

последний if уберите.
Сергей Борщ
Цитата(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
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.