Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “ATtiny85数字”;关于;输出无法提供5 V电压_C++_C_Embedded_Gpio_Attiny - Fatal编程技术网

C++ “ATtiny85数字”;关于;输出无法提供5 V电压

C++ “ATtiny85数字”;关于;输出无法提供5 V电压,c++,c,embedded,gpio,attiny,C++,C,Embedded,Gpio,Attiny,我用的是ATtiny85作为微控制器。我试图读取两个输入,每个输入电压约为3伏,每个“开”输入(超过1伏)输出5伏。我使用PINB0和PINB1作为输入,PINB3和PINB4作为输出。问题是,当PINB0和PINB1都打开时,我得到两个5V输出,但当只有一个打开时,我只得到2V,我正试图解决这个问题,所以我得到5V输出 这是我的密码: #inlude <avr/io.h> #include <stdint.h> int main(void) { // set pin

我用的是ATtiny85作为微控制器。我试图读取两个输入,每个输入电压约为3伏,每个“开”输入(超过1伏)输出5伏。我使用PINB0和PINB1作为输入,PINB3和PINB4作为输出。问题是,当PINB0和PINB1都打开时,我得到两个5V输出,但当只有一个打开时,我只得到2V,我正试图解决这个问题,所以我得到5V输出

这是我的密码:

#inlude <avr/io.h>
#include <stdint.h>

int main(void)
{
// set pin 0 to input (pi signal 0)
DDRB &= ~(1 << PINB0);
PORTB &= 0 << PINB0;

// set pin 1 to input (pi signal 1)
DDRB &= ~(1 << PINB1);
PORTB &= 0 << PINB1;

//set pin 3 to output of 0
DDRB |= 1 << PINB3;
PORTB &= 0 << PINB3;

//set pin 4 to output of 1
DDRB |= 1 << PINB4;
PORTB &= 0 << PINB4;

while (1)
{
    if (bit_is_clear(PINB, 0) && bit_is_clear(PINB, 1))
    {
        PORTB &= 0 << PINB3;    //output zero volts 
        PORTB &= 0 << PINB4;    //output zero volts
    }
    else if (bit_is_clear(PINB, 0) && !(bit_is_clear(PINB, 1)))
    {
        PORTB &= 0 << PINB3;    //output zero volts
        PORTB |= 1 << PINB4;    //output 5 volts
    }
    else if (!(bit_is_clear(PINB, 0)) && bit_is_clear(PINB, 1))
    {
        PORTB |= 1 << PINB3;    //output 5 volts
        PORTB &= 0 << PINB4;    //output zero volts
    }
    else
    {
        PORTB |= 1 << PINB3;    //output 5 volts
        PORTB |= 1 << PINB4;    //output 5 volts
    }
}
}
#inlude
#包括
内部主(空)
{
//将引脚0设置为输入(pi信号0)

DDRB&=~(1根据您发布的代码,当只设置了一个输入时,相应的输出会在回路中快速切换开和关,而不是保持开,输出电压的平均值介于高输出和低输出之间。发生这种情况的原因是,尽管您正确地将输出设置为高,但在u在紧接之前或之后清除其他输出。例如,当只有引脚1为高电平时,在循环中运行以下代码:

    PORTB &= 0 << PINB3;    //output zero volts
    PORTB |= 1 << PINB4;    //output 5 volts
在这种情况下,第一条线接通引脚3,但第二条线再次关闭两个输出

不要尝试将
0
移动到正确的位位置,而是尝试移动
1
然后反转位。例如,要关闭针脚4:

    PORTB &= ~(1 << PINB4);

PORTB&=~(1根据您发布的代码,当只设置了一个输入时,相应的输出会在回路中快速切换开和关,而不是保持开,输出电压的平均值介于高输出和低输出之间。发生这种情况的原因是,尽管您正确地将输出设置为高,但在u在紧接之前或之后清除其他输出。例如,当只有引脚1为高电平时,在循环中运行以下代码:

    PORTB &= 0 << PINB3;    //output zero volts
    PORTB |= 1 << PINB4;    //output 5 volts
在这种情况下,第一条线接通引脚3,但第二条线再次关闭两个输出

不要尝试将
0
移动到正确的位位置,而是尝试移动
1
然后反转位。例如,要关闭针脚4:

    PORTB &= ~(1 << PINB4);

PORTB&=~(1根据您发布的代码,当只设置了一个输入时,相应的输出会在回路中快速切换开和关,而不是保持开,输出电压的平均值介于高输出和低输出之间。发生这种情况的原因是,尽管您正确地将输出设置为高,但在u在紧接之前或之后清除其他输出。例如,当只有引脚1为高电平时,在循环中运行以下代码:

    PORTB &= 0 << PINB3;    //output zero volts
    PORTB |= 1 << PINB4;    //output 5 volts
在这种情况下,第一条线接通引脚3,但第二条线再次关闭两个输出

不要尝试将
0
移动到正确的位位置,而是尝试移动
1
然后反转位。例如,要关闭针脚4:

    PORTB &= ~(1 << PINB4);

PORTB&=~(1根据您发布的代码,当只设置了一个输入时,相应的输出会在回路中快速切换开和关,而不是保持开,输出电压的平均值介于高输出和低输出之间。发生这种情况的原因是,尽管您正确地将输出设置为高,但在u在紧接之前或之后清除其他输出。例如,当只有引脚1为高电平时,在循环中运行以下代码:

    PORTB &= 0 << PINB3;    //output zero volts
    PORTB |= 1 << PINB4;    //output 5 volts
在这种情况下,第一条线接通引脚3,但第二条线再次关闭两个输出

不要尝试将
0
移动到正确的位位置,而是尝试移动
1
然后反转位。例如,要关闭针脚4:

    PORTB &= ~(1 << PINB4);


PORTB&=~(1)你在哪里测量这个电压?无论如何,你所做的可能没有意义。你不能把输出串联起来,如果你把它们并联起来,你也可以在软件中做必要的逻辑并简化为一个输出。这不是软件问题-你不能控制GPIO引脚的电平输出,这是de由芯片的电源电压决定(或多或少等于)。因此,这不是一个合适的问题。可能是这些输出连接到的任何电路都会将这些信号拖下来(例如,通过呈现过低的阻抗和消耗过多的电流);你想驱动什么?@Clifford如果代码是(无意中)的,输出可能看起来是2v以2:3的比例进行PWM。@风向标:这一点很好,但我们只能根据给出的信息进行。@Clifford但问题中显示的代码确实在设置了一个输入时无意中进行了PWM……要么设置,然后立即清除针脚3,要么清除,然后立即在回路中设置针脚4。您在哪里测量此电压?不管怎样,您所做的可能没有意义。您不能将输出串联起来,如果您将它们并联起来,您可能只需要在软件中执行必要的逻辑并简化为单个输出。这不是软件问题-您无法控制GPIO引脚的电平输出,这取决于(并且或多或少等于)芯片的电源电压。因此,这不是一个适合SO的问题。可能是这些输出连接到的任何电路都会将这些信号拖下来(例如,通过呈现太低的阻抗和消耗太多的电流);你想驱动什么?@Clifford如果代码是(无意中)的,输出可能看起来是2v以2:3的比例进行PWM。@风向标:这一点很好,但我们只能根据给出的信息进行。@Clifford但问题中显示的代码确实在设置了一个输入时无意中进行了PWM……要么设置,然后立即清除针脚3,要么清除,然后立即在回路中设置针脚4。您在哪里测量此电压?不管怎样,你所做的可能没有意义。你不能把输出串联起来,如果你把它们并联起来,你也可以在软件中做必要的逻辑并简化为一个输出