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 - JENG

#21
Projects / Arduino Clock
March 27, 2014, 09:52:15 PM
source กากๆเลยไม่อยากวาง ใครสนใจขอได้ทาง pm คับ :)  #edit ขอ code กันมาเยอะเอามาแปะให้ด้านล่างแล้วคับ ถูกใจกด like ใต้ภาพ avata ด้วยคับ ;D

http://www.youtube.com/v/PJHyPlNTOEM

function ของปุ่ม ใน v1


function ของปุ่ม ใน v2



วงจรเอาไว้อ้างอิงกับ Arduino รุ่นอื่นๆ



ขอ code กันมาเยอะเอามาแปะให้แล้วคับ ถูกใจกด like ใต้ภาพ avata ด้วยคับ  ;D

Download Arduino Clock 1.0
Download Arduino Clock 2.0
#23
ZyXEL NBG-416N Wireless N Router อุปกรณ์ครบ เหลือประกัน 11 เดือน ราคา 550 พร้อมส่ง EMS ***ปิดการขาย***











#24
Other MCUs / ลองเล่น stm8
October 19, 2013, 07:08:37 PM

Blink LED on PF4






/*
Program         :Blink LED on PF4
Author          :Somlak Mangnimit
Date            :19/10/2013
Device          :stm8s103k3
Compiler        :IAR V1.41
*/


#include <iostm8s103k3.h>


//--------------------
//delay
//--------------------
void delay_us(unsigned int x){
 
  x *= 3;
  while(x--);
 
}


//--------------------
//delay
//--------------------
void delay_ms(unsigned int x){
 
  while(x--){
    delay_us(1000);
  }
 
}


//--------------------
//main
//--------------------
void main(void){
 
  PF_DDR_DDR4 = 1;      //output
  PF_CR1_C14 = 1;       //push-pull
  PF_CR2_C24 = 1;       //output speed up 10mhz
 
  CLK_CKDIVR = 0x00;    //1
 
  for(;{
   
    PF_ODR_ODR4 = 1;
    delay_ms(500);
    PF_ODR_ODR4 = 0;
    delay_ms(500);
   
  }
 
}
#26
CHUDUINO by Chusak Phiuondee Chusak Chai Phiuondee เอามาให้ดูกันเล่นๆครับ ผลงานของป๋าชูเรานั่นเอง จากที่เคยทำ chuprog-stk500 อันโด่งดัง ตอนนี้มาปัญใจให้กับ duino อีก โดย chuduino ตัวนี้มีความพิเศษตรงที่ สามารถเป็น programmer ได้ด้วย คือ stk-500v2 โหมด isp นั่นเอง เลยทำให้บอร์ดสามารถทำ self programming boot-loader ได้ อันนี้แจ่มสุดๆ ซื้อ duino เหมือนได้ programmer แถมมาด้วย โดยเจ้า stk-500v2 ยังสามารถนำไปใช้ได้บน avrstudio ได้อีก เรียกได้ว่าข้ามขีดจำกัดเดิมๆไปได้อีกขั้นเลยทีเดียว โดยเลือกได้ว่าจะพัฒนาแบบ arduino ผ่าน bootload หรือแบบไม่ผ่าน bootload แบบ avrstudio สนใจก็ติดต่อกันได้ครับ ตัวนี้เป้น limited edition ด้วย ... ขอบคุณป๋าชูสำหรับบอร์ดดีๆที่ส่งมาให้ review ครับ ... (^^)


ส่วนประกอบหลักๆ เหมือน arduino ทั่วไป ที่ดีกว่าก็น่าจะเป็น ไฟ 3.3v มาจาก reg. ยังไงก็ได้ 80mA แน่ๆ



อันนี้ด้านล่าง pcb สีดำดุดันดี เพิ่งลงอ่างทินเนอร์ สีไม่หลุดไม่จาง คุณภาพงานถือว่าดีใช้ได้ทีเดียว



ยังมั่วๆบ้าง ไม่รุ้เอาวงจรไปเก็บไว้ไหน หาไม่เจอ แต่คร่าวๆน่าจะเป็นแบบนี้แหละ


#27
Projects / Temp Controller v 1.0
September 06, 2013, 01:20:08 PM
นานแล้วกับโปรเจคนี้ เอามาให้ลองทำกันสนุกๆครับ


http://www.youtube.com/v/-kAjhuePsG8


ขอบคุณทุกๆกำลังใจทุกๆ like ครับ :)

Download Firmware + PCB

Source
Download
#28
อั๊บเกรต Arduino pro mini 5v ด้วย UNO Bootloader

!!!คำเตือน!!! โปรดทำตามขั้นตอนต่างๆด้วยความระมัดระวัง เพื่อป้องกันความเสียหาย

--Arduino pro mini 5v--
maximum code size 30720
baudrate 57600

--Arduino UNO--
maximum code size 32256
baudrate 115200

ความต่างที่เห็นได้ชัดคือ UNO Bootloader จะมี boot size เพียง 512k
ทำให้มีพื้นที่เหลือไว้ใช้งานมากกว่าเกือบ2k ต่างจาก Arduino pro mini
ที่มีขนาด boot size ใหญ่ 2k (จริงๆไม่เต็มดีแต่เกือบๆ)
และ speed baudrate  UNO Bootloader ยังสูงกว่า ทำให้ flash code
หรือการ upload เป็นไปอย่างรวดเร็ว

1.เตรียมอุปกรณ์
1.1 Arduino UNO Compatible
1.2 Arduino pro mini 5v
1.3 FTDI USB-Serial bridge
1.4 Jumper Wire
bread board, pc+arduino ide, usb-cable



2.ทำการ Upload firmware ArduinoISP ลงบอร์ด
เปิด arduino ide
2.1 Tools >> Board >> Arduino UNO
2.2 Tools >> Serial Port >> COM X **เลือกให้ตรงกับ UNO Board**
2.3 File >> Examples >> ArduinoISP
2.4 Upload



3.ต่อสายระหว่าง Arduino UNO กับ Arduino pro mini 5v ตามนี้
Arduino UNO               Arduino pro mini 5v
digital 10 ------------->>> RST
digital 11 ------------->>> digital 11
digital 12 ------------->>> digital 12
digital 13 ------------->>> digital 13
5V          ------------->>> 5V
GND       ------------->>> GND

3.1 Tools >> Programmer >> Arduino as ISP
3.2 Tools >> Burn Bootloader
รอๆๆ จนกว่าจะขึ้น Done burning bootloader



4.ทดสอบ
เสียบ FTDI USB-Serial bridge ลง driver ให้เรียบร้อย
4.1 Tools >> Board >> Arduino UNO
4.2 Tools >> Serial Port >> COM X **เลือกให้ตรงกับ FTDI USB-Serial bridge**
4.3 Examples >> 01.Basics >> Blink
4.4 Upload

#29
Projects / Dotmatrix 32x16 GLED-display
August 30, 2013, 09:45:16 AM
ในที่สุด .... ก็รองรับ font nokia 5110 ผลพลอยได้ก็เลยเป็นอย่างที่เห็น คือกลายเป็น GLED โดยไม่ตั้งใจ (*o*)




อีกซักรูปให้ admin  ;D


code ยังไม่ค่อยสมบูรณ์แต่เอาไปลองกันได้ ถือเป็น idea ต่อยอดแล้วกัน ^^

arduino source code + software FastLCD
Download
#30
Projects / matrix-keypad to ad-keypad adaptor
August 09, 2013, 09:17:37 PM






/*
Program   :AD Keypad adaptor test
Author    :Somlak Mangnimit (JENG)
Date      :09/08/2013
MCU       :ATmega8 @16Mhz
Board     :Arduino S3v3
Soft      :Arduino IDE v1.0.5

more info. please visit www.electoday.com
*/

uint8_t  key_tab[]= {"123456789*0#"};
uint16_t  adc_key_val[] ={1000, 750, 600, 500, 420, 370, 320, 290, 260, 240, 220, 200};

#define NUM_KEYS    12
#define NO_KEY      255

int adc_key_in,key,oldkey;

//-------------------------------------
//
//-------------------------------------
void setup(){
 
  Serial.begin(9600);
 
  Serial.println("ADC key testing");
 
}

//-------------------------------------
//
//-------------------------------------
void loop(){
 
  adc_key_in = analogRead(0);       // read the value from the sensor
 
  key = get_key(adc_key_in);        // convert into key press

  if (key != oldkey){               // if keypress is detected
 
    delay(50);                      // wait for debounce time
   
    adc_key_in = analogRead(0);     // read the value from the sensor
   
    key = get_key(adc_key_in);      // convert into key press
   
    if (key != oldkey){
     
      oldkey = key;
     
      if (key != NO_KEY){
       
           Serial.write(key);
           
      }
     
    }
   
  }

}

//-------------------------------------
// Convert ADC value to key number
//-------------------------------------
uint8_t get_key(uint16_t input){

uint8_t k;

    for(k = 0; k < NUM_KEYS; k++){

        if(input > (adc_key_val[k])){

            k = (key_tab[k]);

            return k;

        }

    }

    if(k >= NUM_KEYS)k = 255;

    return k;

}
#31
Projects / Demo project (16F887)
July 09, 2013, 12:16:31 PM
LM35 Temperature Sensors (PIC16F887)

http://www.youtube.com/v/9ON2-KuZx8w

ปรับ Vref+ (RA4)ให้ได้ 1 โวลท์นะครับ output ของ lm35 อยู่ในระดับ 10mv/c
เช่นวัดได้ 0.317 โวลท์ แปลงเป็นอุณหภูมิได้ 31.7C เป็นต้น
การเปลี่ยนแปลงไวกว่า DS1820 ใช้วัดอุณหภูมิในบรรยากาศ
ได้เป็นอย่างดี code ไม่ได้ optimize นะครับเขียนแบบด้นสด

edit1. การปรับแต่งหา digital meter ตั้งย่านวัดไม่เกิน 2volt วัดขา Vout
ของ LM35 แล้วปรับ Vref+ (RA4) ให้ค่าที่แสดงใน7segmentตรงกับมิเตอร์เป็นอันใช้ได้

http://www.4shared.com/rar/PuF3enX6/LM35.html


One Button Control 4 Relay (PIC16F887)

อธิบายหน่อยนึง โปรแกรมเป็น state machine ครับ
เน้นการตอบสนองที่ราบรื่น

http://www.youtube.com/v/Ar-WbSZG3rk

การควบคุมจะเป็นแบบ toggle
กด 1 ครั้ง toggle channel 1
กด 2 ครั้ง toggle channel 2
กด 3 ครั้ง toggle channel 3
กด 4 ครั้ง toggle channel 4
กดค้าง ปิดทุก channel

การกดทุกๆหนึ่งครั้งจะทำให้ COUNT+1 และ TIMERCNT จะเป็น 0
ซึ่ง TIMERCNT จะเป็นเวลาหน่วงก่อน Execute คำสั่งตามค่าของ
COUNT. ซึ่งผมตั้งไว้ที่ 500ms. การกดเพื่อควบคุม แต่ละ channel
ช่วงการกดจะต้องไม่เกิน 500ms ในแต่ล่ะช่วง

หากกดค้างไว้ไม่ว่าในช่วงใดๆก็ตามจะปิดทุก channel

ส่วนในเรื่อง Beep sound
จากการทดลอง หาก Gen. เสียงโดย toggle pin มันจะมี
ปัญหาเรื่องการตอบสนองตอนกดปุ่มซึ่งต้องไปหยุดอยู่ที่
Sound Gen. routine มันเลยสะดุดๆ ผมเลย Gen. จาก PWM
แทน ซึ่ง work มากๆ

http://www.4shared.com/rar/iDzOOF9J/OneButton_withBeep.html


Control Servo motor (PIC16F887)

มาเล่น servo motor กันมั่ง

http://www.youtube.com/v/xnzf6ghAkKI

หลักการไม่มีอะไรมากครับ เอา timer 2 ตัวมาทำ โดยใช้ timer1 ทำฐานเวลา
ที่ 20 ms เพื่อ set port ทุกๆ 20ms และใช้ timer0 เป็นตัว clr port ตาม
เวลาที่กำหนด ตัวแปรการปรับมุมได้จากการอ่านค่าจาก ADC ความละเอียด
ที่ทำได้ อยูที่ 143 step

โดยอันดับแรกเมื่อ timer1 เกิด interrupt จะ set servo pin และ reload
ค่า duty ลง timer0 พร้อมกับ enable interrupt ของ timer0 เมื่อ timer0
over flow ก็จะเกิด interrupt ไป clear servo pin และปิด interrupt
ของตัว timer0 เอง เป็นโปรแกรมง่ายๆลองเอาไปต่อยอดกัน

ปล. servo ที่ผมใช้ค่าเวลากว้าง ถ้าใช้กับยี่ห้ออื่นให้ปรับที่ servo_min
กับ servo_max เอาครับ

http://www.4shared.com/rar/f7Xwjfj8/SERVO_MOTOR.html
#32
อาการเสียงมันยืดๆครับแต่ระดับคีย์เพลงปรกติใครเคยเจอมั่ง นั่งปรับ spi speed ก็ไม่หาย และไม่น่าจะเกี่ยวกัน หรือว่ามันจะใกล้จะเน่า
เพิ่งจะเคยใช้ครั้งแรกเลย มึน....
#33
Projects / MAX7219 Clock (WinAVR)
May 09, 2013, 03:22:16 PM
ว่างๆเลยจับมารวมกัน ครับ แสดงเวลาสลับกับวันเดือนปี ง่ายๆเป็นเบสิค ...   ;D
1.Arduino Mega8
2.DS1307
3.ET-DSP8


MAIN.C
/*
Program     :max7219 clock (DS1307)
Author      :Somlak Mangnimit
Date        :09/05/2013
MCU         :ATmega8A
Xtal        :16Mhz
Compiler    :WinAVR20100110
Version     :-
Note        :-
*/

//build in library
#define     use_swi2c

#define     SDA_pinx            analog_4
#define     SCL_pinx            analog_5
#define     SDA_pin             pin_analog_4
#define     SDA_ddr             ddr_analog_4
#define     SCL_ddr             ddr_analog_5

//build in library
#define     use_pause

//library
#include    "../m8lib.c"
#include    "max7219.h"

//rtc equ name
#define     rtc_id              0xd0
#define     rtc_sec_addr        0x00
#define     rtc_min_addr        0x01
#define     rtc_hour_addr       0x02
#define     rtc_date_addr       0x04
#define     rtc_month_addr      0x05
#define     rtc_year_addr       0x06

uint8_t table[] PROGMEM = {

    0b01111110,    //0
    0b00110000,    //1
    0b01101101,    //2
    0b01111001,    //3
    0b00110011,    //4
    0b01011011,    //5
    0b00011111,    //6
    0b01110000,    //7
    0b01111111,    //8
    0b01110011,    //9
 
    0b00000010,    //' = 10
    0b00000101,    //r = 11
    0b00110111,    //H = 12
    0b01000011     //c = 13
 
};

//write rtc
void write_rtc(void){

    swi2c_write_byte(rtc_id,rtc_sec_addr,0x00);
    swi2c_write_byte(rtc_id,rtc_min_addr,0x59);
    swi2c_write_byte(rtc_id,rtc_hour_addr,0x23);

    swi2c_write_byte(rtc_id,rtc_date_addr,0x09);
    swi2c_write_byte(rtc_id,rtc_month_addr,0x05);
    swi2c_write_byte(rtc_id,rtc_year_addr,0x13);

}

//main
int main(void){

    uint8_t ds1,ds2,ds3,cnt=0,c=0;

    maxInitial();
    write_rtc();
    pause_ms(1000);
 
    for(;;){

        if(!c){//time

            ds1 = swi2c_read_byte(rtc_id,rtc_hour_addr);
            ds2 = swi2c_read_byte(rtc_id,rtc_min_addr);
            ds3 = swi2c_read_byte(rtc_id,rtc_sec_addr);

            if(cnt++>10){
                c = 1;
                cnt = 0;
            }

        }

        if(c){//date

            ds1 = swi2c_read_byte(rtc_id,rtc_date_addr);
            ds2 = swi2c_read_byte(rtc_id,rtc_month_addr);
            ds3 = swi2c_read_byte(rtc_id,rtc_year_addr);

            if(cnt++>5){
                c = 0;
                cnt = 0;
            }

        }

        maxSend(8,pgm_read_byte(&table[(ds1>>4)&0x0f]));
        maxSend(7,pgm_read_byte(&table[ds1&0x0f]));
        maxSend(6,pgm_read_byte(&table[10]));
        maxSend(5,pgm_read_byte(&table[(ds2>>4)&0x0f]));
        maxSend(4,pgm_read_byte(&table[ds2&0x0f]));
        maxSend(3,pgm_read_byte(&table[10]));
        maxSend(2,pgm_read_byte(&table[(ds3>>4)&0x0f]));
        maxSend(1,pgm_read_byte(&table[ds3&0x0f]));

        pause_ms(1000);

    }

    return 0;

}


MAX7219.H

#ifndef _MAX7219_H_
#define _MAX7219_H_

#include    "../m8lib.c"

#define dataIn  digital_2
#define load    digital_3
#define clock   digital_4

#define HIGH    1
#define LOW     0

#define writeBit(p,b) p=b

#define max7219_reg_noop         0x00
#define max7219_reg_digit0       0x01
#define max7219_reg_digit1       0x02
#define max7219_reg_digit2       0x03
#define max7219_reg_digit3       0x04
#define max7219_reg_digit4       0x05
#define max7219_reg_digit5       0x06
#define max7219_reg_digit6       0x07
#define max7219_reg_digit7       0x08

#define max7219_reg_decodeMode   0x09
#define max7219_reg_intensity    0x0a
#define max7219_reg_scanLimit    0x0b
#define max7219_reg_shutdown     0x0c
#define max7219_reg_displayTest  0x0f

void putByte(uint8_t data);
void maxSend(uint8_t reg, uint8_t col);
void maxInitial(void);

#endif


MAX7219.C

#include    "max7219.h"

void putByte(uint8_t data){

    uint8_t i;
 
    for(i=0;i<8;i++){

        writeBit(dataIn,LOW);
        if(data&0x80){writeBit(dataIn,HIGH);}
        writeBit(clock,HIGH);
        writeBit(clock,LOW);
        data <<= 1;

    }
 
}


void maxSend(uint8_t reg, uint8_t col){   

    writeBit(load,LOW);   
    putByte(reg);
    putByte(col);
    writeBit(load,HIGH);

}


void maxInitial(void){

    uint8_t i;

    ddr_digital_2 = _output;
    ddr_digital_3 = _output;
    ddr_digital_4 = _output;
   
    //initiation of the max 7219
    maxSend(max7219_reg_scanLimit, 0x07);     
    maxSend(max7219_reg_decodeMode, 0x00);
    maxSend(max7219_reg_shutdown, 0x01);
    maxSend(max7219_reg_displayTest, 0x00);

    for (i=1;i<=8;i++){
        maxSend(i, 0);
    }

    maxSend(max7219_reg_intensity, 0x0f);
 
}
#34
AVR and Arduino / AVR and Arduino Bootloader
April 10, 2013, 03:40:03 PM
ATMEGA8 Bootloader Internal Clock 8MHz

--รายละเอียด Bootloader--
.protocol   stk500v2
.baud   19200
.internal clock @8Mhz
.bootloader time out ~8sec
.calibration byte on Eeprom address 0x1FF (สงวนไว้ห้ามใช้งาน)

1.flash ATmegaBOOT_int_clock.hex


2.fuses ตามรูป H-0xC8 L-0x44


3.lockbit ตามภาพ


4.calibration เลือก 8 MHz กด Read ตั้ง Address = 0x1FF เลือก Eeprom แล้วกด Write


Board เพิ่มอันนี้ลงไปใน boards.txt
atmega8.name=Arduino Internal Clock (5V, 8 MHz) w/ ATmega8

atmega8.upload.protocol=stk500v2
atmega8.upload.maximum_size=6143
atmega8.upload.speed=19200

atmega8.bootloader.low_fuses=0x44
atmega8.bootloader.high_fuses=0xc8
atmega8.bootloader.path=atmega8
atmega8.bootloader.file=ATmegaBOOT_int_clock.hex
atmega8.bootloader.unlock_bits=0x3F
atmega8.bootloader.lock_bits=0x0F

atmega8.build.mcu=atmega8
atmega8.build.f_cpu=8000000L
atmega8.build.core=arduino
atmega8.build.variant=standard


เลือก Arduino Internal Clock (5V, 8 MHz) w/ ATmega8 ตามภาพ และเลือก com port ให้ตรงด้วย


ลอง Test บน Breadboard สามารถใช้งานได้ปรกติ


Download All file
https://docs.google.com/file/d/0B77_GeSXdC6raXJnbkoxTWhNTDg/edit?usp=sharing
#35
Projects / Dotmatrix 16x32 (PIC16F877, ATMEGA8)
March 18, 2013, 08:34:31 PM
โปรเจคจากบอร์ด electoday 3.0 ที่ตอนนี้เป็นตำนานไปแล้ว

source เดิมใช้ pic16f877 เอามาโมนิดหน่อยเพื่อให้ใช้กับ atmega8 ที่ราคาถูกกว่า

ทำให้ AVR ป้อนไทยได้แล้วครับ แค่เข้าไปเปลี่ยน font
เข้า C:\Program Files\Atmel\AVR Tools\AvrStudio4\edit เปิด AvrStudio_c ด้วย notepad แล้วแก้ FaceName =Tahoma
จากนั้นก็ save แล้วเปิดโปรเจคขึ้นมา ลองป้อนข้อความภาษาไทยแล้ว compile

http://www.youtube.com/v/_lnW9LaZI8g
#36

EMS 80 บาท/ครั้ง ซื้อกี่ชิ้นก็จ่าย 80 บาท
ลงทะเบียน 60 บาท/ครั้ง ซื้อกี่ชิ้นก็จ่าย 60 บาท

อยากได้ชิ้นไหน pm หรือจองในกระทู้นะ. ห้ามใช้ระบบ email
ยังมีอีกเยอะจะค่อยๆทยอยลงครับ ..  ;D


-------------------
เป็นของเก่าเก็บตอนสมัยฝึกงาน ไม่มี sensor นะครับ เอามาขายขำๆเผื่อบางท่านหา sensor ได้
-------------------

x01-ENDA ET1311-230 DIGITAL THERMOSTAT ขายแล้ว
ซีรีย์เกาหลี หนังเกาหลี

x02-EKC201 (Made in DENMARK) ขายแล้ว
ซีรีย์เกาหลี หนังเกาหลี

x03-DIXELL XR60CX (Made in ITALY) ราคา 500 บาท
ซีรีย์เกาหลี หนังเกาหลี

x04-ตัวเลียนแบบ EKC201 ใช้ไฟ AC9V ขายแล้ว
ซีรีย์เกาหลี หนังเกาหลี


***-----------------***------------------***------------------***


001.บอร์ด MRT MEB2000 AT89S8253 ราคา 500 บาท



002.Mini Magnatic Speaker มี 3 ตัว ราคาตัวละ 20 บาท



003.ET-24xx ราคา 100บาท



004.Development ATMEGA8515 (bootloader + CDโปรแกรม) ราคา 300บาท



005.COMPEX Switch HUB 8 Port ไม่มี adaptor (ใช้dc9vขั้ว+อยู่ใน) ราคา 20บาท



006.USB to UART (FT232RL) ของใหม่ 200 บาท



007.Motor Drive Module (L9110S) ของใหม่ 100 บาท



008.Motor ราคา แล้วแต่จะให้ครับ ตั้งราคาไม่ถูก ค่าส่งคนซื้อออกเองครับหนัก1โลนิดๆ




009.Transformer 220V-12V 800mA ขายแล้ว



010.การประยุกต์ใช้งาน ไมโครคอนโทรลเลอร์ ราคา 70 บาท



014.ET-V6 MCS51+Z80 ราคา 2000 บาท (ส่งฟรีEMS **ไม่รวมกับรายการอื่น**)
ตั้งแต่ซื้อต่อ admin มา แทบไม่ได้แตะ
ซีรีย์เกาหลี หนังเกาหลี
ซีรีย์เกาหลี หนังเกาหลี

015.Boss MT2 ขายแล้ว
ซีรีย์เกาหลี หนังเกาหลี
#37
atmega8 มี hardware pwm 3 ช่อง เอามาขับ servo ได้สองช่องโดยใช้ timer1 มีขนาด 16bit
ที่เห็นนี้คือ register ที่เกี่ยวข้องทั้งหมด ผมรวมไว้ให้ดูง่ายขึ้น


ตัวอย่างแรกควบคุมด้วยปุ่มกด
http://www.youtube.com/v/QZleo2ZOMjo

//--------------------------------------------------
//Program :Control Servo motor
//Author :Somlak Mangnimit
//Date :01/02/2013
//MCU :ATmega8A
//XTAL :16Mhz
//Compiler  :WinAVR20100110
//Version   :-
//Note      :-
//--------------------------------------------------
//use analog build in library driver
#define use_analog

//my library
#include "../m8lib.c"

//define equ name
#define servo_min 1500
#define servo_max 4500

//main program
int main(void){
    unsigned int ch1,ch2;

    //configure timer 1 for fast pwm mode via ICR1, with no prescaling
    ICR1 = 0x9c3f;                               //period 20ms
    TCCR1A |= (1<<WGM11);
    TCCR1B |= (1<<WGM13)|(1<<WGM12)|(1<<CS11);

    //enable PWM on port B1 B2 in non-inverted compare mode 2
    TCCR1A |= (1<<COM1A1)|(1<<COM1B1);

    //1ms pulse
    OCR1A = ch1 = servo_min;
    OCR1B = ch2 = servo_min;

    //set digital 9,10 as outputs
    ddr_digital_9 = output;
    ddr_digital_10 = output;

[color=red]for(;;){
        _delay_us(500);

        if(!pin_analog_1){
            if(ch1>1500){ch1--;}
            OCR1A = ch1;
        }

        else if(!pin_analog_0){
            if(ch1<4500){ch1++;}
            OCR1A = ch1;
        }

        if(!pin_analog_3){
            if(ch2>1500){ch2--;}
            OCR1B = ch2;
        }

        else if(!pin_analog_2){
            if(ch2<4500){ch2++;}
            OCR1B = ch2;
        }
}[/color]
    return 0;
}


ตัวอย่างที่สองควบคุมด้วย ADC
http://www.youtube.com/v/MFGJI3UG1nw

//--------------------------------------------------
//Program :Control Servo motor
//Author :Somlak Mangnimit
//Date :26/01/2013
//MCU :ATmega8A
//XTAL :16Mhz
//Compiler  :WinAVR20100110
//Version   :-
//Note      :-
//--------------------------------------------------
//use analog build in library driver
#define use_analog

//my library
#include "../m8lib.c"

//define equ name
#define servo_min 1500
#define servo_max 4500

//main program
int main(void){
    unsigned long x;
    analog_initial();

    unsigned int ch1,ch2;

    //configure timer 1 for fast pwm mode via ICR1, with no prescaling
    ICR1 = 0x9c3f;                               //period 20ms
    TCCR1A |= (1<<WGM11);
    TCCR1B |= (1<<WGM13)|(1<<WGM12)|(1<<CS11);

    //enable PWM on port B1 B2 in non-inverted compare mode 2
    TCCR1A |= (1<<COM1A1)|(1<<COM1B1);

    //1ms pulse
    OCR1A = ch1 = servo_min;
    OCR1B = ch2 = servo_min;

    //set digital 9,10 as outputs
    ddr_digital_9 = output;
    ddr_digital_10 = output;

for(;;){
x = analog_read(0);
OCR1A = (int)((x*(servo_max-servo_min))/1023)+servo_min;
x = analog_read(1);
OCR1B = (int)((x*(servo_max-servo_min))/1023)+servo_min;
}
    return 0;
}
#38
DIY ทำเองได้แต่ประหยัดจริงหรือป่าวไม่รู้นะ(ยุคนี้ china มาแรง)แต่ที่ได้คือประสบการณ์  :)

#39
Projects / Temp and volt monitor (ATMEGA8)
February 01, 2013, 01:56:28 PM
ห่างหายกันไปนานสำหรับเว๊บนี้ มาวันนี้ดีใจกับการกลับมาอีกครั้ง ช่วงที่เว๊บนี้เข้าไม่ได้
ผมก็ไปสิงใน fb เป็นหลัก ซุ่มทำโน่นนี่นั่น มีโปรเจคนึงที่ผมว่าน่าจะมีประโยชน์กับใครหลายคน
มาเสนอครับ (ก่อนหน้านี้ผมได้ลงใน fbกับ gg+ มาแล้ว) คือ monitor ค่าแรงดัน กับ อุณหภูมิ
คราวนี้ผมเปลี่ยน มาใช้ AVR บ้างล่ะ มาดูรายละเอียดกันเลย


http://www.youtube.com/watch?v=W5q4WzknEW0

♥.volt แสดงผลละเอียด 0.1v สูงสุด 50 volt โดยใช้ R-Divider เข้า ADC ตรงๆเลย นิ่งใช้ได้
♥.temp แสดงผลละเอียด 0.1c โดยใช้ DS18B20 เท่านั้น ก่อนหน่านี้ผมจะเขียนให้รองรับ
กับ DS1820 แต่ปัจจุบัน ไม่ค่อยนิยมใช้กันสำหรับระบบที่ออกแบบใหม่แล้ว เลยตัด function
ออกเหลือแต่ DS18B20 และเพิ่มการคำนวณนิดหน่อย
♥.สลับการแสดงผล volt กับ temp ช่วงละ 10 วินาที
หมายเหตุ.รายละเอียดต่างๆสามารถเพิ่มเติมแก้ไขหรือเปลี่ยนแปลงได้ใน source code ครับ

--------

ส่วนเรื่อง source code เดี๋ยวจะแก้ให้อ่านกันง่ายๆ เพราะใช้ร่วมกับ m8lib และเดี่ยวจะมี โปรเจคตัวอย่าง
ง่ายๆตามๆออกมาอีก ตอนนี้ผมจะใช้การเขียนโปรแกรมแบบ state machine เป็นหลักครับ
ส่วน board ก็จะใช้ arduino แต่จะเขียนบน AVRstudio เพราะมันสามารถ soft debug
เบื้องต้นได้ ใช้ arduino ide แล้วปวดตรับ.  :-\

library driver m8lib.c v1.2 detail
//--------------------------------------------------
//Filename     :m8lib.c
//Program     :onono mega8 library
//Author     :Somlak Mangnimit
//Date     :5/07/2012
//
//Special Thank
//firmware.c@electoday.com
//for IO Library
//
//v1.0release :09-07-2012
//note     :bug fix pause function
//         :+ error message
//         :+ usart put pgm
//
//v1.1        :21-01-2013
//note     :+ one wire function
//
//v1.2        :26-01-2013
//note          :bug fix one wire function
//         :+ soft i2c function
//--------------------------------------------------



ปล.ยังใส่ flash ไม่ได้นิ