Pages: 1 2 3 [4] 5 6 ... 19   Go Down
Print
Author Topic: เกี่ยวกับ Ac power line x-10  (Read 118904 times)
0 Members and 3 Guests are viewing this topic.
OHM_HZ
Guest
« Reply #45 on: March 08, 2009, 02:53:17 PM »

ขอบคุณมากครับ
     เอ่อ คือ  ผมหาโปรแกรม CCS ไม่ได้เลยอะครับ ก็เลยอยากขอ โปรแกรมที่ Address เป็น A02 อะครับ
รบกวนพี่ช่วยแก้ address แล้วส่งมาให้ทีครับ ส่งมาเป็น .hex เลยนะครับ
       ขอบคุณอย่างแรงครับ

ปล. file "Hex File for PIC16F628 V1.0Beta" ที่ให้โหลด  address = A04
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 333


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


« Reply #46 on: March 08, 2009, 08:08:51 PM »


Address เป็น A02 ครับ
http://www.thaimicrotron.com/X10/X10LAB/EX_X10o.zip

ที่จริงแล้ว address อยู่ที่ EEPROM ครับ ใช้ตัวโปรแกรมที่แก้ไข EEPROM ได้เช่น WINPIC800
http://www.winpic800.com/
Load Hex File แล้วมาแก้ไข EEPROM แล้วค่อยโปรแกรม ก็ได้ครับไม่ต้อง Compile ใหม่
« Last Edit: March 09, 2009, 03:39:15 AM by smitdh » Logged
OHM_HZ
Guest
« Reply #47 on: March 09, 2009, 06:22:16 AM »

ขอบคุณมากครับบบบ
Logged
muiim
Jr. Member
**
Offline Offline

Posts: 67


Email
« Reply #48 on: May 11, 2009, 09:39:58 PM »

คือว่าผมลองทำดู(สองตัว) แล้ววัดความถี่มันได้ 160KHz ทั้งสองตัว(คือผมปรับต่ำสุดแล้ว) ก็เลยสงสัยว่ามันจะสามารถส่งข้อมูลหากันได้มันครับ ?
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 333


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


« Reply #49 on: May 12, 2009, 11:33:08 PM »

ผมขอย้าย topic ที่ซ้ำมาที่นี่เลยนะครับ

จากคำถาม
>>คือว่าผมลองทำตามแบบที่พี่ๆลงใน WEb แล้วลองวัดดูที่ IF มันได้ 160 kHz (ปรับต่ำสุดได้แค่นี้นะ)แล้วมันจะทำงานได้รึป่าวครับคือผมทำสองตัวแล้วมัน เหมือนกันเลย เลยอยากถามหน่อยครับ <<

ความถี่มันสูงไปครับ IF สีอะไรครับควรจะเป็นสีดำนะครับ
http://www.thaimicrotron.com/webboard2/index.php?topic=22.msg222#msg222

วิธีแก้ก็ให้ปรับ IF ไว้ที่ต่ำแหน่งกลางๆ ก่อน แล้วลองเพิ่ม C1 เพื่อให้ความถี่ต่ำลง จากรหัส 222 (0.0022U) เป็น 0.0033
หรือจะลองใช้พ่วงขนานกันก่อนก็ได้ครับ ค่อยนำมาหาค่ารวมที่หลัง แล้วลองปรับละเอียดอีกทีที่ IF

หากจะให้เป็น 160KHz หรือความถี่อื่นก็ได้ครับถ้าเข้าใจในหลักการ โดยปรับภาครับให้ตรงกัน ปรับ L2 และ C3 ด้วย
แต่จะใช้ร่วมกับมาตรฐาน X10 ที่มีขายไม่ได้ครับ


Logged
muiim
Jr. Member
**
Offline Offline

Posts: 67


Email
« Reply #50 on: May 21, 2009, 09:59:25 PM »

คือผมลองต่อผ่านสายแปลงจาก rs232 เป็น usb แล้วมันขึ้นแค่ บอกว่ามันเป็นแอสเดส A02 แล้วก็ไม่อะไรอีก พิมในโปรแกรม hyper terminal ไม่ได้ พี่ช่วยวิเคราะทีครับ เป็นเพราะสายแปลงรึว่าอะไร (ผมลองใช้กับ Notebook)
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 333


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


« Reply #51 on: May 22, 2009, 04:45:37 AM »

หากมันขึ้นว่า แอสเดส A02 ก็น่าจะรับข้อมูลได้แล้วนะครับ
ลองดู
http://www.thaimicrotron.com/webboard2/index.php?topic=22.msg222#msg222
Logged
muiim
Jr. Member
**
Offline Offline

Posts: 67


Email
« Reply #52 on: May 29, 2009, 09:26:05 PM »

 if(kbhit())
  {
   c=getch();
   switch(c)
   {
    case '1':
        X10Write('A',1,3);
        printf("%c\r\n",c);
        break;

    case '2':
        X10Write('A',1,2);
        printf("%c\r\n",c);
        break;
    case '3':
        X10Write('A',2,3);
        printf("%c\r\n",c);
        break;

    case '4':
        X10Write('A',2,2);
        printf("%c\r\n",c);
        break;
    case '9':
        //X10Write('A',1,2);
        output_low(X10OUT);
        X10WriteFn('A',0);      //All Unit Off
        printf("%c\r\n",c);
        break;
คือว่า จาก code ข้างบน ถ้าผมต้องการเพิ่มฟังชั่นอีกผมก็แค่เพิ่ม code แบบนี้ใช่มั้ยครับ แล้วไม่ต้องไปแก้ code ในส่วนอื่นอีกใช่รึป่าวครับพี่
     case '8':
        //X10Write('A',1,2);
        output_high(X10OUT);

        X10WriteFn('A',0);       //All Unit On (คือผมเพิ่ม code ในส่วนนี้เพื่อให้ อุปกรณ์ ใน กรุ๊ป A ทั้งหมดติด)
        printf("%c\r\n",c);
        break;
แล้วถ้าผมต้องการเพิ่มคำสั่งเกี่ยวกับการใช้สวิทควบคุม ออกทาง x10 ผมก็เพิ่มเข้าไปใน code ส่วนนี้ได้เลยรึป่าวครับ
สุดท้ายขอขอบคุณพี่ เจ้าของกระทู้ ที่ช่วยชี้แนะ คร้าบ..........พี่น้อง
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 333


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


« Reply #53 on: May 30, 2009, 03:05:21 AM »

code เพื่อให้ อุปกรณ์ ใน กรุ๊ป A ทั้งหมดติด เป็น function 1 ครับ ดูในตาราง
http://www.thaimicrotron.com/X10/X10-MainPage.htm#FnCode


case '8':
        output_high(X10OUT);
        X10WriteFn('A',1);       //All Unit On
        printf("%c\r\n",c);
        break;

การเพิ่มคำสั่งเกี่ยวกับการควบคุม โดยผ่าน RS232 ก็เพิ่มในส่วนนี้แหละครับ

แต่ในตัวอย่างใช้กดอักษรตัวเดียวเพื่อให้เข้าใจง่าย
แล้วช่วงนั้นรีบๆ ไม่ค่อยมีเวลาด้วยครับ
ที่จริงแล้วคำสั่งควรจะเป็น แบบนี้ครับ

A1(ON) <ENTER>
A1(OFF) <ENTER>

ALL(ON)  <ENTER>
ALL(OFF)  <ENTER>

A1(DIM)  <ENTER>
A1(BRIGHT)  <ENTER>


ตอนนี้พอจะมีเวลาบ้างแล้ว เดี๋ยวจะปรับตัวอย่างให้นะครับ
Logged
muiim
Jr. Member
**
Offline Offline

Posts: 67


Email
« Reply #54 on: May 30, 2009, 08:54:22 PM »

(ตามความเข้าใจของผมนะครับ) แสดงว่าผมต้องแก้ code ตรงนี้ด้วยใช่มั้ยครับ
}
void EXEX10Func(void)
{
BYTE H,N;

   //Get Address form EEPROM House & Number
    H=read_eeprom(0);
    N=read_eeprom(1);

    if(H==rHouse && N==rNumber)
    {
       switch(rFunction)
       {
        case 2:                   //ON  จากเลข 2 ต้องเป็น เลข 1 รึป่าว
          output_high(X10OUT);
          break;
        case 3:                   //OFF จากเลข 3 ต้องเป็น เลข 0 รึป่าว
          output_low(X10OUT);
          break;
       }
    }
}
เพราะว่าในอีกชุดของคำสั่ง ที่พี่เอามาเป็นตัวอย่างมันเป็นอย่างนี้

void StrFuncMsg(BYTE n)
{
      switch(n)
      {
       case 2:
            strcpy(StrFunc,"ON");
          break;
       case 3:
            strcpy(StrFunc,"OFF");
          break;
       case 4:
            strcpy(StrFunc,"Dim");
          break;
       case 5:
            strcpy(StrFunc,"Bright");
          break;

     default:
          strcpy(StrFunc,"Unknow");
      }
}
แล้วอีกอย่างคือถ้าผมจะเพิ่มคำสั่งที่จะใช้ สวิทช์เพื่อส่งข้อมูลออกไป ควรจะไปเพิ่มตรงไหนดีครับพี่
ขอขอบคุณอย่างแรงที่ให้คำแนะนำครับผม
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 333


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


« Reply #55 on: May 30, 2009, 11:54:44 PM »

EXEX10Func();
เป็นฟังก์ชันที่ใช้ตรวจสอบว่าตรงกับแอดเดรสของเครื่องเราหรือเปล่า
ถ้าตรงเป็นฟังก์ชั่นอะไร ตอนนี้เครื่องเรามีความสามารถแค่ 2 คำสั่งที่สามรถทำงานได้
คือ ON กับ OFF (หรี่ไฟไม่ได้ครับ)

การควบคุมอุปกรณ์ตัวอื่น โดยผ่าน RS232 ไม่ต้องแก้ในส่วนนี้ครับ

void StrFuncMsg(BYTE n);
เป็นส่วน monitor ด้วยครับ คือถ้ารับมาถึงแม้ไม่ใช่แอดเดรสเรา
ก็จะแสดงออกทาง RS232 ด้วยว่าเป็นคำสั่งอะไร ที่วิ่งอยู่บน AC-LINE

คำสั่งที่จะใช้ สวิทช์เพื่อส่งข้อมูลออกไป
หากหมายถึงกดปุ่มที่ตัวเครื่องเอง ก็ต้องหาขาว่างๆ มาทำเป็นอินพุตต่อไปอีก
การอ่านค่าก็คล้ายๆ กับปุ่มที่เเราใช้ RB6,RB7 ใช้ Fn ScanKey();

แต่ถ้าหากต้องการสั่งงานผ่าน RS232 ก็ต้องแก้ที่ Fn UARTReady(); ครับ
Logged
muiim
Jr. Member
**
Offline Offline

Posts: 67


Email
« Reply #56 on: May 31, 2009, 04:23:01 PM »

ขอคุณพี่ที่ช่วยตอบคำถามผมสำหรับครั้งที่แล้ว
วันนี้มาอีกคำถามครับ
เริ่มเลยดีกว่า
งั้นถ้าผมต้องการ เปลี่ยนการทำงานของ ขา RB6,RB7 เป็นส่งข้อมูลออก ไม่ใช่ควบคุมโหลด ผมทำอย่างนี้มันถูกมั้ยครับ
BYTE ScanKey(void)
{
BYTE D1,D2,Key;
int Cn;

   Key=0;
   D1=ReadPortB();              //Read again
   D1&=0B11000000;

   if(D1==0)                    //No Key press
    return 0;
   else
   {
    delay_ms(KEYDELAY);         //Delay for test
    D2=ReadPortB();             //Read again
    D2&=0B11000000;
    if(D1==D2)
    {
     Key=1;                     //Key press is normal
     Cn=0;
     do
     {
      //restart_wdt();
      delay_ms(30);
      D2=ReadPortB();           //Read again
      D2&=0B11000000;
      if(Key==1)                //Normal press only
      {
       Cn++;
       if(Cn==100)
       {
        output_low(X10OUT);
        SoundFn();
        Key=2;                   //Key press is FnKey
        Cn=0;
       }
      }
      //while(D2!=0 && Key==2);   //wait for FnKey Release
     }
     while(D2!=0);              //Wait for Release Key

     if(Key==1)
     {
       switch(D1)
       {
        case 0x80:
           output_high(X10OUT);
           X10WriteFn('A',1);       //All Unit On  ผมทำตรงนี้มันถูกมั้ยครับ
           break;

        case 0x40:
          output_low(X10OUT);
          X10WriteFn('A',0);      //All Unit Off
          break;
                  }
      SoundPress();
     }

    }
   }

 return Key;

ช่วยชี้แนะทีครับพี่ ขอบคุณล่วงหน้าครับ
Logged
muiim
Jr. Member
**
Offline Offline

Posts: 67


Email
« Reply #57 on: May 31, 2009, 09:26:44 PM »

พอดีมีคำถามอีกนะครับ
เวลาที่เราส่งข้อมูลตัวเครื่องที่เราใช้ส่งจะไม่สามารถรับคำสั่งใช่มั้ยครับ
พอดีผมลองส่งข้อมูลสั่ง แอดเดรส ของตัวเครื่งส่งเอง มันไม่ทำงาน รึว่าเป็นเพราะผมปรับภาครับไม่ถูก กลับความถี่ของภาคส่งครับ
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 333


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


« Reply #58 on: May 31, 2009, 10:20:17 PM »

ทาง hardware ทำเสร็จแล้วหรือยังครับ ผลเป็นอย่างไรบ้าง
ปรับเป็น 120 KHz ได้หรือยัง รับส่งกันได้ไหม ลองเล่าให้ฟังบ้าง
เผื่อผมจะได้นำไปปรับปรุง

หากจะใช้ RB6,RB7 เป็นปุ่มที่กดแล้ว ส่งคำสั่งออกไปบน AC-Line เพื่อควบคุมตัวอื่น
(แทนที่จะ ON/OFF ตัวมันเอง) ก็ได้ครับ

ก่อนอื่นขออธิบาย Fn BYTE ScanKey(void); คร่าวๆก่อนนะครับ
เนื่องจากมี 2 Key เอง ก็เลยเขียนเป็นโครงสร้างง่ายๆ อย่างที่เห็น เพื่อให้เข้าใจง่าย

หลักการทำงานของมันก็คือ
- ตรวจสอบการกดคีย์
 หากมีการกดคีย์ ให้หน่วงเวลาซักนิด แล้ว ลองอ่านอีกครั้ง เพื่อหลีกเหลี่ยง noise กับ debounce
 หากค่าที่อ่านได้ยังเหมือนเดิม ถือว่าเป็นการกดคีย์ที่ถูกต้อง
- รอการปล่อยคีย์ และจะเริ่มจับเวลา
 หากกดคีย์เกินกว่า 3 วินาทีจะถือว่าเป็น Fn Key (เป็นคีย์พิเศษไว้สำหรับ Setup Address) และค่าที่ return เป็น 2 และออกจาก Fn ไปเลย
 หากปล่อยคีย์เร็วกว่านั้นถือว่าเป็นคีย์ปกติ ก็จะทำตามคำสั่ง ON หรือ OFF ทันที

      if(Key==1)
     {
       switch(D1)
       {
        case 0x80:
            output_high(X10OUT);
            break;
        case 0x40:
            output_low(X10OUT); 
            break;
       }

หากจะเปลี่ยนปุ่มไปทำหน้าที่อย่างอื่นก็แก้ที่นี่ละครับ
โดยตัด output_high(X10OUT); กับ output_low(X10OUT);  ออกไปเพราะเป็นคำสั่งเปิด-ปิดตัวมันเองครับ
เช่นตัวอย่างจาก code ของคุณ

     if(Key==1)
     {
       switch(D1)
       {
        case 0x80:
            X10WriteFn('A',1);       //All Unit On
            break;
        case 0x40:
            X10WriteFn('A',0);      //All Unit Off
            break;
       }

นอกจากจะ setup address ที่ EEPROM ที่ code โปรแกรมแล้ว
เรายังสามารถ setup address ใหม่ได้ด้วย FnKey นี่แหละครับ

โดยกดปุ่ม Load ON หรือ OFF ก็ได้ นาน 3 วินาที จะได้ยินเสียงสูง (ติ๊ด... ) 1 ครั้ง แล้วให้ปล่อยคีย์
จะเห็นว่า LED  RX สีเขียวจะติด  และส่งข้อมูลผ่าน RS232 ไปที่ PC

Setup Address

จากนั้นก็ให้ส่ง แอดเดรสเป็นฟังก์ชั่น ON หรือ OFF ก็ได้ ผ่าน AC-Line ด้วย X-10 ตัวอื่น ภายใน 10 วินาที
เช่น A8(ON) จะมีข้อมูลส่งไปที่ PC ว่า

NEW ADDRESS=A08

และจะได้ยินเสียงสูง  ติ๊ด... ติ๊ด... ติ๊ด...  3 ครั้ง  LED  RX สีเขียวจะดับ
ตอนนี้ แอดเดรสของเครื่องก็จะเป็น A08 แล้ว
หากไม่ส่งแอดเดรสมาภายใน 10 วินาที เครื่องก็จะส่งเสียงต่ำยาวๆ ตืด.........1 ครั้ง
จะมีข้อมูลส่งไปที่ PC ว่า

Setup Abort

การส่งข้อมูลบน AC-Line เป็นแบบ Half Duplex  เป็นการส่งและรับข้อมูลแบบสลับกัน
คือเมื่อด้านหนึ่งส่ง อีกด้านหนึ่ง เป็นฝ่ายรับ สลับกัน ไม่สามารถรับ-ส่งในเวลาเดียวกันได้

การที่มันส่งแอดเดรสตัวเอง แล้วมันไม่ได้รับก็เป็นเรื่องปกติแหละครับ
หากคุณต้องการให้ตัวมันเองทำงานด้วย ก็ให้เขียนคำสั่งแยกออกมาตรวจสอบ
ว่าแอดเดรสที่ส่งออก ตรงกับแอดเดรสตัวเองหรือเปล่าครับ
Logged
muiim
Jr. Member
**
Offline Offline

Posts: 67


Email
« Reply #59 on: June 01, 2009, 08:46:36 PM »

ขอบคุณพี่ ที่ชี้แนะและให้ความรู้ใหม่ๆเสมอ
ตอนนี้ ผม ทำเสร็จเครื่องหนึ่งแล้ว(คือประกอบลงกล่องเรียบร้อย)ผมส่งรูปมาให้ดูด้วย
ส่วนอีกเครื่องยังไม่ได้ประกอบ
เครื่องที่ประกอบเสร็จแล้ว สามรถวัดความถี่ได้120kHz แต่ภาครับไม่รู้ว่าจะวัดยังไงผมเลยป้อนความถี่จาก ฟังก์ชันเจน ป้อนเข้าทางที่เชื่อมกับสาย AC แล้วเอาสโครปวัดดูว่าความถี่ที่ผ่านออกมาได้รูปใกล้เคียงกับความถี่ที่ป้อนมั้ย (ตรงนี้ผมทำถูกทางรึป่าวครับ) เลยไม่สามรถบอกกับพี่ว่ามันจะรับส่งกันได้มั้ย แต่เครื่องที่ทำเสร็จ มันสามรถจะควบคุมผ่าน PC กับที่ สวิท ได้อยู่ครับ
อืม..สำหรับคำตอบที่พี่เขียนบอกว่าหั้ยลองเขียน code เพื่อตรวจสอบคำสั่ง สำหรับ ให้เครื่องสามรถควบคุมตัวมันเองผ่าน AC line ผมขอบอกพี่เลยว่า...............พี่ช่วยเขียน code  เพื่อเป็นแนวทางให้ผมดูหน่อย คร้าบ  ....อิอิ
อืมเกือบลืม  แล้ววิธีการปรับแต่งภาครับละครับพี่ ที่ว่าจะบอกตั้งแต่แรก ๆ
ผมรอคำตอบจากพี่อยู่ ขอบคุณล่วงหน้าครับ


* untitled.JPG (90.39 KB, 880x1247 - viewed 473 times.)
Logged
Pages: 1 2 3 [4] 5 6 ... 19   Go Up
Print
 
Jump to: