วันอังคารที่ 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 นี้

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