该代码适用于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
}
答案 0 :(得分:0)
解决了它。经过一些研究后,很明显这个移位寄存器具有开漏输出,不能提供电流(它们只能吸收电流)。相应地调整接线我能够让移位寄存器满意。