專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

AVR單片機(jī)與網(wǎng)絡(luò)的連接

作者:李俊軒   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年07月18日   【字體:

 

本文介紹關(guān)于ARV單片機(jī)通過(guò)一塊芯片W5100上網(wǎng)模塊與網(wǎng)絡(luò)進(jìn)行連接,一直以來(lái)對(duì)于嵌入式arduino怎么樣和網(wǎng)絡(luò)進(jìn)行連接一直是我很好奇的問(wèn)題,難得這幾天公司給我一個(gè)關(guān)于利用嵌入式讓AVR連接的應(yīng)用,雖然對(duì)于英語(yǔ)水平還是很低下的我,沒(méi)辦法,為了興趣和工作,只好硬著頭皮看著外國(guó)一些關(guān)于AVR與網(wǎng)絡(luò)連接的論壇。其中收獲還是蠻大的,讓自己知道了一些關(guān)于網(wǎng)絡(luò)的知識(shí)和電路,特別是自己把一塊ENC28J60上網(wǎng)模塊的PCB順利畫(huà)出來(lái)進(jìn)行生產(chǎn),在畫(huà)這個(gè)板的時(shí)候也是費(fèi)了一番功夫,根據(jù)原理圖,我覺(jué)得第12和第13引腳不應(yīng)該是短路的,可是當(dāng)PCB板拿到手的時(shí)候進(jìn)行硬件測(cè)試,居然發(fā)現(xiàn)這兩個(gè)引腳連在了一起。百思不得其解,把PCB板和畫(huà)的圖進(jìn)行對(duì)比是沒(méi)有錯(cuò)的,后來(lái)懷疑是IC的問(wèn)題,但是經(jīng)過(guò)看數(shù)據(jù)手冊(cè)和IC不接在電路中的測(cè)試,沒(méi)有問(wèn)題。最近對(duì)HR911105A網(wǎng)口進(jìn)行測(cè)試,興奮地發(fā)現(xiàn)了問(wèn)題是第3和第6是連在一起的。找出問(wèn)題根源。




 
一直對(duì)于arduino這種開(kāi)發(fā)平臺(tái)和獨(dú)特的編程風(fēng)格的感興趣。特別是他具有一個(gè)實(shí)時(shí)和電腦進(jìn)行通訊的系統(tǒng)平臺(tái),長(zhǎng)話短說(shuō),還是把硬件進(jìn)行連接,以及代碼的編寫(xiě)和調(diào)試,因?yàn)閍rdunio官方指代了一個(gè)關(guān)于Ethernet的庫(kù),所以把它下載下來(lái),加以研究。終于寫(xiě)出了下面的一段代碼:
#include <SPI.h>
 
 
//Test Code:
 
/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 48 };
Server server(80);
void setup()
{
Ethernet.begin(mac, ip);
server.begin();
}
void loop()
{
Client client = server.available();
if (client) {
// an http request ends with a blank line
boolean current_line_is_blank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// if we've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so we can send a reply
if (c == 'n' && current_line_is_blank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
 
// output the value of each analog input pin
client.print("welcome to B2CQSHOP");
client.println("<br />");
client.print("//*************************************");
client.println("<br />");
client.print("");
client.println("<br />");
client.print("//*************************************");
client.println("<br />");
for (int i = 0; i < 6; i++) {
client.print("analog input ");
client.print(i);
client.print(" is ");
client.print(analogRead(i));
client.println("<br />");
}
break;
}
if (c == 'n') {
// we're starting a new line
current_line_is_blank = true;
} else if (c != 'r') {
// we've gotten a character on the current line
current_line_is_blank = false;
}
}
}
client.stop();
}
}
其實(shí),寫(xiě)這番代碼的時(shí)候也是費(fèi)了一番周折的,因?yàn)閰⒖季W(wǎng)上一些關(guān)于ethernet的寫(xiě)法,剛開(kāi)始編譯的時(shí)候系統(tǒng)老是報(bào)錯(cuò)。錯(cuò)誤的結(jié)果是:

 

經(jīng)過(guò)查資料,終于知道了平時(shí)我們所說(shuō)的SPI是什么東西,原來(lái)是“串行外圍設(shè)備接口”,也就是網(wǎng)上很多LCD顯示,為什么只有6根線就可以控制顯示內(nèi)容的東東。在官方網(wǎng)上找了好久,終于把到庫(kù),下載下來(lái)以后調(diào)用進(jìn)程序,終于可以順利的編譯。心里那個(gè)激動(dòng),呵呵。希望可以出現(xiàn)預(yù)期結(jié)果。
但是問(wèn)題不是我所想的那么簡(jiǎn)單。把自己程序中的IP地址輸?shù)骄W(wǎng)站地址欄,回車。暈。居然提示:

 

最后,終于在快絕望的時(shí)候看到了在打IP地址的時(shí)候多加了三個(gè)www. .暈死了?磥(lái)是自己打網(wǎng)址養(yǎng)好的“良好習(xí)慣”害了自己呀。嘿嘿。不過(guò)經(jīng)過(guò)這次吃虧以后,至少以后不會(huì)再打錯(cuò)啦。^_^
結(jié)果出來(lái)了:/勝利

 

這只是一個(gè)小勝利的開(kāi)始,在網(wǎng)上看了一下,有幾個(gè)工程師在arduino上加了一個(gè)溫濕度的傳感器,隨時(shí)的把測(cè)到的溫度和濕度傳到網(wǎng)站上去,可供別人打開(kāi)網(wǎng)址時(shí)看到實(shí)時(shí)檢測(cè)到的溫度。得好好利用這個(gè)模塊,相信對(duì)于信息時(shí)代的今天,作為一個(gè)電子工作者是有必要掌握這些知識(shí)的。
關(guān)閉窗口

相關(guān)文章