output 74hc595

nklvodoi

Trứng gà
//2death's note: CODE nên để trong thẻ CODE để bài viết gọn gàng, dễ xem.

#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"

uint8_t ui8PinData=2,i;

int main(void) {
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PINGPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2,0x00);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2,4);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2,0x00);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,2);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);

GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);

GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);

GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);

GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);

GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);

GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,2);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);

GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,2);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2,0x00);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2,4);
}

cho em hỏi sao code em viết thế này, đo các chân giao tiếp với 595 dữ liệu ra đúng, SDO là pin1, SCK là pin 3. Nhưng output của 595 lại ra lúc toàn 1, lúc 4 chân đầu 1, còn lại 0.
 

ctcngh

Thành Viên PIF
Bạn thử giảm xung clock hệ thống hay thêm dòng delay giữa 2 dòng tạo xung SCK xem. Nếu nhanh quá hình như không được, check datasheet lại xem.
 

nklvodoi

Trứng gà
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2,0x00);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2,4);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2,0x00);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,2);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,2);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1,2);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,0);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,8);
SysCtlDelay(20000000);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2,0x00);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2,4);
đã thử rùi mà nó vẫn vậy! không bik có cần config gì thêm cho output của kit ko ta?
 

mafiaWolf

Chủ tịch Hội phụ nữ PIF
Sao code cho 595 mà làm thủ công dữ vậy ạ >"<...một đống dòng người muốn giúp cũng lười đọc lắm :D
 

Kisses Hacker

Art Supporter
Staff member
Phải chăng đây chính là code xung GPIO thủ công thần thánh cho 595? :doc Good job. Cố lên bạn.
À không cần delay giữa các dòng đâu :1cool_byebye: Yên tâm.
P.s: có thư viện sẵn này mà không share đâu :2cool_sexy_girl: Tự suy nghĩ mới thú vị đó.
 
Top