595 với pic16f887 qua SPI

MMKC

Thành Viên PIF
Em có code bên C5:
Code:
// HItech-C ban moi
#include<htc.h>
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF);  //1st config. Word
__CONFIG(BOR4V_BOR21V); //2st config. Word
#define _XTAL_FREQ4000000
#include <htc.h>
 
 
unsigned char spi(unsigned char b);//truyen 1 byte (b) qua SPI port
 
void main(void)
{
 
ANSEL = 0;
ANSELH = 0;
 
 
// I/O PORT init for SPI communication
 
TRISC3 = 0;// SCK pin is output
TRISC5 = 0;// SDO pin is output
TRISC4 = 1;// SDI pin is input
 
// init LATCH PIN: RC1
TRISC1 = 0;    // is output
 
//TRISD0 = 0;// 25LC256 chip select
//RD0 = 1;// deselect chip
 
//SSPSTAT
SMP = 1; // data in sampled at middle
CKE = 1; // data out at rising edge (with CKP = 0)
//SSPCON
SSPCON = 0b00100000;// CKP = 0, SPI mode baudrate = Fosc/4
 
 
while (1)
{
//For example
spi(0x55);
spi(0xAA);
 
//latch
RC1 = 1;
RC1 = 0;
}
 
}
 
//Truyen 1 byte
unsigned char spi(unsigned char b)
{
WCOL = 0;// clear any write collision condition
SSPIF = 0;// clear SSP interrupt flag
SSPBUF = b;// load the SSP buffer with data
while(!SSPIF);// wait for SSPIF to be set
return SSPBUF;
}
Em ghép nối tiếp 2 con 595, SQh con này nối chân Data Input con kia, xung clock 2 con nối nhau ,chân chốt cũng vậy, OE nối GND, Reset nối VCC, cấp nguồn 5v.
Truyền 2 byte liên tiếp nhưng em kiểm tra thì không đúng dữ liệu mong muốn gửi ?
Em không biết sai chỗ nào :D
 
sao lại chân chốt với clock lại nối với nhau nhỉ. bạn thử xem lại datasheet của nó thử xem. pin chốt là dùng để chốt dữ liệu sau khi đã truyền xong còn bạn nối với xung clock thì sau khi truyền một bit sẽ chốt dữ liệu một lần. như vậy thì dữ liệu đầu ra sẽ không theo như ý muốn.
 

MMKC

Thành Viên PIF
Em muốn 1 lần ra lần 16 bit luôn, nên chỉ dùng 1 chốt
 
vậy thì em phải dùng pin chốt khác pin clock chứ. sau khi em xuất dữ liệu ra hết thì tạo xung clock ở pin chốt để chốt dữ liệu chứ ko phải như em đấu 2 pin chốt với clock lại với nhau.
 

MMKC

Thành Viên PIF
vậy thì em phải dùng pin chốt khác pin clock chứ. sau khi em xuất dữ liệu ra hết thì tạo xung clock ở pin chốt để chốt dữ liệu chứ ko phải như em đấu 2 pin chốt với clock lại với nhau.
Em ghi nhần, thực ra là chân chốt 2 con nối với nhau, và chân clock cũng vậy :D
Mà em cầm VOM ra đo các chân output thì cho kết quả không giống :(
 
Top