尝试bit-bang TPIC6C595移位寄存器但没有输出

时间:2015-07-30 21:21:19

标签: c avr shift-register

该代码适用于AVR atamega168xplained迷你板,带有ATmega168pb MCU。我正在使用的移位寄存器是德州仪器 TPIC6C595 我将移位寄存器的漏极输出连接到8个LED的阳极。移位寄存器的OE(G)引脚连接到GND,CLR连接到5V。移位寄存器VCC和GND之间有一个100nF陶瓷电容。 SER OUT与任何东西都没有连接,因为在我向上移动到移位寄存器之前,我试图对这一点进行bit-bang。

我发现移位寄存器没有输出,所有漏极输出都很低(用万用表测试)。当我从微控制器断开SER IN,SRCK和RCK时,我只在其中一个LED上闪烁,我猜这是因为这些引脚悬空并处于未定义状态。即使代码错误,我也希望至少得到某种垃圾输出,但是在微控制器完全断开的情况下,我获得了更多的输出。我知道它正在输出一个信号,因为我可以在没有移位寄存器的情况下将它连接到LEDS,并且看到它们以各种强度亮起,但没有示波器能够实际查看信号。

这是代码,其中包含了文件顶部输出端口的定义,因此它清楚了解了所做的事情:

#define DDR_SREG    DDRD
#define PORT_SREG   PORTD
#define SRCK        _BV(PORTD0)
#define RCK         _BV(PORTD1)
#define SER         _BV(PORTD2)

void display_write(uint8_t data)
{
    char i;

    PORT_SREG &= ~RCK;           // latch low

    for (i = 0; i < 8; ++i) {
        PORT_SREG &= ~SRCK;     // clock low
        if (data & 1)           // serial out
            PORT_SREG |= SER;
        else
            PORT_SREG &= ~SER;
        PORT_SREG |= SRCK;      // clock high
        data >>= 1;             // shift data
    }

    PORT_SREG |= RCK;           // latch high
}

1 个答案:

答案 0 :(得分:0)

解决了它。经过一些研究后,很明显这个移位寄存器具有开漏输出,不能提供电流(它们只能吸收电流)。相应地调整接线我能够让移位寄存器满意。