1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

Bài giữa kỳ - ATmega8 giao tiếp PC

Thảo luận trong 'Báo cáo giửa kỳ' bắt đầu bởi tammttg, 30 Tháng sáu 2009.

  1. tammttg Member

    Số bài viết: 181
    Đã được thích: 0
    Điểm thành tích: 16
    Đây là bài giữa kỳ Đo lường - Cảm biến của mình: đo nhiệt độ dùng LM35, giao tiếp với KIT ATmega8 hiển thị nhiệt độ lên PC thông qua phần mềm viết trên nền Visual C++ 2005

    Sơ lược: mạch KIT sẽ đọc điện áp từ con LM35 và gửi giá trị ADC lên cổng COM, phần mềm sẽ đọc cổng COM, tính toán ra nhiệt độ và so sánh nhiệt độ đọc với nhiệt độ được thiết lập T1-T2:

    - Nếu nhiệt độ đọc nhỏ hơn T1 thì quạt quay ở mức chậm (để thông gió cho phòng, v.v...)

    - Nếu nhiệt độ đọc lớn hơn T1 thì quạt quay ở mức trung bình

    - Nếu nhiệt độ đọc lớn hơn T2 thì quạt sẽ quay hết công suất, đồng thời đèn báo chớp tắt liên tục

    Giá trị nhiệt độ hiện lên trên giao diện có màu sắc thay đổi tùy theo 3 trường hợp kể trên (xanh-cam-đỏ), giúp người dùng dù chỉ nhìn thoáng qua cũng dễ dàng nhận biết nhiệt độ đang ở mức nào.

    Nhiệt độ được lưu lại trên 1 textBox theo thời gian định kỳ từ 5 giây đến 2 giờ

    Hai mức nhiệt độ T1-T2 thiết lập từ 0 độ C đến 120 độ C, khoảng T1-T2 nhỏ nhất cho phép là 5 độ C

    Giao diện:

    [IMG]

    [IMG]

    [IMG]

    [IMG]

    [IMG]

    [IMG]

    Mã:
     
    [FONT=Courier New]...[/FONT]
    [FONT=Courier New]private:[/FONT]
    [FONT=Courier New]/// <summary>[/FONT]
    [FONT=Courier New]/// Required designer variable.[/FONT]
    [FONT=Courier New]/// </summary>[/FONT]
    [FONT=Courier New]static bool n=true, m=true, o=true, p=true;[/FONT]
    [FONT=Courier New]static int t=0, mode;[/FONT]
    [FONT=Courier New]String^ str;[/FONT]
    [FONT=Courier New]#pragma region Windows Form Designer generated code[/FONT]
    [FONT=Courier New]...[/FONT]
    [FONT=Courier New]private: System::Void T1_Click(System::Object^  sender, System::EventArgs^  e) {[/FONT]
    [FONT=Courier New]T1->Maximum = (Convert::ToInt16(T2->Text) - 5);[/FONT]
    [FONT=Courier New]T2->Minimum = (Convert::ToInt16(T1->Text) + 5);[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]private: System::Void T2_Click(System::Object^  sender, System::EventArgs^  e) {[/FONT]
    [FONT=Courier New]T1->Maximum = (Convert::ToInt16(T2->Text) - 5);[/FONT]
    [FONT=Courier New]T2->Minimum = (Convert::ToInt16(T1->Text) + 5);[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]private: System::Void comboBox1_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) {[/FONT]
    [FONT=Courier New]if(comboBox1->Text->ToString()->Equals("COM1")) {sp->Close();sp->PortName = "COM1";}[/FONT]
    [FONT=Courier New]if(comboBox1->Text->ToString()->Equals("COM2")) {sp->Close();sp->PortName = "COM2";}[/FONT]
    [FONT=Courier New]if(comboBox1->Text->ToString()->Equals("COM3")) {sp->Close();sp->PortName = "COM3";}[/FONT]
    [FONT=Courier New]if(comboBox1->Text->ToString()->Equals("COM4")) {sp->Close();sp->PortName = "COM4";}[/FONT]
    [FONT=Courier New]if(comboBox1->Text->ToString()->Equals("COM5")) {sp->Close();sp->PortName = "COM5";} [/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]private: System::Void comboBox2_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) {[/FONT]
    [FONT=Courier New]sp->BaudRate = Convert::ToInt32(comboBox2->Text);[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {[/FONT]
    [FONT=Courier New]try {sp->Open();o=true;}[/FONT]
    [FONT=Courier New]catch (Exception ^e) {MessageBox::Show("Cong COM khong ton tai !\r\n","Loi ket noi");p=false;}[/FONT]
    [FONT=Courier New]if (p)[/FONT]
    [FONT=Courier New] if (m)[/FONT]
    [FONT=Courier New] {     [/FONT]
    [FONT=Courier New]   dong();[/FONT]
    [FONT=Courier New]  temp->Text = "00";[/FONT]
    [FONT=Courier New]  temp->ForeColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(0)), static_cast<System::Int32>(static_cast<System::Byte>(192)), [/FONT]
    [FONT=Courier New]static_cast<System::Int32>(static_cast<System::Byte>(0)));[/FONT]
    [FONT=Courier New]  picBox1->Image = this->picBox1->Image->FromFile(L"C:\\Temperature\\Fan\\slow.gif");[/FONT]
    [FONT=Courier New]  button1->Text = L"&Dừng";[/FONT]
    [FONT=Courier New]  comboBox1->Enabled = false;[/FONT]
    [FONT=Courier New]  comboBox2->Enabled = false;[/FONT]
    [FONT=Courier New]  m=false; mode=0;          [/FONT]
    [FONT=Courier New]  timer2->Start();[/FONT]
    [FONT=Courier New] }[/FONT]
    [FONT=Courier New] else[/FONT]
    [FONT=Courier New] {[/FONT]
    [FONT=Courier New]  m=true;[/FONT]
    [FONT=Courier New]  timer2->Stop();[/FONT]
    [FONT=Courier New]  dong();[/FONT]
    [FONT=Courier New]  comboBox1->Enabled = true;[/FONT]
    [FONT=Courier New]  comboBox2->Enabled = true;[/FONT]
    [FONT=Courier New]  this->button1->Text = L"&Chạy";[/FONT]
    [FONT=Courier New]  this->temp->Text = "...";[/FONT]
    [FONT=Courier New]  this->temp->ForeColor = System::Drawing::SystemColors::Desktop;[/FONT]
    [FONT=Courier New]  this->picBox1->Image = this->picBox1->Image->FromFile(L"C:\\Temperature\\Fan\\fan.gif");[/FONT]
    [FONT=Courier New]  this->picBox2->Image = this->picBox2->Image->FromFile(L"C:\\Temperature\\LED\\led.PNG");[/FONT]
    [FONT=Courier New]  this->picBox3->Image = this->picBox3->Image->FromFile(L"C:\\Temperature\\LED\\led.PNG");[/FONT]
    [FONT=Courier New]  this->picBox4->Image = this->picBox4->Image->FromFile(L"C:\\Temperature\\LED\\led.PNG");     [/FONT]
    [FONT=Courier New] }[/FONT]
    [FONT=Courier New]else p=true;[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {[/FONT]
    [FONT=Courier New]if (n)[/FONT]
    [FONT=Courier New]{[/FONT]
    [FONT=Courier New] n=false;[/FONT]
    [FONT=Courier New] this->button2->Text = L"&Xóa";[/FONT]
    [FONT=Courier New] this->textBox1->Text = "Nhiet do dau: "+temp->Text+"\r\n";[/FONT]
    [FONT=Courier New] timer1->Interval = (Convert::ToInt16(T0->Text))*1000;[/FONT]
    [FONT=Courier New] timer1->Start();[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]else[/FONT]
    [FONT=Courier New]{[/FONT]
    [FONT=Courier New] n=true;[/FONT]
    [FONT=Courier New] t=0;[/FONT]
    [FONT=Courier New] timer1->Stop();[/FONT]
    [FONT=Courier New] this->button2->Text = L"&Lưu";[/FONT]
    [FONT=Courier New] this->textBox1->Text = "";[/FONT]
    [FONT=Courier New]}   [/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]private: System::Void button3_Click(System::Object^  sender, System::EventArgs^  e) {[/FONT]
    [FONT=Courier New]this->Close();[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]private: System::Void TSave_Click(System::Object^  sender, System::EventArgs^  e) {[/FONT]
    [FONT=Courier New]timer1->Interval = (Convert::ToInt16(T0->Text))*1000;[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {[/FONT]
    [FONT=Courier New]t+=Convert::ToInt16(T0->Text);[/FONT]
    [FONT=Courier New]this->textBox1->Text = textBox1->Text + "Sau "+t.ToString()+" giay: " +temp->Text+"\r\n";[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]private: System::Void timer2_Tick(System::Object^  sender, System::EventArgs^  e) {[/FONT]
    [FONT=Courier New]mo();[/FONT]
    [FONT=Courier New]//truyen ky tu va doc ADC tu ATmega8, tinh toan nhiet do va so sanh voi T1-T2[/FONT]
    [FONT=Courier New]dong();[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]////////////////////////////////////////////// - chuong trinh con - ///////////////////////////////////////////////[/FONT]
    [FONT=Courier New]void mo() {if (!o) {sp->Open();o=true;}}[/FONT]
    [FONT=Courier New]void dong() {if (o) {sp->Close();o=false;}}[/FONT]
    
    Phần codeVision của mình viết là tham khảo từ ví dụ của thầy Cường và của whitebank:
    http://cdt06111.hnsv.com/viewtopic.php?f=13&t=114
  2. Junior New Member

    Số bài viết: 196
    Đã được thích: 0
    Điểm thành tích: 0
  3. tammttg Member

    Số bài viết: 181
    Đã được thích: 0
    Điểm thành tích: 16
    Hình LED và quạt trên giao diện là do mình làm từ hình ảnh có trên mạng:

    [IMG] => [IMG]...........[IMG]
    Tạo bằng chương trình <Blaze Gif> và Windows Paint :045:

    Phần code nạp hình ảnh của mình còn điểm hạn chế là ko biết cách lấy link từ folder của Project, phải nhập link cứng trên ổ đĩa nên khi bị paste sai đường dẫn phần mềm sẽ ko nạp đc. Như vậy khá bất tiện

    Và phần textBox lưu nhiệt độ mình ko biết code lấy thời gian thực từ máy tính
    DateTimePicker nó chỉ hiện được ngày tháng và thời gian lúc bắt đầu chạy thôi, là giá trị ko tự thay đổi đc
    Mình tìm trên MSDN và Google mất mấy ngày mà ko đc gì, nhức cả đầu. Cuối cùng dùng đỡ cái timer cho nó khỏe :^)

    Phải học hỏi thêm anh em mấy chỗ này... :cutesmile:
  4. Junior New Member

    Số bài viết: 196
    Đã được thích: 0
    Điểm thành tích: 0
  5. huyhungdt32 New Member

    Số bài viết: 6
    Đã được thích: 0
    Điểm thành tích: 0
  6. tammttg Member

    Số bài viết: 181
    Đã được thích: 0
    Điểm thành tích: 16
  7. caodungviet New Member

    Số bài viết: 13
    Đã được thích: 0
    Điểm thành tích: 0
  8. nguyensangbk3i New Member

    Số bài viết: 1
    Đã được thích: 0
    Điểm thành tích: 0
  9. tammttg Member

    Số bài viết: 181
    Đã được thích: 0
    Điểm thành tích: 16
    Tình hình là dạo này nhiều bạn làm bài tập liên quan đến phần giao tiếp này quá, liên lạc qua mail sẽ ko tiện, nên mình post lên mediafire luôn
    http://www.mediafire.com/?0dndga0ktjj

    Về phần cứng, lúc trước mình dùng kit ATmega8 để giao tiếp, bạn nào muốn gọn hơn, chỉ cần max232 thôi thì có thể xem nguyên lý từ kit ATmega32 này
    http://www.mediafire.com/?jmijmjgjymc

    Về phần giao tiếp 2 chiều giữa MCU và PC, trên forum có 2 topic này hướng dẫn rất chi tiết, đầy đủ code và ví dụ minh họa
    http://spkt.net/diendan/showthread.php?t=5765
    http://spkt.net/diendan/showthread.php?t=5796

    Chúc thành công!

Chia sẻ trang này