Pages: 1 ... 11 12 [13] 14 15 ... 19   Go Down
Print
Author Topic: เกี่ยวกับ Ac power line x-10  (Read 260711 times)
0 Members and 15 Guests are viewing this topic.
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #180 on: November 19, 2009, 11:59:39 AM »

ขอโทษครับที่ตอบช้าตอนนี้งานค่อนข้างวุ่นนะครับ
ตอบคุณ muiim ในส่วนที่ ตัด case X10FN_STATUS_REQ: ออกไปแล้วเพิ่ม
ในส่วน การแสดงผล "A04 = STATUS ON" ไม่เห็นมีส่วนตรวจสอบ hardware เลยครับ อย่างเช่น
          P=ReadPortD();
          P&=0B00000001;

สำหรับฟังก์ชั้นที่คุณ muiim  สร้างขึ้นมา
       X10FuncExeADR1(rHouse,rNumber,rFunction);
       X10FuncExeADR2(rHouse,rNumber,rFunction);
       X10FuncExeADR3(rHouse,rNumber,rFunction);
       X10FuncExeADR4(rHouse,rNumber,rFunction);

เป๋นการ pump code เหมาะสำหรับทดสอบเท่านั้นครับ ไม่เหมาะสำหรับนำไปใช้งานเพราะมีส่วนที่ซ้ำซ้อนค่อนข้างมาก และจะทำให้โค๊ดใหญ่ด้วย

ในกรณีของคุณ muiim  ส่วนของฟังก์ชั่นจะแบ่งออกเป็น 4 ประเภท
- ส่วนตรวจสอบแอดเดรส
- ส่วนตรวจสอบคำสั่ง
- ส่วนควบคุมเอาต์พุต
- ส่วนแสดงผล


ส่วนตรวจสอบแอดเดรส
ในกรณีนี้มีแอดเดรส A01,A02,A03,A04

จะเห็นว่าแอดเดรสประกอบไปด้วย House และ Number
เราจะตรวจสอบจากใหญ่ไปเล็ก
ในส่วนการตรวจสอบเงื่อนไข หากมีเงื่อนไขเดียวก็ใช้ if หากเงื่อนไขมีมากกว่า 1 ให้ใช้ switch
ในกรณีที่ไม่ใช้ eeprom

ในฟังก์ชั่น X10FuncExe()

//Private Function
//ส่วนตรวจสอบแอดเดรส ส่วนที่1
    if(H=='A' && N==1)
    {
//ส่วนตรวจสอบคำสั่ง
     switch(Fn)
     {
      case X10FN_ON:                        //ON
//ส่วนควบคุมเอาต์พุต
        output_high(X10OUT1);
        break;
      case X10FN_OFF:                       //OFF
//ส่วนควบคุมเอาต์พุต
        output_low(X10OUT1); 
        break;
      case X10FN_STATUS_REQ:                     //12 ON ,13 OFF
          P=ReadPortD();
          P&=0B00000001;
//ส่วนควบคุมเอาต์พุต และแสดงผล
          if(P==0B00000001)
          {
           X10Write(H,N,X10FN_STATUS_ON);      //X10Write(H,N,12);
           printf("A01 = STATUS ON\r\n");
          }
          else
          {
           X10Write(H,N,X10FN_STATUS_OFF);
           printf("A01 = STATUS OFF\r\n");
          }
          break;
     }
    }

//ส่วนตรวจสอบแอดเดรส ส่วนที่2
 if(H=='A' && N==2)
    {
     switch(Fn)
     {
      case X10FN_ON:                        //ON
        output_high(X10OUT2);
        break;
      case X10FN_OFF:                       //OFF
        output_low(X10OUT2); 
        break;
      case X10FN_STATUS_REQ:                     //12 ON ,13 OFF
          P=ReadPortD();
          P&=0B00000010;
          if(P==0B00000010)
          {
           X10Write(H,N,X10FN_STATUS_ON);      //X10Write(H,N,12);
           printf("A02 = STATUS ON\r\n");
          }
          else
          {
           X10Write(H,N,X10FN_STATUS_OFF);
           printf("A02 = STATUS OFF\r\n");
          }
          break;
     }
    }
.
.
.
ให้ทำจนครบ 4 address ในแต่ละส่วนให้แ้ก้ไขในส่วนที mark เป็นสีแดงครับ
โค็ดอาจจะเขียนรวมให้กระชับมากกว่านี้แต่จะดูยากครับ
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #181 on: November 19, 2009, 08:53:58 PM »

ตอบคุณ plom
การที่คุณทำภาครับและภาคส่ง โดยใช้ IC555 ทำให้ภาคส่งๆ เป็นพัลซ์
เมื่อต่อ LED ที่ภาครับ แล้วมันกระพริบตามจังหวะที่ IC555 ทำงานก็ถือว่ารับส่งกันได้แล้วครับ
โดยการที่ LED ติดถือว่าเป็นข้อมูล "1" ต่อไปคุณก็เอา IC555 ออก แล้วนำ MCU มาต่อแทน ทั้งในภาครับและภาคส่ง
และทำการทดสอบส่องข้อมูล 1 ไบต์ก่อน เช่น 'A' = 0x40 = ไปนารี 0100 0001
วิธีการส่งแบบ MSB หรือส่งบิทสูงไปก่อน D7,D6,D5...D0  เช่นส่ง 0 1 0 0 0 0 0 1
ส่วนในภาครับ ก็รับข้อมูลที่ละบิต เมื่อครบ 8 บิท ก็ให้แสดงค่าออกมา

X10-LAB ออกแบบมาเพื่อ ศึกษาการสื่อสารบน AC Line หรือ Power Line Carrier (P.L.C.)
โดยยกตัวอย่างมาตรฐาน X10 ขึ้นมา คุณน่าจะทำตามให้ได้ก่อน เพราะ hardware ก็เป็นลักษณะเดียวกันกับการสื่อสารด้วย AC Line ประเภทอื่นๆ
เมื่อคุณเข้าใจแล้ว จะดัดแปลงไปใช้งานอื่น จะง่ายขึ้นครับ
ดีกว่าที่คุณจะตัดมาเพียงบางส่วน แล้วมาคิด format  และ protocol  เอง นั้นคือคุณจะเริ่มจากศูนย์

ใน AC Line มี noise มากมาย คุณจะรู้ได้อย่างไรว่าอันไหนเป็น noise อันไหนเป็นข้อมูล
แล้วการตรวจสอบข้อผิดผลาดของข้อมูล จะทำด้วยวิธีใด
ใน X10 จะแยก noise กับข้อมูลด้วย start bit และตรวจสอบข้อมูลด้วย compliment 

ตัวอย่าง format  และ protocol ดูที่ topic
http://www.thaimicrotron.com/webboard2/index.php?topic=206.msg644#msg644
Logged
plom
Jr. Member
**
Offline Offline

Posts: 49


Email
« Reply #182 on: November 22, 2009, 09:26:34 PM »

ถึงคุณ muiim ครับ คือผมจะทำเครื่องวัดอุณหภูมิครับ คือสัญญาณที่ได้จากจุดวัดจะต้องผ่านสายAC ก่อน แล้วจึงจะนำไปแสดงค่าอุณหภุมิที่จอแสดงผล ครับ คือตอนนี้ผมกำลังศึกษาการส่งข้อมูลและพิจารณา หัววัดอุณหภุมิอยู่ครับว่าอันไหนจะส่งผ่านสัญญาณได้ง่ายที่สุด(ไม่ยุ่งยากมากในการส่งผ่านสายAC)ระหว่าง SMT160-30 กับ SHT11 ซึ้งเป็นตัววัดอุณหภูมิทั้งคู่ แต่ที่ผมคิดไว้คือผมจะใช้ SHT11 เพราะในเวฟนี้มีข้อมูลให้เยอะเลยครับ ขอคำแนะนำด้วยครับ และขอขอบคุณพี่สมิธเป็นอย่างสูงที่คอยบอกขั้นตอนการทดลองให้ครับ ขอบคุณครับCheesy Cheesy Cheesy
Logged
plom
Jr. Member
**
Offline Offline

Posts: 49


Email
« Reply #183 on: November 23, 2009, 12:53:26 PM »

ถึงพี่สมิธ การทดสอบส่งข้อมูลที่พี่แนะนำ โดยใช้ โมดูลนี้ เชื่อมต่อกับคอมพิวเตอร์ให้แสดงค่าออกมา ที่หน้าจอ PC แสดงผลผ่าน RS232 ตามโมดูล X-10lab นี้เลยใช้ไหมครับ ผมเข้าใจอย่างนี้ถูกต้องรึป่าวครับ Huh Huh Huh
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #184 on: November 23, 2009, 04:25:01 PM »

ใช่ครับเพราะ X10 LAB เป็นทั้งตัวส่งและตัวรับอยู่แล้ว ให้รับค่าแล้วแสดงผลออกทาง RS232 ก่อน ได้แล้วคุณค่อยดัดแปลงไปทำอย่างอื่น
Logged
plom
Jr. Member
**
Offline Offline

Posts: 49


Email
« Reply #185 on: November 25, 2009, 10:37:07 AM »

ขอบคุณครับ Smiley Smiley Smiley
Logged
plom
Jr. Member
**
Offline Offline

Posts: 49


Email
« Reply #186 on: December 09, 2009, 06:18:04 PM »

สวัสดีครับพี่สมิธ  ตอนนี้ผมได้ต่อไมโครทั้งภาครับเเละภาคส่งเเล้วครับ ในส่วนของการเเสดงผลที่มอนิเตอร์นี้ จะแสดงได้อย่างไรครับ  และพี่ช่วยเขียนโค้ดโปรแกรมในส่วนของภาคส่ง และภาครับ ที่จะนำมาโปรแกรมลงMCU ขั้นต้นตามที่พี่แนะนำให้หน่อยนะครับ  เริ่มไม่ถูกจริงๆครับ ผมใช้PIC 16f628 ทั้งภาครับ ภาคส่ง ครับ  Cry Cry Cry
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #187 on: December 14, 2009, 12:47:37 AM »

ติดธุระไปต่างจังหวัดซะนานเลยครับ
ที่คุณ plom ว่า ได้ต่อไมโครทั้งภาครับเเละภาคส่งเเล้ว นั้นตัดต่อวงจรออกมาทำเอง หรือว่าเหมือนกับ X10 LAB ครับ
หากเหมือนกับ X10 LAB ตัวอย่างที่ให้ก็ค่อนข้างจะสมบูรณ์ แล้วนะครับ ทั้ง TX,RX Zerocossing อีกทั้งมีการแสดงผลที่ได้รับออกทาง RS232 ด้วย
Logged
plom
Jr. Member
**
Offline Offline

Posts: 49


Email
« Reply #188 on: December 14, 2009, 06:35:34 PM »

สวัดดีครับ  คือผมทำตามX-10LAB เลยครับ แต่ไม่ได้ต่อชุดPANEL และชุด รีเลย์ ครับ  ผมต่อเฉพาะตัว MCU ทั้งภาครับ ภาคส่ง  ทั้งสองบอร์ดต่อเหมือนกันทุกอย่างครับ  วิธีที่ผมทดลองมีดังนี้ครับ(แบบว่าลองผิด ลองถูกนะครับ)
1. ผมนำโค้ด EX_X10o.C  เบิร์นลงMCU ที่อยู่ในบอร์ดที่ผมเอาเป็นภาคส่ง  แต่ไม่ได้ต่อ  RS232 นะครับ
2. ผมนำโค้ด X10Mon2.C เบิร์นลง MCU ที่อยู่ในบอร์ดที่ผมเอาเป็นภาครับ  และต่อ RS232 เข้าPC หวังให้เป็นภาครับและแสดงผล
   ตาม x-10LAB ครับ เพื่อให้แน่ใจว่า ภาค AC Line ใช้งานได้ ครับ  แต่ผลออกมาไม่มีอะไรเกิดขึ้นเลยครับ ไม่มีข้อความใดๆขึ้นที่Serial Port Monitor เลยครับ  ก็เลยโพสขอคำแนะนำจากพี่สมิธ  พี่ช่วยแนะนำด้วยนะครับ ผมไม่รู้ว่าที่ผมทำมันถูกหรือผิดตรงไหนบ้าง (ขอบคุณครับ)
ในส่วนของโค้ดโปรแกรมของภาคส่ง และภาครับ ที่จะนำมาโปรแกรมลงMCU ที่จะนำมาทดลองขั้นต้นตามที่พี่แนะนำผมก็เริ่มไม่ถูกจริงๆครับ   
ขอขอบคุณพี่สมิธ มากมากครับ ที่เป็นอาจารย์ที่ปรึกให้ผมมาตลอด ขอบคุณ
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #189 on: December 15, 2009, 01:35:11 AM »

ที่คุณ plom บอกว่าทำตาม X-10LAB นั้นได้ทำ PCB หรือเปล่าครับ แล้วดูข้อผิดผลาดที่นี่หรือยัง
http://www.thaimicrotron.com/webboard2/index.php?topic=22.msg671#msg671
ส่วนที่แก้ไขแล้วดูที่
http://www.thaimicrotron.com/X10/X10LAB/X10LabPCB.pdf

คุณ plom คงไม่ได้ update ซะนาน
EX_X10o.C เป็น code เก่าเมื่อ 2 ปีที่แล้วปัจจุบันเป็น X10Demo2.c ซึ่งใช้ PIC16F648A ครับ
ดู code ใหม่และวิธีใช้งานที่
http://www.thaimicrotron.com/X10/X10LAB/X10Lab2.htm#code
วิธีใช้งาน
http://www.thaimicrotron.com/X10/X10LAB/X10Demo2.htm

จากรูป


หากคุณ plom ไม่ได้ต่อ Panel ที่ขา RB6,RB7 จะต้องต่อ R10K ลงกราวน์ไว้ ไม่เช่นนั้นโปรแกรมโปแกรมจะติดอยูในลูป การอ่านค่าคีย์ ไปทำงานอื่นไม่ได้
แล้วที่ ขา RB4 ควรจะต่อลำโพงเปียโซไว้ เพื่อที่ไว้สังเกตุการทำงานและข้อผิดพลาด
ลำโพงเปียโซนะครับไม่ใช่ลำโพงแม่เหล็ก ดูเรื่องลำโพงที่
http://www.thaimicrotron.com/CCS-628/Referrence/Speaker.htm

แล้วทดลองตามนี้
http://www.thaimicrotron.com/X10/X10LAB/X10Demo2.htm
ให้ได้ก่อน จะได้ทราบว่า HardWare ทำงานได้ถูกต้องหรือเปล่าครับ
Logged
plom
Jr. Member
**
Offline Offline

Posts: 49


Email
« Reply #190 on: December 15, 2009, 09:08:56 AM »

สวัดดีตอนเช้าครับพี่สมิธ  คือผมต่อลงโฟโต้บอร์ดครับ ตอนนี้กำลังทำลงPCB ที่แก้ไข ที่VR แล้วครับ
ขั้นตอนที่ผมทำนี้
1. ผมนำโค้ด EX_X10o.C  เบิร์นลงMCU ที่อยู่ในบอร์ดที่ผมเอาเป็นภาคส่ง  แต่ไม่ได้ต่อ  RS232 นะครับ
2. ผมนำโค้ด X10Mon2.C เบิร์นลง MCU ที่อยู่ในบอร์ดที่ผมเอาเป็นภาครับ  และต่อ RS232 เข้าPC หวังให้เป็นภาครับและแสดงผล

ถูกต้องแล้วใช้ไหมครับ

เหลือเพียง อัพเดทโค้ดเป็น x10Demo2 และโค้ด X10Mon2 เปลี่ยนเป็นinclude <16F648A.h>
ส่วน HardWare ก็ต่อ R10K ที่ขาRB6 RB7  และเปี้ยโซที่ขาRB4

ผมเข้าใจอย่างนี้ถูกต้องรึป่าวครับ(หรือผิดตรงไหน) ช่วยแนะนำด้วยครับ
ขอบคุณครับ Smiley
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #191 on: December 15, 2009, 12:50:04 PM »

การทำ PCB เป็นการบังคับให้คุณต่อให้ถูกครับ เหลือแต่การปรับแต่งคอยล์ ซึ่งก็แค่ปรับไว้กลางๆ เมื่อวางไว้ใกล้ๆกัน ก็จะรับส่งกันได้แล้วครับ เพราะถ้าคุณต่อบนโปรโตบอร์ด เวลามันไม่ทำงานก็ไม่ทราบว่าจะให้คำแนะนำอย่างไร เพราะไม่ทราบว่าผิดตรงไหนหรือเปล่า

โคีด EX_X10o.C , X10Mon2.C ก็ยังคงใช้ได้ครับ แต่โค๊ดตัวใหม่จะละเอียดกว่า
ให้คอมไพล์และโปรแกรมด้วย X10Demo2.c ทั้งสองตัวเลยครับ เพราะมันเป็น bidirection คือรับส่งได้ในตัวเดียวกัน
เพียงแต่ตอนคอมไพล์ให้แก้ที่โค๊ด ตัวแรกให้เป็น A04 อีกตัวให้เป็น A05
โดยแก้โค๊ดที่
#rom  0x2100={'A',0x04}

โดยดัวแรก(A04)ต่อกับ PC ผ่าน RS232 แล้วใช้คำสั่ง ให้ตัวที่สอง(A05)ทำงาน จะสังเกตุได้จาก LED1 ที่ต่อไว้กับ RB5 กระพริบ แล้วจะมีเสียงออก มาทางลำโพงเปียโซครับ โดยให้ทดลองตามนี้ครับ
http://www.thaimicrotron.com/X10/X10LAB/X10Demo2.htm
Logged
plom
Jr. Member
**
Offline Offline

Posts: 49


Email
« Reply #192 on: December 15, 2009, 01:19:28 PM »

ขอบคุณครับ  Smiley Smiley Smiley
Logged
plom
Jr. Member
**
Offline Offline

Posts: 49


Email
« Reply #193 on: January 12, 2010, 03:26:24 PM »

สวัดดีครับพี่สมิธ กลับมาลุยอีกครั้งครับหลังจากที่สอบมิดเทอมเสร็จครับ คือผมลองcomplierตัวโปรแกรมX10Demo2.c ด้วยโปรแกรมccs ครับ มันcomplier ไม่ผ่านครับ ขึ้นข้อความนี้ครับ
Error[43]   C:\Documents and Settings\Administrator\Desktop\x-10compileer\x10000.c 867 : Expecting a declaration
แต่complier ตัวโปรแกรมที่ใช้pic16f628 complierได้ครับ ช่วยแนะนำหน่อยนะครับ

และการลงอุปกรณ์ อุปกรณ์ที่ต่อขนานกับตัว C 220uF/35V  ตัวสีแดงอะครับคือตัวอะไรครับ ช่วยแนะนำหน่อยนะครับ

ขอบคุณครับ
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #194 on: January 12, 2010, 10:34:51 PM »

เนื่องจาก X10Demo2.c โค็ดค่อนข้างใหญ่
- ต้องใช้ PIC16F648A หรือเบอร์ที่มีขนาด 4 K ขึ้นไปครับ
ผมลองคอมไพล์โดยใช้ CCS Version 3.249 และ 4.074 ก็ผ่านนิครับ
- มีการดัดแปลงโค๊ดหรือเปล่า คอมไพล์เลอร์ฟ้องว่ามี error ที่บรรทัด 867 ซึ่งก็เป็นบรรทัดสุดท้ายของโปรแกรม
ก็น่าจะเป็นว่า หน่วยความจำไม่พอ


ตัวสีแดง ที่ว่าคือ C0.1/50V แบบมัลติเลเยอร์ครับ
Logged
Pages: 1 ... 11 12 [13] 14 15 ... 19   Go Up
Print
 
Jump to: