|
oats3483
member
คะแนน 1
ออฟไลน์
กระทู้: 2
|
|
« ตอบ #30 เมื่อ: กุมภาพันธ์ 08, 2010, 12:03:09 pm » |
|
ขอบคุณครับพี่
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #31 เมื่อ: กุมภาพันธ์ 10, 2010, 01:40:59 pm » |
|
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #32 เมื่อ: กุมภาพันธ์ 10, 2010, 08:24:53 pm » |
|
USB<>Serial Converterใครไม่มี com port ใช้เอาตัวนี้ไปทำได้เลย ผมลองแล้ว work ดี ลงทุนไม่ถึง 80 บาท อยากทำใช้ไปที่ http://www.recursion.jp/prose/
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #33 เมื่อ: กุมภาพันธ์ 24, 2010, 12:04:42 pm » |
|
multitasking os countdown timer 1-90minuteเป็นเวอร์ชั่นใหม่ โปรแกรมเป็นแบบ multitask ตอบสนองการใช้งานได้ดีกว่าอันแรกที่เคย post ไว้ครับวงจรใช้กับของเดิมได้เลย โดยแก้ code ส่วนของ port แล้ว compile ใหม่ โดยใช้ MIDE-Studioในการแก้และ compile.... source code http://www.4shared.com/file/228584506/8baeeb77/countdown_timer.html
|
|
|
บันทึกการเข้า
|
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #35 เมื่อ: กันยายน 19, 2010, 09:26:04 pm » |
|
แบบภาษาไทยครับ ;//*******************************************************************//; ;//* PROGRAM : DS1820 THAI LANG ;//* DEVICE : AT89C2051 ;//* X-TAL : 11.0592MHZ ;//* AUTHOR : SOMLAK MANGNIMIT ;//* DATE : 19/09/2553 ;//* VERSION : 1.0BETA ;//* NOTE : THIS PROGRAM IS FREE AND ALL NOT WARRANTY. ;//*******************************************************************//;
DQ BIT P1.0
DSEG ORG 020H TIM1: DS 1 TIM2: DS 1 TIM3: DS 1
TEMP_L: DS 1 TEMP_H: DS 1
TX_DATA: DS 1 RX_DATA: DS 1
N1: DS 1 N2: DS 1 N3: DS 1 POINT: DS 1
CSEG ORG 0000H SJMP INIT
ORG 0023H ;--->>> SERIAL PUSH ACC JBC RI,SER_RX SER_TX: CLR TI MOV SBUF,TX_DATA SER_TX_WAIT: JBC TI,SER_EXIT AJMP SER_TX_WAIT SER_RX: MOV RX_DATA,SBUF SER_EXIT: ;SETB RX_OK POP ACC RETI
TABLE_THAI: CGRAM_ADDR00: DB 00EH,011H,001H,019H,011H,00EH,003H,001H CGRAM_ADDR01: DB 00DH,015H,015H,015H,017H,019H,000H,000H CGRAM_ADDR02: DB 01BH,01BH,00AH,00DH,009H,009H,000H,000H CGRAM_ADDR03: DB 00EH,011H,009H,009H,019H,019H,005H,007H CGRAM_ADDR04: DB 019H,019H,009H,009H,01FH,019H,000H,000H CGRAM_ADDR05: DB 000H,000H,000H,000H,000H,000H,00EH,01FH CGRAM_ADDR06: DB 001H,002H,015H,00DH,005H,005H,002H,000H CGRAM_ADDR07: DB 001H,001H,019H,009H,015H,015H,01BH,000H
;//*******************//; ;//* INITIAL DEVIECE *//; ;//*******************//; INIT: MOV P1,#0FFH MOV P3,#0FFH MOV SP,#050H MOV R0,#07FH CLR A MOV @R0,A DJNZ R0,$-1 CLR TR1 MOV SCON,#052H MOV TMOD,#022H MOV TH1,#0FDH MOV IE,#00010000B SETB TR1 SETB EA ACALL DELAY1S WRITE_THAI: MOV A,#0FEH ; SEND SLCD COMMAND PREFIX MOV TX_DATA,A SETB TI NOP MOV A,#040H ; WRITE CGRAM COMMAND (WRITE THAI LETTERS) MOV TX_DATA,A SETB TI NOP MOV A,#000H MOV DPTR,#TABLE_THAI ; TABLE ADDRESS = 0 MOV B,#8*8 ; WRITE BITMAP 64 LETTERS WRITE_CGRAM1: CLR A MOVC A,@A+DPTR ; LOOK-UP TABLE (FOR THAI LETTERS) MOV TX_DATA,A SETB TI NOP INC DPTR DJNZ B,WRITE_CGRAM1 ; SKIP IF COMPLETED MOV TX_DATA,#254 SETB TI NOP MOV TX_DATA,#001H SETB TI NOP ACALL RDTEMP ; REMOVE INITIAL START UP RESULT 85.C ACALL DELAY1S ;//****************//; ;//* MAIN PROGRAM *//; ;//****************//; MAIN: ACALL RDTEMP ACALL T_CELCIUS ACALL SHOW_THAI AJMP MAIN ;//**********************//; ;//* SHOW TEMP ON RS232 *//; ;//**********************//; SHOW_THAI: MOV TX_DATA,#0FEH SETB TI NOP MOV TX_DATA,#084H ; DDRAM ADDR. 0X84 (LINE1/5) SETB TI NOP MOV TX_DATA,#005H SETB TI NOP MOV TX_DATA,#0FEH SETB TI NOP MOV TX_DATA,#0C0H ; DDRAM ADDR. 0XC0 (LINE2/1) SETB TI NOP MOV TX_DATA,#000H SETB TI NOP MOV TX_DATA,#001H SETB TI NOP MOV TX_DATA,#002H SETB TI NOP MOV TX_DATA,#003H SETB TI NOP MOV TX_DATA,#004H SETB TI NOP MOV TX_DATA,#" " SETB TI NOP MOV TX_DATA,#"=" SETB TI NOP MOV TX_DATA,#" " SETB TI NOP MOV TX_DATA,N1 ; SHOW HUNDRED SETB TI NOP MOV TX_DATA,N2 ; SHOW TEN SETB TI NOP MOV TX_DATA,N3 ; SHOW UNIT SETB TI NOP MOV TX_DATA,#"." ; SHOW . SETB TI NOP MOV TX_DATA,POINT ; SHOW DECIMAL SETB TI NOP MOV TX_DATA,#0DFH ; FOR HD44780 OR COMPATIBLE ONLY <DEGREE SYMBOL> SETB TI NOP MOV TX_DATA,#006H ; WRITE ? SETB TI NOP RET
;//********************//; ;//* TEMP CALCULATION *//; ;//********************//; ;DATA IN TEMP_L REG. ;DATA RETURN N1,N2,N3,DP REG. T_CELCIUS: MOV A,TEMP_L CLR C RRC A ;--->>> TEMP_RD/2 MOV POINT,#"0" ;--->>> SHOW .0 DEGREE JNC CONVERT1 ;--->>> JUMP IF CARRY = 0 MOV POINT,#"5" ;--->>> SHOW .5 DEGREE CONVERT1: MOV B,#100 DIV AB ADD A,#030H ;--->>> CONVERT BINARY TO BCD MOV N1,A ;--->>> R0 = HUNDRED UNIT MOV A,B MOV B,#10 DIV AB ADD A,#030H MOV N2,A ;--->>> R1 = TEN DIGIT MOV A,B ADD A,#030H MOV N3,A ;--->>> R2 = UNIT DEGREE MOV A,N1 SUBB A,#030H JNZ CONVERT2 ;--->>> JUMP IF W <> 0 MOV N1,#" " ;--->>> SHOW WHITE SPACE IF TEMP <100 C CONVERT2: MOV A,N2 SUBB A,#030H JNZ CONVERT3 ;--->>> JUMP IF W <> 0 MOV N2,#" " ;--->>> SHOW WHITE SPACEHOW IF TEMP < 10 C CONVERT3: RET
;//************************//; ;//* DS1820 PROGRAM GROUP *//; ;//************************//; RDTEMP: ACALL PRES_DS1820 MOV A,#0CCH ;--->>> SKIP ROM ACALL WR_DS1820 MOV A,#044H ;--->>> TEMP CONVERT ACALL WR_DS1820 ACALL DELAY500M ACALL PRES_DS1820 MOV A,#0CCH ;--->>> SKIP ROM ACALL WR_DS1820 MOV A,#0BEH ;--->>> READ SCRATCHPAD ACALL WR_DS1820 ACALL RD_DS1820 MOV TEMP_L,A ACALL RD_DS1820 MOV TEMP_H,A RET
;//*****WRITE DEVICE*****//; WR_DS1820: MOV B,#8 WR_LOOP: CLR DQ ACALL DELAY15US RRC A MOV DQ,C ACALL DELAY45US SETB DQ DJNZ B,WR_LOOP RET
;//*****READ DEVICE*****//; RD_DS1820: MOV B,#8 RD_LOOP: CLR DQ ACALL DELAY15US SETB DQ MOV C,DQ RRC A ACALL DELAY45US SETB DQ DJNZ B,RD_LOOP RET
;//*****PRESENCE PLUSE*****//; PRES_DS1820: CLR DQ ACALL DELAY600US SETB DQ ACALL DELAY60US JNB DQ,DEVICE_PRES ACALL DELAY600US SJMP PRES_DS1820 DEVICE_PRES: ACALL DELAY600US RET
;//*****************//; ;//* DELAY ROUTINE *//; ;//*****************//; ;1.085 X 6 = 6.51 ;1.085 X 2 = 2.17 ;***** [(1.085 X 6)-(15)]/(1.085 X 2) = 3.9 *****; DELAY15US: MOV TIM1,#3 DJNZ TIM1,$ RET
;***** [(1.085 X 6)-(45)]/(1.085 X 2) = 17.7 *****; DELAY45US: MOV TIM1,#17 DJNZ TIM1,$ RET
;***** [(1.085 X 6)-(60)]/(1.085 X 2) = 24.6 *****; DELAY60US: MOV TIM1,#24 DJNZ TIM1,$ RET
;***** [(1.085 X 6)-(600)]/(1.085 X 2) = 182.3 *****; DELAY600US: MOV TIM1,#182 NOP DJNZ TIM1,$-1 RET
DELAY1S: MOV TIM1,#10 SJMP DELAY
DELAY500M: MOV TIM1,#5 SJMP DELAY
DELAY: MOV TIM2,#100 DELAY01: MOV TIM3,#230 DELAY02: NOP NOP DJNZ TIM3,DELAY02 DJNZ TIM2,DELAY01 DJNZ TIM1,DELAY RET
END
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #36 เมื่อ: กันยายน 19, 2010, 11:07:10 pm » |
|
ลองเอามาควบคุมพัดลมให้ทำงานตาม อุณหภูมิที่เรากำหนด โดยผมลองที่ 33 องศาซี http://www.youtube.com/v/KkULV3LUFoY.swf;//*******************************************************************//; ;//* PROGRAM : DS1820 THAI LANG ;//* DEVICE : AT89C2051 ;//* X-TAL : 11.0592MHZ ;//* AUTHOR : SOMLAK MANGNIMIT ;//* DATE : 19/09/2553 ;//* VERSION : 1.0BETA ;//* NOTE : THIS PROGRAM IS FREE AND ALL NOT WARRANTY. ;//*******************************************************************//;
DQ BIT P1.0 LED_R BIT P1.1 LED_G BIT P1.2 FAN BIT P1.3
DSEG ORG 020H TIM1: DS 1 TIM2: DS 1 TIM3: DS 1
TEMP_L: DS 1 TEMP_H: DS 1
TX_DATA: DS 1 RX_DATA: DS 1
N1: DS 1 N2: DS 1 N3: DS 1 POINT: DS 1
HITEMP_SET EQU 33 LOWTEMP_SET EQU 30
CSEG ORG 0000H SJMP INIT
ORG 0023H ;--->>> SERIAL PUSH ACC JBC RI,SER_RX SER_TX: CLR TI MOV SBUF,TX_DATA SER_TX_WAIT: JBC TI,SER_EXIT AJMP SER_TX_WAIT SER_RX: MOV RX_DATA,SBUF SER_EXIT: ;SETB RX_OK POP ACC RETI
TABLE_THAI: CGRAM_ADDR00: DB 00EH,011H,001H,019H,011H,00EH,003H,001H CGRAM_ADDR01: DB 00DH,015H,015H,015H,017H,019H,000H,000H CGRAM_ADDR02: DB 01BH,01BH,00AH,00DH,009H,009H,000H,000H CGRAM_ADDR03: DB 00EH,011H,009H,009H,019H,019H,005H,007H CGRAM_ADDR04: DB 019H,019H,009H,009H,01FH,019H,000H,000H CGRAM_ADDR05: DB 000H,000H,000H,000H,000H,000H,00EH,01FH CGRAM_ADDR06: DB 001H,002H,015H,00DH,005H,005H,002H,000H CGRAM_ADDR07: DB 001H,001H,019H,009H,015H,015H,01BH,000H
;//*******************//; ;//* INITIAL DEVIECE *//; ;//*******************//; INIT: MOV P1,#0FFH MOV P3,#0FFH MOV SP,#050H MOV R0,#07FH CLR A MOV @R0,A DJNZ R0,$-1 CLR TR1 MOV SCON,#052H MOV TMOD,#022H MOV TH1,#0FDH MOV IE,#00010000B SETB TR1 SETB EA ACALL DELAY1S WRITE_THAI: MOV A,#0FEH ; SEND SLCD COMMAND PREFIX MOV TX_DATA,A SETB TI NOP MOV A,#040H ; WRITE CGRAM COMMAND (WRITE THAI LETTERS) MOV TX_DATA,A SETB TI NOP MOV A,#000H MOV DPTR,#TABLE_THAI ; TABLE ADDRESS = 0 MOV B,#8*8 ; WRITE BITMAP 64 LETTERS WRITE_CGRAM1: CLR A MOVC A,@A+DPTR ; LOOK-UP TABLE (FOR THAI LETTERS) MOV TX_DATA,A SETB TI NOP INC DPTR DJNZ B,WRITE_CGRAM1 ; SKIP IF COMPLETED MOV TX_DATA,#254 SETB TI NOP MOV TX_DATA,#001H SETB TI NOP ACALL RDTEMP ; REMOVE INITIAL START UP RESULT 85.C ACALL DELAY1S ;//****************//; ;//* MAIN PROGRAM *//; ;//****************//; MAIN: ACALL RDTEMP ACALL T_CELCIUS ACALL SHOW_THAI ACALL TEMP_COMP AJMP MAIN TEMP_COMP: MOV A,TEMP_L CLR ACC.0 RR A CLR C SUBB A,#HITEMP_SET JNC TOO_HI SETB LED_R CLR LED_G CLR FAN RET TOO_HI: CPL LED_R SETB LED_G SETB FAN RET ;//**********************//; ;//* SHOW TEMP ON RS232 *//; ;//**********************//; SHOW_THAI: MOV TX_DATA,#0FEH SETB TI NOP MOV TX_DATA,#084H ; DDRAM ADDR. 0X84 (LINE1/5) SETB TI NOP MOV TX_DATA,#005H SETB TI NOP MOV TX_DATA,#0FEH SETB TI NOP MOV TX_DATA,#0C0H ; DDRAM ADDR. 0XC0 (LINE2/1) SETB TI NOP MOV TX_DATA,#000H SETB TI NOP MOV TX_DATA,#001H SETB TI NOP MOV TX_DATA,#002H SETB TI NOP MOV TX_DATA,#003H SETB TI NOP MOV TX_DATA,#004H SETB TI NOP MOV TX_DATA,#" " SETB TI NOP MOV TX_DATA,#"=" SETB TI NOP MOV TX_DATA,#" " SETB TI NOP MOV TX_DATA,N1 ; SHOW HUNDRED SETB TI NOP MOV TX_DATA,N2 ; SHOW TEN SETB TI NOP MOV TX_DATA,N3 ; SHOW UNIT SETB TI NOP MOV TX_DATA,#"." ; SHOW . SETB TI NOP MOV TX_DATA,POINT ; SHOW DECIMAL SETB TI NOP MOV TX_DATA,#0DFH ; FOR HD44780 OR COMPATIBLE ONLY <DEGREE SYMBOL> SETB TI NOP MOV TX_DATA,#006H ; WRITE ? SETB TI NOP RET
;//********************//; ;//* TEMP CALCULATION *//; ;//********************//; ;DATA IN TEMP_L REG. ;DATA RETURN N1,N2,N3,DP REG. T_CELCIUS: MOV A,TEMP_L CLR C RRC A ;--->>> TEMP_RD/2 MOV POINT,#"0" ;--->>> SHOW .0 DEGREE JNC CONVERT1 ;--->>> JUMP IF CARRY = 0 MOV POINT,#"5" ;--->>> SHOW .5 DEGREE CONVERT1: MOV B,#100 DIV AB ADD A,#030H ;--->>> CONVERT BINARY TO BCD MOV N1,A ;--->>> R0 = HUNDRED UNIT MOV A,B MOV B,#10 DIV AB ADD A,#030H MOV N2,A ;--->>> R1 = TEN DIGIT MOV A,B ADD A,#030H MOV N3,A ;--->>> R2 = UNIT DEGREE MOV A,N1 SUBB A,#030H JNZ CONVERT2 ;--->>> JUMP IF W <> 0 MOV N1,#" " ;--->>> SHOW WHITE SPACE IF TEMP <100 C CONVERT2: MOV A,N2 SUBB A,#030H JNZ CONVERT3 ;--->>> JUMP IF W <> 0 MOV N2,#" " ;--->>> SHOW WHITE SPACEHOW IF TEMP < 10 C CONVERT3: RET
;//************************//; ;//* DS1820 PROGRAM GROUP *//; ;//************************//; RDTEMP: ACALL PRES_DS1820 MOV A,#0CCH ;--->>> SKIP ROM ACALL WR_DS1820 MOV A,#044H ;--->>> TEMP CONVERT ACALL WR_DS1820 ACALL DELAY500M ACALL PRES_DS1820 MOV A,#0CCH ;--->>> SKIP ROM ACALL WR_DS1820 MOV A,#0BEH ;--->>> READ SCRATCHPAD ACALL WR_DS1820 ACALL RD_DS1820 MOV TEMP_L,A ACALL RD_DS1820 MOV TEMP_H,A RET
;//*****WRITE DEVICE*****//; WR_DS1820: MOV B,#8 WR_LOOP: CLR DQ ACALL DELAY15US RRC A MOV DQ,C ACALL DELAY45US SETB DQ DJNZ B,WR_LOOP RET
;//*****READ DEVICE*****//; RD_DS1820: MOV B,#8 RD_LOOP: CLR DQ ACALL DELAY15US SETB DQ MOV C,DQ RRC A ACALL DELAY45US SETB DQ DJNZ B,RD_LOOP RET
;//*****PRESENCE PLUSE*****//; PRES_DS1820: CLR DQ ACALL DELAY600US SETB DQ ACALL DELAY60US JNB DQ,DEVICE_PRES ACALL DELAY600US SJMP PRES_DS1820 DEVICE_PRES: ACALL DELAY600US RET
;//*****************//; ;//* DELAY ROUTINE *//; ;//*****************//; ;1.085 X 6 = 6.51 ;1.085 X 2 = 2.17 ;***** [(1.085 X 6)-(15)]/(1.085 X 2) = 3.9 *****; DELAY15US: MOV TIM1,#3 DJNZ TIM1,$ RET
;***** [(1.085 X 6)-(45)]/(1.085 X 2) = 17.7 *****; DELAY45US: MOV TIM1,#17 DJNZ TIM1,$ RET
;***** [(1.085 X 6)-(60)]/(1.085 X 2) = 24.6 *****; DELAY60US: MOV TIM1,#24 DJNZ TIM1,$ RET
;***** [(1.085 X 6)-(600)]/(1.085 X 2) = 182.3 *****; DELAY600US: MOV TIM1,#182 NOP DJNZ TIM1,$-1 RET
DELAY1S: MOV TIM1,#10 SJMP DELAY
DELAY500M: MOV TIM1,#5 SJMP DELAY
DELAY: MOV TIM2,#100 DELAY01: MOV TIM3,#230 DELAY02: NOP NOP DJNZ TIM3,DELAY02 DJNZ TIM2,DELAY01 DJNZ TIM1,DELAY RET
END
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #37 เมื่อ: ธันวาคม 06, 2010, 12:22:40 pm » |
|
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #38 เมื่อ: ธันวาคม 16, 2010, 06:23:03 pm » |
|
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #39 เมื่อ: มกราคม 20, 2011, 07:16:20 pm » |
|
|
|
|
บันทึกการเข้า
|
|
|
|
First_soft
member
คะแนน 0
ออฟไลน์
กระทู้: 6
|
|
« ตอบ #40 เมื่อ: กุมภาพันธ์ 03, 2011, 01:04:08 pm » |
|
ขอบคุณคับ
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #41 เมื่อ: มีนาคม 18, 2011, 04:09:48 pm » |
|
Dot Matrix V1เนื่องจากทุนน้อยครับเอามันแค่นี้ก่อน เดี๋ยวรอผมสั่ง dot matrix ก่อน source ตัวนี้ผมทำ buffer ไว้ 24 byte ครับ เวลาเรียกใช้ ให้ใส่ค่า address 1-4 ลง acc โดยเรียกโปรแกรมย่อย setaddress จากนั้น ตามด้วย putchar ตัวอย่าง.... mov a,#1 acall setaddress ;-->> buffer ตำแหน่งที่1 mov a,#"A" acall putchar ;-->> เก็บค่า "A" จากตาราง ลง buffer ตำแหน่งที่1 ในส่วนของ scan display เอาค่าที่เก็บจาก buffer ไปใช้ได้เลย โดยมีคำสั่ง shift display ไว้ให้แล้ว video ผมถ่ายชัดสุดได้แค่นี้..... ใครมี idea อะไรเอามาแชร์กัน บ้างนะครับ ทำกันเยอะไปหมด แต่ไม่ค่อยมีรายละเอียด ตัวเต็มผม open source เหมือนเดิม แต่คงเอาแค่ อ่านข้อความจาก programmemory เอามาวิ่งแสดงเฉยๆ ที่เหลือไปเขียนต่อกันเอง เพราะเดี๋ยวจะงงกันซะเปล่าๆ.... source code v1http://www.4shared.com/file/rhfAv1Jn/dot_matrix_v1.htmlhttp://www.youtube.com/v/E9jQvkyEIQQ.swfการเลื่อนตัวอักษรไม่ได้ยากเท่าใดนัก ทั้งหมดสามารถทำผ่าน buffer ได้ง่ายๆ โดยกำหนด buffer ขึ้นมาเท่าจำนวนของ column ในรูปคือ 20 byte ส่วนอีก 5 byte มีไว้ใช้ buffer ข้อมูลจากการเปิดตาราง แล้วเอามา พักไว้ที่นี่ step การเลื่อนข้อความเบื้องต้นคือ 1.กำหนดตำแหน่งแรกของ pointer ข้อความ 2.กำหนดตำแหน่ง ที่ character buffer 3.เปิดตารางตัวอักษรจาก pointer 4.นำค่าจากตารางเก็บลง buffer 5.scan display ไว้ระยะหนึ่ง 6.เลื่อนข้อมูล display buffer ทั้งหมด ไปทางซ้าย 1 ครั้ง แล้วกลับไปข้อ 5. ทำจนครบ 5 ครั้ง 7.เพิ่มค่า pointer กลับไปข้อ 2. การ scan display ใช้หลักการคล้ายๆกับ 7 segment คือ กำหนด pointer ที่ตำแหน่งแรก display buffer1 (30H) แล้วนำค่าที่ pointer ชี้ไปส่งให้ Row Shift register เพื่อส่งไปยัง dot matrix จากนั้นให้ column on เพิ่มค่า pointer ทำจนครบ 20 column (ดูรูป) tip.... คือ data เป็นของ column ไหนก็ให้ column นั้น on อย่างวงจรที่ผมใช้ column เป็นลบ ผมก็สั่ง ให้ shift bit นั้นเป็น 0 ครับ... และก่อนจะส่งค่าใดๆทาง row ให้ off ทุก column ก่อนเสมอ ช่วยแก้เบลอได้ 100% รายละเอียดหลักๆ น่าจะมีเท่านี้ ถ้าได้อะไรใหม่ๆจะมาเล่าให้ฟังอีกที..... Dot Matrix V2มาแล้วครับ V2 แก้ bug นิดหน่อยอาจมีเหลือบ้าง ด้วย memory ที่จำกัด ผมใช้วิธี col-scan ครับ row-scan มันเปลือง mem ความสว่างสู่สีกัน source ตัวนี้มี macro ใหม่ 2-3 ตัว เช่น wr_bf เป็นคำสั่งเขียนข้อมูลไปยัง buffer แล้วแต่จะระบุเช่น ds_buf1-4 เป็นตำแหน่ง display buffer เขียนอะไรออกไปก็เห็นเลย..... cg_buf1-4 เป็นตำแหน่ง char buffer ไว้เก็บอักษรที่ต้องการแสดง..... ส่วน PUT_STR_L เป็นคำสั่งใช้ เปิดตาราง เอามาแสดงผลพร้อมกับเลื่อน ไปทางซ้ายเรือยๆจนกว่าจะเจอ byte ปิด 00h รายละเอียดที่เหลือจะอธิบายคราวหน้าครับ source code v2http://www.4shared.com/file/2Pqja7vO/dot_matrix_8x22_v2.htmlhttp://www.youtube.com/v/tTEgk5_Ft_Y.swfแจ่มบ่ล่ะ ลงทุน 300 กว่าบาทเอง...... :lol
|
|
|
บันทึกการเข้า
|
|
|
|
nonmummy
member
คะแนน 0
ออฟไลน์
กระทู้: 2
|
|
« ตอบ #42 เมื่อ: เมษายน 05, 2011, 09:06:54 pm » |
|
ผมอยากได้ วงจร full duplex intercom พอจะมีไหมครับ ถ้ามีขอรายละเอียด มาเลย นะครับ อีเมลล์ non_mummy@hotmail.com ครับ อยากได้มากๆครับ ขอบคุณครับ
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #43 เมื่อ: เมษายน 05, 2011, 11:40:38 pm » |
|
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #44 เมื่อ: มิถุนายน 12, 2011, 09:49:41 pm » |
|
Digital temperature controller (7 SEGMENT)หลังจากหายไปนาน ได้เวลาเปิด code อีกครั้ง กับ Digital temperature controller เป็น project ที่ไม่ซีเรียสมากแต่เอาไปใช้ได้จริง สามารถคุมได้ทั้งร้อนและเย็น ตั้งแต่ -55องศา ถึง 125องศาcompare routine สามารถคำนวนและเปรียบเทียบ ค่าลบได้ด้วย โดยคำนวนร่วมกับ flag tn,th,tl http://www.youtube.com/v/VDgXL8c7kcA.swfวงจรครับ ของจริง... มาว่ากันเรื่องการคำนวน มีหลักๆก็ TN ค่าอุณหภูมิ ปัจจุบันที่อ่านได้จาก ds18b20 TH ค่าอุณหภูมิ สูงสุดที่เรากำหนด TL ค่าอุณหภูมิ ต่ำสุดที่เรากำหนด เริ่มแรกให้คำนวน TH กับ TN ก่อน TN<TH ?? ผมลองสุ่มค่าดังนี้ tn+15 th+10 = tn>th tn+15 th-10 = tn>th tn+15 th-15 = tn>th tn-15 th-20 = tn>th tn-15 th+15 = tn<th** การคำนวนให้คิดเครื่องหมายก่อนถ้าเป็นบวกทั้งคู่ใช้ th-tn ถ้าเป็นลบทั้งคู่ใช้ tn-th แต่ถ้า tn เป็นบวก th เป็นลบจะคิด แต่เครื่องหมายเพราะยังไง tn ก็ต้องเยอะกว่าแนนอนอยู่แล้ว ในทางตรงกันข้าม ถ้า tn เป็นลบ th เป็นบวก tn จะมีค่า น้อยกว่า ก็ข้ามไปคำนวณ tl ต่อไป TL กับ TN ก่อน TN<TL ?? ผมลองสุ่มค่าดังนี้ tl+15 tn+10 = tn<tl tl+15 tn-10 = tn<tl tl+15 tn-15 = tn<tl tl-15 tn-20 = tn<tl tl-15 tn+15 = tn>tl** การคำนวนให้คิดเครื่องหมายก่อนเช่นเดียวกับ th แต่คราวนี้ ใช้ tn เป็นตัวตั้งลบด้วย tl หากเป็นค่าบวกทั้งคู่.... ที่เหลื่อก้จะคำนวณคล้ายๆกันแค่สลับตัวตั้งเท่านั้น..... การทำงานใน Hot mode (คุมร้อน) เมื่อ TN ต่ำกว่าหรือเท่ากับ TL รีเลย์จะทำงานและจะตัด การทำงานจนกว่าค่าของ TN จะสูงกว่าหรือเท่ากับ TH การทำงานใน Cool mode (คุมเย็น) คล้าย คุมร้อน แต่สลับกัน... พอมองภาพออกกันมั๊ยครับ (ทั้งหมดนี่จะไม่มีความหมายหากเขียนด้วย ภาษาc) Source code v2.0f http://www.4shared.com/file/gfLqfc-x/Digital_temperature_controller.htmlSource code(for nokia5110lcd) http://www.4shared.com/file/knQq0y6d/Temp_control_by_ds18b20_v10.htmlFIRMWARE 4.0Fรุ่นท้ายสุด... ผมปรับแก้ bug จนหมดแล้วครับ อีกอย่างคือยัดอะไรไม่ได้แล้ว เต็ม2kแล้วจริงๆ อยากใส่ delay time ให้ รีเลย์ แต่ยัดไม่ลงครับ ก็เลยเอาเท่าที่ได้... การตั้งค่า กด set ค้างไว้ 1 วิครับมันจะขึ้น HC_x ซึง x ก็คือ ตัวกระพริบ ถ้าเป็น C กระพริบก็ Cool คุมเย็น ถ้าเป็น H ก็คือ Hot คุมร้อน กดปุ่ม inc เพื่อตั้งค่า จากนั้นกด set อีกครั้ง หน้าจอจะแสดง Hi_t ประมาณ1วินาที จากนั้น จะเปลี่ยนเป็นตัวเลข4หลัก คือค่าอุณหภูมิสูง กดปุ่ม inc เพื่อตั้งค่าจากนั้นเลื่อนไปหลักต่อไปโดยกดปุ่ม set เมื่อตั้งค่าหลักสุดท้ายเสร็จ กดปุ่ม set อีกครั้ง หน้าจอจะเสดง Lo_t ประมาณ1วินาที จากนั้น จะเปลี่ยนเป็นตัวเลข4หลัก คือค่าอุณหภูมิต่ำ กดปุ่ม inc เพื่อตั้งค่าจากนั้นเลื่อนไปหลักต่อไปโดยกดปุ่ม set เมื่อตั้งค่าหลักสุดท้ายเสร็จ กดปุ่ม set อีกครั้ง หน้าจอจะเสดง Succ เป้นอันเสร็จการตั้งค่า การ ลบค่าอุณหภูมิที่ตั้งไว้ทั้งหมด ทำได้โดยกด ปุ่ม set กับ inc ค้าง ไว้ 1วิ หน้าจอจะแสดง CLr เท่านี้ค่าต่างๆก็จะถูกลบออกหมดแล้ว... 4.0F ผมตัด function ที่เกี่ยวกับ EEPROM ทั้งหมดออกนะครับ อยากได้ต้องไปเพิ่มกันเองครับ เหลือไว้ให้คิดเองบ้างครับ ชีวิตจะได้ มีรสชาติ...อิอิ คงไปต่อยอดกันเองได้ไม่ยากนะ... ปล. เกี่ยวกับ error msg. Er_1 = family code ไม่ตรง หรือไม่ใช่ ds18b20 ที่ต่ออยู่ แต่ผมตัดออกเพาระไม่จำเป็น. Er_2 = Device not Presence ไม่มีการตอบสนอง ต่อการ reset บน bus 1-wire ซึ่งตัว ds18b20 อาจจะเสียหรือหลุด หือสายอาจจะขาดก็ว่าไป. Er_3 = ค่าอุณหภูมิสูง มีค่าที่น้อยกว่า ค่าอุณหภูมิต่ำ. Er_4 = ค่าอุณหภูมิสูง และหรือ ค่าอุณหภูมิต่ำ มีค่าเกินย่านวัด คือ -55 ถึง +125 องศา. Er_5 = อันนี้เกี่ยวกับ EEPROM ทั้งหมด 4.0F จะไม่มี Source code v4.0f http://www.4shared.com/file/ozlAOxSW/Digital_temperature_controller.html
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #45 เมื่อ: มิถุนายน 23, 2011, 12:42:51 pm » |
|
เปิด source วันนี้เสนอ project ยามว่าง เนื่องมาจากที่บ้านผม มีเครื่องซักผ้าแบบ กึ่ง อัตโนมือ... เวลาปั่นเสร็จมันจะไม่เตื่อนใดๆทั้งสิ้น ส่วนระหว่างปั่น ผมก็จะมานั่งเล่น internet มันก็จะเพลินจนเนิ่นนาน เลยเวลาตากผ้าหรือเวลาหมดแดด ก็เลยทำเครื่องเตือนเป็น CountDown ขึ้นมาจะได้ไม่เล่นเพลินจนลืมตากผ้าดังกล่าว...เฮอๆๆ http://www.youtube.com/v/ISDyS7gfiAI.swfวงจรของจริงรายละเอียดการใช้งานCountDown ตัวนี้มีด้วยกันหลักๆ 3 โหมด คือ 1-99 วินาที,1-99 นาที,1-99 ชั่วโมง แต่ละโหมด จะมีย่อย อีก 4 แบบ คือ ตั้งเวลาปิด,เปิด ให้ alarm หรือไม่ alarm โดย dot1 หากติดคือเปิด alarm ไม่ติดคือปิด alarm ส่วน dot2 ถ้าติดคือ การตั้งเวลาเปิด ถ้าไม่ติดคือ การตั้งเวลาปิด A = sec b = min C = hourปุ่ม Set ทำงานสองหน้าที่กดปล่อย = start,stop กดค้าง = set การตั้งเวลาทำได้โดยกด set ค้างไว้ประมาน 1วินาทีจะได้ยินเสียง beep 1ครั้ง หน้าจอจะแสดง mode ให้กด + ตั้งค่า mode ตามต้องการ จากนั้นกด set 1ครั้ง จะเป็นการตั้งค่าหลัก สิบ กด + เลือก 0-9 จากนั้นกด set 1ครั้ง เป็นการตั้งหลัก หน่วย กด + เพื่อตั้งค่า กด set 1ครั้ง ตัวเลขจะหยุดกระพริบ กด set 1ครั้ง จะเห็น dot2 กระพริบแสดงว่าเวลาเริ่มเดินแล้ว ในระหว่างเวลานับถอยหลังอยู่ สามารถหยุดได้โดยกด set 1ครั้งหรือกด set ค้างไว้ประมาน 1วินาที จะได้ยินเสียง beep 1ครั้ง เป็นการกลับไปตั้งค่าใหม่อีกครั้ง... เปิด alarmเมื่อการนับถอยหลังเสร็จสิ้น จะเกิด alarm ประมาณ 30วินาที จากนั้นจะหยุดไปเอง ถ้าในระหว่างเกิด alarm อยู่แล้วต้องการปิด ให้กด set ค้างไว้ประมาน 1วินาทีจะได้ยินเสียง beep 1ครั้ง alarm จะหยุด... Source Code v1.0 แบบเต็มๆไม่มีตัด...http://www.4shared.com/file/0kusRLlr/CountDown_Timer_3Mode_With_Ala.htmlSource Code v1.2 ใส่ alarm relay เพิ่ม...http://www.4shared.com/file/JkcU-G-f/CountDown_Timer_3Mode_With_Ala.html
|
|
|
บันทึกการเข้า
|
|
|
|
PR-TRAFFIC
member
คะแนน 2
ออฟไลน์
กระทู้: 41
|
|
« ตอบ #46 เมื่อ: กันยายน 22, 2011, 05:11:49 pm » |
|
ถึงคุณ JUB ครับ ผมทำเค้าเตอร์ 5 หลัก[99999] เริ่มต้นที่ 0 โดยบวกขึ้นทีละ 1 ผมเขียนโค้ดโดย .Basic ซึ่งมันนับได้ถึง ประมาณ 65000 เพราะว่า สุดความสามารถของ Basic แล้ว [กำหนด Variables เต็มที่แล้ว NUM VAR Word] ผมอยากได้เป็น ภาษาซี ผมมีค่าน้ำชา กาแฟ ให้ครับผม ชื่อ ณรงค์ E,Mail: pr-traffic@hotmail.com tel. 0898635099
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #47 เมื่อ: กันยายน 22, 2011, 07:08:27 pm » |
|
ถึงคุณ JUB ครับ ผมทำเค้าเตอร์ 5 หลัก[99999] เริ่มต้นที่ 0 โดยบวกขึ้นทีละ 1 ผมเขียนโค้ดโดย .Basic ซึ่งมันนับได้ถึง ประมาณ 65000 เพราะว่า สุดความสามารถของ Basic แล้ว [กำหนด Variables เต็มที่แล้ว NUM VAR Word] ผมอยากได้เป็น ภาษาซี ผมมีค่าน้ำชา กาแฟ ให้ครับผม ชื่อ ณรงค์ E,Mail: pr-traffic@hotmail.com tel. 0898635099 Basic ลองแบ่งเป็น 2 word ได้หรือป่าวครับ... คุยทาง mail ได้ครับ jengmod@จีเมลล์.คอม หรือ http://www.facebook.com/pages/mcs51asm/220545897976536
|
|
|
บันทึกการเข้า
|
|
|
|
Dumrong007
member
คะแนน 0
ออฟไลน์
กระทู้: 87
|
|
« ตอบ #48 เมื่อ: กันยายน 22, 2011, 08:51:07 pm » |
|
|
|
|
บันทึกการเข้า
|
|
|
|
Dumrong007
member
คะแนน 0
ออฟไลน์
กระทู้: 87
|
|
« ตอบ #49 เมื่อ: กันยายน 22, 2011, 09:12:25 pm » |
|
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #50 เมื่อ: กันยายน 23, 2011, 02:46:10 am » |
|
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #51 เมื่อ: กันยายน 29, 2011, 11:10:18 am » |
|
หลังจากได้เขียน c ด้วย Keil ก็เกิดอาการมันส์มือเลยเอางานเก่าๆที่เคยทำ เป็น asm มาแปลงและใส่ลูกเล่นเพิ่ม code อาจยังมั่วๆอยู่นะครับ เพิ่งหัดเขียนเมื่อวาน ใครเอาไปปรับปรุงแล้วมาโพสบอกกันด้วยนะครับ http://www.youtube.com/v/2SznN6wCn64.swfdemo มันทำได้เกือบๆเท่า GLCD นั่นแหละแต่มั่นติดตรง CGROM ที่มีแค่ 8 ตัว... แต่ผมลองแล้วใช้ได้ดีในระดับหนึ่งเลย เลยเอามาให้ เพื่อนๆลองใช้กันเป็น SPI Driver ได้ไม่ต้องไปเสียเวลาเขียนใหม่... Source Code http://www.4shared.com/file/CDrbNf5o/SPI.html
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #52 เมื่อ: กันยายน 29, 2011, 11:12:18 am » |
|
ว่างๆระหว่างรอ บอร์ด v6 ป๋ามิน ทำแบบใหญ่มาเยอะลองทำแบบเล็กๆบ้าง ทำจากอะไหล่เก่าๆ 7seg ตัวนี้รู้สึกว่าจะแกะมาจาก meter taxi เก่าๆ ตอนนั้น ซื้อมา 20 บาท มีอยู่ 2ตัว ตัวใหญ่ๆอีก 2 ตัว ราคา 20 บาทคุ้มมากมาย [youtube]yZx0jkBzixw[/youtube] ครั้งนี้ผมไม่อธิบายมาก source code ผมดัดแปลงจาก code ที่เคยทำมาแล้ว เอามาแก้นิสหน่อยก็ทำงานได้เลย ตัวนี้ว่าจะออกแบบ pcb ให้เป็นเรื่องเป็นราว ไม่รู้จะไปได้แค่ไหน โปรเจคผมเน้นง่ายๆทำตามได้ไม่ยากนัก ลองไปต่อยอดเป็น display แบบ อื่นๆดูครับแล้วเอามาโชว์หน่อยก็ดี Source code keil C + PCB PDF format. + PCB EAGLE format. http://www.4shared.com/file/wDGrhopu/LED_Clock.html
|
|
|
บันทึกการเข้า
|
|
|
|
kong2550
member
คะแนน 0
ออฟไลน์
กระทู้: 1
|
|
« ตอบ #53 เมื่อ: ตุลาคม 19, 2011, 11:18:17 am » |
|
เก่งมากเลย เป็นวิทยาทานให้คนอื่นๆ มีคนแบบนี้เยอะๆ ชาติไทยเจริญรุ่งเรืองแน่นอน สุดยอดมากกกก
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #54 เมื่อ: พฤศจิกายน 09, 2011, 07:47:14 pm » |
|
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #55 เมื่อ: พฤศจิกายน 09, 2011, 07:50:49 pm » |
|
source ดัดแปลงจาก asm ของ at89s8252 ของ บ. ett ทำไว้เป็นตัวอย่าง แจ่มใช้ได้ ในวิดีโอดูไม่สวย ของจริงวิ่งได้ลื่นไหลดี Algorithms ผมเห็นแล้วยังงงในตอนแรกแต่ไม่ยาก http://www.youtube.com/v/Hcter9UdISg.swfประมาณว่า เราแบ่งและBufferข้อมูลเป็นสี่ชุดเท่ากัน ได้แก่ 1.วรรณยุกต์ 2.สระบน 3.ตัวอักษร 4.สระล่าง และมี Algorithms ของการเก็บโดยเฉพาะ (ดูได้จาก source code ของ ett) ตัวอย่างเช่น สระบน และ วรรณยุกต์ จะตรวจสอบ สระบน ก่อน และตามด้วย วรรณยุกต์ หาก สระบน ว่างหรือไม่มี Buffer สระบนจะถูกแทนที่ด้วย วรรณยุกต์ เพื่อป้องกันสระลอยเท้งเต้งเป็นต้น เมื่อได้ข้อมูลที่แยกเรียบร้อยแล้ว ก็จะนำข้อมูลไปเปิดตาราง โดยมี pointer เป็นตัวกำหนดตำแหน่ง ของข้อมูลที่อยู่ในตาราง ของตัวหนังสือแต่ละตัว เช่นข้อมูลตัวหนังสือหนึ่งตัว มีขนาด 6 byte ตัว pointer นี่แหละ ที่จะเป็นตัวชี้ว่าให้เริ่ม fetch ข้อมูล byte ไหน ทีเหลือก็เป็น การส่งให้ Display ต่อไป ดูเหมือนง่าย แต่ผมเขียนอยู่ 3 วัน (ไม่เคยทำไทยมาก่อน) :lol แต่พอเข้าใจ Algorithms แล้วไม่ยากเลย ง่ายมากๆ แถมเอาความรู้ที่ได้ไปปรับใช้กับ GLCD ได้อีก งดตอบทุกคำถามเกี่ยวกับ code ครับ...:victory: Source Code MPLAB-C18 for pic18f2550@20Mhz ไฟล์ใหม่ครับไฟล์เดิมใช้ไม่ได้นะใครโหลดไป ก่อน 26ตุลา54เวลา16.42น มาโหลดไปใหม่http://www.4shared.com/file/VtPp1QUF/Dot16x32.html
|
|
|
บันทึกการเข้า
|
|
|
|
JUB
Full Member
member
คะแนน 81
ออฟไลน์
กระทู้: 1157
|
|
« ตอบ #56 เมื่อ: พฤศจิกายน 09, 2011, 07:53:12 pm » |
|
ว่างๆ เลยเอา 7 segment serial มา upgrade ใช้ AT89LP4052 @18.432Mhz จี๊ดมาก มี Ram 256 Byte เอามาเป็น fifo-buffer แบบเวอร์ๆมากถึง 160 byte การแสดงผลออกมาเนียนกว่าใช้ AT89C2051 มาก เลยเอามาลองทำ code lock แบบ 7 segment ดู.. ก็แปลกไปอีกแบบ เพราะผมเคยเห็นแต่ CLCD... http://www.youtube.com/v/62-IsaNNCuE.swfการทำงานหน้าจอปรกกติ สามารถป้อน password 4 หลักได้ทันที ถ้า password ถูกต้องจะแสดง pass กระพริบ 3 ครั้ง ถ้า password ผิด จะแสดง err ในระหว่างการป้อน password ถ้าต้องการลบให้กด * แล้วป้อนใหม่ได้ การเปลี่ยน passwordกด # จะแสดง P-[xxxx]ใส่ password เดิม ถ้า password ผิด จะแสดง err ถ้า password ถูกต้องจะแสดง n-[xxxx] ใส่ password ใหม่ ถ้า password ผิด จะแสดง err ถ้า password ถูกต้องจะแสดง A-[xxxx] ยืนยัน password ใหม่อีกครั้ง ถ้า password ใหม่ถูกต้องจะแสดง pass ลองไปต่อยอดกันดูครับ...:victory: Source Code Keil C http://www.4shared.com/file/UVu2ov4f/Code_lock.html
|
|
|
บันทึกการเข้า
|
|
|
|
kiano♥
|
|
« ตอบ #57 เมื่อ: พฤศจิกายน 09, 2011, 11:22:50 pm » |
|
555 พี่ JUB ก็เอามาตุนไว้ด้วยหรอ LED Matrix นั่นน่ะ ผมก็จัดมา 1 ชิ้น จนบัดเด่วนี้ยังไม่มีเวลาลองเล่นเลย ยังกองอยู่่ในกล่องไปรษณีย์เหมือนเดิม
|
|
|
บันทึกการเข้า
|
|
|
|
|