2014-10-28 2 views
0

Я начинаю играть с Teensy 2, а также изучать C-код. В настоящее время я пытаюсь понять, как настроить вывод в качестве входного сигнала. Мой код выглядит следующим образом:Чтение ввода на Pin (Teensy)

#include <avr/io.h> 
#include <avr/pgmspace.h> 
#include "usb_debug_only.h" 
#include "print.h" 
#include <util/delay.h> 

#define RED_LED_ON (PORTB |= (1<<7)) 
#define RED_LED_OFF (PORTB &= ~(1<<7)) 

#define GREEN_LED_ON (PORTD |= (1<<2)) 
#define GREEN_LED_OFF (PORTD &= ~(1<<2)) 

#define BLUE_LED_ON (PORTC |= (1<<7)) 
#define BLUE_LED_OFF (PORTC &= ~(1<<7)) 

#define SWITCH_OUT_CONFIG (DDRD |= (1<<6), PORTD |= (1<<6)) 

#define SWITCH_IN_CONFIG (DDRF &= ~(1<<1), PORTF |= (1<<1)) 

#define LED_CONFIG (DDRB |= (1<<0)) 
#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) 

#define MY_DELAY 100 

int main(void) { 
    // set for 16 MHz clock, and make sure the LED is off 
    CPU_PRESCALE(0); 
    LED_CONFIG; 
    /*SWITCH_IN_CONFIG; 
    SWITCH_OUT_CONFIG;*/ 

    DDRD |= (1<<6); //Set pin D6 as output 
    DDRF &= ~(1<<1); //Set pin F1 as input 

    PORTD |= (1<<6); //Set pin D6 output to high 
    PORTF |= (1<<1); //Set pin F1 to act as pullup resistor 

    RED_LED_OFF; 
    GREEN_LED_OFF; 
    BLUE_LED_OFF; 

    // initialize the USB, but don't want for the host to 
    // configure. The first several messages sent will be 
    // lost because the PC hasn't configured the USB yet, 
    // but we care more about blinking than debug messages! 
    usb_init(); 

    for(;;) { 
     if(PINF & (1<<1)) { 
      /*Do stuff here, since button is pushed*/ 
    } 
    else { 
     /*Do nothing*/ 
    } 
} 

}

Вопрос, который я бегу, чтобы в настоящее время является то, что мой вход поставил (F1) не замыкая цепь. Я подключил его к кнопке. Когда я запускаю эту кнопку непосредственно на землю, схема завершается, и светодиод, к которому он подключен, загорается, когда я нажимаю кнопку. Когда я переключаю соединение на этот вывод, он ничего не делает. Из того, что я знаю в настоящее время (что может показаться неверным), этот вывод должен читаться высоко при подключении к другому выводу, который выводит высокий сигнал (в этом случае D6, который, как я знаю, работает, так как я могу использовать его в кнопочной схеме когда он подключен к земле). Вместо этого оказалось бы, что значение этого вывода в регистре, к которому он подключен, всегда «1» (часть «do stuff» оператора if else всегда работает).

Любая помощь по поводу того, что я ошибаюсь, будет принята с благодарностью!

ответ

0

Вы говорите и настраиваете ввод на порт F, но вы читаете порт B из регистра PINB.

Предположительно, вы должны читать PINF.

+0

Ничего себе. Не могу поверить, что я пропустил это. Я изначально пытался это сделать на входе, связанном с регистром B, и у меня была такая же проблема. Я подумал, что, возможно, что-то получилось повреждено этим штырем, поэтому я переключился на новый контакт, но никогда не переключал эту строку кода. Я переключу это, а затем посмотрю, что произойдет. Благодарю. – user3666250

+0

Я сделал это изменение в коде, и проблема все еще сохраняется. Он действует так, как будто этот бит в регистре всегда равен 1, и я не могу получить полную схему, когда я использую pin F1 в качестве своего ввода. Как я уже упоминал ранее, когда я подключаю кнопку к земле, загорается светодиод, подключенный к кнопке (контур завершается), но когда я подключаю этот же провод к контакту (F1), ничего не происходит. – user3666250

+1

Возможно, вам нужен понижающий резистор? – b1gtuna