Main Menu
Menu

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.

Show posts Menu

Topics - TaoTao

#81
พอดี ได้ไปอ่านเจอ Blog อันนึง ที่แนะนำ MCU 8 bits ของ ST
ราคาน่าคบ และ สเปกโดนใจทีเดียว ที่นี่ครับ

http://www.etteam.com/prod2010/STM8/manual/STM8.pdf

ผมอ่านๆ ดู มาสะดุด ก็ตรงที่มี NEST Interrupt และ Capacitive Touch-Sensing

โดยส่วนตัว อย่าง NEST Interrupts ผมมองว่า Fujitsu 8 bits ที่ผมใช้งานอยู่ ไม่ได้ด้อยกว่าเลย

แต่ที่เข้าตา ของ STM8 คือ ราคาถูก และมี Capacitive Touch-Sensing นี่แหล่ะครับ

อยากเอามา ลองทำ จิ้มๆ เล่นๆ ดู

ใครเคยใช้บ้างครับ โหมดนี้ ใช้งานจริง เวิร์คไหม ครับ

Sensitive - Touch - Tuning ยากง่าย   สักแค่ไหนอ่ะ ครับ

:-)
#82
ไปเจอหลายๆ โค้ด เห็นมี Pointer อยู่เยอะเลย
เล่นเอา มึนมา 2 วันแว้วววว
เลยต้อง มาศึกษามันซะหน่อยน่ะครับ เพื่อนำมาใช้งาน

เท่าที่อ่านมา เห็นว่ามันประกาศได้อย่างนี้

char A;

char *pa;
    pa = &A; //แบบที่ 1 ระบุถึง Add A
  *pa = A; // แบบที่ 2 ระบุชื่อ A โดยตรง (หรือเปล่า O_o!)

  แล้วหาก ให้มัน ชี้ ไปยังตำแหน่งที่เจตนาเลย
เช่น 0x1000 ต้องกำหนดอย่างไรน่ะครับ

ใช่อย่างนี้อ๊ะเปล่า

char *pa;
pa = (char*) 0x1000;

ตอนนี้ ยังคอมไพล์ไม่ผ่านน่ะครับ
บางวิธีผ่าน แต่ก้ยัง งงงง อยู่น่ะครับ ยังไม่รู้รุปแบบที่ถูกต้องเป๊ะๆ

อ่านข้อมูลทางเน็ตมาบ้าง แต่เวลาคอมไพล์ ก็ผ่านบ้างไม่ผ่านบ้าง

สรุปแล้ว มันสามารถ กำหนดอ้างอิง ให้เจ้า pointer ได้กี่แบบอ่ะครับ

ขอบคุณล่วงหน้านะครับ
#83
คือ อยากจะสร้าง ตัวแปรอะเรย์ ที่มีสมาชิกเป็นขาของ MCU
สร้างยังไงก็ไม่ผ่านอ่ะครับ

มันแจ้งประมาณว่า ต้องเป็น ค่า Constant

มันพอมีวิธีไหมครับ

เพราะหากทำได้
เมื่อ TRIS=1
เวลาเราจะตรวจสอบขา แบบเรียงลำดับ
เมื่อนำ for loop ช่วยด้วย

โค้ด มันจะสั้นลงและดูง่ายขึ้นน่ะครับ
#84
ครับ จะส่งตัวแปร ออกไปให้ ไฟล์ *.c อื่นๆ ด้วย ทำอย่างไรอ่ะครับ

ลองพิมพ์ extern ไว้หน้า ตัวแปร ก็ยังคอมฯ ไม่ผ่านเลยอ่ะครับ @_@!
#85
คือ กำลังจะรวบรวม โค้ด ที่เคยสร้างๆ ไว้
เป็น Library เพื่อ ง่ายในการอ่าน การเรียกใช้ และดูไม่รกตา

ใครพอจะ ไกด์ไลน์ ได้บ้างน่ะครับ

เพราะตอน Create มีมีอะไรให้เลือก มากมายไปหมด งงเจงๆ @_@!

เลยยังทำไม่สำเร็จครับ อ่านหนังสือ เห็นมันก็บอกง่ายๆ ว่า ทำนามสกุลเป็น
*.h และไม่ต้องมี main()

เวลาใช้ ก็ include เข้ามา
แต่ ลองแล้ว ก็ยังไม่สำเร็จ ไม่รู้จะ Link มันยังไง

อ้อ ผมใช้ MPLAB_X น่ะคร๊าบบบ

@_@! @_@! @_@!
#86
พอดี หลายวันที่ผ่านมา
ได้ไปนั่งเรียน คอร์สเทรนนิ่ง 32bit ของ Fujitsu เจ้าเก่าจัด คือ ES

ทีนี้ก็เลย หิ้วเจ้าตัวนี้มาครับ ตัวเบิร์น 8bits : 8FX MB-2146-07
จริงๆ ชอบ interrupt แบบ NEST และประทับใจบางด้านของ Fujitsu มากๆ
หน้าตาตัวเบิร์นมัน หล่อใช้ได้เลย กะว่า จะเอามาลองใช้งานซักหน่อย


ตอนนี้ กำลัง ติดปัญหาเรื่องการ Debug ครับ
ปัญหาคือ ....

Time Measurement ของ SoftTune มันก็ Count : Machine_Cycle ตามปกติดี
แต่ทำไม รีจิสเตอร์ TMR1 ซึ่งเป็นตัวนับถอยหลัง(ดาต้าชีทมันบอก , ReloadTimer)
ค่าของมันไม่ยอมลดลงเลย ซึ่งขัดแย้งกับ ดาต้าชีท

จะว่าตั้งค่าผิด ก็คิดว่าไม่ใช่ เพราะมี บิต แค่ไม่กี่ตัว คล้ายๆ กันกับ PIC

ใครเคยใช้ รีจีสเตอร์..  รีโหลดไทม์เมอร์ ของ MCU ค่าย Fujitsu
และ เคยดีบักมาแล้ว บ้างครับ
ปวดกบาลครับ ไม่รู้จะไปถามใครจริงๆ

ขอบคุณล่วงหน้านะครับ
#87
พอดี คิดแว๊บๆ ขึ้นมาว่า คลิปนี้ อาจมีประโยชน์กับอีกหลายๆ คน
ที่ต้องนำเจ้า ปิ๊ก ไปออกสนามรบ

ผลเลยจัดการ เทสน้องปิ๊ก สักเล็กน้อย บางโคด ก่อนนำมันมาใช้งานจริง
ก็...  ถือว่าโหดกับ น้องปิ๊ก พอดูนะครับ

ผลลัพธ์เป็นอย่างไร ขอบรรยายด้วยภาพแล้วกันครับ

http://www.youtube.com/embed/aIH-5jAiBGo

เป็น MCU ของ Board Demo : Pic 8 bits - 16_Instruction

ตระกูล 18F(ของแถมก๊าบบบ มากับ Pickit3 555+)

Code โดยใช้ Internal OSC 16Meg__PLL 4 เท่า = 64 MHz

หารด้วย 4 ก็ได้ 16 MIPs freq ถูกวัดด้วย Kyoritsu MultiMeter ก็เป๊ะตามนี้

ตอนเทส ขี้เกียจบัดกรี Xtal ครับ อยากลอง OSC ในตัวมัน

ด้าน Realtime ใช้ Interrupt Timing 50 usec สั่งบิตนึง toggle เพื่อออกสโคป

โดย.. ตั้งสโคปไว้ที่ 50 usec / div

Pic มันก็ทำงานแม่นยำ Curve คมมาก

ผลลัพธ์ที่ได้...

คนใช้งานที่ต้องเจอ สนามแม่เหล็ก อย่าง Inductive Load คงสบายใจได้ระดับนึงเลยครับ

ที่น่ากังวล ว่า น้องปิ๊ก มันจะเอ๋อเหรอ O_o ก็ น้ำมือมนุษย์นี่เอง

แต่ หากใช้ XTAL นี่ก็ยังไม่ได้เทสจริงจังนะครับ

ถ้าได้เทสแล้ว อาจมาอัพเดทให้ชมกัน

ตอนใช้งานจริง อยู่ในกล่อง คงไม่มีใครทะลึ่งเอามือไป  จิ้มปิ๊ก มันหรอกนะ 555+
เพียงแต่.. อย่าทำมันหายก็คงพอ ไม่งั้น ชิบ..!!
#88
แบบนี้นะครับ
ขนาดใหญ่กว่า ซองบุหรี่เล็กน้อย


#89
มี 2 คำถาม ที่คาใจอยู่น่ะครับ

ปัญหาแรกนะครับ
โค้ดประมาณนี้ครับ

volatile struct{
  unsigned on :1;
  unsigned count  :3;
}switch;

volatile unsigned char value[3] ={1 , 2 , 3};


void switch_fn(){

for(switch.count=1; switch.count<=6; switch.count++){
value[switch.count] = value[switch.count -1] + value[0];

}

ปรากฎว่า มันบอกผิดพลาด คอมไพล์ ไม่ผ่าน
แต่พอ นำตัวแปร switch.count ออกมาข้างนอก struct
โดยเปลี่ยนเป็น unsigned char i;
for(i=1; i<=6; i++){ }
มันถึงยอมน่ะครับ

ทำไมมันไม่ผ่านน่ะครับ

ที่อยากใช้ ตัวแปร เป็น struct
เพราะว่า มันเป็นหมวดหมู่ดีน่ะครับ จัดการง่าย พิมพ์ง่าย
และก็ กำหนดจำนวน bits ได้ด้วย

คำถามที่ สอง น่ะครับ

จะมีทาง ทำให้
ตัวแปร struct{ }; มีค่า initial ได้เลย โดยการกำหนดทีเดียว ได้เปล่าครับ
ผมลองพิมพ์ อย่างนี้

volatile struct {
unsigned ant=4 :3;
unsigned bat=3 ;6;
}id;

มันก็ไม่ยอมน่ะครับ
แต่พอ เอาการกำหนดค่า initial ออก
คือ =4 และ =3 ออก
ปรากฏว่า ถึงจะ Complies ผ่าน
ทำอย่างไร จึง initial ค่าเริ่มต้น ให้มันได้เลย
เหมือนกับ การ Initial ตัวแปรอื่นๆ ทั่วไปครับ

volatile unsigned char ant=4; // อย่างนี้ มันยอมให้ Complies
แต่มันไม่เป็นหมวดหมู่น่ะครับ

ถามซะยาวเลย อิอิ
ขอบคุณสำหรับคำตอบล่วงหน้าครับ
#90
ย่านที่ มันบอกว่า Float เก็บได้ คือ

E min  -126
E max  127
N min   2 กำลัง -126
N max  2 กำลัง 128

งงตรงนี้แหล่ะครับ

คือว่า
อย่างเช่น ถ้าต้องการ
หลังทศนิยม 2 ตำแหน่งในฐานสิบ

ค่าก่อนหน้าทศนิยมนี่ มันจะเก็บได้เท่าไหร่น่ะครับ

ใครพอกระชับ ความเข้าใจตรงนี้ได้บ้างน่ะครับ
อ่านไปอ่านมา งง   @_@!
#91
ปัจจุบัน ผมใช้ ล์ pic18F เห็น ES มีเยอะดี
เขียนด้วย MPLAB_X คอมไพด้วย XC8 ครับ

หลังจากผม Code เสร็จ ก็จะ Debug ด้วย Stimulus
ทุกฟังช์ชั่น ก็ผ่าน และเห็น Machine Cycle

แต่ ฟังช์ชั่น Analog to Digital อย่างใน pic18F45k20

เท่าที่ส่องๆ ดู เล่นๆ ดู ใน Stimulus ยังหาไม่เจอว่า จะป้อน ip analog ยังไง
เลยไม่รู้จะ simulate มันได้ยังไง
งานผม สนใจเรื่อง machine cycle มาก เพราะต้องอยู่ในกรอบของ เวลา

งานเสร็จเร็ว ยิ่งดี แต่ pic มันช้า ตัวที่ใช้ แค่ 16MIPs
ตระกูล 24H ได้ 40 แต่เจือกไม่มี EEPROM ขี้เกียจเพิ่ม Memory IC น่ะครับ

ทีนี้ได้ลอง 2 Code นี้

if(flag_timing ==1){

   flag_timing =0;
   ADCON0bits.GODONE =1;
   Sum_ADRES = (ADRESH <<8) + (ADRESL);
   LED1 = 1;
}

กับอีก Code คือ :

if(flag_timing ==1){

   flag_timing =0;
   while (ADCON0bits.GODONE == 1){};
   Sum_ADRES = (ADRESH <<8) + (ADRESL);
   LED1 = 1;
}


หลังจากทดลองบนบอร์ดจริงๆ
โดยให้มันรับ ค่า จาก Potenchometer
เมื่อ ทดลองบิดลูกบิดไปมา
ผลลัพจากการต่อวงจรจริง
LED ติดสว่างตามตำแหน่งที่มือหมุนไปทั้ง 2 Code เลย

Code จริงๆส่วน นี้  ยาวกว่านี้มากครับ
LED ที่ติดสว่าง ซึ่งมีหลายดวง
ผมให้มัน ติด ตามตำแหน่ง ของลูกบิด ที่มือหมุนไป

Code ที่ผมตั้งใจจะเอามาใช้งานจริง
คือ Code ล่างครับ

แต่คำถาม คือ
หาก มันกำลังคำนวน while (ADCON0bits.GODONE ==1 )
ซึ่ง ผมคำนวณเวลาตาม ดาต้าชีท ได้ ร้อยกว่า Machine_Cycle แหน่ะ

คำถาม คือ หาก Loop while ยังไม่เสร็จ แล้วมี interrupt โผล่มา
หลังจาก interrupt เสร็จ จะเป็นอย่างไรน่ะครับ

1. มันมาคิด while loop ต่อจากเดิม ให้เสร็จ หรือ
2. คำนวน ADCON ใหม่เลย หรือ
3. ข้ามไปเลย ไปทำงานอื่นๆ

เขียนมาตั้งยาว ถามสั้นๆ แต่สงสัยจริงๆน่ะครับ
เพราะตอนนี้ Stimulus มันไม่ได้ ไม่รู้จะรู้ Machine_Cycle แท้จริงได้อย่างไง

หรือ ใครมีวิธี Stimulus ADCON ได้
รบกวนด้วยน่ะครับ
ขอบคุณล่วงหน้าครับ