ใช้ microcode stdio คอมไพล์ pic16f628A ไม่ได้ครับ
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: ใช้ microcode stdio คอมไพล์ pic16f628A ไม่ได้ครับ  (อ่าน 10688 ครั้ง)
totty_n2
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 29


อีเมล์
« เมื่อ: มกราคม 21, 2010, 10:29:31 am »

ทำยังคับช่วยเเนะนำที เพราะ คอมไพล์ไรไม่ผ่านครับ  ทุกทีครับคือมันฟ้องขึนว่า not include (pic16f628A) , not define อะไรซักอย่างครับจำไม่ได้ น่าจะพวก hx wtd  (ผมเขียนภาษาเบสิคครับ) เเต่พอโปรเเกรมเบอร์อื่นกับได้ เช่น เบอร์ 16f877 16f84A 

มีอีกเรื่องที่อยากถามครับ เมื่อผมคอมไพล์เบอร์ 16F84A ได้เเล้ว ผมเอาไฟล์ .HEX ของมันไปเบรินลงเบอร์ 16F628A ได้ไหม ผมเคยเบรินลงเเล้ว เบรินลงได้ครับ เเต่มันไม่ทำงานตามโปรเเกรมที่เขียนไว้ครับ  ไม่รุจะทำยังไงครับ ช่วยเเนะนำทีครับ ไม่ได้เอารูปมาไห้ดูวันหน้าจะเอามาลงให้ดูครับ


บันทึกการเข้า

JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #1 เมื่อ: มกราคม 22, 2010, 12:35:02 pm »

แนะนำให้ไปถามที่ www.electoday.com ครับ
ส่วน pic 16f628a กับ 16f84a โครงสร้าง port ไม่เหมือนกันครับ
จึงต้องแก้ในส่วนของ initial port ใหม่เช่น

movlw          .7
movwf          cmcon

เปลี่ยนจาก analog port เป็น digital port เป็นต้น
บันทึกการเข้า
totty_n2
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 29


อีเมล์
« ตอบ #2 เมื่อ: มกราคม 22, 2010, 03:40:04 pm »

เเล้วถ้า Hex file เป็นของ16F628 มาเบรินลง  16F628A  ล่ะ ครับ  ได้หรือเปล่า
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #3 เมื่อ: มกราคม 22, 2010, 08:23:22 pm »

ได้ครับเหมือนกันเด๊ะ 
บันทึกการเข้า
totty_n2
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 29


อีเมล์
« ตอบ #4 เมื่อ: มกราคม 23, 2010, 03:07:13 pm »

เมื่อเหมือนกันเเล้วทำไม ไม่ทำตามโปรเเกรมที่เขียนไว้ล่ะครับ ลองบนโฟโตบอร์ดก็ยังไม่ตอบสนองเลย ติดเเค่ l1 แค่นีเอง เเต่พอให้รับค่าสวิตซ์ กลับไม่ทำงาน มันยังไงครับ หรือว่าแรงดันที่รับมาจากสวิตซ์มันไม่พอคือวัดเเล้วมันมีแค่ 4.2 V เเค่นี้ผมก็คิดว่าได้นะ หรือว่าผมต้องเซ็ตโปรแกรมตรงไหนอีกหรือเปล่า ผมใช้ cystal 20 Mhz ,c 20pf ได้หรือเปล่าครับ ช่วยผมทีนะครับ เพราะผมเพิ่งมาหัดเล่นดู เเละรีบส่งงานอาจารด้วยครับ คือวงจรนี้ผมจะเอาไปทำเครื่องกันขโมยนะครับ
L1 var PORTA.1
 L2 VAR PORTA.2
 L3 var PORTA.3
 L4 VAR PORTA.4
 S1 VAR PORTA.0
 S2 VAR PORTB.0
 on interrupt goto int
 intcon = %10010000
 i var byte
 high   L1
start:      if s1 = 1 then goto start
            pause 50
loop:
            if s1 = 0 then goto loop
            FOR I =1 TO 2
            HIGH L2
            pause 100
            LOW L2
            pause 100
            NEXT I
            pause 200
            high L3
            PAUSE 100
            LOW  L3
            PAUSE 10
            GOTO  start
            disable
int:        IF S2 = 1 THEN GOTO LOOP1
           
LOOP1:     
            HIGH L4
            PAUSE 10
            SLEEP 600
            INTCON.1=0
            RESUME
            GOTO START           
         
               
บันทึกการเข้า
totty_n2
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 29


อีเมล์
« ตอบ #5 เมื่อ: มกราคม 23, 2010, 03:17:24 pm »

มันลงรูปไม่ไ
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #6 เมื่อ: มกราคม 24, 2010, 12:40:27 pm »

อะไรไม่ทำงานครับ relay ใช่มั๊ย ลองต่อของจริงรึยัง relay ใช้ 12 v หรือป่าว...
ขอคำอธิบายมากกว่านี้
บันทึกการเข้า
totty_n2
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 29


อีเมล์
« ตอบ #7 เมื่อ: มกราคม 25, 2010, 12:07:05 pm »

คือ รีเลย์ใช้รีเลย์ 12 V ครับ  แต่พอดูตามโปรเเกรมเเล้ว ส่วนทรานซิสเตอร์ที่นั้นเป็นเบอร์ BD 139 ใช้ขับรีเลย์ เเล้ว ให้รีเลย์ไปตัดต่อปุ่มโทรออกของโทรศัพท์ครับ ในโปรเเกรมส่วนนี้ครับ  คือลองต่อวงจรจริงดูเเล้วรัเลย์นั่นเเหละไม่ทำงานครับ ปรกติถ้าดูตามโปรเเกรม เมื่อวงจรของสวิตซ์เปิดวงจรจะทำให้ขาPORTA.0 ได้รับลอจิก 1 (ไฟตรงนี้วัดได้ 4.2V)  PORTA.2 จะส่งลอจิกออกไป 2 ครัง จะทำให้ขารีเลย์จะถูกทริก 2 ครั้ง  แต่มันไม่ทำงานตามโปรเเกมที่เขียนไว้ ลองวัดไฟที่ขา PORTA.2 ดูก็ไม่มีเเรงดันเลยครับ เเล้วจะต้องดูในส่วนไหน คือผมสงสัยว่าไอซีผมพังหรือเปล่าครับ คือผมเบรินกับทาง ซีเรียล พอร์ตครับเห็นเขาบอกว่าทำให้ไอซีพังง่าย หรือผมต้องเขียนโปรเเกรมให้เป็นจาก analog port เป็น digital port  คือตอนนี้กำลังรอของอยู่ครับสั่งไอซีตัวไหม่มาลองดู
     if s1 = 0 then goto loop               
                  FOR I =1 TO 2
                  HIGH L2
                  pause 100
                  LOW L2
                  pause 100
                  NEXT I
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #8 เมื่อ: มกราคม 26, 2010, 12:56:15 am »

คือ รีเลย์ใช้รีเลย์ 12 V ครับ  แต่พอดูตามโปรเเกรมเเล้ว ส่วนทรานซิสเตอร์ที่นั้นเป็นเบอร์ BD 139 ใช้ขับรีเลย์ เเล้ว ให้รีเลย์ไปตัดต่อปุ่มโทรออกของโทรศัพท์ครับ ในโปรเเกรมส่วนนี้ครับ  คือลองต่อวงจรจริงดูเเล้วรัเลย์นั่นเเหละไม่ทำงานครับ ปรกติถ้าดูตามโปรเเกรม เมื่อวงจรของสวิตซ์เปิดวงจรจะทำให้ขาPORTA.0 ได้รับลอจิก 1 (ไฟตรงนี้วัดได้ 4.2V)  PORTA.2 จะส่งลอจิกออกไป 2 ครัง จะทำให้ขารีเลย์จะถูกทริก 2 ครั้ง  แต่มันไม่ทำงานตามโปรเเกมที่เขียนไว้ ลองวัดไฟที่ขา PORTA.2 ดูก็ไม่มีเเรงดันเลยครับ เเล้วจะต้องดูในส่วนไหน คือผมสงสัยว่าไอซีผมพังหรือเปล่าครับ คือผมเบรินกับทาง ซีเรียล พอร์ตครับเห็นเขาบอกว่าทำให้ไอซีพังง่าย หรือผมต้องเขียนโปรเเกรมให้เป็นจาก analog port เป็น digital port  คือตอนนี้กำลังรอของอยู่ครับสั่งไอซีตัวไหม่มาลองดู
     if s1 = 0 then goto loop               
                  FOR I =1 TO 2
                  HIGH L2
                  pause 100
                  LOW L2
                  pause 100
                  NEXT I


ตรงสีแดงถูกต้องแล้วครับ...
บันทึกการเข้า
jam_007
member
*

คะแนน1
ออฟไลน์ ออฟไลน์

กระทู้: 30


« ตอบ #9 เมื่อ: เมษายน 18, 2010, 07:34:46 pm »

L1 var PORTA.1
 L2 VAR PORTA.2
 L3 var PORTA.3
 L4 VAR PORTA.4
 S1 VAR PORTA.0
 S2 VAR PORTB.0

TRISA.0  =  1
TRISB.0  =  1
CMCON  =  7
S1 = 1
S2 = 1


 on interrupt goto int
 intcon = %10010000
 i var byte
 high   L1
start:      if s1 = 1 then goto start
            pause 50
loop:
            if s1 = 0 then goto loop
            FOR I =1 TO 2
            HIGH L2
            pause 100
            LOW L2
            pause 100
            NEXT I
            pause 200
            high L3
            PAUSE 100
            LOW  L3
            PAUSE 10
            GOTO  start
            disable
int:        IF S2 = 1 THEN GOTO LOOP1
           
LOOP1:     
            HIGH L4
            PAUSE 10
            SLEEP 600
            INTCON.1=0
            RESUME
            GOTO START 

   ลองดูครับ   
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: