serial to parallel test with 74c595 and pic mcu
74hc595 က serial နည္းနဲ႔သြင္းလိုက္တဲ့ data ကို parallel အေနနဲ့ ျပန္ထုတ္ေပးပါတယ္။ serial data အတြက္ ၁ ငုတ္၊ shift clock အတြက္ ၁ ငုတ္၊ latch (store ) clock အတြက္ ၁ ငုတ္ ေပါင္း ၃ ငုတ္ရွိရံုနဲ့ အထြက္ parallel ၈ ခုပြားႏိုင္ပါတယ္။ အထြက္ ၈ ခုထက္ပိုလိုခ်င္ရင္ေတာ့ cascade လုပ္ျပီးသံုး ႏိုင္ပါတယ္။ ငုတ္ ၃ ငုတ္ရင္းျပီး လိုသေလာက္ ပြားလို႔ရတဲ့သေဘာေပါ့။
က်ေနာ္နားလည္သလိုပဲ ဆက္ေျပာမယ္ဗ်ာ။ သူ႔ မွာ serial နည္းနဲ့သြင္းလိုက္ထာကို shift clock ရဲ့ rising edge မွာ data bit တစ္ခုျခင္းေရႊ႔တယ္။
ကိုယ္သြင္းခ်င္တဲ့ data ကို shift clock rising edge ေပၚခ်ိန္နဲ့ ကိုကိျပီး data line ေပၚတင္ထားတာ။ clock 8 ခု အျပီးမွာ data ၈ ခု ကို သြင္းၿပီးသားျဖစ္ေနျပီ။
သြင္းထားတဲ့ data က output pin ၈ ခုမွာ မေပၚ ေသးဘူး။ အဲ့လိုေပၚဖို႔ store(latch) clock ကို တစ္ခ်က္ခုန္ေပးရတယ္။ store clock rising edge မွာ ခုနက သြင္းလိုက္တဲ့ data ေတြဟာ output port မွာ ေပၚလာေတာ့တယ္။
တစ္ခုထပ္လိုတာက. . . . .
- output enable (OE/ pin 13) ကို ground ခ်ရမယ္။
- master reset (ME/ pin 10) ကို supply 5v ေပးထားရမယ္။
- serial data (SD/ pin 14) က pic ရဲ႕ data လႊတ္မယ့္ Pin နဲ႕ခ်ိတ္
- shift clock (SH CP/ pin 11) က pic ရဲ႕ shift clock လႊတ္မယ့္ Pin နဲ႕ခ်ိတ္
- store(latch) clock (ST CP/ pin 12) က pic ရဲ႕ store(latch) clock လႊတ္မယ့္ Pin နဲ႕ခ်ိတ္
#define SHIFT_CLOCK PORTD.F2
#define SHIFT_LATCH PORTD.F1 // store
#define SHIFT_DATA PORTD.F0
#define show PORTD.F3
void shiftdata595(unsigned char _shiftdata)
{
unsigned int i;
unsigned char temp;
temp = _shiftdata;
i=0;
while (i<8)
{
if (temp.F7==0)
{
SHIFT_DATA = 0;
}
else
{
SHIFT_DATA = 1;
}
temp = temp<<1;
SHIFT_CLOCK = 1;
Delay_us(1);
SHIFT_CLOCK = 0;
i++;
}
}
void latch595()
{
SHIFT_LATCH = 1;
Delay_us(1);
SHIFT_LATCH = 0;
}
void main()
{
TRISD=0;
PORTD=0;
PORTC=0;
TRISC=0;
while(1)
{
shiftdata595(0xff);
latch595();
delay_ms(100);
shiftdata595(0xaa);
latch595();
delay_ms(100);
shiftdata595(0xD1);
latch595();
delay_ms(100);
}
}
Comments
Post a Comment