Thứ Bảy, 29 tháng 8, 2015

Giao tiếp màn hình TFT 2.4, 3.2 inch, full hiển thị và cảm ứng AVR, STM32




                                                    Một số hình ảnh về màn hình touch
                                                   


1.     Giới Thiệu.
-Màn hình TFT 3.2 inch là màn hình hiển thị, có chế độ cảm ứng touch screen.
Thông số kỹ thuật của màn hình TFT 3.2 inch:
Ø Điện áp hoạt động : 5V
Ø Độ phân giải 240x320 với 262K màu
Ø Chuẩn giao tiếp 2 chế độ 8 bit và 16 bit.

Ø Hỗ trợ cảm ứng điện trở, khe cắm thẻ nhớ SD
Sơ đồ chân:

Số thứ tự
Tên chân
Chức năng
1
GND
Nối mass nguồn 5V
2
VCC
Nối nguồn 5V
3,18,19,20,21,22,29
NC
Not connect
4
RS
RS=0 ghi lệnh
RS=1 ghi data
5
WR
1 xung cạnh lên trên chân WR, sẽ ghi data lên LCD
6
RD
1 xung cạnh lên trên chân RD, đọc trạng thái LCD
7-14
DB8-DB15
8 bit cao data
15
CS
CS=0 : Gửi lệnh lên LCD
CS=1: Gửi data lên LCD
16
F-CS
F-CS: Sử dụng bộ nhớ flash ngoài
17
REST
Reset tích cực âm
19
LED_A
Chân Anot đèn nền
23
SD_CS
Sử dụng giao tiếp SPI với thẻ nhớ SD (chân chọn Slave)
24
SD_DIN
Sử dụng giao tiếp SPI với thẻ nhớ SD (gửi lệnh command qua chân này)
25
SD_CLK
Sử dụng giao tiếp SPI với thẻ nhớ SD (chân tạo xung clock)
26
SD_DO
Sử dụng giao tiếp SPI với thẻ nhớ SD (chân đọc data từ thẻ nhớ SD)
27
T-IRQ
Khi có cảm ứng, chân này được kéo xuống mức 0.
28
T-DO
Sử dụng chức năng cảm ứng, giao tiếp SPI (đọc data-nối MISO)
30
T-DIN
Sử dụng chức năng cảm ứng, giao tiếp SPI (gửi data-nối MOSI)
31
T-CS
Sử dụng chức năng cảm ứng, giao tiếp SPI (chọn Slave)
32
T-CLK
Sử dụng chức năng cảm ứng, giao tiếp SPI (chân tạo xung clock)
33-40
DB7-DB0
8 bit thấp data(Nối GND trong mode 8 bits)


1.       Phương Thức Giao Tiếp.
Ø  Giao tiếp TFT với vi điều khiển: Sử dụng vào ra IO, giao tiếp SPI
-Chức năng screen (hiển thị):
   +Giao tiếp 8 bit : Sử dụng 8 bit cao, 8 bit thấp nối GND.
   +Giao tiếp 16 bit: Sử dụng 8 bit cao và 8 bit thấp.
·        Trong chế độ 8 bit: Gửi 8 bit cao trước, sau đó gửi 8 bit thấp.
   Sample:  VH, VL theo thứ tự là 8 bits cao và 8 bits thấp của data.
           xuat_data_8bit(VH);
            LCD_WR_OFF;
            LCD_WR_ON;
            xuat_data_8bit(VL);         
            LCD_WR_OFF;
            LCD_WR_ON;


-         Nhận xét:
+ Ưu điểm:Tiết kiệm được chân vi điều khiển (chỉ sử dụng 8 chân để truyền data cho màn hình TFT)
+ Nhược điểm: Tốc độ chậm hơn so với 16 bit.




·        Trong chế độ 16 bit: Sử dụng cả 16 chân DB0-DB15 để truyền data
   Sample:  VH, VL theo thứ tự là 8 bits cao và 8 bits thấp của data.

           PORT_H_Data=VH;
            LCD_WR_OFF;
            LCD_WR_ON;
            PORT_L_Data=VL;
            LCD_WR_OFF;
            LCD_WR_ON;


-         Nhận xét:
+ Ưu điểm:Tốc độ nhanh vì chế độ là song song, trực tiếp.
                                        + Nhược điểm: Không tiết kiệm chân vi điều khiển sử dụng
-Quá trình khởi tạo màn hình TFT (theo thứ tự hàm init)
   * Đưa chân CS =1, tạo 1 xung cạnh xuống  và 1 xung cạnh lên trên chân RESET để đánh thức IC màn hình TFT
   * Tiếp tục đưa chân RD và chân WR =1 để ghi lệnh cho TFT.

   + Set SRAM nội
   + Set SS và SM bit
   + Set 1 line ngược
   + Set viết GRAM và BGR=1
   + Resize thanh ghi
   + Thiết lập cổng sau và trước
   + Thiết lập khu vực không hiển thị
   + Hàm FMARK
  + Thiết lập giao tiếp RGB
  + Đánh dấu vị trí
  + Giao diện RGB
  + SAP, BT[3:0], AP, DSTB,
  SLP, STB
  + DC1[2:0], DC0[2:0],
  VC[2:0]
  + Điện áp VREG1OUT
  + VDV[4:0] để khuếch đại VCOM
  + SAP, BT[3:0], AP, DSTB,
  SLP, STB
  + DC1[2:0], DC0[2:0],
  VC[2:0]
  + Điện áp tham chiếu nội Vci




Ø Chế độ cảm ứng màn hình TFT.
-         Sử dụng giao tiếp SPI, ic chức năng cảm ứng trên màn hình là XPT2046
-         Màn hình nhận data qua chân DIN, nhận bit MSP trước
-         MCU nhận data qua chân T-DO


·        Quá trình khởi tạo chế độ SPI, truyền data, nhận data
-Khởi tạo: Đưa các chân CS, SCK, MOSI (DIN) lên 1.


/***********************************************************************************************
Chuc nang    :                       Ham dung de khoi tao cho giao tiep SPI: Che do cam ung (Mode touch).
Tham so                    :
Tra ve                        :                       Khong
***********************************************************************************************/
void spistar(void)
{
              CS=1;
             DCLK=1;
             DIN=1;
             DCLK=1;
}







-Truyền data: Data được gửi bit cao (MSB) trước, tạo 1 xung cạnh lên trên chân SCK để truyền từng bit trên đường truyền MOSI (DIN).
                                       
/***********************************************************************************************
Chuc nang    :                       Ham dung de ghi data len IC cam ung
Tham so                    :       Data can truyen (Truyen bit MSP truoc)
Tra ve                        :                       Khong
***********************************************************************************************/

void WriteCharTo7843(unsigned char num)
{

    unsigned char count=0;
    unsigned char temp;
    temp=num;
    DCLK=0;
    for(count=0;count<8;count++)
    {
        if(temp&0x80)
        DIN=1;
        else
        DIN=0;

        temp=temp<<1;

        DCLK=0;               
        DCLK=1;
  }
}
-Nhận data: Data được nhận bit cao (MSB) trước, bằng cách tạo xung cạnh xuống để lấy bit dữ liệu.

/***********************************************************************************************
Chuc nang    :                       Ham dung doc data tu ic cam ung
Tham so                    :       Khong
Tra ve                        :                       Data nhan ve (16bit)
***********************************************************************************************/

u16 ReadFromCharFrom7843()
{
            u8 count=0;
            u16 Num=0;
            for(count=0;count<12;count++)
            {
                        Num<<=1;              
                        DCLK=1; //delay_us(3);              
                        DCLK=0; //delay_us(3);
                        if(DOUT)
                        {
                                    Num|=1;
                        }
                       
            }

return(Num);

}



>>>>>>>Code cho AVR (ATMEGA32) và ARM liên hệ: DoAnDienTu

Thứ Sáu, 21 tháng 8, 2015

Điều khiển thiết bị bằng SmartPhone (thực hiện trên kit MSP430G2553)

Chi tiết đặt lệnh AT cho module HC05, xem chi tiết ở link sau:  http://tambkstar.blogspot.com/2015/08/at-lenh-at-cho-hc05.html

Về cách thức điều khiển thiết bị bằng SmartPhone bằng các dòng vi điều khiển thì hoàn toàn như nhau. Sử dụng giao tiếp UART của vi điều khiển và module bluetooth HC05 (mặc định mật khẩu kết nối là 1234, tốc độ baud là 9600: thay đổi bằng đặt lệnh AT).

Với dòng MSP của hãng TI, đây là loại vi xử lý 8 bit, tích hợp sẵn trên kit, sử dụng IDE là energia (sử dụng hoàn toàn giống như arduino).

Code full, liên hệ : DoAnDienTu

Link video test: https://www.youtube.com/watch?v=GKC4KlrqGco


Thứ Sáu, 7 tháng 8, 2015

CONTROLLER PS2 AND HC05 WITH ATMEGA8 (ROBOCON 2015)

//Code phat

    #include <avr/io.h>
#include <util/delay.h>
//Ham gui du lieu
uint8_t TransmitByte(uint8_t chr)

{
    while((UCSRA&(1<<UDRE)) == 0); //thoai vong lap : thanh ghi UDR trong
    UDR=chr;
}
main()
{
     UCSRA=0x00;
     UCSRB=0x08;
     UCSRC=0x86;
/* f=8Hz, toc do baud=57600*/
UBRRH=0x00;
     UBRRL=0x08;
DDRC=0x00;
PORTC=0xFF;
while(1)
{
   if((PINC & _BV(PC4))==0)
{
            _delay_ms(10);
if((PINC & _BV(PC4))==0)
{
                TransmitByte('1');
while((PINC & _BV(PC4))==0);
}
}
   if((PINC & _BV(PC5))==0)
{
            _delay_ms(10);
if((PINC & _BV(PC5))==0)
{
                TransmitByte('2');
while((PINC & _BV(PC5))==0);
}
}
}
}

/////////////////////////////////////////////////////////////////////////////////////////////
//Code thu
    #include <avr/io.h>
#include <util/delay.h>
uint8_t ReceiveByte()

{
    while((UCSRA&(1<<RXC)) == 0);
    return UDR;

}
main()
{
     uint8_t Ma_Lenh;
     UCSRA=0x00;
UCSRB=0x18; //RXEN=TXEN=1
UCSRC=0x86; //URSEL=UCSZ1=UCSZ0=1
/* f=8MHz, toc do baud=9600 */
UBRRH=0x00;
UBRRL=0x08;
DDRC=0xFF;

while (1)
      {
          Ma_Lenh = ReceiveByte();
          switch(Ma_Lenh)
          {
              case 'F': {PORTC|=(1<<PC4);}break;
              case 'B': {PORTC&=~(1<<PC4);}break;
 
          } 
      // Place your code here
      }
}

//////////////////////////////////
Linktest  TamBKSTAR

Thứ Tư, 5 tháng 8, 2015

Giao tiếp cảm biến MPU6050 với vi điều khiển

1
    Giới Thiệu.
-  Cảm biến MPU6050 là cảm biến góc, con quay hổi chuyển với 3 giá trị tọa độ và 3 giá trị gia tốc.
- Ngoài ra MPU6050 còn có 1 đơn vị tăng tốc phần cứng chuyên xử lý tín hiệu(Digital Motion Processor-DMP) do cảm biến thu thập và thức hiện các tính toán cần thiết. Điều này giúp giảm bớt đáng kể phần xử lý tính toán của vi điều khiển, cải thiện tốc độ xử lý và cho ra phản hồi nhanh hơn. Đây chính là 1 điểm khác biệt đáng kể của MPU6050 so với các cảm biến gia tốc và gyro khác.

Thông số kỹ thuật của module MPU6050:
Ø Điện áp hoạt động : 5V
Ø Giao tiếp I2C
Ø Độ phân giải góc +250 500 1000 2000 dps

Ø Độ phân giải gia tốc ±2 ±4 ±8 ±16g




Số thứ tự
Tên chân
Chức năng
1
VCC
Nối nguồn 5V
2
GND
Nối mass nguồn 5V
3
SCL
Chân xung nhịp giao tiếp I2C (5V)
4
SDA
Chân data giao tiếp I2C (5V)
5
XDA
Chân data giao tiếp I2C (3.3V)
6
XCL
Chân xung nhịp giao tiếp I2C (3.3V)
7
ADO
Kéo đã xuống GND, địa chỉ SLAVE của MPU6050 là 0x68
8
INT
Sử dụng cho ngắt ngoài





1   Phương Thức Giao Tiếp.
Ø Giao tiếp MPU6050 với vi điều khiển: Giao tiếp I2C.
                       -Sử dụng 2 chân SCL và SDA, hỗ trợ hầu hết trên các vi điều khiển.
                   -Trên module đã có sẵn trở treo dương đối với chân SCL và SDA.



Code mẫu (với ATMEGA32)


#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <math.h>
#include "lcd.h"
#include "mpu6050.h"


#define UART_BAUD_RATE 57600  //toc do baud, truyen uart len  PC
#include "uart.h"

void convert (long *temp_data, unsigned char x, unsigned char y)  //Lay 1 so sau dau phay
{
//   unsigned char k;
   move_LCD(y,x);
   if((*temp_data)<0)               //bit dau
   {
      *temp_data=-(*temp_data);
 putChar_LCD('-');
   }
   else putChar_LCD('+');

//   k=((*temp_data) % 100000000000)/10000000000+48;  
   putChar_LCD(((*temp_data) % 1000000000)/100000000+48);  //Lay MSB chuyen doi sang so, in len LCD
   putChar_LCD('.');

   putChar_LCD((*temp_data%100000000)/10000000+48);  //Lay bit cao thu 2, in len LCD
   


}

int main(void) {


#if MPU6050_GETATTITUDE == 1 || MPU6050_GETATTITUDE == 2  //lay toa do va gia toc
    long *ptr = 0;
    double qw = 1.0f;
double qx = 0.0f;
double qy = 0.0f;
double qz = 0.0f;
double roll = 0.0f;
double pitch = 0.0f;
double yaw = 0.0f;
#endif


uart_init(UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU));  //khoi tao uart
init_LCD();
clr_LCD();
print_LCD("Linhkien69.vn");
_delay_ms(1000);
clr_LCD();
  

//init interrupt
sei();  //su dung ngat neu dung chan INT (connect toi INT0), 1 ngat xay ra khi doc data

//init mpu6050
mpu6050_init();  //Khoi tao mpu
_delay_ms(50);
  


while(1) {

#if MPU6050_GETATTITUDE == 1 || MPU6050_GETATTITUDE == 2
mpu6050_getQuaternion(&qw, &qx, &qy, &qz);  //Lay gia tri toa do
mpu6050_getRollPitchYaw(&roll, &pitch, &yaw);  //Lay gia tri gia toc
_delay_ms(10);

_delay_ms(10);
/* Lay toa do va gia toc, in len LCD va truyen uart len PC */

// toa do
ptr = (long *)(&qw);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);
        


ptr = (long *)(&qx);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);

        move_LCD(1,1);
print_LCD("A");
convert (ptr,3,1);


ptr = (long *)(&qy);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);

convert (ptr,8,1);

ptr = (long *)(&qz);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);

convert (ptr,13,1);

        //gia toc
ptr = (long *)(&roll);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);

move_LCD(2,1);
print_LCD("G");
convert (ptr,3,2);


ptr = (long *)(&pitch);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);

convert (ptr,8,2);


ptr = (long *)(&yaw);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);

convert (ptr,13,2);

uart_putc('\n');
// _delay_ms(30);
#endif

}

}



Chi tiết tại link:     TamBKSTAR