พิมพ์หน้านี้ - ใช้ microcode stdio คอมไพล์ pic16f628A ไม่ได้ครับ

LSVคลังสมองออนไลน์ "ปีที่14"

► อิเล็กทรอนิกส์ ► => หุ่นยนต์-pcb-เทคโนโลยี่ใหม่ => ข้อความที่เริ่มโดย: totty_n2 ที่ มกราคม 21, 2010, 10:29:31 am



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

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


หัวข้อ: Re: ใช้ microcode stdio คอมไพล์ pic16f628A ไม่ได้ครับ
เริ่มหัวข้อโดย: JUB ที่ มกราคม 22, 2010, 12:35:02 pm
แนะนำให้ไปถามที่ www.electoday.com ครับ
ส่วน pic 16f628a กับ 16f84a โครงสร้าง port ไม่เหมือนกันครับ
จึงต้องแก้ในส่วนของ initial port ใหม่เช่น

movlw          .7
movwf          cmcon

เปลี่ยนจาก analog port เป็น digital port เป็นต้น


หัวข้อ: Re: ใช้ microcode stdio คอมไพล์ pic16f628A ไม่ได้ครับ
เริ่มหัวข้อโดย: totty_n2 ที่ มกราคม 22, 2010, 03:40:04 pm
เเล้วถ้า Hex file เป็นของ16F628 มาเบรินลง  16F628A  ล่ะ ครับ  ได้หรือเปล่า


หัวข้อ: Re: ใช้ microcode stdio คอมไพล์ pic16f628A ไม่ได้ครับ
เริ่มหัวข้อโดย: JUB ที่ มกราคม 22, 2010, 08:23:22 pm
ได้ครับเหมือนกันเด๊ะ  lsv-smile


หัวข้อ: Re: ใช้ microcode stdio คอมไพล์ pic16f628A ไม่ได้ครับ
เริ่มหัวข้อโดย: totty_n2 ที่ มกราคม 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           
         
               


หัวข้อ: Re: ใช้ microcode stdio คอมไพล์ pic16f628A ไม่ได้ครับ
เริ่มหัวข้อโดย: totty_n2 ที่ มกราคม 23, 2010, 03:17:24 pm
มันลงรูปไม่ไ


หัวข้อ: Re: ใช้ microcode stdio คอมไพล์ pic16f628A ไม่ได้ครับ
เริ่มหัวข้อโดย: JUB ที่ มกราคม 24, 2010, 12:40:27 pm
อะไรไม่ทำงานครับ relay ใช่มั๊ย ลองต่อของจริงรึยัง relay ใช้ 12 v หรือป่าว...
ขอคำอธิบายมากกว่านี้


หัวข้อ: Re: ใช้ microcode stdio คอมไพล์ pic16f628A ไม่ได้ครับ
เริ่มหัวข้อโดย: totty_n2 ที่ มกราคม 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


หัวข้อ: Re: ใช้ microcode stdio คอมไพล์ pic16f628A ไม่ได้ครับ
เริ่มหัวข้อโดย: JUB ที่ มกราคม 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


ตรงสีแดงถูกต้องแล้วครับ...


หัวข้อ: Re: ใช้ microcode stdio คอมไพล์ pic16f628A ไม่ได้ครับ
เริ่มหัวข้อโดย: jam_007 ที่ เมษายน 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 

 smiley4  ลองดูครับ    smiley4