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.


Topics - ozuke

Pages: 1 [2]
9
http://goo.gl/Dzplf

พอดีซื้อบอร์ด ATX Controller มาแล้วมี DVD แถมมาให้ มีคู่มือครบ แต่ขาดอย่างเดียวที่ผมต้องการคือ "วงจร" หน่ะครับ
คือผมจะเอามาเขียนโปรแกรมบน AVR Studio หน่ะครับ ไม่ได้เขียนบน Wiring พอไม่มีวงจรมันก็เขียนลำบาก
ไม่รู้ขาไหนเป็นขาไหน จึงรบกวนท่านที่พอทราบ หรือมีวงจรช่วยชี้ทางหน่อยครับ

เดี๋ยวนี้ผมสอบถามไปทางเว็ป และ Facebook แล้วแต่เงียบไป ไม่รู้ว่าไม่ว่างหรือยังไงหน่ะครับ
เลยมาหาที่นี่อีกทาง

รบกวนหน่อยนะครับ
ขอบคุณครับ ;D

10
พอดีกดลบสแปมเพลิน กดพลาดไปโดนอีกหนึ่งกระทู้
กระทู้ Qt5 อะไรนี่หล่ะครับ ขออภัยด้วยนะครับ

11
คือพอดีอาจารย์มาให้ออกแบบวงจรควบคุมมอเตอร์ ตอนแรกนึกว่าจะกินหมูแล้ว
ปรากฏว่า หมูมันตัวใหญ่เลยกินยาก ผมออกแบบวงจรตามข้างล่างครับ
MOSFET เบอร์ IRF3205/110A สองตัว
DIODE เบอร์ MUR3020/30A หนึงตัว
ทีนี้ มันก็ทำงานปกติหล่ะครับ แต่มันทำงานได้แป๊บเดียว เจ้า Diode ที่ผมเอาไว้กัน BACK EMF มันก็ร้อน
ร้อนมากเลย ผมไม่มีความรู้เรื่อง BACK EMF เลยทำแบบบ้านๆแบบนี้หล่ะครับ เคยขับเมอเตอร์ขนาดใหญ่
อยู่แต่ก็ไม่เคยใช้กระแสเยอะขนาดนี้หน่ะครับ คือมอเตอร์เป็นเมอเตอร์ปั้มน้ำมัน ไฮดรอริก ครับเดี๋ยววันหลัง
จะเอารูปมาให้ดู ผมคิดว่ามันน่าจะกินกระแส พอๆกันกับมอเตอร์ สตาร์ท รถยนต์หน่ะครับมันกินกระแสระหว่างหมุนอยู่ที่ 28-30A@12V DC
เพราะสายไฟที่ผมใช้เส้นใหญ่พอๆกัน แต่ก่อนเอาเส้นเล็กขับแป๊บเดียวขาดแล้ว ถ้าไม่ขาดมันก็เปื่อยครับ
ยังไง รบกวนหน่อยนะครับ

คือผมอยากทราบแค่ มันมีวิธีแก้การร้อนของ Diode ที่เป็นตัวกัน BACK EMF ได้ไหมหน่ะครับ หรือผมต้องใส่
RC เพื่อเป็นสนับเบอร์หรือปล่าวครับ

ขอบคุณครับ
Ozuke ;D

12
Projects / Drive 16 x 32 LED dot matrix by ATtiny13A
« on: May 12, 2013, 12:52:27 am »
http://youtu.be/l49maP23RYI
 ;D

พอดีไม่ว่าง แต่อยากหากอะไรอย่างอืนทำเล่น เลยรื้อๆตู้เสื้อผ้าดู
ไปเจอะเจ้า ATtiny13A ที่ดองไว้ ปลวกกัดขาแทบขาดแล้ว
กับช่วงนี้ทำโครงงานส่งครู เลยเอาเจ้า LED Matrix 16 x 32 dot. มาลองต่อดูว่าจะเป็นไงบ้าง
ผลก็ตามที่เห็นครับพอใช้งานได้ตามประสา MCU มันตัวน้อย อิอิ

สเป็คเจ้า ATting13A คร่าวๆครับ

มันมี 8 ขา
ใช้ไฟได้ตั้วแต่ 1.8-5.0 V
Flash Memory 1 KByte
EEPROM          64 Byte
SRAM               64 Byte
Frq.                 0-20Mhz(Internal 128Khz,4.8MHz and 9.3Mhz)
Feature           1 SPI,4CH ADC,1 Comparator,All pin Interrupts.

โค้ดที่เขียนครับ ผมไม่อธิบายนะ เพราะโค้ดไม่เยอะ และก็คอมเม้นท์ไว้บ้างแล้ว
คิดว่าคงพอเป็นแนวทางได้ การแสกน LED Matrix ตัวนี้ต้องแสกนในแนวตั้งนะครับ
ถ้าแสกนแนวนอนมันจะติดสว่างไม่เท่ากัน เพราะ Driver ออกแบบมาให้แสกนแบบนี้
ในไฟล์ LED.h ผมใส่ภาพที่จะเอามาแสดงเอาไว้ ขนาดไม่จำกัด ขึ้นกับ Memory ที่มี
แต่ต้องใส่ความสูงของภาพไม่เกิน 16 bit นะครับ

LED_Matrix.c
Code: [Select]
#include <stdint.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <compat/deprecated.h>
#include <LED.h>

#define CLK 0
#define ROW 1
#define COL0 2
#define COL1 4
#define LATCH 3

int main()
{
uint8_t cnt=0;
uint8_t i=0;
uint8_t offset = 0;
uint8_t point1,point2;
uint16_t oLED1,oLED2;
uint16_t delay = 0;

DDRB = 0xFF;
PORTB = 0x00;
while(1)
{
for(cnt=0;cnt<16;cnt++)
{
//Calculate shift LED offset
point1 = cnt+offset;
point2 = point1+16;
if(point1>sizeof(LED)/2-1)
point1 -= sizeof(LED)/2;
if(point2>sizeof(LED)/2-1)
point2 -= sizeof(LED)/2;

//Read display data to memory
oLED1 = pgm_read_word(&LED[point1])<<i;
oLED2 = pgm_read_word(&LED[point2])<<i;

PORTB = _BV(LATCH); //Clear all pin.

if(i==cnt) //Send row data.
sbi(PORTB,ROW);
if(oLED1&0x8000) //Send col data segment 1 (LED Matrix 16 x 32 form 16 x 16 x 2 piece.
sbi(PORTB,COL1);
if(oLED2&0x8000) //Send col data segment 2.
sbi(PORTB,COL0);
sbi(PORTB,CLK); //Send 1 clock to LED Matrix
}
//Latch data to LED.
cbi(PORTB,LATCH);
sbi(PORTB,LATCH);

if(++i>15)
i=0;
_delay_us(5);

//Delay for shift data.
if(++delay>300)
{
delay = 0;
if(++offset>sizeof(LED)/2)
offset = 0;
}
}
}

LED.h
Code: [Select]
#ifndef _LED_H_
#define _LED_H_
#include <avr/pgmspace.h>

prog_uint16_t LED[]={
0b0000000000000000,
0b0000000000000000,
0b1111111001111111,
0b0000010001000000,
0b0000100000111000,
0b0000010001000000,
0b1111111001111111,
0b0000000000000000,
0b1111111001000001,
0b0001001001111111,
0b0011001001000001,
0b0101001000000000,
0b1001110000000001,
0b0000000000000001,
0b1000000001111111,
0b0000000000000001,
0b0111110000000001,
0b1000001000000000,
0b1000001000000001,
0b1000001000000001,
0b0111110001111111,
0b0000000000000001,
0b1100001000000001,
0b1010001000000000,
0b1001101001111100,
0b1000011000010010,
0b1000001000010001,
0b0000000000010010,
0b0111111001111100,
0b1000000000000000,
0b1000000001111111,
0b1000000001000000,
0b0111111000111000,
0b0000000001000000,
0b1111111001111111,
0b0001000000000000,
0b0001100001111100,
0b0010010000010010,
0b1100001000010001,
0b0000000000010010,
0b1111111001111100,
0b1001001000000000,
0b1001001000000001,
0b1000001000000001,
0b1000001001111111,
0b0000000000000001,
0b0000000000000001,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b1111111111111111,
0b1000000000000001,
0b1011111111111001,
0b1000001100000101,
0b1000010100000101,
0b1000100100000101,
0b1011000011111001,
0b1000000000000001,
0b1011111111111101,
0b1000000000010001,
0b1000000000100001,
0b1000000000010001,
0b1011111111111101,
0b1000000000000001,
0b1001111111111101,
0b1010000000000001,
0b1010000000000001,
0b1010000000000001,
0b1001111111111101,
0b1000000000000001,
0b1000000000000101,
0b1000000000000101,
0b1011111111111101,
0b1000000000000101,
0b1000000000000101,
0b1000000000000001,
0b1010000000000101,
0b1011111111111101,
0b1010000000000101,
0b1000000000000001,
0b1111111111111111,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,

};
#endif


ไฟล์โปรเจ็คครับ ผมเขียนบน AVR Studio 4.0 นะครับ การดาว์นโหลด(มีปัญหามากเลยต้องบอก) ให้ทำแบบนี้นะครับ
เข้าลิ้งค์นี้ไป กด CTRL+S มันจะเก็บเข้าเครื่องคุณเองครับ
https://docs.google.com/file/d/0B9HppoQOVif0SGJ0M0hyV2Rpdmc/edit?usp=sharing





13
คือผมสร้าง static function ขึ้นแต่ทำไมมันไม่สามารถใช้งานคำสั่งของ component
พวก TextBox ListBox ได้ครับ มันจะขึ้น error แบบนี้ตลอดเลยครับ

Code: [Select]
error C2227: left of '->Text' must point to class/struct/union/generic type
โค้ดที่เขียน ได้เขียนแบบนี้ครับ

Code: [Select]
static void DataReceivedHandler(Object^ sender,SerialDataReceivedEventArgs^ e) {
SerialPort^ sp = (SerialPort^)sender;
&MainForm::ReceiveText->Text+=sp->ReadExisting();
}


https://docs.google.com/file/d/0B9HppoQOVif0ODU0aGlHMWpVQVE/edit?usp=sharing
ไฟล์แนบครับเป็นโปรเจ็ค ผมแค่อยากเขียน Visual C++ 2008 ให้มันติดต่อกับ Serial Port ได้หน่ะครับ
ขอบคุณครับ ;D

14
Projects / Etherner Web Server By LPC1768-Mini-DK
« on: March 02, 2013, 02:14:38 pm »
พอดีทำไวนานแล้วแต่ไม่มีโอกาสเขียนลงเว็ป เลยลองเขียนลงบล็อกของ Google ดูครับ
http://wittawatmcu.blogspot.com/2013/03/lpc1768-mini-dk-web-server.html

เป็นการใช้ บอร์ด LPC1768-Mini-DK จากเว็ป www.micro4you.net
เป็น Ethernet Web Server ครับ

ลองดูครับ ผิดพลาดตรงไหนก็ต้องขออภัยด้วยครับ :D

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

   ความสามารถของ Lib คือต่อ Servo เข้าขาไหนก็ได้ของ PIC แค่เป็นขาที่สามารถเป็น output ได้เป็นพอครับ
กำหนดค่าในโปรแกรมนิดหน่อยก็ใช้งานได้แล้วครับ เดี๋ยวมาดูโค้ดกันก่อนครับ
 
Code: [Select]
/*
Name : General Servo Controller.
Compiler Support : CCS C Compiler.
Designed by : Wittawat Sompong @ RMUTI

Software use timer_1 and CCP1 in MCU.
*/
#include <16f877.h>
#fuses HS,NOLVP,NOWDT,NOPROTECT
#use delay(clock=20M)

//-------------------------General config----------------------------------//
#define SERVO_MAX 5 //Max of Server connector
#define SERVO_MAX_VALUE 2500 //Max of pulse width micro sec(uS)
#define SERVO_MIN_VALUE 500 //Min of pulse width micro sec(uS)

typedef struct tServo{
volatile unsigned pin;
volatile unsigned Active;
volatile unsigned int16 value;
}Servo;

//------------------------Start Prototype-----------------------------------//
void ServoActive(unsigned chanel,unsigned vPin,unsigned int16 vValue);
void ServoValue(unsigned chanel,unsigned int16 value);//value is uS.
//------------------------End of Prototype---------------------------------//

//------------------------Servo gobal variable----------------------------//
signed ServoCnt=0;
Servo nServo[SERVO_MAX];

//------------------------Servo background task use CCP1 interrupt---------//
#INT_CCP1
void ServoTask()
{
//if enc of servo count ,reset timer1.
if(ServoCnt<0){
set_timer1(0);
}else{
//if server pin is active set output servo pin to low.
if(nServo[ServoCnt].Active)
output_low(nServo[ServoCnt].pin);
}
ServoCnt++;
if(ServoCnt<SERVO_MAX)
{
//set interrupt to next servo time.
CCP_1 = get_timer1()+nServo[ServoCnt].value;
//if servo pin is active set output servo pin to high.
if(nServo[ServoCnt].Active)
output_high(nServo[ServoCnt].pin);
}else{
//set fist chanel to start scan.
CCP_1 = get_timer1()+100;
ServoCnt = -1;
}
}

/*
ServoActive(c,p,v)
set pin 'p' to connect servo chanel 'c' and set pulse width 'v' uS.

Example : ServoActive(0,PIN_A0,1500);
set PIN_A0 to connect servo at chanel '0' and set pulse width 1500 uS.
*/
void ServoActive(unsigned chanel,unsigned vPin,unsigned int16 value)
{
nServo[chanel].pin = vPin;
nServo[chanel].value = ((value*5)/8);
nServo[chanel].Active = 1;
}
/*
ServoValue(c,v)
Set servo chanel 'c' to pulse width 'v' uS.
Example : ServoValue(0,2400);
set servo chanel '0' to pulse width 2400 uS. (2.4mS)
*/
void ServoValue(unsigned chanel,unsigned int16 value)
{
if(value>SERVO_MAX_VALUE)
value=SERVO_MAX_VALUE;
if(value<SERVO_MIN_VALUE)
value=SERVO_MIN_VALUE;

if (chanel>=SERVO_MAX)
chanel=SERVO_MAX-1;

nServo[chanel].value = ((Value*5)/8);
}
void main()
{
unsigned i;
//-----------------------------------------Setup timer1 to servo task-----------------------------//
setup_timer_1 (T1_INTERNAL|T1_DIV_BY_8);
setup_ccp1 (CCP_COMPARE_INT);
enable_interrupts(GLOBAL);
enable_interrupts(INT_CCP1);
//-----------------------------------------------------------------------------------------------//

//Add pin_d0 to connect servo chanel '0'
ServoActive(0,PIN_D0,1500);

ServoActive(1,PIN_D1,1500);
ServoActive(2,PIN_B0,1500);
ServoActive(3,PIN_B1,1500);
delay_ms(1000);
while(true)
{
for(i=0;i<4;i++)
{
ServoValue(i,1000);
//delay_ms(200);
}
delay_ms(1000);
for(i=0;i<4;i++)
{
ServoValue(i,1500);
//delay_ms(200);
}
delay_ms(1000);
for(i=0;i<4;i++)
{
ServoValue(i,2000);
//delay_ms(200);
}
delay_ms(1000);
for(i=0;i<4;i++)
{
ServoValue(i,1500);
//delay_ms(200);
}
delay_ms(1000);
}
}


หลักๆที่ท่านจะได้ใช้คือ ServoActive() ครับเป็นฟังก์ชั่นที่เอาไว้เพิ่มหรือกำหนดว่าเราจะต่อขาอะไรเข้ากับ Servo
ตัวอย่างเช่น ผมต้องการต่อขา PIN_D0 เข้า Servo ช่องที่ 0 และตั้งให้พัลส์ที่ขาออก 1.5mS
ผมก็เขียนว่า ServoActive(0,PIN_D0,1500); ถ้าผมต้องการเปลี่ยนองศาการหมุนของมัน
ไปเป็น +90 องศา ก็จะเขียน ServoValue(0,1000);

การใช้งานเบื้องต้นมีเท่านี้ครับ ใช้ง่ายครับ แต่โค้ดต้นฉบับเองผมได้ดูมาจาก Arduino
และดัดแปลงมาเขียนบน AVR Studio และก็แปลงมาเป็น CCS อีกที
เดี๋ยวตั้วหน้าจะเอาเวอร์ชั่น AVR มาให้ครับ พอดียังไม่ได้ลงโปรแกรม AVR Studio ครับเลยยังไ่ม่มีเวลาทดสอบ

ส่วนไกล้ๆงานย่าโมโรโบคอนปีนี้ เดี๋ยวจะเอาโค้ดโปรแกรมเซ็นเซอร์ตรวจจับเส้น
ที่เท่ไม่หยอกและบางคนอาจจะคิดไม่ถึงมาให้ดูกันครับ
ส่วนโปรแกรมนี้ท่านไหนสงสัยส่วนไหน หรือมีอะไรติชม ก็ยินดีครับ

วีดีโอการทำงานเบื้องต้นอยู่นี่นะครับ การหมุนอาจจะคลาดเคลื่อนบ้าง ลองปรับปรุงดูนะครับ

http://youtu.be/jSoJ2zHL9dU

โค้ดครับ : https://docs.google.com/file/d/0B9HppoQOVif0M3FTTnZHV2pNVzg/edit?usp=sharing

ปล.ผมคอมเม้นในโค้ดเป็นภาษาอังกฤษนะ อาจะดูกระด้างไปหน่อย ครั้งหลังจะปรับปรุงให้ดีกว่านี้ครับ ;)

ขอบคุณครับ
โอ.... ;D

------------------------------------------------------------------------------------------------------------------------
วิธีการก็อปโค้ดไปคอมไพล์ใหม่ ผมใช้ CCS V4.1 นะครับ
ใช้ Proteuse 7.10 SP0 เป็นตัว Simmulate ทำตามวีดีโอนะครับ
หากไม่ได้ยังไง ก็สอบถามได้ครับ ขอบคุณครับ

Test 4CH Server Driver with PIC16F887@ Proteuse 7.10 SP0
http://youtu.be/8CGP18xuUHg

How to compile source code by CCS 4.1
http://www.youtube.com/watch?v=7Dlf-ROrMtI
 ;) ;D :)

16
 :)
คืออยากจะลองทำเครื่องวัดเสียงหน่ะครับ ว่าความถี่ไหนมันแรงมันน้อย
เจอะหลายๆที่เขาทำ ผมเลยอยากทำบ้าง แต่ติดที่เรื่อง Fast Fourier transform ครับ
คือผมไม่มีพื้นฐานเลยเรื่องนี้ จึงอยากขอข้อมูลจากพี่ๆบ้างหน่ะครับ

ความต้องการคือว่า ผมอ่านค่าอะนาล็อกโดยใช้ MCU แล้ว จากนั้นว่าจะให้ MCU มันเป็นตัวแปลง
จากโดเมนของเวลาเป็นโดเมนของความถี่(ไม่รู้เรียกถูกรึปล่าวนะ ยังไม่ได้เรียนหน่ะครับ)
เพื่อนเอามาแสดงที่ LCD ครับ ผมแค่อยากทราบว่า การคำนวน Fast Fourier transform นี่
เขาเอาข้อมูลที่เรา Sampling มาคำนวนยังไง แค่นี้หล่ะครับ นอกนั้นก็จะค่อยๆทำเอาครับ ขอบคุณมากครับ :D

Pages: 1 [2]