muiim
|
|
« Reply #135 on: November 02, 2009, 08:10:29 AM » |
|
อาจารย์สมิทร์ครับ คือผมมีปัญหาว่าตอนนี้ผมลองต่อ วงจรแล้วใช้ไมโครเป็น 16F877 กับ 18F458 แล้วมันไม่ทำงานครับ คือ เปิดแล้วมีเสียงปิ๊บ อยู่ แต่ไม่สามารถ สั่งให้รีเลย์ทำงานได้ ใช้ code เดียวกันกับที่ให้มาครับ คอมไพล์ผ่านแล้วนะครับผมแนบวงจรมาด้วย (แต่มีเฉพาะการต่อไมโครนะครับ) ขอบคุณล่วงหน้าครับ
|
|
|
|
muiim
|
|
« Reply #136 on: November 02, 2009, 05:09:29 PM » |
|
อีกอย่างลอง sim ใน proteus ก็ไม่ ทำงานครับ
|
|
|
Logged
|
|
|
|
muiim
|
|
« Reply #137 on: November 03, 2009, 09:54:27 AM » |
|
จาก code ที่แนบมาด้วยนะครับ
|
|
|
Logged
|
|
|
|
zodazaa
มาใหม่
Offline
Posts: 2
|
|
« Reply #138 on: November 03, 2009, 04:53:06 PM » |
|
update ความคืบหน้าครับ
ต่อจากเรื่องที่ประยุกต์วัดกระแสไฟแล้วใช้การส่งข้อมูลผ่าน powerline นะครับ
ตอนนี้ผมออกแบบการส่งใหม่โดยให้ตัวลูกส่งข้อมูล startbit 8 bit / data 8 bit / stopbit 8 bit ครับผม
ตอนนี้เกิดปัญหาตรงที่ถ้ามีเครื่องลูกหลายๆเครื่องแล้วให้มันส่ง address ของตัวมันเองไปด้วย ทีนี้ตัวแม่เวลารับข้อมูลก็จะได้ address ของตัวลูกไปด้วย แต่ไม่รู้ว่าจะออกแบบยังไงให้ตัวลูกหลายๆตัวส่งข้อมูลมาไม่ชนกันดีครับ ?? >> คือว่าต้องออกแบบให้มันมีการส่งข้อมูลแบบ internet พวก request และ ack ด้วยรึเปล่าตรงนี้เลยนั่งคิดๆ อยู่เหมือนกันครับ
|
|
|
Logged
|
|
|
|
smitdh
Administrator
Hero Member
Offline
Gender:
Posts: 381
อาจารย์ที่ปรึกษา
|
|
« Reply #139 on: November 04, 2009, 07:41:19 PM » |
|
I have read all of your questions. But no time to respond. Because now I'm looking at Exhibition in shenzhen. See you next week.
|
|
|
Logged
|
|
|
|
muiim
|
|
« Reply #140 on: November 05, 2009, 08:23:43 AM » |
|
อาจารย์ไปจีนเหรอครับ ไงก็จะรอคำตอบนะครับ
|
|
|
Logged
|
|
|
|
muiim
|
|
« Reply #141 on: November 07, 2009, 09:32:31 AM » |
|
คือว่าผมอ่าน datasheet ของ 18f458 แล้ว define portA ที่ 0xF80 define portB ที่ 0xF81 แต่ ส่วน#ROM อ่านแล้วไม่รู้ว่ามันเริ่มที่ตรงไหน 18Fเริ่มที่ 2100 มั้ยครับ(มันเป็นส่วนที่ทำให้picไม่ทำงานรึป่าวครับ)
|
|
|
Logged
|
|
|
|
muiim
|
|
« Reply #142 on: November 07, 2009, 02:32:57 PM » |
|
อีกอย่างครับ ทำไง ถึงจะใช้ขา RA4 ของ 18F458ได้ครับ(ให้มันเป็นเอาพุต) ผมเพิ่ม sw อย่างนี้ ถูกมั้ยครับ(คือมันไม่ตอบสนองเลย) int ScanKey2(void) { int D1,D2,Key; int Cn;
Key=0; D1=ReadPortD(); //Read again D1&=0B11111111;
if(D1==0) //No Key press return 0; else { delay_ms(KEYDELAY); //Delay for test D2=ReadPortD(); //Read again D2&=0B11111111; if(D1==D2) { Key=1; //Key press is normal Cn=0; do { //restart_wdt(); delay_ms(30); D2=ReadPortD(); //Read again D2&=0B11111111; if(Key==1) //Normal press only { Cn++; if(Cn==100) { output_low(X10OUT1); output_low(X10OUT2); output_low(X10OUT3); output_low(X10OUT4); 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 KEY_ON1: X10Write('A',01,X10FN_ON); output_high(X10OUT1);
break; case KEY_OFF1: X10Write('A',01,X10FN_OFF); output_low(X10OUT1);
break; case KEY_ON2: X10Write('A',02,X10FN_ON); output_high(X10OUT2);
break; case KEY_OFF2: X10Write('A',02,X10FN_OFF); output_low(X10OUT2);
break; case KEY_ON3: X10Write('A',03,X10FN_ON); output_high(X10OUT3);
break; case KEY_OFF3: X10Write('A',03,X10FN_OFF); output_low(X10OUT3);
break; case KEY_ON4: X10Write('A',04,X10FN_ON); output_high(X10OUT4);
break; case KEY_OFF4: X10Write('A',04,X10FN_OFF); output_low(X10OUT4);
break; } SoundPress(); }
} }
return Key; ขอบคุณครับ
|
|
|
Logged
|
|
|
|
muiim
|
|
« Reply #143 on: November 08, 2009, 02:48:38 PM » |
|
ตอนนี้เริ่มเข้าที่แล้วครับ เหลือแต่เพิ่ม sw นะครับ คือผมจะให้ PORTD ทั้งพอร์ต เ็ป็น สวิตช์ แต่มันไม่เวิคครับช่วยชี้แนะด้วยครับ
|
|
|
Logged
|
|
|
|
muiim
|
|
« Reply #144 on: November 08, 2009, 03:44:55 PM » |
|
ตอนนี้ทำงานทุกอย่าง(simนะครับ)เหลือลองของจิงไม่รู้จะเวิคมั้ยไงจะส่งข่าวครับ ยังมีข้อสงสัยอยู่ของ 18F #rom ตำแหน่งเดียวกันมั้ย
|
|
|
Logged
|
|
|
|
muiim
|
|
« Reply #145 on: November 09, 2009, 09:04:19 AM » |
|
ใช่เิ่ริ่มที่ 8100มั้ยครับ
|
|
|
Logged
|
|
|
|
smitdh
Administrator
Hero Member
Offline
Gender:
Posts: 381
อาจารย์ที่ปรึกษา
|
|
« Reply #146 on: November 09, 2009, 12:43:08 PM » |
|
หายไปนานเลย กลับมาแล้วครับ
สำหรับ PIC18 EEProm address จะอยู่ที่ 0xF00000 การใช้งานเช่น #rom 0xF00000={'A',0x04}
สำหรับ address ที่จำเป็นของ PIC18 //PIC18F458 ADDRESS #define ADCON1 0xFA1 #define PORTA 0xF80 #define PORTB 0xF81 #define PORTC 0xF82 #define PORTD 0xF83 #define PORTE 0xF84 #define LATD 0xF8C #define TRISD 0xF95 #define CMCON 0xFB4
การใช้งาน PORTD เป็นอินพุต digital ฟังชั่น setup_adc_ports(NO_ANALOGS); ผมลองใช้แล้วมันไม่ work ไม่รู้ว่า CCS คอมไพล์เลอร์รุ่นหลังๆ V4 ขึ้นไปจะใช้งานได้หรือยัง
แต่ผมใช้แบบนี้มานานแล้ว OK ตั้งแต่ V3.249 #asm CLRF PORTD CLRF LATD MOVLW 0xFF //PORTD All input digital MOVWF TRISD
MOVLW 0x07 //Turn Comparator off and MOVWF CMCON //Enable pins for I/O
#endasm
ส่วน RA4 เป็น Open drain เวลาใช้งาน ต้องต่อ R pullup ซัก 10K ครับ
|
|
|
Logged
|
|
|
|
smitdh
Administrator
Hero Member
Offline
Gender:
Posts: 381
อาจารย์ที่ปรึกษา
|
|
« Reply #147 on: November 09, 2009, 01:43:57 PM » |
|
สำหรับคำถามของคุณ zodazaa การที่มีตัวลูกหลายๆตัวนั้น ตัวแม่จะต้องรู้จักทุกตัว เพื่อหลีกเหลี่ยงการชนกัน ง่ายที่สุดคือการ polling คือให้ตัวแม่วนถามแต่และตัวครับ เพราะตัวแม่จะสามารถจัดจังหวะได้ดีกว่า ปล่อยให้ตัวลูกส่งข้อมูลแบบอิสระ และเนื่องจากการสื่อสารบน ac line จะช้ากว่าการสื่อสารแบบอื่นๆ ตัวอย่างโปรโตคอล http://www.thaimicrotron.com/webboard2/index.php?topic=206.0
|
|
|
Logged
|
|
|
|
muiim
|
|
« Reply #148 on: November 10, 2009, 09:12:00 AM » |
|
ขอบคุณที่ตอบคำถามครับอาจารย์ อีกอย่างตอนนี้ผมสามารถใช้งานพอร์ตดี ได้แล้วโดยการใช้codeที่ถามอาจารย์นั่นแหละครับแต่เพิ่มส่วนนี้เข้าไปตอนท้ายของcode ทั้งหมดด้วย }
Key=ScanKey1(); Key=ScanKey2(); ส่วนที่เพิ่มเข้าไป if(Key==2) { output_high(LEDOK); printf("Setup Address\r\n"); SetAddress(); output_low(LEDOK); ปรากฏว่ามันเวิคครับ อีกอย่างคือการที่จะใช้พวกแอสซัมบีใน code นี้เราต้องอ้างอิงจาก datasheetใช่มั้ยครับ
|
|
|
Logged
|
|
|
|
smitdh
Administrator
Hero Member
Offline
Gender:
Posts: 381
อาจารย์ที่ปรึกษา
|
|
« Reply #149 on: November 10, 2009, 09:51:49 AM » |
|
พวก code ก็ดูจาก datasheet ครับ ส่วนวิธีการเขียนภาษา assembly ก็ดูจากหนังสือ แต่ก่อนเคยใช้งานอยู่ครับ แต่พัฒนาค่อนข้างช้า พอ CCS ออกภาษาซีมา เลยลองเล่นดู บางส่วนมีปัญญาหา ก็ลองแทรกโค๊ด assembly ปรากฏว่าใช้ได้ ก็ตัดปะ เรื่อยมาครับ ปัจจุปันก็เลยไม่ได้ไปหาฟังก์ชั่น ของ CCS ครับ
|
|
|
Logged
|
|
|
|
|