posted on 30 Jul 2009 11:21 by pandamaster in MCU
NetBook ที่ประหยัดพลังงานมากๆ ใช้ ถ่าน AA 8 ก้อน สามารถใช้ได้นาน 4 ชั่วโมง
โดยที่ NetBook ตัวนี้ใช้ CPU ที่เป็นชนิด SoP (System on Chip) โดยที่มีความเร็วอยู๋ที่ 1 GHz ไม่ได้เร็วแต่ก็ด้วยความเร็วเพียงเท่านี้ กินไฟเพียงแค่ 1.2 วัตต์ เท่านั้นเอง ว้าววว ซึ่งส่วนประกอบภายในนั้น จะประกอบไปด้วย Chip CoreX86 1GHz DDR2 1GB, Ethernet, USB 2.0, VGA และสุดท้ายมี Wireless LAN ในตัว จอมึความใหญ๋ ขนาด 8.9" ความละเอียด 1024 x 600 ซึ่ง Spec ขนาดนี้นั้นสามารถนำมาลง Windows XP ได้ ส่วนใครที่รัก Opensource ก็สามารถลง Unix or Linux โดยส่วนที่เก็บ ข้อมูล จะใช้ SD-Card ขนาด 8 GB ซึ่งสามารถถอดเปลียนได้ และ สามารถใช้ SSD ที่เป็น IDE ได้ ถ่านที่ใช้นั้น สามารถชาร์จ ได้ ซึ่งรองรับ Batt ชนิด Li-on และ Netbook ตัวนี้ไม่มี Adapter แยก ซึ่งประกอบอยู่ภายใน ทำให้สะดวกต่อการพกพามาก โดยที่ค่าตัวของ NetBook นี้นั้น อยู่ที่ 200 เหรียญฯ ลองคิดเป็นเงินไทย ก็อยู่ที่ประมาณ 7000 บาทไทย
Specifications
| CPU |
1GHz Xcore86 Device on Chip™ |
| Graphics |
Integrated Graphics Chip |
| Memory |
256MB / 512MB / 1GB DDR2 |
| Display |
8.9" WSVGA 1024 x 600 resolution TFT LCD screen with LED
backlight |
| HDD |
SD Card or IDE Flash Disk |
| Audio |
Line-out, Mic-in, Internal Mic, Internal stereo speakers |
| Ethernet |
Built in 10/100 Base-T |
| USB 2.0 ports |
External : 3 ports, Inernal : 1 port (reserved for WIFI, GPRS,
CDMA, 3G or 3.5G USB dongles) |
| I/O |
D-sub 15 pin VGA out, integrated SD card reader, touch pad |
| Power / Battery |
Rechargeable AA Battery - NiMH 8 pcs (4 hours max) or
Li+3S (4 hours max) or Li+3S2P (6 hours max)
AC 100V-240V (no external adapter) |
ภาพของ NetBook
Batt Ni-MH 8 ก้อน
SD-Card ขนาด 8 GB และด้านล่างเป็น Module Xcore86
posted on 11 Sep 2008 09:24 by pandamaster in MCU
ก่อนอื่นเรามาทำความรู้จักกับ PWM กันก่อนว่า PWM
ย่อมาจากอะไร ??? PWM ย่อมาจาก Pulse Width Modulation
ซึ่งถ้าจะแปลให้เข้าใจง่ายๆ มันก็คือ การปรับความกว้างของพัลซ์โดยการนำเอาสองสัญญาณมาเปรียบเทียบกัน และ
สองสัญญาณที่ว่านี้ก็คือสัญญาณ"สามเหลี่ยม"
กับสัญญาณที่ต้องการปรับความกว้างของพัลซ์ ยกตัวอย่างเช่น
ถ้าเรานำสัญญาณไฟฟ้ากระแสตรงมาเปรียบเทียบกับสัญญาณสามเหลี่ยม
เราก็จะได้สัญญาณพัลซ์ที่มีความกว้างคงที่นั้นเองดังรูปข้างล่างนี้
แต่ ถ้าลองคิดดูดีๆว่าถ้าเราจะไม่ใช้สัญญาณไฟฟ้ากระแสตรง
แต่เรานำสัญญาณที่เปลี่ยนแปลอยู่ตลอดเวลามันจะเกิดอระไรขึ้น
และแน่นอนว่าความกว้างของพัลซ์ก็จะเปลี่ยนแปลงตามไปด้วย
ผมว่าอาจจะยังมองไม่ค่อยเห็นภาพเท่าไหร่
ลองมาดูภาพข้างล่างนี้สิอาจจะช่วยคุณให้เข้าใจง่ายขึ้น
คำถามต่อมา เราจะสร้างสัญญาณ PWM นี้ด้วยวงจรอระไร ??? คำตอบคือ วงจร
Comparator หรืองจรเปรียบเทียบนั้นเอง และวงจร Comparator
ที่นิยมใช้กันก็เห็นใช้ Op-Amp เพียงตัวเดียว ผมมีอยู่วงจรหนึ่ง
ซึ่งเป็นพื้นฐานที่สามารถนำไปใช้จริงกันได้นะครับ ลองดูแล้วกัน


REF:http://introduction-pwm.blogspot.com/
posted on 21 Aug 2008 16:37 by pandamaster in MCU
watch dog คืออะไร ข้อควรระวังคืออะไรบ้าง
watch dog แปลตรงตัวว่า สุนัขเฝ้ายาม ก็คือ ตัวตรวจสอบ cpu นั้นเองว่า cpu ทำงานเป็นปกติหรือไม่อย่างไร
ก่อนที่จะใช้งาน watch dog นั้นจะต้องมีการเลือกว่าจะกระตุ้นทุกๆ เวลาเท่าไหร่ เช่น ทุกๆ 1 วินาที
เราะจะต้องเขียนโปรแกรมกระตุ้น watch dog ทุกเวลาที่เราได้ตั้งไว้ (หากใช้ watch dog ภายนอกด้วยชิพ
ds1232 ต้องส่งพัลล์ 1 ลูกทุกๆเวลาที่เราตั้งไว้ออกไปยังขากระตุ้นของชิพ ds1232 หากใช้ watchdog
ภายในตัว cpu จะต้องกระตุ้นที่ registor watchdog นั้นๆ)
หากภายในกำหนดยังไม่มีการกระตุ้น ตัว watch dog จะทำหน้าที่ reset cpu ทันที
ตัวโปรแกรมจะเริ่มต้นทำงานใหม่ ดังนั้นค่าบางค่าจะหายไปครับ!!!!!!
หากเป็นโปรแกรมประเภท counter ค่าการนับชิ้นงานจะหายไปด้วย ดังนั้นแนะนำว่างานประเภท counter
นับชิ้นงานน่าจะมีการใช้งาน nonvalentile ram ด้วย เมื่อนับเสร็จแล้วก็เก็บข้อมูลลง nonvalentile ram
ซะหนึ่งครั้ง เวลา hang ก็ทำการ load ค่าจาก nonvalentile ram มานับต่อเช่น ตัวอย่างนี้ครับ
counter นับงานได้ 30 ชิ้น บังเอิญ ไฟดับหมด แต่เนื่องจากได้มีการเขียนโปรแกรม load ค่ามานับต่อ
ดังนั้นจึงสามารถ เอาค่า 30 มาเริ่มนับ ตัวต่อไป 31 ได้ทันที
ยกตัวอย่างการเขียนโปรแกรมคร่าวๆ ให้ดูนะครับ
void main(void)
{
unsigned int counter;
counter=nvram();//เอาค่าจาก nv ram
if (counter>65534)
{
showlcd("full counter 16 bit","line1");
showlcd("press button clear","line2");
waitpressclear();
counter=0;}
tik_watchdog();
while(1)
{
tik_watchdog();
if (sensor)
{
while(!sensor);
counter++;
savenvram();
showlcd(counter,"line1");
showlcd("","line2");
tik_watchdog();
}
}
}
posted on 24 Jul 2008 23:41 by pandamaster in MCU
อุปกรณ์ลอจิกแบบโปรแกรมได้ : field programmable gate array (FPGA) บางครั้งอาจจะมีคนสับสนกับคำว่า flip-chip pin grid array ซึ่งมีโครงสร้างตัวถังคล้ายๆ กัน
FPGA จัดเป็น อุปกรณ์สารกึ่งตัวนำชนิดโปรแกรมได้ที่มีโครงข่ายการเชื่อมต่อภายในแบบแมตริกซ์ โครงสร้างภายในของ FPGA นั้นสามารถโปรแกรมให้มีหน้าที่การทำงานเหมือนลอจิกเกตพื้น
ฐาน เช่น AND, OR, XOR, NOT หรือรวมกันหลายๆ ชนิด (combinational logic)
เพื่อให้ทำหน้าที่ที่มีความซับซ้อนเพิ่มขึ้น เช่น decoders
หรือฟังก์ชันทางตณิตศาสตร์ ใน FPGAs ทั่วไป
นอกจากจะประกอบด้วยส่วนของวงจรลอจิกแบบโปรแกรมได้แล้ว
จะยังมีบล็อกของหน่วยความจำ ซึ่งอาจจะสร้างด้วยฟลิบฟลอปอย่างง่าย หรือใช้พื้นที่ของสารกึ่งตัวนำสร้างเป็นหน่วยความจำจริงๆ อยู่ภายในก็ได้
ในการออกแบบวงจรดิจิตอลอิเล็กทรอนิกส์ ที่มี FPGA
อยู่บนแผงวงจรด้วยนั้น จะช่วยให้ผู้ออกแบบสามารถลดขนาดของแผงวงจร
รวมทั้งสามารถออกแบบได้รวดเร็ว
ไม่ต้องทดสอบรายละเอียดภายในให้เสร็จสมบูรณ์ 100 %
ก็สามารถออกแบบแผงวงจรได้ เมื่อได้รับแผงวงจรและประกอบอุปกรณ์ต่างๆ
เสร็จแล้ว จึงค่อยกำหนดหน้าที่การทำงานของ FPGA ได้ในภายหลัง
ต่างจากการออกแบบด้วยลอจิกเกตขนาดเล็ก
ที่ต้องออกแบบทางเดินของลายทองแดงให้เสร็จสมบูรณ์ก่อน
และไม่สามารถแก้ไขได้ในภายหลัง นอกจากนี้ การใช้งาน FPGA
สามารถโปรแกรมการทำงานได้ในทุกขณะแม้แต่ขณะที่ส่งมอบงานแล้ว
ก็ยังสามารถเข้าไปแก้ไขวงจรได้โดยง่ายดาย จึงเป็นที่มาของคำว่า "field
programmable" ซึ่งก็หมายถึงโปรแกรมได้ในภาคสนามหรือที่หน้างานนั่นเอง
อย่างไรก็ตามข้อกำหนด (Configuration) ของ FPGA จะหายไปหลังจากปิดไฟเลี้ยง
ดังนั้น จะต้องมีหน่วยความจำภายนอก (Flash) มาคอยรักษาข้อกำหนดของ FPGA
ไว้ ซึ่ง FPGA
จะมีกระบวนการอ่านข้อกำหนดนั้นโดยอัตโนมัติหลังจากได้รับไฟเลี้ยง
การทำงานของ FPGAs จะยังมีความเร็วที่ด้อยกว่าapplication-specific
integrated circuit (ASIC) , และเมื่อเปรียบเทียบขนาดทางกายภาพ
พบว่าจะมีความหนาแน่นของวงจรที่น้อยกว่า รวมทั้งใช้กำลังงานมากกว่า ASIC
อย่างไรก็ตาม FPGA มีข้อได้เปรียบตรงที่ใช้เวลาในการพัฒนาผลิตภัณฑ์ (time
to market) ที่น้อยกว่า สามารถแก้ไขวงจรได้หลังจากที่ใช้งานจริงในภาคสนาม
,และมีค่าแรงในการดำเนินการที่ต่ำกว่า (non-recurring engineering) .
นอกจากนี้ ยังมี FPGA ชนิดที่โปรแกรมได้ครั้งเดียว (OTP)
ซึ่งมีราคาที่ต่ำกว่าโดย FPGA ชนิดนี้เมื่อโปรแกรมแล้วจะคล้ายกับ ASIC
นอกจากนี้ยังมีการรวมหน่วยความจำ config เข้าไว้ในอุปกรณ์ FPGA
ซึ่งจะยังคงอยู่แม้ปิดไฟเลี้ยง เรียกว่า Complex programmable logic
devices
ที่มา : http://th.wikipedia.org/wiki/FPGA
posted on 09 Jun 2008 08:52 by pandamaster in MCU
|
เรียนรู้การใช้งานหน่วยความจำแบบ
EEPROM ภายใน PIC
|
|
โดย khai_PSU
20/4/2549
หัวข้อที่จะนำเสนอในวันนี้
คือ การเขียนข้อมูลไปยังหน่วยความจำแบบ EEPROM แล้วไอ้หน่วยความจำนี้
มัน คือ อะไร เอาไว้ทำอะไร ? คงเป็นคำถามสำหรับผู้ที่เริ่มต้นศึกษากันอย่างแน่นอน
หน่วยความจำและ/หรืออุปกรณ์ในการจัดเก็บข้อมูลมีอยู่หลายแบบหลายประเภทนะครับ
เช่น RAM, ROM, CD-ROM, CD-RW, Hard disk, Floply Disk เยอะแยะมากมาย
รวมถึง EEPROM ด้วย โดยที่หน่วยความจำเหล่านี้ถ้าเราจะแยก ก็ได้อีกหลายแบบ
น้องๆ ที่ผ่าน Introduction to computer คงจะมีความรู้เกี่ยวกับหน่วยความจำกันบ้างแล้ว
โดย EEPROM จะเป็นหน่วยความจำที่สามารถเขียน - อ่านได้ และสามารถ
เขียนซ้ำได้หลายๆ ครั้ง และเมื่อ ไม่มีแหล่งจ่ายไฟจ่ายให้กับหน่วยความจำ
ข้อมูลก็จะไม่สูญหาย ประโยชน์ของมัน ที่จะเอามาใช้ คือ เก็บค่าที่อาจจะต้องมีการเปลี่ยนแปลง
แต่อาจไม่บ่อยมากนัก และ มีขนาดข้อมูลที่ไม่ใหญ่ เช่น ค่าความเร็วอ้างอิงในการควบคุมความเร็วมอเตอร์
โดยโปรแกรมที่เรารันจะไปอ่านค่า ที่เราเก็บไว้ใน EEPROM แล้วก็ควบคุมตามค่าที่ตั้งไว้
หรืออาจจะเก็บค่าอ้างอิงในการควบคุม อุณหภูมิ หรือความชื้น แล้วแต่จะมาประยุกต์
ใช้ครับ ในตัวอย่างนี้จะใช้ PIC16f83 ซึ่งมีหน่วยความจำแบบ EEPROM
อยู่ 128 BYTE หากน้องๆ ใช้ PIC16f877 จะมี หน่วยความจำแบบ EEPROM
อยู่ 256 BYTE ครับ ก่อนที่จะมาดูโปรแกรมนะครับ ขอแนะนำ ฟังก์ชันที่
อยู่ในโปรแกรม input.c กันก่อน เพราะเราจะทำการรับค่าที่เป็น เลขฐาน
16 เพื่อระบุค่า address และ ค่าข้อมูลที่ต้องการเก็บ ลองมาดูโปรแกรมตัวอย่างการใช้งาน
ฟังก์ชัน gethex( ) ภายใน input.c กันครับ
#include<16f873.h>
#use delay(clock=4000000)
#fuses xt,NOWDT,NOPROTECT,NOBROWNOUT,NOPUT,NOWRT,NOLVP
#use rs232(baud=9600,xmit=PIN_C6,RCV=PIN_C7)
#include
void main( )
{
unsigned int i,value;
while(1)
{
value = gethex();
printf("\nvalue
= %u\n\r",value);
delay_ms(500);
}
} |
|
|
มาดูผลลัพธ์กันครับ
จะเห็นว่าเราจะสามารถป้อนข้อมูลที่เป็นเลข
ฐาน16 โดยตัวอย่างผมได้แสดงค่าที่เราป้อนข้าไปเป็น ฐาน 10 ออกมา
เช่น เราป้อน e จาก key board เข้าไป ค่าที่ตรงกับ ฐาน 10 คือ 14
เป็นต้น
เมื่อเข้าใจการใช้งานฟังก์ชันกันแล้วนะครับ
เราก็มาดูการเขียนข้อมูลและ อ่านข้อมูลลงใน หน่วยความจำแบบ EEPROM
กันครับ เรามาทำความรู้จัก กับสอง ฟังก์ชันที่สำคัญครับ
write_eeprom( address, value ) โดย ที่ address
คือ adress( 8 bit or 1 BYTE ) ของหน่วยความจำ EEPROM ที่ต้องการจะเขียนข้อมูลลงไป
ส่วน value คือ ค่าที่ต้องการเขียนลงไปยัง address เช่น write_eeprom(127,9)
หรือเขียน ในรูปแบบ ฐาน 16 เป็น write_eeprom(0x7F,0x09) จะได้ข้อมูลดังรูป
read_eeprom( address) อ่านค่าข้อมูลที่เก็บไว้ใน
EEPROM ตาม address ที่กำหนด
—————————————————————————————————————————————
|
eeprom001.c
|
#include<16f873.h>
#use delay(clock=4000000)
#fuses xt,NOWDT,NOPROTECT,NOBROWNOUT,NOPUT,NOWRT,NOLVP
#use rs232(baud=9600,xmit=PIN_C6,RCV=PIN_C7)
#include
#rom 0x2100={1,2,3,4} // กำหนดค่า 1
ยัง address 0x00, 2 ไปยัง address 0x01, 3 ไปยัง address 0x02
และ 4 ไปยัง address 0x03
void main( )
{
BYTE i, j, address, value;
printf("press any key to start\n\r");
getch(); //รอการกดคีย์บอร์ดเพื่อเริ่มต้นทำงาน
do
{
printf("\r\n\nDATA
in EEPROM:\r\n");
printf("\r\n
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\r\n\n");
for(i=0; i<=7;
++i)
{
printf("%2X
",i); //
พิมพ์ address (Column)
for(j=0;
j<=15; ++j)
{
printf("
%2X",read_eeprom( i*16+j));
// พิมพ์ค่าและ address แถวละ 16 ค่า
}
printf("\n\r");
//ขึ้นบรรทัด
(row) ใหม่
}
printf("\r\nEnter
Address to change: ");
address =
gethex();
//รับค่า address
printf("\r\nNew
value: ");
value = gethex();
//รับค่าที่ต้องการบันทึก
write_eeprom( address,
value ); //
เขียนข้อมูลลงยัง address ที่ต้องการ
} while (TRUE);
}
|
มาดูผลลัพธ์กันหน่อยครับ
ลองทำการเขียนค่าลงไปดูครับ
โดยผมลองเขียนค่า 0x09 ไปยัง address 0x7F (127 ในฐาน 10) ซึ่งเป็น
adress สุดท้าย เพราะ PIC 16f873 มี eeprom 128 byte (address 0-127
นั่นเอง)
<<จบบริบูรณ์>>
|
|
|
| |
ที่มา:
วิทยาลัยชุมชนภูเก็ต มหาวิทยาลัยสงขลานครินทร์ วิทยาเขตภูเก็ต คณะ เทคโนโลยีและสิ่งแวดล้อม
edit @ 9 Jun 2008 08:54:20 by PandaMaster