สอบถาม Shift 74hc595

Started by masterrtc, May 23, 2014, 11:24:49 PM

Previous topic - Next topic

masterrtc

ขอตัวอย่าง Code ที่เขียน สั่ง 74hc595 แบบ หลายๆตัว สั่ง LED หลายๆชุดๆ ครับ รบกวนด้วยครับ


thai_micro


RoLRoR



เห็นวงจรท่านต่อ ให้ข้อมุลอนุกรมออกจาก IC #1 ไปยังอินพุตของ #2 และ 3 เลย
แสดงว่าตั้งใจให้ #2 และ #3 ทำงานเหมือนกันเลย ใช่ไหมครับ?
และวงจร mosfet แต่ละตัว ไม่แน่ใจว่าท่านต่อถูกไหม เห็นมีจุด ground ไปเชื่อม input ของ mosfet อยู่ด้วยครับ
และรูปแบบไฟวิ่ง ที่ท่านต้องการ คงแล้วแต่การออกแบบ pattern ที่เตรียมไว้ ส่งข้อมูลออกไปครับ

ผมเลยลองทดสอบทำตามเวบ tutorial ต้นแบบ ลองส่งข้อมูลให้ 74HC595 อนุกรม 3 ตัวครับ
http://arduino.cc/en/tutorial/ShiftOut
http://arduino.cc/en/Tutorial/ShftOut23

ไฟล์ครับ
http://www.mediafire.com/download/a794vilu0ilijsb/arduino_74hc595_x3.rar



ลองวงจร drive mosfet แบบนี้ดูไหมครับ opto แยกกราวด์และแหล่งจ่าย
ลดการรบกวน arduino และ 74HC595 เพราะดูน่าจะใช้กระแสสูงอยู่ครับ


masterrtc

แต่ว่า โค๊ดแบบ ของผม แต่ผมอยากให้ ใน 1 loop อยากให้ กระพริบเร็วๆ 3 ครั้ง แบบเฟลช ครับ พอจะทำได้ไหมครับ

digitalWrite(latch, LOW);
    shiftOut(data, clock, LSBFIRST, Step1);
    shiftOut(data, clock, LSBFIRST, Step1);
    shiftOut(data, clock, LSBFIRST, Step1);
    digitalWrite(latch, HIGH);
    delay(200);

JENG

Quote from: masterrtc on May 29, 2014, 11:38:59 AM
แต่ว่า โค๊ดแบบ ของผม แต่ผมอยากให้ ใน 1 loop อยากให้ กระพริบเร็วๆ 3 ครั้ง แบบเฟลช ครับ พอจะทำได้ไหมครับ

digitalWrite(latch, LOW);
    shiftOut(data, clock, LSBFIRST, Step1);
    shiftOut(data, clock, LSBFIRST, Step1);
    shiftOut(data, clock, LSBFIRST, Step1);
    digitalWrite(latch, HIGH);
    delay(200);

ทำได้
ให้ update ข้อมุล แล้ว lat อาจต้องเขียนแบบ state machine ช่วย ผมไม่ค่อยเก่งเรื่องนี้ซะด้วยต้องรอผู้รู้
การเข้าถึง แบบ bit ของ 595 ทำได้ง่ายๆตามข้างล่างนี้ เอาไปเป็นแนวดูคับ


#define D0_HIGH()   expension_op_write(__store_register_data |=  0x01)
#define D0_LOW()    expension_op_write(__store_register_data &= ~0x01)
#define D1_HIGH()   expension_op_write(__store_register_data |=  0x02)
#define D1_LOW()    expension_op_write(__store_register_data &= ~0x02)
#define D2_HIGH()   expension_op_write(__store_register_data |=  0x04)
#define D2_LOW()    expension_op_write(__store_register_data &= ~0x04)
#define D3_HIGH()   expension_op_write(__store_register_data |=  0x08)
#define D3_LOW()    expension_op_write(__store_register_data &= ~0x08)
#define D4_HIGH()   expension_op_write(__store_register_data |=  0x10)
#define D4_LOW()    expension_op_write(__store_register_data &= ~0x10)
#define D5_HIGH()   expension_op_write(__store_register_data |=  0x20)
#define D5_LOW()    expension_op_write(__store_register_data &= ~0x20)
#define D6_HIGH()   expension_op_write(__store_register_data |=  0x40)
#define D6_LOW()    expension_op_write(__store_register_data &= ~0x40)
#define D7_HIGH()   expension_op_write(__store_register_data |=  0x80)
#define D7_LOW()    expension_op_write(__store_register_data &= ~0x80)



//--------------------
// Expension output write
//--------------------
volatile unsigned char __store_register_data;
void expension_op_write(unsigned char d)
{
    unsigned char i = 8;
   
    while(i--)
    {
        if(d&0x80) DAT_HIGH();
        else DAT_LOW();
        CLK_HIGH();
        CLK_LOW();
        d <<= 1;
    }
    LAT_HIGH();
    LAT_LOW();
}



//--------------------
// Main program
//--------------------
void main(void)
{
    for(;;)
    {
        D0_HIGH();
        _delay_ms(500);
        D0_LOW();
        _delay_ms(500);
    }
}
สามารถติดตาม electoday ได้ที่

Facebook
www.facebook.com/groups/coopmicro

Google+
https://plus.google.com/communities/103482067769375459277

☺☺☺ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา☺☺☺

masterrtc

ครับเดียวจะลองดูครับ 

ขอถามอีก 1 เรื่องครับ เรื่อง libraries มันใช้งาน ยังไง ครับ