Thankyou for your contribution. We never forget! Keep good work!!!
Thông báo
Collapse
No announcement yet.
tutorial cho HTPIC
Collapse
X
-
Chào các bạn.
Mình thấy quyển manual complier của bọn HTsoft cũng khá hay và đầy đủ chú ý. Do đó, thấy cái gì hay hay mình viết rùi các bạn góp ý kiến nhá. Có lẽ mình cũng nên lập thư viện cho HTPIC chứ nhỉ?? Thấy anh em dùng CCS hoạt động kinh quá
.
Đầu tiên là cách khai báo một biến đặt tại một địa chỉ nhất định trong RAM.
Ví dụ, muốn Portvar là biến đặt tại địa chỉ 0x06 thì trong ASM ta dùng lệnh sau:
Khi đó mỗi khi thao tác với biến Portvar tức là thao tác với ô nhớ 06h.Code:_Portvar EQU 06h
Trong HTPIC các bạn khai báo như sau:
Chú ý từ khóa @.Code:volatile unsigned char Portvar @ 0x06;
Chúc các bạn thành công.Technical sale at WT Microelectronics S'pore
Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com
Comment
-
Thư viện LCD 16x2 8bit mode.
Mình xin upload thư viện viết cho LCD, ở đây mình dùng 8 bit mode cho LCD 2 line x 16 colum.
Các bạn sẽ thấy là khi muốn dùng LCD thì đầu tiên các bạn khai báo thông số cho LCD như các chân RS, RW, E, LCD_PORT ở Define LCD_PORT. Mặc định mình khai báo là: LCD_PORT là PortD, RS là RA1, RW là RA2, E là RA3.Code:// LCD.h #ifndef LCD_H #define LCD_H # include <pic.h> //============== Using LCD - 2 line, 16 colum #define LCD_MODE_2x16 (TRUE) // HDM16216H-2, HDM16216H-4, HDM16216H-5, HDM16216H-B, HDM16216H-D, HDM16216L-2, HDM16216L-5, HDM16216L-7, HDM16216L-D, HDM16216L-B, HDM16216H-I #define LCD_CURSOR_BLINK (FALSE) // Blink/Noblink cursor mode #define LCD_CURSOR_ON (TRUE) // Cursor visible #define LCD_CURSOR_INCREMENT (TRUE) // Set left-to-right cursor movement #define LCD_CURSOR_SHIFT (FALSE) // Shift display on entry #define LCD_DISPLAY_ON (TRUE) // Turn display on/off #define LCD_ALLOW_USER_CHARS (TRUE) // Controls whether display uses ASCII for control chars or uses user-defined chars in lcd_putc() #define LCD_ENABLE_GETC (TRUE) // Save code space by setting to FALSE #define LCD_ENABLE_GOTOXY (TRUE) // any functions which you will not #define LCD_ENABLE_PRINTF (TRUE) // need in your application. #define LCD_ENABLE_UNSCROLL (TRUE) #define LCD_ENABLE_SCROLL (TRUE) #define LCD_ENABLE_CLEAR (TRUE) #define LCD_MAXROWS ((unsigned char)(2)) #define LCD_MAXCOLS ((unsigned char)(16)) # define LCD_MULTI_LINE (TRUE) #define LCD_8_BIT_MODE (TRUE) //======================= Define LCD_PORT #define LCD_DATA_PORT PORTD // Port on which LCD data lines are connected #define LCD_TRIS_PORT TRISD // Need to specify the corresponding TRIS # define LCD_RS RA1 # define LCD_RW RA2 # define LCD_E RA3 # define LCD_TRIS_E TRISA1 # define LCD_TRIS_RW TRISA3 # define LCD_TRIS_RS TRISA2 // ======================= Define command code #define LCD_COMMAND_CLEAR ((unsigned char)(0x01)) //1.53 ms // Clear screen, home cursor, unshift display #define LCD_COMMAND_HOME ((unsigned char)(0x02)) //1.53 ms // Home cursor, unshift display #define LCD_COMMAND_BACKSPACE ((unsigned char)(0x10)) // Move cursor left one (destructive based on LCD_DESTRUCTIVE_BS) #define LCD_COMMAND_FWDSPACE ((unsigned char)(0x14)) // Move cursor right one #define LCD_COMMAND_PANLEFT ((unsigned char)(0x18)) // Move screen left one #define LCD_COMMAND_PANRIGHT ((unsigned char)(0x1C)) // Move screen right one // ==================== Declare some functions void delay_us (unsigned char us); void delay_ms(unsigned char ms); unsigned char LCD_getByte (void); void LCD_PrByte (unsigned char c); void LCD_Command(unsigned char c); void LCD_PrChar (unsigned char c); void LCD_gotoXY(unsigned char row, unsigned char col); unsigned char LCD_getChar (void); // Read character at cursor void LCD_Init(void); void LCD_PrString (const char* message); #endif
Các bước thực hiện:
- Khởi tạo LCD dùng lệnh: LCD_Init();
- Thao tác ghi đọc bình thường, chú ý nhất là các hàm: LCD_gotoXY, LCD_PrString, LCD_PrChar, LCD_Command.
Tiếp theo là file LCD.c là file thực hiện:
Các bạn thêm 2 file này vào trong Project của mình và nhớ include file LCD.h vào chỗ đầu file chứa hàm Main nhé.Code://LCD.c # include "lcd.h" // ==== Some constants for LCD 16x2 const unsigned char const LCD_ROW_ADDRESS[] = // Row/Column information for LCD_gotoxy() { 0x00, // Line 1 0x40 // Line 2 }; const unsigned char const LCD_INIT_STRING [] = // LCD Init String on powerup { 0b00000001, // Clear display 0b00000010, // Home cursor }; //========================================================================================== void delay_us (unsigned char us){ while(us--){ asm("nop"); asm("nop"); }; } //========================================================================================== void delay_ms(unsigned char ms){ unsigned char i, j; while(ms--){ for (i = 0; i < 20; i++) for (j = 0; j < 100; j++) asm("nop"); }; } // ============================================================================================ unsigned char LCD_getByte (void){ unsigned char retval; // Return value LCD_TRIS_PORT = 0xFF; // Set port to all input LCD_RW = 1; // Tell LCD we want to read delay_us(2); LCD_E = 1; // Do the read delay_us(2); retval = LCD_DATA_PORT; LCD_E = 0; LCD_TRIS_PORT = 0x00; // Set port back to outputs return (retval); } //==================================================================================================== void LCD_PrByte (unsigned char c){ // Write byte to port in current RS mode unsigned char RS_Status; RS_Status = LCD_RS; // Get old pin state LCD_RS = 0; // Force into command mode to read state while (LCD_getByte () & 0x80); // Wait for read state if (RS_Status) LCD_RS = 1; // Restore RS to old state delay_us (1); LCD_RW = 0; // Set to write mode delay_us (1); LCD_DATA_PORT = c; // Send the character out LCD_E = 1; delay_us(1); LCD_E = 0; } //================================================================================================ /*Ham yeu cau goi lenh dieu khien LCD*/ void LCD_Command(unsigned char c){ // Send command to LCD port LCD_RS = 0; LCD_PrByte(c); } //================================================================================================ /*Ham yeu cau goi du lieu hien thi len LCD*/ void LCD_PrChar (unsigned char c){ // Write character to LCD LCD_RS = 1 ; LCD_PrByte(c); } //================================================================================================= void LCD_gotoXY(unsigned char row, unsigned char col){ if (row > LCD_MAXROWS) // Range limit row = LCD_MAXROWS; if (col > LCD_MAXCOLS) col = LCD_MAXCOLS; row = LCD_ROW_ADDRESS[row-1]; // Get address of first byte on desired row row += col - 1; LCD_Command (0x80 | row); // Write new cursor address } // ===================================================================================== unsigned char LCD_getChar (void) // Read character at cursor { unsigned char retval; // Return value LCD_RS = 1; retval = LCD_getByte (); LCD_RS = 0; return (retval); } //======================================================================================= void LCD_Init(void){ unsigned char i; LCD_TRIS_PORT = 0x00; LCD_TRIS_E = 0; LCD_TRIS_RW = 0; LCD_TRIS_RS = 0; LCD_E = 0 ; LCD_RS = 0; LCD_RW = 0; //delay_ms(100); // Tao tre 100ms cho LCD khoi dong LCD_PrByte (0b00111000); //Function set ; DL = 1(8 bits) , N = 1 (2 lines), F = 0 (5x8 dots) LCD_PrByte (0b00001100); // Display on/off control LCD_PrByte (0b00000110); // Entry mode set LCD_PrByte(LCD_COMMAND_CLEAR); LCD_PrByte(LCD_COMMAND_HOME); } // =================================================================================================== void LCD_PrString (const char* message){ // Write message to LCD (C string type) while (*message) // Look for end of string LCD_PrChar (*message++); // Show and bump }
Các bạn có thể mô phỏng bằng Proteus chạy rất ok. Lúc nào gửi tiếp mấy cái đã test.
Chúc các bạn thành công.Technical sale at WT Microelectronics S'pore
Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com
Comment
-
Thư viện I2C Master.100 Khz
Tiếp theo là về module I2C, một chuẩn giao tiếp quan trọng khi giao tiếp với ngoại vi như EEPROM, RTS(DS1307),...
Do đó, mình xin cung cấp cho các bạn các hàm và thực thi của các hàm này trên HTPIC. Mình có tham khảo cả ở bọn htsoft nhưng nó viết sai một số hàm không chạy được, mình đã viết lại toàn bộ.
Đầu tiên là hàm I2C.h:
Và sau đây là thực thi của các hàm này:Code://I2C.h //Declare some functions void I2C_Init(void); // khởi tạo I2C ở chế độ Master, Baud = 100 Khz void I2C_waitForIdle(void); // Chờ khi nào đường bus ở chế độ Idle (rảnh rỗi) void I2C_Start(void); // Khởi động I2C - Master chiếm đường bus void I2C_repStart(void); // Chế độ Restart void I2C_stop(void); // Stop I2C - Master nhường đường bus cho thiết bị khác unsigned char I2C_write( unsigned char I2CWriteData ); // ghi một byte lên đường SDA unsigned char I2C_read( unsigned char ack ); // Đọc một byte với mã ACK (ACK = 0 nếu ack = 1, và ACK = 1 nếu ack = 0) -> dùng xác nhận từ master đối với slave. void I2C_NACK(void); // tạo bít Not Ack
Còn việc dùng nó quá đơn giản, ví dụ với Ds1307 thì đầu tiên bạn phải:Code:// I2C.c # include "pic.h" # include "I2C.h" //====================================================================================================== void I2C_Init(void){ /* // Configure for Master Mode SSPM3 = 1; SSPM2 = 0; SSPM1 = 0; SSPM0 = 0; ss // I2C Master Mode, clock = Fosc/(4*(SSPADD + 1)); WCOL = 0; //No conllision SSPEN = 1; // Enables the serial port and */ SSPCON = 0b00101000; // set IIC port to Master mode with BRG SSPSTAT = 0b00000000; // Standard speed mode - 100Hz SSPCON2 = 0; //TRIS_SCL = 0; //TRIS_SDA = 0; // configure SDA and SCL as Output SSPADD = 9; // BAUD = 100KHz SSPIF = 0; // clear SSPIF interrupt flag BCLIF = 0; // clear bus collision flag STAT_CKE = 0; // use I2C levels worked also with '0' STAT_SMP = 1; // disable slew rate control worked also with '0' } //============================================================================= void I2C_waitForIdle(void) { while (( SSPCON2 & 0x1F ) | STAT_RW) ; //CLRWDT(); // wait for idle and not writing } //============================================================================= void I2C_Start(void){ //SSPIF = 0; SEN = 1; //while(!SSPIF); while(SEN); } //============================================================================== void I2C_repStart(void) { I2C_waitForIdle(); RSEN = 1; } //============================================================================= void I2C_stop(void) { I2C_waitForIdle(); PEN = 1; } //============================================================================== unsigned char I2C_write( unsigned char I2CWriteData ){ I2C_waitForIdle(); SSPBUF = I2CWriteData; I2C_waitForIdle(); return (!ACKSTAT); // function returns '1' if transmission is acknowledged // 1: Success // 0: Fail to send } //============================================================================ unsigned char I2C_read( unsigned char ack ){ unsigned char I2C_ReadData; I2C_waitForIdle(); RCEN = 1; I2C_waitForIdle(); I2C_ReadData = SSPBUF; I2C_waitForIdle(); if ( ack ) ACKDT=0; else ACKDT = 1; ACKEN = 1; // send acknowledge sequence I2C_waitForIdle(); return( I2C_ReadData ); } /******************************************************************************************/ void I2C_NACK(void) { I2C_waitForIdle(); if (ACKSTAT){ PEN=1; //Stop I2C_waitForIdle(); //Wait until action is finished while(PEN); }; }
- Khởi tạo I2C bằng I2C_Start();
- Start bằng I2C_Start();
- Chọn slave giao tiếp bằng cách ghi địa chỉ và bit RW tương ứng với chế độ đọc hay ghi.
- Ghi dữ liệu lựa chọn byte nào cần ghi hay cần đọc trong bảng RAM của DS1307.
- Ghi dữ liệu hay là đọc dữ liệu.
Chú ý: khi ghi xong, muốn đọc thì phải làm lại tức là phải restart nhé.
Chúc các bạn thành công.Technical sale at WT Microelectronics S'pore
Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com
Comment
-
TMR0 là thanh ghi chứa giá trị đếm của Timer 0, đây là thanh ghi 8 bit, nó chỉ có một thanh ghi đó thôi, không giống như Timer 16 bit, ví dụ Timer 1 bạn sẽ tìm được TMR1H, TMR1L.Nguyên văn bởi phucvinh_el Xem bài viếtcho em hoi
bit TMRO la bit gi` va anh cho TMRO=6 la co y nghia nhu the nao
em tim` trong dât shet ko thay noi den cai bit nay ma cung ko co thanh ghi nao nhu nay ca
Tác giả nạp trước cho bộ đếm giá trị là 6, Timer 0 sẽ đếm từ giá trị này đến 255 thì tràn. Chắc ý tác giả muốn nạp trước giá trị 6 (trừ 1 lệnh hiệu chỉnh) để đựoc 250 x prescaler chu kỳ cho một lần tràn.
Ý tưởng thì có lẽ là vậy, nhưng thực tế nó sẽ chạy không hoàn toàn chính xác như vậy.
Comment
-
mình muốn phát xung 400us qua cổng RS 232 để truyền qua con MAX 232 để phát sóng FM bạn có thể chỉ giùm không ?Nguyên văn bởi ngohaibac Xem bài viếtTiếp theo là về module I2C, một chuẩn giao tiếp quan trọng khi giao tiếp với ngoại vi như EEPROM, RTS(DS1307),...
Do đó, mình xin cung cấp cho các bạn các hàm và thực thi của các hàm này trên HTPIC. Mình có tham khảo cả ở bọn htsoft nhưng nó viết sai một số hàm không chạy được, mình đã viết lại toàn bộ.
Đầu tiên là hàm I2C.h:
Và sau đây là thực thi của các hàm này:Code://I2C.h //Declare some functions void I2C_Init(void); // khởi tạo I2C ở chế độ Master, Baud = 100 Khz void I2C_waitForIdle(void); // Chờ khi nào đường bus ở chế độ Idle (rảnh rỗi) void I2C_Start(void); // Khởi động I2C - Master chiếm đường bus void I2C_repStart(void); // Chế độ Restart void I2C_stop(void); // Stop I2C - Master nhường đường bus cho thiết bị khác unsigned char I2C_write( unsigned char I2CWriteData ); // ghi một byte lên đường SDA unsigned char I2C_read( unsigned char ack ); // Đọc một byte với mã ACK (ACK = 0 nếu ack = 1, và ACK = 1 nếu ack = 0) -> dùng xác nhận từ master đối với slave. void I2C_NACK(void); // tạo bít Not Ack
Còn việc dùng nó quá đơn giản, ví dụ với Ds1307 thì đầu tiên bạn phải:Code:// I2C.c # include "pic.h" # include "I2C.h" //====================================================================================================== void I2C_Init(void){ /* // Configure for Master Mode SSPM3 = 1; SSPM2 = 0; SSPM1 = 0; SSPM0 = 0; ss // I2C Master Mode, clock = Fosc/(4*(SSPADD + 1)); WCOL = 0; //No conllision SSPEN = 1; // Enables the serial port and */ SSPCON = 0b00101000; // set IIC port to Master mode with BRG SSPSTAT = 0b00000000; // Standard speed mode - 100Hz SSPCON2 = 0; //TRIS_SCL = 0; //TRIS_SDA = 0; // configure SDA and SCL as Output SSPADD = 9; // BAUD = 100KHz SSPIF = 0; // clear SSPIF interrupt flag BCLIF = 0; // clear bus collision flag STAT_CKE = 0; // use I2C levels worked also with '0' STAT_SMP = 1; // disable slew rate control worked also with '0' } //============================================================================= void I2C_waitForIdle(void) { while (( SSPCON2 & 0x1F ) | STAT_RW) ; //CLRWDT(); // wait for idle and not writing } //============================================================================= void I2C_Start(void){ //SSPIF = 0; SEN = 1; //while(!SSPIF); while(SEN); } //============================================================================== void I2C_repStart(void) { I2C_waitForIdle(); RSEN = 1; } //============================================================================= void I2C_stop(void) { I2C_waitForIdle(); PEN = 1; } //============================================================================== unsigned char I2C_write( unsigned char I2CWriteData ){ I2C_waitForIdle(); SSPBUF = I2CWriteData; I2C_waitForIdle(); return (!ACKSTAT); // function returns '1' if transmission is acknowledged // 1: Success // 0: Fail to send } //============================================================================ unsigned char I2C_read( unsigned char ack ){ unsigned char I2C_ReadData; I2C_waitForIdle(); RCEN = 1; I2C_waitForIdle(); I2C_ReadData = SSPBUF; I2C_waitForIdle(); if ( ack ) ACKDT=0; else ACKDT = 1; ACKEN = 1; // send acknowledge sequence I2C_waitForIdle(); return( I2C_ReadData ); } /******************************************************************************************/ void I2C_NACK(void) { I2C_waitForIdle(); if (ACKSTAT){ PEN=1; //Stop I2C_waitForIdle(); //Wait until action is finished while(PEN); }; }
- Khởi tạo I2C bằng I2C_Start();
- Start bằng I2C_Start();
- Chọn slave giao tiếp bằng cách ghi địa chỉ và bit RW tương ứng với chế độ đọc hay ghi.
- Ghi dữ liệu lựa chọn byte nào cần ghi hay cần đọc trong bảng RAM của DS1307.
- Ghi dữ liệu hay là đọc dữ liệu.
Chú ý: khi ghi xong, muốn đọc thì phải làm lại tức là phải restart nhé.
Chúc các bạn thành công.
Comment
-
Anh Ngô Hài Bắc oi8 cho em hỏi một chút. Em lấy code sau dùng cho con PIC 16F877A trong mạch báo nhiệt độ nhưng khi em làm thử thì 2con led 7 đoạn nó không sáng gì cả.Em nghĩ chắc là code thiếu cái gì đó. Mong anh chỉ giáo cho em.Em có gửi kèm schematic của mach và code cua nó.Attached Files
Comment
-
cho em hỏi về lập trình C cho Pic
Chào các bạn,
ah, mình định dùng camera để đưa dữ liệu vào máy tính, và nhờ VDK xử lý dữ liệu và tương tác với người sử dụng, ví dụ tren giao diẹn windown, học sinh có thể chọn 1 giá trị khoảng cách giữa hai khe hẹp đến màn, thí trên giao diện sẽ xuất hiện giá trị khoảng vân tương ứng,
mình chọn lập trình C vì minh đọc trên mạng thấy nếu cần cho việc thiết kế giao diện nhiều hơn thì nên chọn cách lập trình C cho VDK, và PIC 18F4550 thì dễ dùng cho lập trình C vì thế mình chọn và đã mua xong hết các thiết bị cần thiết rồi.
Nhưng đến lúc bắt tay vào việc lập trình cho PIC thì mình k có tài liệu về lập trình C cho VDK, và với PIC 18F4550 thì mình cần đọc những lài liệu nào để có thể lạp trình C cho nó?
Bạn nào có kinh nghiệm thì giúp mình với.
Comment
-
ko bit a dùng camera làm j trong trường hợp này ? vì rõ ràng học sinh nhấp chuột vào màn hình (giá trị khoảng vân sẽ xuất hiện ) thì mọi thao tác đều nằm trong sự kiểm soát PC --> PIC và camera ko dùng .Nguyên văn bởi camthach Xem bài viếtChào các bạn,
ah, mình định dùng camera để đưa dữ liệu vào máy tính, và nhờ VDK xử lý dữ liệu và tương tác với người sử dụng, ví dụ tren giao diẹn windown, học sinh có thể chọn 1 giá trị khoảng cách giữa hai khe hẹp đến màn, thí trên giao diện sẽ xuất hiện giá trị khoảng vân tương ứng,
mình chọn lập trình C vì minh đọc trên mạng thấy nếu cần cho việc thiết kế giao diện nhiều hơn thì nên chọn cách lập trình C cho VDK, và PIC 18F4550 thì dễ dùng cho lập trình C vì thế mình chọn và đã mua xong hết các thiết bị cần thiết rồi.
Nhưng đến lúc bắt tay vào việc lập trình cho PIC thì mình k có tài liệu về lập trình C cho VDK, và với PIC 18F4550 thì mình cần đọc những lài liệu nào để có thể lạp trình C cho nó?
Bạn nào có kinh nghiệm thì giúp mình với.
Còn nếu í a là học sinh chỉ vào bảng ( máy chiếu sẽ chiếu lên bảng) , camera nhận hình ảnh vị trí tay học sinh đang chỉ --> đưa về PC sử lí --> wa khủng với 1 ng chưa bit lập trình C cho PIC như thế nào.
A hình như đang hiểu sai về công dụng của PIC và camera trong trường hợp này . Cách đơn giản và hiệu quả nhất là :
- Mua 1 bộ thu phát IR hoặc RF
- Mạch thu gắn thêm con PLS2030 ( tên con này ko nhớ rõ , chỉ nhớ là tạo cổng COM ảo) . Còn nếu dùng PIC 4550 thì khỏi cần vì bản thân PIC này đã có module giao tiếp USB
- Viết chương trình nhận tín hiệu từ bộ Tx , đưa vào PIC sử lí , oy truyền tín hiệu điều khiển lên PC
- Tại PC , a viết chương trình nhận tín hiệu từ cổng USB ( do PIC gửi lên) bằng VB hoặc Delphi. Đây là công đoạn giao tiếp PC chứ ko có chi hết.
Giao tiếp PC thì a bit oy . Vd : trên mạch phát TX , nhấn nút 1 thì ra lệnh cho chuột click đúp vào my Computer.
Comment
-
Cam on ban Zz-bi-Zz,Nguyên văn bởi Zz_Bi_zZ Xem bài viếtko bit a dùng camera làm j trong trường hợp này ? vì rõ ràng học sinh nhấp chuột vào màn hình (giá trị khoảng vân sẽ xuất hiện ) thì mọi thao tác đều nằm trong sự kiểm soát PC --> PIC và camera ko dùng .
Còn nếu í a là học sinh chỉ vào bảng ( máy chiếu sẽ chiếu lên bảng) , camera nhận hình ảnh vị trí tay học sinh đang chỉ --> đưa về PC sử lí --> wa khủng với 1 ng chưa bit lập trình C cho PIC như thế nào.
A hình như đang hiểu sai về công dụng của PIC và camera trong trường hợp này . Cách đơn giản và hiệu quả nhất là :
- Mua 1 bộ thu phát IR hoặc RF
- Mạch thu gắn thêm con PLS2030 ( tên con này ko nhớ rõ , chỉ nhớ là tạo cổng COM ảo) . Còn nếu dùng PIC 4550 thì khỏi cần vì bản thân PIC này đã có module giao tiếp USB
- Viết chương trình nhận tín hiệu từ bộ Tx , đưa vào PIC sử lí , oy truyền tín hiệu điều khiển lên PC
- Tại PC , a viết chương trình nhận tín hiệu từ cổng USB ( do PIC gửi lên) bằng VB hoặc Delphi. Đây là công đoạn giao tiếp PC chứ ko có chi hết.
Giao tiếp PC thì a bit oy . Vd : trên mạch phát TX , nhấn nút 1 thì ra lệnh cho chuột click đúp vào my Computer.
Nhưng mình muốn nói rõ hơn là hiện tại mình có sẵn bộ thí nghiệm giao thoa với ánh sáng laze đỏ. và đã tạo ra một hệ thống vân giao thoa rồi (cho HS quan sát thực tế).
Và bạn biết là khi mình di chuyển vị trí nguồn sáng laze thì hệ vân giao đó sẽ thay đổi theo. (khoảng vân i sẽ tăng hoặc giảm phụ thuộc vào vị trí nguồn laze D).
Vấn đề của mình là muốn chứng minh điều này bằng thí nghiệm giao thoa đó ghép nối qua máy tính. Trên giao diện Windown, HS sẽ chọn 1 vị trí D (D =40cm), máy tính sẽ điều khiển vị trí của nguồn laze đến đúng vị trí D đã chọn đấy thông qua PIC, và camera sẽ nhận tín hiệu lúc này đưa về PIC xử lý và đưa kết quả khoảng vân i (i = 0.0005cm) lên giao diện Windown.
Vì mình là giáo viên cấp 3, thí nghiệm ở trường thì hơi lạc hậu..
, mình muốn HS có cái tool để học hiện đại hơn mà chờ nhà nước cấp cho thì chắc....HS của mình đã ra trường rồi
. Nên mình tự bỏ tiền túi và mày mò để làm thui. Hi vọng nhờ các anh giúp đỡ.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi bqvietBqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
-
Channel: Thiết bị điện tử cá nhân
hôm nay, 17:17 -
-
Trả lời cho Xin hỏi về mạch thu FM/AM trong catsettebởi nguyendinhvanTheo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
-
Channel: Điện thanh
Hôm qua, 19:59 -
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi afrendlyCó vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
-
Channel: Thiết bị điện tử cá nhân
04-12-2025, 01:27 -
-
Trả lời cho Máy điện châm ?bởi nick22Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
-
Channel: Điện tử y sinh
01-12-2025, 13:23 -
-
Trả lời cho Làm thế nào để check IC LM358bởi thetungĐể check IC sống hay chết thì đơn giản : bạn lắp cái mạch ( khuếch đại hoặc dao động ) chạy bằng con IC đó ,nhưng vị trí IC thì lắp cái đế .... thế là cứ cắm rút thì biết . Còn không thì kiếm cái này : https://shopee.vn/Xu-M%C3%A1y-ki%E1%...di-%C4%91%E1%B...
-
Channel: Hướng dẫn tìm thông tin linh kiện
28-11-2025, 14:34 -
-
bởi ngochung90Tình hình là em có mua mạch 3s về để hàn vào khối pin 12v, hàn xong em đo tại các chân từ B-, B1, B2, B+ thì điện áp pin vẫn đủ 12,6v, nhưng tại 2 chân ra P- P+ thì đo chỉ được 6,3v là bị sao các bác, và chân P- P + này đồng thời là chân sạc xả thì mình cắm sạc xả cùng lúc được ko ạ
...-
Channel: Điện tử dành cho người mới bắt đầu
28-11-2025, 10:32 -
-
Trả lời cho Làm thế nào để check IC LM358bởi nguyendinhvanViệc đó tùy thuộc trình độ khoa học kỹ thuật công nghệ ứng dụng hiện tại thôi.
Trong datasheet,họ đưa ra nhiều thông số. Tùy theo khả năng , và những thông số họ cần, họ sẽ kiểm tra casc số đo có khớp với số liệu trong datasheet...-
Channel: Hướng dẫn tìm thông tin linh kiện
27-11-2025, 18:00 -
-
bởi kqbn9091Em có mạch AT89s8253 đang cần sửa số serial no của CHIP mà giờ lâu quá rồi không dùng keil nên không biết phải làm sao, trong khi chỉ còn file hex. Mạch nạp thì progris khi viết không sửa được số serial của IC. Rất cần bác nào còn làm về 89...
-
Channel: Vi điều khiển họ 8051
27-11-2025, 11:13 -

Comment