Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - S.poolpong93

Pages: 1 2 [3] 4 5 6
17
[MCS-51] วิธี Program IC ตระกูล MCS-51 ด้วย USBASP

       ก่อนหน้านี้ในการเรียนวิชาไมโครคอนโทรลเลอร์ตระกูล MCS-51 ของผมนั้น ผมใช้เจ้าตัว P89V51RD2 ซึ่งในการ Program IC ตัวนี้ ค่อนข้างสะดวกมากเพราะสามารถ Program ผ่านพอร์ตอนุกรมได้โดยตรง ทำให้ไม่ต้องใช้อุปกรณ์เพิ่มเติม พอดีในช่วงนี้ผมต้องการทบทวนความรู้เดิมๆ แต่ในช่วงหลังๆมาชิปตัวนี้ราคาค่อนข้างสุงเพราะหายากมากขึ้น ผมจึงต้องหาชิปเบอร์อื่นจนเจอชิปอีกเบอร์นี้ครับ เป็นชิป AT89S52 แต่การ Program ชิปตัวนี้ต้องอาศัยอุปกรณ์เพิ่มเติมนิดนึง โดยอุปกรณ์นั้นคือเจ้าตัว
USBasp ครับ ซึ่งเพื่อนๆสามารถทำมันขึ้นมาเองได้ ตามลิ้งค์นี้ครับ www.fischl.de/usbasp  หรือหากเพื่อนๆไม่สะดวกสามารถหาซื้อได้ตามเว็บขายอุปกรณ์ไมโครคอนโทรลเลอร์ทั้วไปครับราคาก็ไม่แพงมากบางร้านยังไม่ถึง 100 บาทเลยครับ ส่วนของผมสั่งซื้อมาจากเว็ป arduinoall ครับ (ทางเว็บไม่ได้มีส่วนได้ส่วนเสียกับทางร้านนะครับ)

   วันนี้ผมจะมาแบ่งปันวิธี Program IC ตระกูล MCS-51(AT89S52) ด้วยโมดูล USBaspให้เพื่อนๆครับ
ก่อนอื่นต้องทำการติดตั้ง Driver ของตัว USBasp ก่อน โดยสามารถ Download ได้จาก www.fischl.de/usbasp โดยหลังจากติดตั้งแล้ว เมื่อเสียบโมดูลเข้ากับพอร์ตUSB แล้ว ให้ตัวสอบว่าติดตั้ง Driver ได้สมบูรณ์ไหม โดยคลิกขวาที่ My computer เลือก Manage และเลือก Device Manager
หากติดตั้งได้สมบูรณ์ จะขึ้นตามรูปด้านล่าง



หลังจากนั้นให้ Download โปรแกรม ProgISP จาก www.electrodragon.com มาเพื่อใช้ในการอัด HEX ไฟล์ลง AT89S52  หลังจากนั้นให้ทำการติดตั้งโปรแกรมให้เสร็จ แล้วเชื่อมต่อบอร์ด8051กับโมดูลเข้าด้วยกันตามวงจรดังนี้




จากนั้นเสียบโมดูลเข้ากับพอร์ต USB และเปิดโปรแกรม ProgISP ขึ้นมาครับ  จะได้ตามรูปนี้




หาก Driver ติดตั้งไม่ถูกต้องหรือการเชื่อมต่อไม่ถูกต้อง ในช่อง Program State  ตรงส่วนของ PRG ISP จากเป็นไอคอนจางๆ ให้ทำการตรวจสอบอีกครั้ง

จากนั้นดูที่เมนู Select chip และเลือกเบอร์ที่ต้องการ โดยผมเลือกที่เบอร์ AT89S52
และติ๊กที่หน้าช่อง ดังต่อไปนี้ 
Verify Signature
Chip Erase
Program Flash
Verify Flash

และจากนั้นเลือกที่ File และเลือกที่ Load Flash และเลือก Hex ไฟล์ที่ต้องการ
จากนั้นเลือก Auto เพื่อทำการอัดไฟล์ลงชิป
เมื่อสำเร็จแล้ว โปรแกรมจะขึ้นประมานนี้ครับ เท่ากับเสร็จสิ้นแล้ว หลังจากนั้นให้ทำการตรวจสอบโปรแกรมที่เขียนไปว่าทำงานได้ถูกต้องไหมครับ



หวังว่าบทความนี้จะมีประโยชน์สำหรับเพื่อนๆที่กำลังจะเริ่มต้นศึกษาไมโครคอนโทรลเลอร์ตระกูลนี้นะครับ เพราะผมลองคุยกับเพื่อนๆหลายๆที่ในแต่ละสถานศึกษายังมีหลายๆที่ยังใช้ MCS-51 อยู่ ไว้ในโอกาสหน้าผมจะทำบทความเกี่ยวกับการศึกษาไมโครคอนโทรลเลอร์ตระกูล MCS-51 มาให้เพื่อนๆไว้ศึกษากันครับ ขอบคุณที่อ่านครับครับ

cat-mcu.blogspot.com
cat-mcu.blogspot.com/2015/05/Programming-8051-with-USBASP.html

18
พอดีโหลด Eagle เวอร์ชั่นฟรีมาหัดใช้ครับ ตอนวาด Schemetic ลากเส้นระหว่าง อุปกรณ์ ดูเผินๆ เหมือนมันจะเชื่อมกันแล้ว แต่พอจะทำลานวงจร เส้นมันไม่เชื่อมกันซะงั้น
ไม่ทราบว่าจะมีวิธีไหนที่จะทำให้มันเชื่อมกันดีๆบ้างครับ
 :'( :'( :'(

19
คือกำลังจะเริ่มศึกษา Microcontroller PIC ครับ ก่อนหน้านี้ตอนเรียนใช้ 8051 แล้วเล่น Arduino อีกนิดหน่อย
พอดีไปดูในเวปสมัครงาน ส่วนมากในคุณสมบัติ จะรับคนที่ถนัด PIC เลยอยากจะศึกษาไว้ครับ อยากทำงานสายนี้ครับ

ตอนนี้ มีบอร์ด PIC แบบ แฮนเมด อยู่ 2 บอร์ดครับ (ได้มาจากพีๆในบอร์ดทั้งสองเลยครับ ดองไว้นานแล้ว)
เป็นบอร์ด  PIC18F45k72 และบอร์ด dsPIC30F4011  ส่วนโปรแกรมเมอร์ที่มี เป็น ET-ICDX 1.0

แต่เท่าที่หาข้อมูลไปเรื่อยๆ ส่วนมากจะเจอตัว PIC16F877 ที่มีตัวอย่างอยู่มากเลยครับ

อยากขอความเห็นจากพี่ๆและคำแนะนำ เกี่ยวกับ การเริ่มต้นว่า
1. ควรเริ่มจากตัวไหนดีครับ 16 18 หรือ ตัว ds ดีครับ
    1.1  ถ้าเป็น16 รบกวนแนะนำบอร์ดราคาถูกๆ(มือสองให้หน่อยครับ)
2. ET-ICDX 1.0 จะใช้กับพวกนี้ได้ไหมครับ
3. รบกวนแนะนำคอมไฟล์เลอร์ทีครับว่าใช้ตัวไหนดี (ผมมองๆ MPLAB ไว้)
4. รบกวนช่วยแนะนำหนังสือหน่อยครับ ตอนนี้เล็งของ appsofttech ไว้ครับ
5. ถ้ามีอะไรเพิ่มเติมรบกวนชี้แนะได้เลยครับ

ขอบคุณมากๆครับ


20
ปิดการขาย

21
เชิญพี่ๆชาวE2D  ทุกท่านร่วมทำบุญกับกับค่ายอาสาของ สาขาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยพะเยา
เพื่อหยิบยื่นโอกาสทางการศึกษาแก่เด็กชาวเขาผู้ด้อยโอกาส เงินหรือสิ่งของบริจาคของพวกท่านทั้งหมด
เราจะนำไปทำบุญให้ตามจุดประสงค์อันประเสริฐของท่าน โดยรายละเอียดของโครงการอยู่ในภาพด้านล่างครับ
ขออนุโมทนาในกุศลจิตเพื่อส่วนรวมของทุกๆ มา ณ โอกาสนี้ด้วยครับ สาธุ

บริจาคเป็นเงิน
ชื่อบัญชี : นายณรงค์ชัย มุ่งแฝงกลาง
เลขที่บัญชี : 891-2-38824-1
ธนาคารไทยพาณิชย์
สาขามหาวิทยาลัยพะเยา
บัญชีเงินฝากออมทรัพย์

บริจาคเป็นสิ่งของ
ส่งถึง (อาจารย์อภิวัฒน์ วิทยารัฐ ,อาจารย์คมกริช มาเที่ยง,อาจารย์ณรงค์ชัย มุ่งแฝงกลาง)
สาขาวิศวกรรมคอมพิวเตอร์
คณะเทคโนโลยีสารสนเทศและการสื่อสาร
มหาวิทยาลัยพะเยา
ต.แม่กา อ.เมือง จ.พะเยา 56000
***วงเล็บมาด้วยว่าเป็นของบริจาค***







22
ขอสอบถามหน่อยครับ แถวๆม.ธรรมศาสตร์ ศูนย์รังสิตรังสิตพอจะมีร้านไหนขาย IC MCP2551บ้างครับ

พอดีต้องใช้ประมานวันที่5 แต่ช่วงนี้ทางES กับ ไปรษณีย์เหมือนยังไม่เปิด พอดีที่อยู่ต่างจังหวัดครับ หาซื้อยาก
แล้วต้องไปธุระที่นั่นพอดี ไม่ทราบว่ามีท่านใดพอรู้แหล่งบ้างครับ

23
ช่วยดู Code ให้ผมหน่อยครับ Arduino รับค่าจาก Serial port
คือผมจะส่งข้อมูลจาก Serial port ไปยังบอร์ด Arduino ครับ
ข้อมูลจำนวน 14 บิต  ได้แก่   11112223334555
โปรแกรมที่ผมเขียน คือรับค่าเข้าไป แล้วทำการแบ่งข้อมูล14บิตนี้ออกครับ
โดยข้อมูลที่ควรจะเป็น เมื่อ แบ่งข้อมูลแล้วคือ
frame data : 11112223334555
 color_value_temp :1111
color_error_temp :222
arm_degree_temp :333
arm_range_temp :4
obj_total_temp :555
color_value :1111
color_error :222
arm_degree :333
arm_range :4
obj_total :555

แต่ผลลัพที่ได้คือ



ช่วยแนะแนวทางแก้ไขให้ทีครับ ขอบคุณมากครับ


Code: [Select]
char frame_data[15];
char color_value_temp[5];
char color_error_temp[4];
char arm_degree_temp[4];
char arm_range_temp[2];
char obj_total_temp[4];

int color_value=0;
int color_error=0;
int arm_degree=0;
int arm_range=0;
int obj_total=0;
int temp=0,temp_2=0;



void setup() {

  Serial.begin(19200);




}

void loop() {
  //

  //get frame data from PC

  if(Serial.available()){




    frame_data[15] = Serial.read();

    //----------------------------------
    //cut frame data and convert for color value
    for(temp=0;temp<=3;temp++){
      color_value_temp[temp]=frame_data[temp];
    }
    color_value=(int)color_value_temp;
    //cut frame data and convert for color error
    for(temp=4;temp<=6;temp++){
      color_error_temp[temp_2]=frame_data[temp];
      temp_2++;
    }
    color_error=(int)color_error_temp;
    temp_2=0;
    //cut frame data and convert for arm degree
    for(temp=7;temp<=9;temp++){
      arm_degree_temp[temp_2]=frame_data[temp];
      temp_2++;
    }
    arm_degree=(int)arm_degree_temp;
    //cut frame data and convert for arm range
    arm_range_temp[0]=frame_data[10];
    arm_range=(int)arm_range_temp;
    //cut frame data and convert for object total
    for(temp=11;temp<=13;temp++){
      obj_total_temp[temp_2]=frame_data[temp];
      temp_2++;
    }
    obj_total=(int)obj_total_temp;

    Serial.print("frame data : ");
    Serial.print(frame_data);
    Serial.print("color_value_temp :");
    Serial.println(color_value_temp);
    Serial.print("color_error_temp :");
    Serial.println(color_error_temp);
    Serial.print("arm_degree_temp :");
    Serial.println(arm_degree_temp);
    Serial.print("arm_range_temp :");
    Serial.println(arm_range_temp);
    Serial.print("obj_total_temp :");
    Serial.println(obj_total_temp);
    Serial.print("color_value :");
    Serial.println(color_value);
    Serial.print("color_error :");
    Serial.println(color_error);
    Serial.print("arm_degree :");
    Serial.println(arm_degree);
    Serial.print("arm_range :");
    Serial.println(arm_range);
    Serial.print("obj_total :");
    Serial.println(obj_total);
    //Serial.print("");
    //Serial.println();

    while(1);





  }

}



24



ผมสงสัยเรื่องการต่อ R กับ LED ครับ ว่าทั้งสองแบบต่างกันอย่างไร สามารถใช้งานแทนกันได้ไหมครับ

โดยแบบแรก จะเห็นได้ทั่วไปคือ จากแหล่งจ่าย >> R  >> LED
แบบที่สองเป็น แหล่งจ่าย >> LED >>   R
 

Pages: 1 2 [3] 4 5 6