Hiển thị các bài đăng có nhãn 8051. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn 8051. Hiển thị tất cả bài đăng

Thứ Bảy, 5 tháng 3, 2016

Đo nhiệt độ dùng cảm biến NTC và AT89S52

>> Mạch đo nhiệt độ dùng cảm biến NTC, sử dụng ADC 12bit và vi điều khiển AT89S52



>> Sơ đồ khối phần cứng được hiển thị trong hình. 2. cảm biến là epoxy đúc nhiệt điện trở. Các mạch điều tín hiệu điện áp chia đơn giản. ADC là 12-bit giao diện SPI LTC1298 analog-to-kỹ thuật số chuyển đổi. Các vi điều khiển là Atmel 89S52. Màn hình hiển thị có bốn chữ số 0,5 inch 7-segment LED. Người lái xe phân khúc cung cấp 32-bit CMOS.



- |Phần cứng:
>> Hoàn chỉnh sơ đồ mạch phần cứng được thể hiện trong hình 3 là ADC 12-bit giao diện SPI LTC1298 hoặc MC3202. Có hai kênh, CH0 và CH1. Các tín hiệu đầu vào từ nhiệt điện trở cho kênh ADC 0 là điện áp chia đơn giản. Channel1 có sẵn cho các cảm biến khác. Các mẫu được hiển thị trong sơ đồ là HIH-3160 Honeywell Độ ẩm cảm biến. Chip ADC được giao tiếp với MCU, 89S52 với P1.1, P1.2 và P1.3. Màn hình hiển thị có 4 chữ số LED. Các 4094 ca CMOS đăng ký ổ đĩa đèn LED trực tiếp.




- Phần mềm:
The main function is time triggered by 10ms timer0 running. The ADC is updated on LED every 10 ticks.

while(1)
{
while(!cputick)
continue;
cputick=0;
print_ADC();
}
The function that reads 12-bit data from ADC is read_ADC(char n). The function has two loops. First loop is to send 4-bit command. And the second loop is 12-bit to shift the data from ADC.
sbit Data = P1^1;
sbit CLK = P1^2;
sbit CS = P1^3;


int read_ADC(char n)
{ int k;
char i,channel;
k=0;
CS=0;
if(n==0) channel=0x0d;
else channel=0x0f;
 for(i=0;i<4;i++)
{
CLK = 0;
if(channel&8) Data = 1;
else Data = 0;
CLK = 1;
channel <<=1;
}
Data = 1;
CLK = 0;
 for(i=0;i<12;i++)
{
k<<=1;
CLK=1;
CLK=0;
if(Data) k|=1;
else k&=~1;
}
CS = 1;
return k&=0xfff;
}
To provide smooth reading, I added the 5-point moving average to the raw data. The function low_pass_filte1( ) is used to filter the high frequency noise. The reading is calibrated to degree Celsius with Platinum 100 standard thermometer. We found the equation y=0.0323x-15.122.

int low_pass_filter1(void)
{
x5=x4;
x4=x3;
x3=x2;
x2=x1;
x1=read_ADC(0);
return(x1+x2+x3+x4+x5)/5;
}
float read_temp1_filter(void)
{
return(0.0323*low_pass_filter1()-15.122);
}

Download


Schematicschematic.pdf
C source codethermistor.c
Orcad Schematic FileUss.dsn
Intel-Hex filethermistor.hex
HIH-3160 Humidity Sensor Datasheethih3160.pdf


Nguồn:http://www.kmitl.ac.th/~kswichit/thermistor/thermistor.htm

Hướng dẫn chèn hình logo vào mạch in Proteus

HƯỚNG DẪN CHÈN HÌNH LOGO VÀO MẠCH IN ALTIUM

Đầu tiên các bạn chọn hình cần chèn vào mạch in, ví dụ tôi chọn một trong các hình sau








+ Sau đó dùng Paint trong Win để chuyển đổi thành hình mono

+Chọn Save as












Chọn Monochome Bitmap(*.bmp;*.dib)












Nhấn Save và chọn nơi lưu

+ Chèn vào trong Proteus
Chọn file > Import Bitmap…


















Sau khi chọn nó hiện ra cái bảng Import BMP File














Bây giờ ta chọn đến nơi chứa ảnh ta cần chèn vào trong Proteus













Tiếp theo nhấp vô hình, chuột phải Change Layer














Đến bước này ta lật ngược hình lại















Rồi di chuyển vào board
Chúc các bạn thành công!
Download file hướng dẫn PDF từ mediafire

Hướng dẫn chèn hình logo vào mạch in Altium

Hướng dẫn chèn hình logo vào mạch in Proteus

Altium Designer làm điều đó thật đơn giản với script PCB Logo Creator

Sau đây là hướng dẫn cụ thể:

Bước 1: Tạo 1 logo từ bất kỳ phần mềm nào bạn muốn. Ở tutorial này mình tạo từ Photoshop một ảnh rồi xuất ra định dạngBMP 

[​IMG]

Bước 2: Chạy Script PCB Logo Creator tìm trong thư mục cài đặt của altium Examples\Scripts\Delphiscript Scripts\Pcb\PCB Logo Creator hoặc tải ở đây PCB Logo Creator
Hoặc có thể down toàn bộ thư mục Examples ở đây Download Thấy một số bạn không tìm thấy trên bản 10
[​IMG]

[​IMG]

[​IMG]


Khi mở được Script rồi ta có cửa sổ PCB Logo Creator 
Ấn LOAD để chọn đến ảnh BMP mà bạn tạo từ trước.
Board Layer để chọn lớp mà muốn tạo logo
Scaling Fator để chọn tỉ lệ ảnh thật với logo( thường thì mình tạo từ pts ảnh có kích thước chuẩn vs logo cần tạo luôn)
Image size là kích thước của logo trên PCB nó thay đổi khi bạn thay đổi giá trị trong Scaling FatorẤn load đợi nó xử lý rồi ấn Convert rồi lại đợi nó xử lý thế là xong rồi[​IMG]

[​IMG]


Đây là kết quả này:

[​IMG]


[​IMG]

Chúc các bạn thành công!

Đế nạp đa năng cho 89SXX và AVR








Cảm biến nhiệt độ AT9C2051 + DS18S20


Board mạch (kích thước 7.3  x 4.1mm)


Bố trí linh kiện 


Sơ đồ nguyên lý



Mã nguồn các bạn mở bằng Keil C

//===========================================
//=CHUONG TRINH HIEN THI NHIET DO TU 00 --> 99 [HIEN THI 2 SO THAP PHAN]=
#include <REG2051.H>

char disp[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
char disp_dot[11]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x3f};

sbit DQ = P3^7;   //KHAI BAO CHAN CAM BIEN
sbit A1=P3^2;      //KHAI BAO CHO LED-7 [1]
sbit A2=P3^3;      //KHAI BAO CHO LED-7 [2]
sbit A3=P3^4;      //KHAI BAO CHO LED-7 [3]
sbit A4=P3^5;      //KHAI BAO CHO LED-7 [4]
//=CHUONG TRINH DELAY 
void delay_18B20(unsigned int i)
{
    while(i--);
}
//========================
//=KHOI TAO CAM BIEN
void Init_DS18B20() 
{
     unsigned char x=0;
     DQ = 1;
     delay_18B20(8); 
     DQ = 0;
     delay_18B20(80);
     DQ = 1;
     delay_18B20(14);
     x=DQ; 
     delay_18B20(20);
}
//=DOC MOT BYTE  
ReadOneChar(void)
{
    unsigned char i=0;
    unsigned char dat = 0;
    for (i=8;i>0;i--)
     {
          DQ = 0; //CHO DUONG DQ XUONG MUC THAP
          dat>>=1;
          DQ = 1; //CHO DUONG DQ LEN MUC CAO
          if(DQ)
          dat|=0x80;
          delay_18B20(4);
     }
     return(dat);
}
//========================
//=CHUONG TRINH GHI 1BYTE 
void WriteOneChar(unsigned char dat)
{
 unsigned char i=0;
 for (i=8; i>0; i--)
 {
  DQ = 0;
  DQ = dat&0x01;
  delay_18B20(5);
  DQ = 1;
  dat>>=1;
 }
}
//========================
//=CHUONG TRINH DOC NHIET DO TU CAM BIEN
ReadTemperature(void)
{
    unsigned char a=0;
    unsigned char b=0;
    unsigned int  t=0;
    
    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0x44);
    delay_18B20(100);
    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0xBE);
    a=ReadOneChar();
    b=ReadOneChar();
    t = (b*256+a)*25;    
    return( t >> 2  );
}
//========================
//=CHUONG TRINH CHINH=====
main()
{
    unsigned int tmp;
    unsigned char counter;
    while(1)
    {
        if(counter-- == 0)
        {
            tmp = ReadTemperature();             
            counter = 20;
        }
        A4 = 0;P1 = 0xc6;delay_18B20(500);A4 = 1; 
        A3 = 0;P1 = 
0x9c;delay_18B20(500);A3 = 1;
        A2 = 0;P1 = disp[tmp/100%10];delay_18B20(500);A2 
= 1;
        A1 = 0;P1 = disp[tmp/1000%10];delay_18B20(500);A1 = 1;   
    }
}
Download mạch in, mạch nguyên lý và code: Download 

Giáo trình vi điều khiển 8051 - Assembly [Full]

Giáo trình 8051

Giới thiệu

Bộ giáo trình gồm 15 chương: Mỗi chương sẽ có những ví dụ cụ thể viết trên ngôn ngữ Assembly, giúp bạn đọc hiểu hơn về Assembly đồng thời sẽ nắm được những kiến thức cơ bản về họ chíp vi xử lý 8051

Download

Tải trọn bộ giáo trình tại đây [Pass: 7segone]: Download

Thứ Năm, 3 tháng 3, 2016

Code C mẫu và các dự án 8051 kèm file mô phỏng

Code C mẫu và các dự án 8051

Mô tả các dự án và code mẫu

Trong bộ tài liệu này gồm có 11 dự án được viết bằng ngôn ngữ C cho 8051, kèm theo đó là các file mô phỏng một cách trực quan, giúp bạn dễ tiếp cận đồng thời có thể học hỏi cách tổ chức chương trình và viết chương trình cho 8051

Phần mềm sử dụng trong dự án

Phần mềm Proteus 8.1: Tải và hướng dẫn cài Proteus 8.1
Phần mềm Keil C uVision 4: Tải và hướng dẫn cài Keil C

Tải code

Chuyển đổi  ADC-8051                            Download
Chuyển đổi DAC-8051Download
Đếm sản phẩm-8051Download
Điều khiển động cơ một chiềuDownload
Hiển thị LCD [4bit]Download
Hiển thị LCD [8bit]Download
Code trái tim 44 hiệu ứngDownload
Nút nhấn đơn-8051Download
LED 7 thanh -8051Download
Matrin 8x40Download
Truyền thông chuẩn RS232Download
Lưu ý: Tất cả các file trên đều có mật khẩu giải nén là: 7segone.com