วันอาทิตย์ที่ 19 พฤศจิกายน พ.ศ. 2560

เวปเปิดแล้วคร๊าบ

            หลังจากห่างหายไปนาน เรียกได้ว่าเป็นสิบปี  ตอนนี้กลับมาแล้วครับ  ผมขอเปิดเวปใหม่  เดี๋ยวผมจะทำบทความลงเรื่อยๆ และมีสินค้าด้านหุ่นยนต์ให้อุดหนุนกันด้วยนะครับ ยังไงก็ฝากเวปผมด้วยนะครับ

web :  indy-robot.com

line id : @indy-robot

วันจันทร์ที่ 14 ตุลาคม พ.ศ. 2556

ผลงานไม่มีไม่เกิด

ผมเรียนโท ไฟฟ้าและคอมฯ ที่ มมส. งานประจำก็สอน เสาร์อาทิตย์เรียน ไม่มีเวลาว่างทำอะไรเล่นเลยครับ

มีอะไรอยากถาม ยังไง อะไร มีข้อสงสัยเมล์มานะครับ
nontpeet@gmail.com

วันศุกร์ที่ 18 มกราคม พ.ศ. 2556

หุ่นยนต์ตัวสุดท้าย ของผม

นี่คือหุ่นยนต์ ที่ผมและทีมงานสร้างขึ้น โดยรวมมีทีมงานด้วยโปรแกรมเมอร์สามคน พี่อัด ผม และน้องโอ  ส่วน นักเรียน มี บาส บอล เทห์ มอส และน้องสุด วาย โดยคนรับผิดชอบ สูงสุดของหุ่นยนต์ตัวนี้คือ ผม และ บาส  หุ่นยนต์ตัวนี้ ถูกสร้างโดยพื้นฐานของความชัวร์ แม้หุ่นยนต์ จะวิ่งไม่ตรง ก้อต้องสามารถ ทำภารกิจต่อได้ เซนเซอร์ที่ใช้ ได้ออกแบบวิธีการติดตั้ง ใหม่ เพื่อป้องกันการเช็คไม่เจอวัตถุ ใช้ PIC 18f8628 เป็นตัวหลักในการสั่งงาน โดย AVR 4ตัว   3 ตัว เขียนโดยใช้ winavr ออกแบบเพื่อ อ่านค่า encoder และรักษาตำแหน่ง ของการ หมุน ขึ้นลง เข้าออก  สั่งงานแบบ serial มีการส่งค่ากลับ เมื่อวิ่งถึงตำแหน่งที่เราสั่ง และ AVR อีกตัว เขียนโดย arduino รับค่าผ่าน serial เช่นกัน โดยตัวนี้จะ มีหน้าที่ควบคุมองศาของล้อหน้า ซึ่งเราใช้ servo ในการเลี้ยว   เซ็นเซอร์ ใช้ LED สีขาว จาก es  LDR ก้อซื้อจาก es  โดยซื้อมา 100-150 ตัว แล้วเอามาต่อ ดีไวเดอร์  แล้วเอาไมโครอ่านค่า  จากนั้น จดค่าของทุกตัวเอาใว้  (แนะนำอ่านค่าทีละตัว โดยเสียบโฟโต้อบร์ดเอา เพราะ R ที่เอามาต่อ จะเป็นตัวเดียวกัน   และให้วัด ในช่วงหลัง สองทุ่ม ในสภาวะแสงคงที่) จากนั้น เราจะได้ค่า ของ LDR แต่ละตัวออกมา  ให้เลือกเอา กลุ่มค่าที่เท่ากัน    ในส่วนของการเดินสายไฟ เราเน้นการเดิน สายไฟ signal และสาย power  ไม่ให้ใกล้กัน หรือให้ใกล้กันน้อยที่สุด  และไม่มีการเชื่อมโยงกัน ระหว่าง ไฟเลี้ยงไมโคร และเลี้ยงมอเตอร์  ซึ่งใช้ OPTO เชื่อมต่อกันทางแสง ป้องกัน สัญญานรบกวนจากมอเตอร์   ส่วนภาค จ่าย 5V เราใช้ KIA278R05 ซึ่งเบอร์นี้จ่ายกระแสได้ 2A เหลือๆครับ  

ในส่วนของการเขียนโปรแกรม ผมไม่รู้จะอธิบายยังไง
 เอาเป็นว่า ใครอยากได้ ส่งเมล์มาขอได้ที่ nont_peet@hotmail.com  ลองเอาไปศึกษาได้ครับ  

 ต่อจากนี้คงจะเป็นฝ่าย support ให้กับทีมน้องใหม่  นักเรียน นักศึกษา หรือครูท่านใด สนใจเมล์มาคุยได้ครับ  อยากได้โค๊ดส่วนไหน วงจร อะไร ผมวาดได้ ผมวาดให้เลยครับ  

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

ขอบคุณครับ 

กลับมาแล้ว


ปีเก่าผ่านไป ปีใหม่ผ่านมา สวัสดีปีใหม่ครับ   ปีใหม่นี้ ผมได้เข้ามาดูบล็อค ปรากฏว่า รูปหายหมดเลยไม่ทราบว่าเป็นเพราะอะไร รูปเก่าๆก้อคงจะหายหมดแล้ว  และที่ห่างหายไปนาน ผมก้อยุ่งเรื่องหุ่นยนต์ เป็นบ้าอยู่พักนึง จนได้รางวัลที่ 2 ของประเทศ  แต่จนแล้วจนเล่า ผมก้อมานึกถึงตัวเอง ว่าผมจะทำไปทำไม ผมเอาเวลามาอ่านหนังสือสอบ บรรจุเพื่อตัวเองดีกว่าไหม และแล้วผมก้อได้โอกาศ เมื่อ วท.ยโสธร เปิดสอบครูจ้าง  แผนก เทคโนโลยีคอมพิวเตอร์  และแล้วผมก็สอบเข้า วท.ยโสธร ได้ เป็นครูจ้าง แผนก เทคโนโลยีคอมพิวเตอร์ ตามที่ใจหมาย เป็นครอบครัวที่อบอุ่น อยู่กันอย่างพี่น้อง ปรึกษากันได้ทุกเรื่อง การทำงานโดยรวม ก็อยู่ในเกนฑ์ดี  มีความสุขในการทำงาน   แต่ผมก้อยังไม่ได้ทำอะไรให้แผนกเป็นชิ้นเป็นอัน แอบน้อยใจตัวเอง แต่ผมต้องหาทางทำผลงานให้แผนกให้ได้   กล่าวมาซะยาว ไม่มีอะไรหรอกเขียนระบาย ใครใคร่อ่านๆ ใครไม่อ่านอย่าบ่น ใครอยากรู้เรื่องหุ่นยนต์ โทรมา ไลน์มา  viber mail  ตามสบาย ผมแจกทุกอย่าง ผม หยุดแล้วเรื่องหุ่นยนต์  ต่อไปนี้ผมจะเดิมตามชีวิตของตนเอง ไม่ใช่ทางที่มีคนขีดใว้ เพราะถ้ามันขีดไปให้ผมตาย ผมก้อต้องตาย  คิดได้แบบนี้แล้ว เป็นคุณจะเดินไปตายไหม..???

nont_peet@hotmail.com
nontpeet@gmail.com
0876546686   Dtac
0910617898   True
line : nont_peet
facebook : http://www.facebook.com/nont.peet

รับปรึกษา ทางด้านหุ่นยนต์ เท่าที่จะช่วยได้นะครับ  แบบจีนทำก้อไม่ไหว
ไม่รับปรึกษา เรื่องเงิน
รับปรึกษา โปรเจคจบ โปรเจคด้านไมโครคอนโทรลเลอร์
-ทีมงานเรารับทุกตระกูล  PIC AVR ARM ฯลฯ
-android vb vc#

ไปล่ะเหนื่อยพิมพ์  555  ไม่ได้บ้านะครับ แค่ไม่อยากเครียด  เครียดไปแล้วรวยจะเครียดอยู่

วันจันทร์ที่ 11 เมษายน พ.ศ. 2554

กลับมาอีกครั้ง....กับบทบาทใหม่




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

1 เป็นครูที่ปรึกษานักศึกษาแผนกอิเล็กทรอนิกส์ เข้าร่วมแข่งขันหุ่นยนต์ ในการแข่งขันทักษะวิชาชีพ ระดับภาคตะวันออกเฉียงเหนือ ณ วิทยาลัยเทคนิคยโสธร ได้รับรางวัลชนะเลิศ ระหว่างวันที่ 13-17 ธันวาคม 2553

2 เป็นครูที่ปรึกษาทีมนักศึกษาแข่งขันหุ่นยนต์ ABU Robocon 2011 ณ วิทยาลัยเทคนิคอุบลราชธานี (ทีมบั้งไฟแสน) ได้รับรางวัลรองชนะเลิศอันดับที่ 2 ในระดับภาค ระหว่างวันที่ 17- 21 มกราคม 2554

3 เป็นครูที่ปรึกษาทีมนักศึกษาแข่งขันหุ่นยนต์ ABU Robocon ในงานมหกรรมหุ่นยนต์อาชีวศึกษาระดับชาติ ปี 2554 ณ เดอะมอลล์บางแค กรุงเทพมหานคร ได้รับรางวัลรองชนะเลิศอันดับที่ 4 พร้อมรางวัลเทคนิคยอดเยี่ยม ระหว่างวันที่ 29-31 มีนาคม 2554

พูดมาซะนาน แค่อยากจะบอกว่า นักเรียนเค้าขยันจริงๆ ต่อวงจรได้เองด้วยผมเลยสะบายไม่ต้องต่อเอง 555 แต่นี่ก็เป็นสิ่งที่ผมอยากให้เกิดขึ้นในทีม คือ นักเรียนทำเอง ในเทอมหน้าผมจะสอนเค้าเขียนโปรแกรม จะปั้นมือโปรแกรมของทีมบั้งไฟแสน ตอนนี้มีแววสองคน น่าจะรุ่ง จบปวส.ไป ม.ไหนได้ตัวไป สบายผมว่า อิอิมั่วๆ บวกขี้โม้อย่าถือสาเด้อ ตามประสาคนรัก(บ้า)หุ่นยนต์

วันอังคารที่ 16 พฤศจิกายน พ.ศ. 2553

ขออภัยทุกๆท่านที่ติดตามบล็อก


ผมต้องขออภัยทุกๆท่านที่ติดตามปล็อกของผมด้วย เพราะผมไม่ได้อัพเดท มานานหลายเดือน ตั้งแต่จบมา ก็นอนๆกินๆเล่นๆอยู่บ้านไม่ได้ทำอะไรเป็นชิ้นเป็นอัน จนผ่านไป 4 เดือน ก็ได้เข้าไปทำงานที่วิทยาลัยเทคนิคยโสธร เป็นครูจ้างสอน และแล้วเวลาที่เคยเหลือทำนู่นทำนี่ก็หมดไป เพราะต้องเตรียมสอน ยังไม่พอ ต้องเทรนนักเรียนแข่งทักษะ พานักเรียนทำหุ่นยนต์ ABU พานักเีรียนทำแขนกล แถมยังเป็น MCU เป็น AVR อีก เป็นครูนี่มันเหนื่อยดีจิงแฮะ แต่ก็ไม่เป็นไรเพราะเรากลับมาตอบแทนบุญคุณอันใหญ่หลวง ที่ทำให้เรามีวันนี้ได้ ส่วนใครที่ทำ ABU คงจะได้เจอกันที่สนามแข่ง ยังไงก็ทักทายกันบ้างนะครับ ยังไงหากมีเวลาว่างผมจะมาอัพเดทเรื่องราวต่างๆอีกครับ ก่อนจากฝากรูปก่อนซักนิด เป็นความภูมิใจ ส่วนตัว 555

ขออภัยทุกๆท่านที่ติดตามบล็อก

ผมต้องขออภัยทุกๆท่านที่ติดตามปล็อกของผมด้วย เพราะผมไม่ได้อัพเดท มานานหลายเดือน ตั้งแต่จบมา ก็นอนๆกินๆเล่นๆอยู่บ้านไม่ได้ทำอะไรเป็นชิ้นเป็นอัน จนผ่านไป 4 เดือน ก็ได้เข้าไปทำงานที่วิทยาลัยเทคนิคยโสธร เป็นครูจ้างสอน และแล้วเวลาที่เคยเหลือทำนู่นทำนี่ก็หมดไป เพราะต้องเตรียมสอน ยังไม่พอ ต้องเทรนนักเรียนแข่งทักษะ พานักเรียนทำหุ่นยนต์ ABU พานักเีรียนทำแขนกล แถมยังเป็น MCU เป็น AVR อีก เป็นครูนี่มันเหนื่อยดีจิงแฮะ แต่ก็ไม่เป็นไรเพราะเรากลับมาตอบแทนบุญคุณอันใหญ่หลวง ที่ทำให้เรามีวันนี้ได้ ส่วนใครที่ทำ ABU คงจะได้เจอกันที่สนามแข่ง ยังไงก็ทักทายกันบ้างนะครับ ยังไงหากมีเวลาว่างผมจะมาอัพเดทเรื่องราวต่างๆอีกครับ ก่อนจากฝากรูปก่อนซักนิด เป็นความภูมิใจ ส่วนตัว 555

วันพฤหัสบดีที่ 20 พฤษภาคม พ.ศ. 2553

ห่างหายไปนาน


ห่างหายไปนานไม่ได้ update กับเขาสักที ที่หายไปนานก็ไม่ใช่อะไรครับ ไปเรียน cal3 อยู่ วิชาสุดท้ายแล้ว ในที่สุดก็จะจบแล้ว ดีใจจังเลย ว่าแต่จบไปแล้ว ต้องรอทำงานอีก เง้อ!!! จบช้าก็แบบนี้แหล่ะ ก็คนเรียนไม่เก่งเนอะ ไม่มีใครช่วยเราได้นอกจากตัวเราเอง วันนี้ว่างๆ (รึเปล่า) พอดีที่ร้าน www.vt-recycle.com ที่เปิดขายของ ยังไม่มีเครื่องวัดรอบมอเตอร์ เพื่อใช้ทดสอบมอเตอร์ เลยไม่รู้รอบมอเตอร์ ก็เลยทำใว้ใช้สักหน่อย แต่ยังไม่มีภาค input นะ แค่วงจรคร่าวๆ ส่วนโค๊ดก็เอามาจากตัวอย่างของ CCS ไปดูกานเลย

ป.ล. ใครผ่านมาผ่านไปก็ช่วยอุดหนุนหน่อยนะครับ เป็นทุนในการพัฒนาโปรเจกต่างๆ อิอิ ....

/**
#include <16f877a.h>
#fuses HS,NOWDT,NOLVP
#use delay(clock=20000000) //one instruction=0.2us
//#use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7)
#bit t1_overflow=0x0C.0

#include
// #bit t1_overflow=0xF9E.0 (PIC18, Reminder)

void main() {
int cycles8, cycles;
int32 freq;
long freqc_high;
long freqc_low;

lcd_init();
lcd_putc("\f");

while (TRUE) {
cycles8=0;
cycles=0;
freqc_high=0;
t1_overflow=0;
set_timer1(0);
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
/* ___ wait one second ___ */
while (cycles!=0xFF) { //true=3, false=4
cycles8=0; //1 cycle
//start inner loop
while (cycles8!=0xFF) { //true=3, false=4
if (t1_overflow)//true=2,false=3 //----|
{t1_overflow=0;freqc_high++;}//6 cycles // |
else // |-- 8 cycles
{delay_cycles(5);} //----|
delay_cycles(62); //x62
cycles8++; //1
///2 cycles to jump to top
//math: end inner loop
//math: total inner loop=((3+8+x+1+2)*255 + 4)*255
//math: if x=62.87781 then inner loops takes 5mil instructions
//math: if x=62 then inner loop takes 4942920, have to fill 57080 cycles
}
delay_cycles(216); //y
cycles++; ///1 cycle
///2 cylces to jump to top
//math: outer=(3+1+y+1+2)*255+4=57080
//math: y=(57080-4)/255)-(3+1+0+0+1+2)
//math: if y=216.827450980392156862745098039216 then outer loop cylces is 57080
//math: if y=216 then outer loop cycles is off by 211 cycles. z=211
}
delay_cycles(211); //z
/* ___ end waiting 1 second ___ */
setup_timer_1(T1_DISABLED); //turn of counter to prevent corruption while grabbing value
if (t1_overflow) //check one last time for overflow
freqc_high++;
freqc_low=get_timer1(); //get timer1 value as the least sign. 16bits of freq counter
freq=make32(freqc_high,freqc_low); //use new make32 function to join lsb and msb
lcd_gotoxy(1,1);
printf(lcd_putc,"Frequency Counter");
lcd_gotoxy(1,2);
printf(lcd_putc," F = %LU Hz\r\n",(freq/3)+1); //and print frequency

}
}
**/

วันพฤหัสบดีที่ 13 พฤษภาคม พ.ศ. 2553

ใกล้จบแล้ว

อีกไม่นานเกรดจะออกแล้วววววววว ดีใจจัง มาแจกวงจรดีกว่า

วันศุกร์ที่ 19 มีนาคม พ.ศ. 2553

งานเข้านิดหน่อย


ช่วงนี้งานมันเยอะเหลือเกิน งานไหลมาเทมา ถ้าเปลี่ยนงานเป็นเงินล่ะก็ อิอิ คงรวยน่าดู มีคนถามเรื่อง lcd16x4 เข้ามา ก็เลยจัดไปสักหน่อย อันไหนช่วยกันได้ก็ช่วยกัน ช่วยไม่ได้ก็ตัวใครตัวมัน 555 +++
ขอขอบคุณ Libraly By PCM Programmer

เอ้าแจกโค๊ด

ไพล์หลักครับ
/**
#include <16f877a.h>
#fuses HS, NOWDT, NOPROTECT,NOLVP
#use delay(clock = 20000000)
#include "Flex_LCD416.c"

void main()
{

lcd_init();
printf(lcd_putc, "\f");
delay_ms(500);

while(true)
{
lcd_gotoxy(7,1);
printf(lcd_putc, "TEST");
lcd_gotoxy(5,2);
printf(lcd_putc, "LCD 16x4");
lcd_gotoxy(8,3);
printf(lcd_putc, "By");
lcd_gotoxy(5,4);
printf(lcd_putc, "nont_peet");
delay_ms(1000);
}
}
**/

Libraly Flex_LCD416.c

/**
// Flex_LCD416.c

// These pins are for my Microchip PicDem2-Plus board,
// which I used to test this driver.
// An external 20x4 LCD is connected to these pins.
// Change these pins to match your own board's connections.

#define LCD_DB4 PIN_D3
#define LCD_DB5 PIN_D4
#define LCD_DB6 PIN_D5
#define LCD_DB7 PIN_D6

#define LCD_RS PIN_D0
#define LCD_RW PIN_D1
#define LCD_E PIN_D2

/*
// To prove that the driver can be used with random
// pins, I also tested it with these pins:
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_B1
#define LCD_DB6 PIN_C5
#define LCD_DB7 PIN_B5

#define LCD_RS PIN_E2
#define LCD_RW PIN_B2
#define LCD_E PIN_D6
*/

// If you want only a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line. Doing so will save one PIC
// pin, but at the cost of losing the ability to read from
// the LCD. It also makes the write time a little longer
// because a static delay must be used, instead of polling
// the LCD's busy bit. Normally a 6-pin interface is only
// used if you are running out of PIC pins, and you need
// to use as few as possible for the LCD.
#define USE_RW_PIN 1


// These are the line addresses for most 4x20 LCDs.
#define LCD_LINE_1_ADDRESS 0x00
#define LCD_LINE_2_ADDRESS 0x40
#define LCD_LINE_3_ADDRESS 0x10
#define LCD_LINE_4_ADDRESS 0x50

// These are the line addresses for LCD's which use
// the Hitachi HD66712U controller chip.
/*
#define LCD_LINE_1_ADDRESS 0x00
#define LCD_LINE_2_ADDRESS 0x20
#define LCD_LINE_3_ADDRESS 0x40
#define LCD_LINE_4_ADDRESS 0x60
*/


//========================================

#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines(or more)

int8 lcd_line;

int8 const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << retval_0 =" retval.0" retval_1 =" retval.1" retval_2 =" retval.2" retval_3 =" retval.3" retval =" 0;" retval_0 =" input(LCD_DB4);" retval_1 =" input(LCD_DB5);" retval_2 =" input(LCD_DB6);" retval_3 =" input(LCD_DB7);" high =" lcd_read_nibble();" low =" lcd_read_nibble();">> 4);
lcd_send_nibble(n & 0xf);
}
//----------------------------

void lcd_init(void)
{
int8 i;

lcd_line = 1;

output_low(LCD_RS);

#ifdef USE_RW_PIN
output_low(LCD_RW);
#endif

output_low(LCD_E);

// Some LCDs require 15 ms minimum delay after
// power-up. Others require 30 ms. I'm going
// to set it to 35 ms, so it should work with
// all of them.
delay_ms(35);

for(i=0 ;i < i="0;" address =" LCD_LINE_1_ADDRESS;" address =" LCD_LINE_2_ADDRESS;" address =" LCD_LINE_3_ADDRESS;" address =" LCD_LINE_4_ADDRESS;" address =" LCD_LINE_1_ADDRESS;" lcd_line =" 1;" value =" lcd_read_byte();">

วันอังคารที่ 16 มีนาคม พ.ศ. 2553

วันว่างๆ สบายๆ กับ DS18B20

ซื้อมาดองใว้นานตั้งแต่ก่อนทำโปรเจค บัดนี้ได้เวลาเอาออกมาปัดฝุ่นเสียที แต่ไม่รู้ช่วงนี้เป็นไรขี้เกียจต่อวงจรจริง อาจเป็นเพราะต่อจริงแล้วก็ไม่ได้เอาไปใช้ทำอะไร ศึกษาทดลองเสร็จก็แยกชิ้น กลับเป็นเหมือนเดิม ก็เลยต่อ SIM เอาน่าจะดีกว่าเก็บไฟล์ใว้เอา อยากต่อจริงค่อยว่ากันทีหลัง เอาเข้าเรื่อง ค้นหาวิธีต่อก็เยอะแยะในเน็ตพูดได้ว่าเรา ไม่ต้องศึกษาอะไรมากมายเลย เพราะเค้าทำเป็นตัวอย่างให้เราแล้ว มันจะจริงอย่างที่เค้าพูดไหมเอ้าลงมือต่อ ต่อ LCD ด้วยจะได้แสดงผล ต่อเสร็จเขียนโปรแกรม ใช้ CCS เพราะมี library ให้เราเรียบร้อย ศึกษานิดหน่อยก็เขียนได้แล้ว จบ.... เอ้าเหมือนเดิมแจกโค๊ด

CODE
/**
#include <16f877a.h>

#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)

#include
#include "touch.c"

float temperature;

void main()
{
lcd_init();
lcd_putc("\f");
while (true)
{
byte i, buffer[9];

if (touch_present()) {
touch_write_byte(0xCC);
touch_write_byte (0x44);
delay_ms(200);
touch_present();
touch_write_byte(0xCC);
touch_write_byte (0xBE);

for(i=0; i<9;i++) temperature =" (buffer[1]<<4)(buffer[0]">>4);
}
lcd_gotoxy(1,1);
printf(lcd_putc," NONT_PEET");
lcd_gotoxy(1,2);
printf(lcd_putc," TEMP : %2.1f C", temperature);
}
}
**/

วันพฤหัสบดีที่ 11 มีนาคม พ.ศ. 2553

โปรเจคผ่านแล้ว ว่างจัง

หลังจากที่สอบโปนเจกผ่านแล้ว ก็ว่างๆเลยหาอะไรทำเล่น เห็นมีเครื่องเช็คเพสลำโพงเค้าขายกันแพงจัง ไอ้เราก็เป็นผู้ยากผู้ไร้ เงินทองน้อย ก็เลยหาของมาทำเองลองดูซักตั้ง มันยากกว่าที่คิดอ่ะ สัญญานมันมาทั้งบวกทั้งลบ เริ่มจากใช้ OPAMP ขยายสัญญานจากไมค์ Condenser ต่อซีลงกราวด์หน่อยจะได้ไม่มีสัญญานลบกวนมาก ได้สัญญานมาแล้วก็เข้าไมโครคอนโทรลเลอร์เลย เขัยนโปรแกรมอยู่ซัก 5 นาที ก็ได้เวลาทดสอบ โอ้พระเจ้า ใช้ไม่ได้เลย เลยรื้อโปรแกรมให่อีกรอบ ผ่านไป 10 นาที ลองอีก อิอิ มันทำงานได้แล้ว แต่ก็ต้องปรับแต่งอีกเกือบ ชั่วโมง เอ้าเสร็จแล้ว ถึงเวลาลงอุปกรณ์จริง ก็เอาปริ้นเอนกประสงค์นี่ล่ัะง่ายดี เริ่มจากต่อภาคขยายสัญญานก่อน ตามด้วยต่อวงจร PIC ซึ่งใช้เบอร์ 16F73 ของมีไม่ต้องซื้อ 555 ต่อ REG เรียบร้อย ขั้วถ่าน 9V ก็มี ทำเสร็จเรียบร้อยลงกล่อง เอ้าไม่มีถ่าน 9V ขี้เกียจออกไปซื้อ (โคราชหนาว) ก็เลยถอดเอาจาก มิเตอร์ Fluke อิอิ แก้ขัด ประกอบใส่ถ่านเสร็จ โอ้ใช้ได้ แต่ก็คงไม่ดีเท่าที่เค้าขายล่ะมั้ง ไม่เคยใช้ของที่เค้าขาย อิอิ จบข่าว ผมขอไม่แจกโค๊ดนะครับเดี๋ยวกระทบต่อผู้ที่เค้าขาย
ผลการทดลองกับเครื่องเสียงจริงออกมาแล้ว ครั้งนี้ทดสอบกับของนอกด้วยครับ เริ่มจากเปิด sound test ปรากฏว่า เครื่องที่ทำขึ้นเองสามารถใช้การได้จากหน้าตู้ ในระยะ ประมาณ 15-20 เซนติเมตร ส่วนของนอกเค้าดีกว่ามากประมาณ คือ 5-20 เซนติเมตร แต่เครื่องที่เราทำขึ้นเองก็สามารถใช้งานได้ตรงกับเครื่องของนอก เพียงแค่ระยะต่างกันเท่านั้นเอง สงสัยต้องแก้ไขโปรแกรมนิดหน่อย แล้วก็เปลี่ยนไมค์ด้วย ได้ผลยังไงจะมาเล่าสู่กันฟังนะครับ

วันอาทิตย์ที่ 21 กุมภาพันธ์ พ.ศ. 2553

LED DOT MATRIX (SIM)















เนื่องจากได้ยินชื่อเสียงของไอซี 74HC595 มานานแล้วแต่ไม่มีโอกาศได้ลอง สั่งซื้อจาก ES มาดองใว้ 6 ตัว ไม่มีเวลาเล่น LED DOT MATRIX ก็มีแล้ว 6 อัน แต่มันดันเป็นแบบสองสี 74HC595 ก็เลยไม่พอต้องใช้อีก 2-4 ตัวมั้ง ก็เลยเอาซะหน่อยเดี๋ยวเสียของ แต่ว่าลองซิมเอา ทำเป็นไฟวิ่งจากขวามาซ้าย ส่่วนข้อความที่วิ่งก็เป็นชื่อสถาบันของข้าพเจ้า มหาวิทยาลัยเทคโนโลยีราชมงคลอิสาน อิอิ...แอบโฆษณานิดนึง เป็นภาษาไทยนะครับ ก็ทำอยู่สามสี่วันอ่ะครับ และไม่ค่อยว่างด้วยเลยไม่มีโอกาศนำมาลงให้ได้ดูกัน การใช้ไอซีขยายพอร์ตก็ดีนะครับประหยัดดี เพราะตัวนึงก็ตก 3-4 บาทเอง ได้ตั้ง 8 พอร์ต แต่ก็เขียนโปรแกรมยากขึ้นนิดนึง
เอ้าแจกโค๊ดเลยครับ

อ้อ ผมเอาฟังก์ชัน load_reg มาจากในเน็ตนะครับ จำไม่ได้เหมือนกันเอามาจากไหน ขออภัยท่านเจ้าของฟังก์ชันด้วยครับ
/**
#include <16f877a.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)

#define SDATA_PIN PIN_D0 // SER (pin 14 of first 74HC595)
#define SCLK_PIN PIN_D2 // SRCLK (pin 11 of all 74HC595)
#define RCLK_PIN PIN_D1 // RCLK (pin 12 of all 74HC595)

int8 data[5]={0b00000001,0b00000000,0b00000000,0b00000000,0b00000000};
int8 chack_bit=0;
int8 s=0;


const int rmuti1[] = {//rmuti 29*7
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x04,0x02,0x00,0x7E,0x02,0x02,
0x7C,0x02,0x02,0x7C,0x00,0x3E,0x40,0x40,0x40,0x7E,0x00,0x3F,0x42,0x42,0x00,0x7E,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

const int rmuti[] = {//rmuti 192*7
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x7C,0x20,0x7C,0x00,0x04,0x7C,0x20,
0x14,0x7C,0x00,0x04,0x04,0x78,0x01,0x05,0x45,0x7D,0x00,0x04,0x7C,0x20,0x18,0x04,
0x7C,0x00,0x6C,0x54,0x40,0x7C,0x00,0x04,0x04,0x78,0x00,0x00,0x74,0x54,0x24,0x7B,
0x02,0x6D,0x54,0x40,0x7C,0x00,0x00,0x7C,0x40,0x04,0x7C,0x20,0x18,0x04,0x7C,0x00,
0x78,0x14,0x14,0x04,0x78,0x00,0x06,0x05,0x79,0x41,0x04,0x7C,0x40,0x20,0x7C,0x00,
0x06,0x05,0x79,0x41,0x00,0x74,0x54,0x24,0x78,0x00,0x6D,0x55,0x41,0x7D,0x00,0x18,
0x54,0x74,0x00,0x04,0x04,0x78,0x00,0x0C,0x74,0x4C,0x40,0x7C,0x02,0x64,0x7C,0x20,
0x7C,0x00,0x30,0x44,0x7C,0x00,0x78,0x14,0x14,0x04,0x78,0x00,0x00,0x74,0x54,0x24,
0x78,0x00,0x75,0x55,0x45,0x79,0x00,0x00,0x74,0x54,0x2C,0x7E,0x00,0x04,0x04,0x78,
0x00,0x04,0x7C,0x40,0x20,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};

void send_byte(char data);
void load_reg(void);
void ship_bit(int s);
void show();
//================================

void main()
{
while(true)
{
s++;

if(s==1)
{
output_low(PIN_C0);
output_high(PIN_C1);
}
if(s==2)
{
output_high(PIN_C0);
output_low(PIN_C1);
}
if(s==3)
{
output_low(PIN_C0);
output_low(PIN_C1);
s=0;
}

output_low(SDATA_PIN);
output_low(SCLK_PIN);
output_low(RCLK_PIN);
show();

}
}

void show()
{
int8 count=0,count1=0,step=0,C=0;
for(count=0;count<200;count++) count1="0;count1<1;count1++)" c="0;C<=" i =" 0;" chack_bit="=" chack_bit="1;" chack_bit="=1)">
**/

เหนื่อยจัง!! โปรเจคจะสอบ 24 นี้

บทความนี้ไม่มีสาระนะครับ ผ่านเลย แค่มาระบายเท่านั้น
อ่านหนังสือไม่ค่อยจะเข้าหัวเลย ยิ่งอ่านยิ่งมึน ทำไมมานยากจังเรียนหนังสือ คนอื่นเค้าจะเรียนง่ายๆรึเปล่า รึว่าเราโง่ คิดแล้วเศร้า เรียนไปตั้งนานสุดท้ายบางคนก็ไปทำงานที่ไม่เกี่ยวอะไรกับการเรียนเลย คิดแล้วน่าจะมีโรงเรียนที่สอนเฉพาะวิชาที่ต้องใช้เท่านั้นเนาะ เลือกๆไปเลยว่าจบแล้วจะทำงานอะไร จะได้เรียนแต่วิชาที่เกี่ยวข้อง บ่นมานาน(นิดนึง)

วันอาทิตย์ที่ 27 ธันวาคม พ.ศ. 2552

การวาดวงจรประกอบเอกสาร












เนื่องด้วยโปรเจกเป็น LAB ทดลองเลยต้องมีวงจรประะกอบ LAB หาโปรแกรมอยู่หลายตัวก็ไม่ถูกใจซักตัว
โแกรมวาดวงจรนี่หายากเหลือเกิน ก็เลยได้ตัวอย่างมาจาก http://www.thaimicrotron.com/ เห็นแล้วเข้าท่าดี วงจรสวยงามดูง่ายเพราะเขียนเฉพาะขาที่ใช้ทำให้ดูง่าย เหมาะกับที่จะใช้มาทำเป็น LAB ทดลองสำหรับมือใหม่ ก็เลยหาข้อมูล ปรากฏว่าพี่ท่านเอาโปรแกรมที่สุดยอดมากมาทำ ซึ่งก็คือ โปรแกรม Paint ซึ่งเครื่องเกือบทุกเครื่องจะมีอยู่แล้ว เล่นเอางง เพราะต้องเขียนอุปกรณ์เองทั้งหมด แต่ก็ไม่ยอมแพ้ เอาก็เอาวะ เพื่อผู้ใช้บอร์ดทดลองเราจะได้เข้าใจง่ายๆ แต่โปรแกรมนี้ใช้ยากในความคิดผม ผมเลยเอา โปรแกรม Microsoft Office PowerPoint วาดเอาเพราะมีเครื่องมือในการวาดที่ค่อนข้างครบ ดูๆแล้วน่าจะง่ายกว่า และแล้วก็ได้ออกมาดังรูป ขอขอบคุณ http://www.thaimicrotron.com/ ที่นำความรู้ดีๆมาแบ่งปัน

usb to serial (ต่อ)

หลังจากกัดปริ้นแล้ว ก็ทำการบัดกรีอุปกรณ์ บัดกรียากมากเพราะเป็นอุปกรณ์ SMD แถมยังใช้หัวแร้งอีก ไม่มี HOT AIR พอบักกรีเสร็จทำการเสียบ USB ปั๊บ คันออก เหอะๆ ซวยแล้วเรา หลังจากตรวจเช็คก็สรุปได้ว่าใส่ C กลับขั้ว เหตุผลก็คือ ใครจะไปคิดว่า C แบบ SMD ด้านที่มีขีดสีดำจะเป็นขั้วบวก ไอ้เราก็งง ตั้งแต่เกิดมา ขีดดำเป็นลบทั้งนั้น เปลี่ยนเสร็จทดลองเสียบใหม่ ไม่มีควันแล้ว เริ่มดีใจ แต่มันถามหาไฟล์อะไรไม่รู้ ftdiun2k.ini หาในเน็ตก็มีแต่ของต่างประเทศ บอกโหลดฟรีพอคลิ๊กเข้าไปต้อง LOG IN เออมันโกหกหน้าด้านๆ หาไม่ได้เลยหาในเครื่องตัวเองไปเจอที่ C:\WINDOWS\system32 ก็เลยผ่าน จากนั้นทดลอง LOOP BACK ก็ไม่ได้อีก ปัญหาเยอะจริงๆ เลยกลับไปดูลายวงจร งานเข้าอย่างแรง ออกแบบลายวงจรผิดขา แล้วถ้าจะแก้ต้องออกแบบใหม่อีก เพราะมันวิ่งข้ามเส้นไม่ได้ ก็เลยเอาสาย WIRE LAB มาต่อก่อน ทดลอง LOOP BACK ได้แล้ว ดีใจมากๆ เก็บของกลับหอ แต่มันยังไม่จบครับพี่น้อง กลับหอมาด้วยความดีใจ ทดลองต่อไม่ได้ต่อ LOOP BACK ทดลองส่ง อ้าว กลับมาได้ไง มัน LOOP BACK ในตัวมันเองเซ็งมาก เอาเลนส์กล้อง 10X มาส่องดู ดูไปดูมาตั้งนานก็ไม่ได้มีอะไรช๊อต รึว่ามันพังตั้งแต่ควันออก C แล้ว ก็เลยนั่งอ่าน DATASHEET เจอแล้ว ลืมต่อสายอีกเส้น พอต่อเสร็จ ทดลองเสียบ USB ใช้งานได้ โล่งอก สบายแล้ว ได้บทเรียนอันสำคัญไปเยอะเหมือนกัน สุดท้ายนี้ ใครอยากลองทำเองก็ได้นะถ้าคิดว่าตาดีพอ เพราะอุปกรณ์เล็กมากๆ ต้องใช้ PIN SET ช่วยจับ แต่ก็ยังไม่พ้นมือสั่นอีก ลำบากมาก ขอบอก ส่วนรูปเดี๋ยวเอามาลงครับ กล้องอยู่ แต่ MEM ไม่อยู่ 555

วันจันทร์ที่ 21 ธันวาคม พ.ศ. 2552

usb to serial







ออกแบบ usb to serial ตั้งนานตอนนี้ลายปริ้นเสร็จแล้วเหลือทดสอบ เอาไปดูหน้าเดียวก่อนนะครับ เดี๋ยวโดนก๊อบ อิอิ ว่าแต่ใครจะมาก๊อบ !!!! ตัวนี้ไม่มี MAX232 ทำให้สามารถต่อกับ MCU ได้โดยตรงเลย (สบายล่ะซิทีนี้) คิดถึงแต่ก่อนต้องมานั่นต่อ MAX232 เพื่อที่จะ Debug ออกมาดู ทำเสร็จแล้วจะเอามาขายเด้อ อิอิ ไม่แพงหรอกครับ 300-350 นี่ล่ะครับ ดูต้นทุนก่อน แต่คงไม่เกินนี้ ไม่เกิน มกราคมปีหน้่าได้คงได้เห็นกันครับ เรียนจบเดี๋ยวจะออกแบบอุปกรณ์ทำหุ่นยนต์ขายดีกว่า เน้นถูก ดี ทน ซ่อมเองง่าย ก็อบปี้ง่าย 555++ แล้วจะได้ขายรึเปล่านี่ ตอนนี้เหนื่อยกับการสอบมากๆ

วันอาทิตย์ที่ 13 ธันวาคม พ.ศ. 2552

RF TLP/RLP 433 MHz






























ยืมของเค้ามาเล่น 555 สาเหตุที่ห่างหายไปนานไม่ได้มาอัพเดทบล๊อกซักทีเพราะต้องทำโปรเจกจบครับบวกกับเอาเงินไปทำโปรเจกหมด ก็เลย ... อ่ะนะ หลังจากเหนื่อยจากการทำโปรเจกจบซึ่งไม่เสร็จสักที ปัญหามาเรื่อยๆ มันจะมาอะไรกันนักหนา เอ้าเข้าเรื่อง เห็นน้องทดลอง โมดูล RF โดยต่อ Encoder เอาแล้วมันนั่งทำทั้งวันจนสามทุ่ม ก็เลยบอกยืมมาเล่นหน่อย ได้แล้วรีบกลับห้องมาถึงก็เอาบอร์ดทดลอง ที่ทำเป็นโปรเจกมาใช้ เป็นการทดสอบไปในตัว 555 ไอ้เราก็ต่อสายตามดาต้าชีต ไม่ออกแฮะ ต่อไปต่อมา ออกแต่เป็นขยะ เออเอาเข้าไป เลยหาข้อมูลในเน็ตเค้าว่าขยะออกมาเยอะมาก ต้องเขียนส่งค่า 0x55 ก่อน ตามด้วยค่าเช็คอะไรซักอย่าง ค่อยตามด้วยข้อมูล แล้วต่อด้วย Chack Sum ไอ้เราก็ง่วงนอนแล้ว 5 ทุ่ม ก็เลยเอาโค็ด GPS ที่เขียนใว้มาแก้ ไม่ต้องมี Chack Sum หรอกเดี๋ยวไม่ได้นอน ทำไปทำมาเออ เป็นอย่างที่เค้าว่า ใช้ได้ แต่ใช้ baud=1200 มากกว่านั้น ขยะเยอะมากทั้งที่โมดูลบอกได้ถึง 4800 ผมว่าใครจะซื้อมาเล่นก็ได้อยู่แต่เอาจริงๆ จังๆให้ทำงานซักอย่างคงไม่เหมาะ แต่มันก็ขึ้นกับโปรแกรมด้วยนะครับ ผมอาจจะเขียนไม่ดีเอง เอ้ามาดูโค๊ดกันดีกว่า เดี๋ยวจะเบื่อผมซะก่อน เดี๋ยวรูปตามมานะครับ กล้องมีคนเอาไปลืมเอารูปออก

ตัวรับครับ

#include <16f877a.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=1200, xmit=PIN_C6, rcv=PIN_C7,stream=GPS,errors)

#include
#include

char key_char[20];
int8 key_int=999;

void read_key(void);

void read_key(void)
{
char c=0;
char buffer[25];
char k=0;
char sentent[]="RMC";
int8 i=0,j=0,key_count=0;
do
{
while ( fgetc(GPS) != '$' );

for (k=0;k<5;k++) c =" fgetc(GPS);" i="0;i

output_toggle(PIN_D0);
}
}
}

ตัวส่งครับ

#include <16f877a.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=10000000)
#use rs232(baud=1200, xmit=PIN_C6, rcv=PIN_C7)

void main()
{
while (TRUE) {
delay_ms(1000);
printf("%x%x%x%x%x%x$RMC,99,*",0x55,0x55,0x55,0x55,0x55,0x55);
}
}


จากโค๊ดจะเห็นได้ว่าผมส่ง 555555555555$RMC,99,* ออกไป เมื่อตอนรับก็จะเช็ค $ แล้วเช็ค RMC แล้วค่อยเก็บค่า ก็จะได้ ,99, เมื่อเจอ * ก็จะเป็นการสิ้นสุดการรับ จากนั้นก็มาตัดเอาแต่ ตัวที่อยู่ใน ,xx,
ก็จะได้ค่าที่เราส่งไป หลังจานั้นก็จะเอาไปทำอะไรก็แล้วแต่การประยุกต์ครับ

กลับไปทำการบ้านก่อนครับ ช่วงนี้ใกล้สอบด้วย เหนื่อยจริงๆ ไหนจะโปรเจกอีก bye bye

วันอังคารที่ 29 กันยายน พ.ศ. 2552

GPS หยอดเหรียญ ???











































ดองใว้นาน!!! ตัวหยอดเหรียญ ตอนนั้นซื้อมา 20 บาท ที่ตลาดเซพวัน ดองจนลืม วันนี้จับมาปัดฝุ่น เลยเอามาต่อ MCU เล่น แต่ก็คิดไม่ออกว่าจะทำอะไร จึงจับรวมกับ GPS และ จอ 3310 เป็น GPS หยอดเหรียญ
จากรูปที่สอง เป็นรูปที่ยังไม่หยอดเหรียญ เมื่อหยอดแล้วจะได้รูปที่สามครับ พร้อมทั้งนับเวลาถอยหลังเป็นวินาที (บันทัดสุดท้ายของรูปที่สาม) ซึ่งการเช็คหยอดเหรียญนั้น เช็คแบบ Interrupt ทำให้สามารถหยอดเหรียญได้อย่างต่อเนื่อง การนับถอยหลังก็นับเวลาจากฐานเวลา GPS ซึ่งก็เดินตรงดี แถมด้วยเวลา GPS หลุด(จับดาวเทียมไม่ได้)ก็จะหยุดทำการนับเวลาถอยหลังด้วย เมื่อสัญญานมาก็จะทำการนับถอยหลังต่อ ทำให้ผู้ใช้บริการไม่ขาดทุนได้ข้อมูลตามที่จ่ายเงิน ไม่เอาเปรียบผู้บริโภค เอิ๊กๆ ขนาดจำลอง เล่นเอาซะเต็มที่เลย จากการทดลองนี้ทำให้ข้าพเจ้า ได้ศึกษาและเรียนรู้การติดต่อเครื่องหยอดเหรียญกับไมโครคอนโทรลเลอร์ ( หลอกเครื่องหยอดเหรียญไม่ได้ ) มันมีวงจรเช็คน้ำหนักแบบไม่ต้องช่างน้ำหนักได้ด้วย เก่งจริงๆ ขนาดรุ่นเก่านะนี่ ถ้ารุ่นใหม่ หมดสิทธิหลอกเครื่องแน่นอน

โค๊ดครับ
#include <18f452.h>
#include
#use delay(clock=30000000)
#fuses HS,NOPROTECT,NOWDT,NOBROWNOUT
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=GPS,stream=HOSTPC,stream=B,errors)

#include
#include
#include


#define nok_sclk PIN_B6
#define nok_sda PIN_B5
#define nok_dc PIN_B4
#define nok_cs PIN_B3
#define nok_res PIN_B2

//char image[];

char timei[10],lati[15],loni[15],speedi[10],dayi[10];
float time,lat,lon,speed,day;
float lat1,lat2,lat3,lon1,lon2,lon3,time0,time1,time2,time3,day0,day1,day2;
float t1,t2,t3,d1,d2,d3;

char char_row,charsel,charpos,chardata; // for nokia_3310 lcd
int16 ddram;
int32 plot_value32;
int32 plot_umsb,plot_lmsb,plot_ulsb,plot_llsb;

int16 nub=0;
#INT_EXT
void EXT_ISR(void)
{
delay_us(200);
nub=nub+60;
}

BYTE const TABLE5[240]=
{0x00,0x00,0x00,0x00,0x00, // 20 space ASCII table for NOKIA LCD: 96 rows * 5 bytes= 480 bytes
0x00,0x00,0x5f,0x00,0x00, // 21 !
0x00,0x07,0x00,0x07,0x00, // 22 "
0x14,0x7f,0x14,0x7f,0x14, // 23 #
0x24,0x2a,0x7f,0x2a,0x12, // 24 $
0x23,0x13,0x08,0x64,0x62, // 25 %
0x36,0x49,0x55,0x22,0x50, // 26 &
0x00,0x05,0x03,0x00,0x00, // 27 '
0x00,0x1c,0x22,0x41,0x00, // 28 (
0x00,0x41,0x22,0x1c,0x00, // 29 )
0x14,0x08,0x3e,0x08,0x14, // 2a *
0x08,0x08,0x3e,0x08,0x08, // 2b +
0x00,0x50,0x30,0x00,0x00, // 2c ,
0x08,0x08,0x08,0x08,0x08, // 2d -
0x00,0x60,0x60,0x00,0x00, // 2e .
0x20,0x10,0x08,0x04,0x02, // 2f /
0x3e,0x51,0x49,0x45,0x3e, // 30 0
0x00,0x42,0x7f,0x40,0x00, // 31 1
0x42,0x61,0x51,0x49,0x46, // 32 2
0x21,0x41,0x45,0x4b,0x31, // 33 3
0x18,0x14,0x12,0x7f,0x10, // 34 4
0x27,0x45,0x45,0x45,0x39, // 35 5
0x3c,0x4a,0x49,0x49,0x30, // 36 6
0x01,0x71,0x09,0x05,0x03, // 37 7
0x36,0x49,0x49,0x49,0x36, // 38 8
0x06,0x49,0x49,0x29,0x1e, // 39 9
0x00,0x36,0x36,0x00,0x00, // 3a :
0x00,0x56,0x36,0x00,0x00, // 3b ;
0x08,0x14,0x22,0x41,0x00, // 3c < 3d =" 0x00,0x41,0x22,0x14,0x08,">
0x02,0x01,0x51,0x09,0x06, // 3f ?
0x32,0x49,0x79,0x41,0x3e, // 40 @
0x7e,0x11,0x11,0x11,0x7e, // 41 A
0x7f,0x49,0x49,0x49,0x36, // 42 B
0x3e,0x41,0x41,0x41,0x22, // 43 C
0x7f,0x41,0x41,0x22,0x1c, // 44 D
0x7f,0x49,0x49,0x49,0x41, // 45 E
0x7f,0x09,0x09,0x09,0x01, // 46 F
0x3e,0x41,0x49,0x49,0x7a, // 47 G
0x7f,0x08,0x08,0x08,0x7f, // 48 H
0x00,0x41,0x7f,0x41,0x00, // 49 I
0x20,0x40,0x41,0x3f,0x01, // 4a J
0x7f,0x08,0x14,0x22,0x41, // 4b K
0x7f,0x40,0x40,0x40,0x40, // 4c L
0x7f,0x02,0x0c,0x02,0x7f, // 4d M
0x7f,0x04,0x08,0x10,0x7f, // 4e N
0x3e,0x41,0x41,0x41,0x3e // 4f O 48
};

BYTE const TABLE6[245]=
{0x7f,0x09,0x09,0x09,0x06, // 50 P
0x3e,0x41,0x51,0x21,0x5e, // 51 Q
0x7f,0x09,0x19,0x29,0x46, // 52 R
0x46,0x49,0x49,0x49,0x31, // 53 S
0x01,0x01,0x7f,0x01,0x01, // 54 T
0x3f,0x40,0x40,0x40,0x3f, // 55 U
0x1f,0x20,0x40,0x20,0x1f, // 56 V
0x3f,0x40,0x38,0x40,0x3f, // 57 W
0x63,0x14,0x08,0x14,0x63, // 58 X
0x07,0x08,0x70,0x08,0x07, // 59 Y
0x61,0x51,0x49,0x45,0x43, // 5a Z
0x00,0x7f,0x41,0x41,0x00, // 5b [
0x02,0x04,0x08,0x10,0x20, // 5c
0x00,0x41,0x41,0x7f,0x00, // 5d
0x04,0x02,0x01,0x02,0x04, // 5e
0x40,0x40,0x40,0x40,0x40, // 5f
0x00,0x01,0x02,0x04,0x00, // 60
0x20,0x54,0x54,0x54,0x78, // 61 a
0x7f,0x48,0x44,0x44,0x38, // 62 b
0x38,0x44,0x44,0x44,0x20, // 63 c
0x38,0x44,0x44,0x48,0x7f, // 64 d
0x38,0x54,0x54,0x54,0x18, // 65 e
0x08,0x7e,0x09,0x01,0x02, // 66 f
0x0c,0x52,0x52,0x52,0x3e, // 67 g
0x7f,0x08,0x04,0x04,0x78, // 68 h
0x00,0x44,0x7d,0x40,0x00, // 69 i
0x20,0x40,0x44,0x3d,0x00, // 6a j
0x7f,0x10,0x28,0x44,0x00, // 6b k
0x00,0x41,0x7f,0x40,0x00, // 6c l
0x7c,0x04,0x18,0x04,0x78, // 6d m
0x7c,0x08,0x04,0x04,0x78, // 6e n
0x38,0x44,0x44,0x44,0x38, // 6f o
0x7c,0x14,0x14,0x14,0x08, // 70 p
0x08,0x14,0x14,0x18,0x7c, // 71 q
0x7c,0x08,0x04,0x04,0x08, // 72 r
0x48,0x54,0x54,0x54,0x20, // 73 s
0x04,0x3f,0x44,0x40,0x20, // 74 t
0x3c,0x40,0x40,0x20,0x7c, // 75 u
0x1c,0x20,0x40,0x20,0x1c, // 76 v
0x3c,0x40,0x30,0x40,0x3c, // 77 w
0x44,0x28,0x10,0x28,0x44, // 78 x
0x0c,0x50,0x50,0x50,0x3c, // 79 y
0x44,0x64,0x54,0x4c,0x44, // 7a z
0x00,0x08,0x36,0x41,0x00, // 7b
0x00,0x00,0x7f,0x00,0x00, // 7c
0x00,0x41,0x36,0x08,0x00, // 7d
0x10,0x08,0x08,0x10,0x08, // 7e
0x78,0x46,0x41,0x46,0x78 // 7f
};



//
void readMessage();
void convert();
void nokia_init(void);
void nokia_write_command(char bytefornokia_command);
void nokia_write_data(char bytefornokia_data);
void nokia_write_dorc(char bytefornokia);
void nokia_gotoxy(int8 xnokia, int8 ynokia);
void nokia_erase_y(int8 ynokia);
void nokia_erase_x(int8 xnokia);
void nokia_printchar(int8 cvar);
void nokia_clean_ddram(void);
void table_to_nokialcd(void);
void nokia_plot(int8 xnokia,int8 plot_value8);
void nokia_write_data_inv(char bytefornokia_data_inv);
void nokia_clear_screen(void);
void nokia_clear_xy(int8 xnokia, int8 ynokia);
void nokia_print_uparrow(void);
void nokia_print_downarrow(void);
void nokia_print_leftarrow(void);
void nokia_print_rightarrow(void);
void nokia_print_degree(void);
void nokia_print_lowbatdegree(void);
void lcd_wrimg(char image[],unsigned char x1,y1);
void Init_MCU(void);

void lcd_wrimg(char image[],unsigned char x1,y1)
{
int tablept = 0;
unsigned char y=0,x=0,pix=0,x2=0,y2=0;

x2 = image[tablept];
tablept++;
y2 = image[tablept];
tablept++;
for (y=y1;y<(y1+y2);y++) // Draw the columns to print the character. { nokia_gotoxy(x1,y); for (x=0;x0;ddram--){nokia_write_data(0x00);}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void nokia_write_command(char bytefornokia_command)
{
output_low(nok_dc); // byte is a command it is read with the eight SCLK pulse
output_low(nok_cs); // chip enabled
nokia_write_dorc(bytefornokia_command);
output_high(nok_cs); // chip disabled
}
/////////////////////////////////////////////////////////////////////////////////
void nokia_write_data(char bytefornokia_data)
{
output_high(nok_dc);
output_low(nok_cs); // chip enabled
nokia_write_dorc(bytefornokia_data);
output_high(nok_cs); // chip disabled
}
//////////////////////////////////////////////////////////////////////////////////
void nokia_write_dorc(char bytefornokia) // serial write data or command subroutine
{
char caa;
for (caa=8;caa>0;caa--) {
output_low(nok_sclk);
// delay_us(2);
if ((bytefornokia&0x80)==0x00){output_low(nok_sda);}
else {output_high(nok_sda);}
output_high(nok_sclk);
bytefornokia=bytefornokia<<1; column="0;column!=" charsel="cvar;">0xD2)return;

for (char_row=0;char_row<5;char_row++) charpos="(((charsel&0xff)-0x20)*5);chardata=">0x4f){charpos=(((charsel&0xff)-0x50)*5);chardata=TABLE6[(charpos+char_row)];} // use TABLE6
nokia_write_data(chardata); // send data to nokia
}
nokia_write_data(0x00); // 1 byte (always blank)
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void nokia_plot(int8 xnokia,int8 plot_value8)
{
char i;
plot_value32=0;
// plot_value32=1; // unremark this if you want dotgraph instead of bargraph

for (i=0;i!=plot_value8;i++){

plot_value32=1; // remark this if you want dotgraph instead of bargraph
plot_value32<<=1; } plot_value32=2; // bottom line is always filled plot_llsb=(plot_value32&0xff); plot_ulsb=((plot_value32>>8)&0xff);
plot_lmsb=((plot_value32>>16)&0xff);
plot_umsb=((plot_value32>>24)&0xff);

nokia_gotoxy(xnokia,1);
nokia_write_data_inv(plot_umsb);

nokia_gotoxy(xnokia,2);
nokia_write_data_inv(plot_lmsb);

nokia_gotoxy(xnokia,3);
nokia_write_data_inv(plot_ulsb);

nokia_gotoxy(xnokia,4);
nokia_write_data_inv(plot_llsb);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void nokia_write_data_inv(char bytefornokia_data_inv)
{
char caa;
output_high(nok_dc);
output_low(nok_cs); // chip enabled
for (caa=8;caa>0;caa--) {
output_low(nok_sclk);
delay_us(2);
if ((bytefornokia_data_inv&0x01)==0){output_low(nok_sda);}
else {output_high(nok_sda);}
output_high(nok_sclk);
bytefornokia_data_inv=bytefornokia_data_inv>>1;
}
output_high(nok_cs); // chip disabled
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void nokia_clear_screen(void)
{
nokia_erase_y(0);
nokia_erase_y(1);
nokia_erase_y(2);
nokia_erase_y(3);
nokia_erase_y(4);
nokia_erase_y(5);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void nokia_clear_xy(int8 xnokia, int8 ynokia)
{
nokia_gotoxy(xnokia,ynokia);
nokia_printchar(" ");
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void nokia_print_uparrow(void)
{
nokia_write_data(0x04);
nokia_write_data(0x02);
nokia_write_data(0x7f);
nokia_write_data(0x02);
nokia_write_data(0x04);
nokia_write_data(0x00);
}
//
void nokia_print_downarrow(void)
{
nokia_write_data(0x10);
nokia_write_data(0x20);
nokia_write_data(0x7f);
nokia_write_data(0x20);
nokia_write_data(0x10);
nokia_write_data(0x00);
}
//
void nokia_print_leftarrow(void)
{
nokia_write_data(0x08);
nokia_write_data(0x1c);
nokia_write_data(0x2a);
nokia_write_data(0x08);
nokia_write_data(0x08);
nokia_write_data(0xf8);
}
//
void nokia_print_rightarrow(void)
{
nokia_write_data(0x08);
nokia_write_data(0x08);
nokia_write_data(0x2a);
nokia_write_data(0x1c);
nokia_write_data(0x08);
nokia_write_data(0x00);
}
//
void nokia_print_degree(void)
{
nokia_write_data(0x00);
nokia_write_data(0x06);
nokia_write_data(0x09);
nokia_write_data(0x09);
nokia_write_data(0x06);
nokia_write_data(0x00);
}
//
void nokia_print_lowbatdegree(void)
{
nokia_write_data(0x00);
nokia_write_data(0x06);
nokia_write_data(0x0f);
nokia_write_data(0x0f);
nokia_write_data(0x06);
nokia_write_data(0x00);
}
//////////////////////////////////////////////////////////////////////////////
void readMessage()
{
char c;
char buffer[80];
char k;
char sentent[]="GPRMC";
int16 i,j=0,time_count=0,lat_count=0,lon_count=0,speed_count=0,day_count=0;
do
{
for(i=0;i<15;i++) k="0;k<5;k++)" c="0;" c =" fgetc(GPS);" i="0;i
{
if (buffer[i]==','){j++;}
if (j==1)
{
timei[time_count++]=buffer[i+1];
}
if (j==3)
{
lati[lat_count++]=buffer[i+1];
}
if (j==5)
{
loni[lon_count++]=buffer[i+1];
}
if (j==7)
{
speedi[speed_count++]=buffer[i+1];
}
if (j==9)
{
dayi[day_count++]=buffer[i+1];
}
}
time = atof(timei);
lat = atof(lati);
lon = atof(loni);
speed = atof(speedi);
day = atof(dayi);
}
//////////////////////////////////////////////////////////////////////////////
void convert(void)
{

day0=day*0.0001;
day1=fmod(day0,1);
day2=day0-day1;
///////////////////
d1=day2;
///////////////////
day0=day1*100;
day1=fmod(day0,1);
day2=day0-day1;
///////////////////
d2=day2;
///////////////////
day2=day1*100;
///////////////////
d3=day2;
///////////////////



time0=time*0.0001;
time1=fmod(time0,1);
time2=time0-time1;
if(time2<=17) { time2=time2+7; } else { time2=(17-time2)*-1; } time3=(time2+time1)*10000; /////////////////// t1=time2; /////////////////// time0=time1*100; time1=fmod(time0,1); time2=time0-time1; /////////////////// t2=time2; /////////////////// time2=time1*100; /////////////////// t3=time2; /////////////////// lat=lat/100; lat1=fmod(lat,1); lat2=lat-lat1; lat1=(lat1/60)*100; lat3=lat1+lat2; lon=lon/100; lon1=fmod(lon,1); lon2=lon-lon1; lon1=(lon1/60)*100; lon3=lon1+lon2; } ////////////////////////////////////////////////////////////////////////////// void Init_MCU(void) { enable_interrupts(GLOBAL); enable_interrupts(INT_EXT); ext_int_edge(H_TO_L); } ////////////////////////////////////////////////////////////////////////////// void main() { nokia_init(); Init_MCU(); while(true) { if(nub!=0) { readMessage(); convert(); nokia_clear_screen(); nokia_gotoxy(0,0); printf(nokia_printchar,"DAY : %02.0f:%02.0f:%02.0f",d1,d2,d3); nokia_gotoxy(0,1); printf(nokia_printchar,"T : %02.0f:%02.0f:%02.0f",t1,t2,t3); nokia_gotoxy(0,2); printf(nokia_printchar,"LAT : %4.5f",lat3); nokia_gotoxy(0,3); printf(nokia_printchar,"LON :%4.5f",lon3); nokia_gotoxy(0,4); printf(nokia_printchar,"SP : %3.0f",speed); nokia_gotoxy(0,5); //printf(nokia_printchar," BY NONT_PEET "); printf(nokia_printchar," %lu S ",nub); delay_ms(100); nub--; } else { output_toggle(pin_c2); nokia_clear_screen(); nokia_gotoxy(0,0); printf(nokia_printchar," R "); nokia_gotoxy(0,1); printf(nokia_printchar," M "); nokia_gotoxy(0,2); printf(nokia_printchar," U "); nokia_gotoxy(0,3); printf(nokia_printchar," T "); nokia_gotoxy(0,4); printf(nokia_printchar," I "); lcd_wrimg(aa,15,1); delay_ms(100); } } }

LCD 3310 (ต่อ)(อีก)















ครั้งก่อนทำรูปไม่ได้ แต่วันนี้ทำได้ แต่โค๊ดก็ยังแปลกๆ ยังงงอยู่ เพราะนอนดึกรึเปล่า!!! ตอนนี้ก็ ตี1 แล้ว
แอบติดชื่อมหาลัยด้วย อิอิ... เล่นไปเล่นมาเกิดอยากเล่นจอสีแล้ว แต่ก็รอของอีกตามเคย ทำไมโคราชไม่มีบ้านหม้อบ้างนะ จะได้สบายก็เค้าหน่อย แอบบ่นนิด