Monday, November 24, 2008

Technique สลับตำแหน่ง Title จากผลการค้น Google

ไปเจอมา เจ๋งดี รายละเอียดอยู่ที่ How to Swap your Blogger (Blogspot ) blog Title ? น่าจะมีประโยชน์สำหรับให้คนเข้า blog จากการ Google มากขึ้น

คุณแม่ไม่เป็นอะไรมาก

จากโพสต์ อาการเส้นเลือดตีบในสมอง เมื่อวันที่ 10 เดือนตุลาคม 2551 ได้ผลการทำ MRI มาตั้งนานแล้ว ไม่เป็นอะไรมาก ไม่ได้เป็น alzheimer ไม่ได้อุดตัน มีเส้นเลือดในสมองบางเส้นตีบแต่ยังไม่ถึงกับตัน ใช้ยา แอสไพริน ก็บรรเทาอาการได้ โล่งใจมากๆ อาการอย่างอื่นแข็งแรงดีมาก

Friday, November 14, 2008

วงจรจับเวลา 99 วินาที ใช้ Microcontroller

โดยส่วนตัวชอบนาฬิกาที่จับเวลาได้เป็นหลักอยู่แล้ว นาฬิกาที่สะสมส่วนมากจะเป็นนาฬิกาแบบนี้ พอดีเขียน Blog ที่วิชาการ.คอมเกี่ยวกับวิธีทำนาฬิกา ซึ่งได้ยกวงจรจับเวลา 99 วินาทีนี้เป็นตัวอย่างในการทำความเข้าใจ ซึ่ง จุดเด่นของวงจรนี้คือ ไม่มีปุ่มกดจับเวลา หรือว่า หยุดจับเวลา และก็ไม่มีปุ่ม Reset อิ อิ :)
วงจรเป็นดังรูปข้างล่างนี้
99 Second Timer Counter Chronograph

ส่วนโปรแกรมที่เป็นภาษาซี เขียนด้วย MikroC ก็เป็นดังข้างล่างนี้ครับ
//PIC16F627A
//4MHz Internal OSC
// Two Digit Counter
// 13/11/2008
// Punkky@gmail.com
#define Digit1 PORTA.F0
#define Digit2 PORTA.F1

unsigned short tick;
unsigned short x1;
unsigned short x2;
void interrupt () //Interrupt จะถูกเรียกทุกครั้งที่ Timer1 เกิดการ Overflow นั่นคือจะถูกเรียกทุกวินาทีนั่นเอง

        PIR1.TMR1IF = 0;        // clears TMR1IF
        TMR1H = 0x80//ตั้งค่าเริ่มต้นของ Timer1 เป็น 0x8000 โดยตั้งเฉพาะสองบิตแรก
        tick = 1; //tick เป็น 1 ทุก 1 วินาที
}

void main(){ 
  CMCON = 0x07;   //Digital I/O for PORTA
  TRISA = 0x00;
  PORTA = 0x00;
  TRISB = 0x00;
  PORTB = 0x00
  T1CON = 0x0F
         
  // Prescaler 1:1   external clock 
  PIE1.TMR1IE = 1;  // enable interupt to start the clock 
  INTCON = 0xC0;   // Set GIE, PEIE 
  TMR1L = 0x00
  TMR1H = 0x80
  PCON.OSCF = 1//Internal Clock 4MHz 
  x1 = 0; //หลักสิบของวินาที 
  x2 = 0//หลักหน่วยของวินาที
  tick = 0;

  while(1){
    if(tick){ //เมื่อเวลาผ่านไป 1 วินาที ค่า tick จะเป็น 1
       tick = 0;
       x2++; //เพิ่มหลักหน่วยของวินาทีขึ้น 1
       if(x2>9){ //ถ้าหลักหน่วยมากกว่า เก้า ก็ให้เซ็ตเป็น ศูนย์ และนับหลักสิบขึ้น 1
          x2 =0;
          x1++;
          if(x1>9){ //ถ้าหลักสิบมากกว่า เก้า ก็ให้เซ็ตเป็น ศูนย์ เพื่อกลับไปนับจาก 00 ใหม่
             x1 = 0;
          }
          PORTB = x1; //นำค่าของหลักสิบไปแสดงผล
          Digit1 = 1; //สั่งให้ CD4543 นำข้อมูลจาก PORTB ไปแสดงบน 7-Segment
          Digit1 = 0; //สั่งให้ CD4543 คงค่าของตัวเลขไว้ โดยไม่ต้องสนใจค่าของ PORTB อีก
       }
       PORTB = x2; //นำค่าของหลักหน่วยไปแสดงผล
       Digit2 = 1; //สั่งให้ CD4543 นำข้อมูลจาก PORTB ไปแสดงบน 7-Segment
       Digit2 = 0; //สั่งให้ CD4543 คงค่าของตัวเลขไว้ โดยไม่ต้องสนใจค่าของ PORTB อีก
   }
  }
}


จำลองการทำงานด้วย Proteus ได้ตามภาพข้างล่าง
Simulation of 99 second counter timer

Saturday, November 08, 2008

ทำนาฬิกา Digital เล่นๆ (นาฬิกาจริงๆ ไม่ใช่ Flash)

ไปเขียนวิธีทำนาฬิกา Digital เอาไว้ที่
นาฬิกา Digital ทำเองได้ ยังไม่เสร็จ เอามาแปะไว้ก่อน :)

รูปหน้านาฬิกาที่จะทำก็ประมาณนี้
นาฬิกา Digital ทำเอง