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
Gender:
Posts: 381
อาจารย์ที่ปรึกษา
|
|
« 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
|
|
« Reply #48 on: May 11, 2009, 09:39:58 PM » |
|
คือว่าผมลองทำดู(สองตัว) แล้ววัดความถี่มันได้ 160KHz ทั้งสองตัว(คือผมปรับต่ำสุดแล้ว) ก็เลยสงสัยว่ามันจะสามารถส่งข้อมูลหากันได้มันครับ ?
|
|
|
Logged
|
|
|
|
smitdh
Administrator
Hero Member
Offline
Gender:
Posts: 381
อาจารย์ที่ปรึกษา
|
|
« 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
|
|
« Reply #50 on: May 21, 2009, 09:59:25 PM » |
|
คือผมลองต่อผ่านสายแปลงจาก rs232 เป็น usb แล้วมันขึ้นแค่ บอกว่ามันเป็นแอสเดส A02 แล้วก็ไม่อะไรอีก พิมในโปรแกรม hyper terminal ไม่ได้ พี่ช่วยวิเคราะทีครับ เป็นเพราะสายแปลงรึว่าอะไร (ผมลองใช้กับ Notebook)
|
|
|
Logged
|
|
|
|
|
muiim
|
|
« 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
Gender:
Posts: 381
อาจารย์ที่ปรึกษา
|
|
« Reply #53 on: May 30, 2009, 03:05:21 AM » |
|
code เพื่อให้ อุปกรณ์ ใน กรุ๊ป A ทั้งหมดติด เป็น function 1 ครับ ดูในตาราง http://www.thaimicrotron.com/X10/X10-MainPage.htm#FnCodecase '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
|
|
« 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
Gender:
Posts: 381
อาจารย์ที่ปรึกษา
|
|
« 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
|
|
« 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
|
|
« Reply #57 on: May 31, 2009, 09:26:44 PM » |
|
พอดีมีคำถามอีกนะครับ เวลาที่เราส่งข้อมูลตัวเครื่องที่เราใช้ส่งจะไม่สามารถรับคำสั่งใช่มั้ยครับ พอดีผมลองส่งข้อมูลสั่ง แอดเดรส ของตัวเครื่งส่งเอง มันไม่ทำงาน รึว่าเป็นเพราะผมปรับภาครับไม่ถูก กลับความถี่ของภาคส่งครับ
|
|
|
Logged
|
|
|
|
smitdh
Administrator
Hero Member
Offline
Gender:
Posts: 381
อาจารย์ที่ปรึกษา
|
|
« 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
|
|
« Reply #59 on: June 01, 2009, 08:46:36 PM » |
|
ขอบคุณพี่ ที่ชี้แนะและให้ความรู้ใหม่ๆเสมอ ตอนนี้ ผม ทำเสร็จเครื่องหนึ่งแล้ว(คือประกอบลงกล่องเรียบร้อย)ผมส่งรูปมาให้ดูด้วย ส่วนอีกเครื่องยังไม่ได้ประกอบ เครื่องที่ประกอบเสร็จแล้ว สามรถวัดความถี่ได้120kHz แต่ภาครับไม่รู้ว่าจะวัดยังไงผมเลยป้อนความถี่จาก ฟังก์ชันเจน ป้อนเข้าทางที่เชื่อมกับสาย AC แล้วเอาสโครปวัดดูว่าความถี่ที่ผ่านออกมาได้รูปใกล้เคียงกับความถี่ที่ป้อนมั้ย (ตรงนี้ผมทำถูกทางรึป่าวครับ) เลยไม่สามรถบอกกับพี่ว่ามันจะรับส่งกันได้มั้ย แต่เครื่องที่ทำเสร็จ มันสามรถจะควบคุมผ่าน PC กับที่ สวิท ได้อยู่ครับ อืม..สำหรับคำตอบที่พี่เขียนบอกว่าหั้ยลองเขียน code เพื่อตรวจสอบคำสั่ง สำหรับ ให้เครื่องสามรถควบคุมตัวมันเองผ่าน AC line ผมขอบอกพี่เลยว่า...............พี่ช่วยเขียน code เพื่อเป็นแนวทางให้ผมดูหน่อย คร้าบ ....อิอิ อืมเกือบลืม แล้ววิธีการปรับแต่งภาครับละครับพี่ ที่ว่าจะบอกตั้งแต่แรก ๆ ผมรอคำตอบจากพี่อยู่ ขอบคุณล่วงหน้าครับ
|
|
|
Logged
|
|
|
|
|