|
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
AT90CAN128開發(fā)問題 |
作者:胖兔子 欄目:單片機 |
用AT90CAN128做開發(fā)。 遇到N多問題,有用AT90CAN128做過開發(fā)的大大們,給幫個忙吧。 1.如何配置各個寄存器。 2.如何配置2.0B 3.如何配置速率 4.如何產(chǎn)生中斷 5. 6. 反正問題多多。調(diào)了5天了。還沒有調(diào)通?殳偭。有誰能幫我呀。 |
2樓: | >>參與討論 |
作者: shenshi 于 2007/4/6 12:15:00 發(fā)布:
給你一個例程參考下吧,這是我做的CAN測試程序 #include <avr/io.h> #include <avr/signal.h> #include <util/delay.h> unsigned CHAR can_transdata[8]={1,2,3,4,5,6,7,8}; unsigned CHAR can_receivedata[8]={8,7,6,5,4,3,2,1}; unsigned CHAR CanReceiveEndFlag; InitCAN() { // CAN控制器 0# ,3# 信箱中斷接收 ,1#、2#、4# 信箱發(fā)送數(shù)據(jù) CANGCON |= (1<<SWRES); //CAN控制器軟復(fù)位 CANBT1 = 0x0a; //設(shè)置波特率分頻因子16MHZ,16TQ,250k,=4=3+1,3 CANBT2 = 0x0c; //同步段為1“0x0n”傳播段=7=6+1 CANBT3 = 0x37; //相位緩沖PH2=4=3+1,PH1=4=3+1 CANTCON = 0xff; //--------------can_MOB INITIAL------------------- //MOB0=RX[CMD] 接收上位機發(fā)來的指令 格式:3,0,0,177,239,33 CANPAGE = 0x00; //MOB0,自動增量,初值為0 CANSTMOB = 0; CANCDMOB = 0x18; //can2B,DLC=8 CANIDT4 = 0x30; // 00001 0xx CANIDT3 = 0x00; // 01111 001 33 CANIDT2 = 0x41; // 10001 111 239 CANIDT1 = 0x00; // 01100 101 177 CANIDM4 = 0x00; // 11111 100 CANIDM3 = 0x00; // 11111 111 CANIDM2 = 0x00; // 11111 111 CANIDM1 = 0x00; //CANIDM4-1數(shù)據(jù)校驗屏蔽寄存器 00000 111 //MOB1=TX[STA1] 向上位機報告狀態(tài)組1 6,0,0,178,239,33 CANPAGE = 0x10; CANSTMOB = (1<<TXOK); CANCDMOB = 0x18; CANIDT4 = 0x30; |
3樓: | >>參與討論 |
作者: 胖兔子 于 2007/4/6 12:45:00 發(fā)布:
謝謝 謝謝紳士兄。這就看看 |
4樓: | >>參與討論 |
作者: 胖兔子 于 2007/4/6 13:14:00 發(fā)布:
AT90CAN128 紳士兄: 我試了一下,但是不行。 你給的例子 CANBT1 = 0x0a; //設(shè)置波特率分頻因子16MHZ,16TQ,250k,=4=3+1,3 這句是0x0a是如何計算出來的? 我用的是外部晶振頻率是11.0592,那么,在CAN中是如何設(shè)置的? 請賜教。 |
5樓: | >>參與討論 |
作者: shenshi 于 2007/4/6 16:00:00 發(fā)布:
answer 我的注釋中有些錯誤,我的CAN的波特率是125K的,我用的晶振是12M的,BT1、BT2、BT3的設(shè)置你要參考Datasheet中給的數(shù)值。11.0592的晶振可能會不可以。你不妨先用12M的測試一下,我這個程序在我的板子上沒有問題,我兩塊板子可以互相收發(fā)。 |
6樓: | >>參與討論 |
作者: 胖兔子 于 2007/4/6 16:19:00 發(fā)布:
只能參考Datasheet嗎 BT1、BT2、BT3的設(shè)置只能參考Datasheet中給的數(shù)值嗎?不能計算嗎? 在串口中,開始我也是參考Datasheet中給的數(shù)值,后來我找了一個計算公式來計算波特率。方便了很多。 下面給出源碼看大家能不能給出更好的思路。 在AT90CAN128中,我按照資料中說的來計算,怎么也算不出來。 再次謝謝大家。 #define fosc 11059200 //晶振 11.0592 /******************************************************************************* *函數(shù)名:uart0_init * *功 能:初始化串口1 * *參 數(shù):baud * *支 持:300,600,1200,2400,4800,9600,19200,38400,56000,115200 * *******************************************************************************/ void uart0_init(LONG baud) { UCSR0B = 0x00; //設(shè)置波特率時關(guān)閉發(fā)送和接收 UCSR0A = 0x00; UCSR0C = 0x06; //8位數(shù)據(jù)+1位STOP位 UBRR0L=(fosc/16/(baud+1))%256; UBRR0H=(fosc/16/(baud+1))/256;//設(shè)置波特率 UCSR0B =(1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);//允許發(fā)送和接收,允許中斷 } |
7樓: | >>參與討論 |
作者: shenshi 于 2007/4/6 16:29:00 發(fā)布:
answer 如果你的系統(tǒng)中既要用到CAN 又要用到串口的話,我建議你還是把晶振的頻率改為12M吧。CAN對晶振的要求要比串口高很多。你給出的雙龍的初始化串口的例程對于CAN來說沒有意義。我覺得你還是將就一下CAN吧。我們就是這樣做的 |
8樓: | >>參與討論 |
作者: 胖兔子 于 2007/4/6 16:49:00 發(fā)布:
12晶振問題 紳士兄: 如果我用12MHZ的晶振,串口通訊就會出現(xiàn)一系列問題,因為我的串口要與其它的設(shè)備通訊,必須保證誤差等于0%,如果用整數(shù)倍的晶振,與其它設(shè)備的通訊就不能正常工作。 剛才我重新配置了熔絲位,使用了內(nèi)部8MHZ的晶振,按照DataSheet中給出的數(shù)值編譯后,還是無法進行通訊。(手頭沒有12MHZ的晶振) |
9樓: | >>參與討論 |
作者: shenshi 于 2007/4/6 17:03:00 發(fā)布:
回答: 你用內(nèi)部8M晶振的話,你要把BT1、BT2、BT3的設(shè)置要改下,DATASHEET中提供了06、DC、37你可以去看下。另外12M晶振的話,串口通信雖然有些誤差,但是它是異步的,一個字節(jié)就調(diào)整的。我按照你的方法在我的板子上測試下,一會再回答你。 |
10樓: | >>參與討論 |
作者: shenshi 于 2007/4/6 17:18:00 發(fā)布:
回答 說明下:8M晶振的設(shè)置BT1、BT2、BT3 的設(shè)置DATASHEET中是06、0C、37。 我測試了下這個程序在12M很正常,在8M的情況下,就是不停的在發(fā)。 你先把測試程序改動下,把收中斷標志屏蔽下,先讓板子處于一直發(fā)送的狀態(tài),你再看看發(fā)送引腳是否有波形。 |
11樓: | >>參與討論 |
作者: zsmbj 于 2007/4/7 8:42:00 發(fā)布:
如用can和串口,建議用12M晶體吧。 CAN對時鐘要求比較高,一般要選擇晶振,不能用內(nèi)部RC。晶振一般是16,12,8M等。如果要兼顧串口。12M是最好的選擇,115200,57600,38400,28800,19200,14400,9600,4800,2400等誤差只有0.2%,通訊完全沒有問題。 8M也不錯。不過57600和115200誤差太大,不能使用。 串口誤差不要大于2%,實際不大于0.5%完全沒有問題?梢苑判氖褂谩 |
12樓: | >>參與討論 |
作者: 胖兔子 于 2007/4/7 17:22:00 發(fā)布:
謝謝 我去買個12MHZ的晶振 |
13樓: | >>參與討論 |
作者: 胖兔子 于 2007/4/10 16:45:00 發(fā)布:
CAN還是不通 紳士兄: 12MHZ晶振裝上了。還是不行。為什么???????????? 另外:我用來測試的CAN板是市場上買回來的。它與其它CAN設(shè)備通訊是正常的。 // 格式:3,0,0,177,239,33 在你給的例子中,上面這句話的意思是什么?? 網(wǎng)絡(luò)主機地址 網(wǎng)絡(luò)從機地址與回復(fù)主機地址又是如何設(shè)置的? |
14樓: | >>參與討論 |
作者: shenshi 于 2007/4/11 10:30:00 發(fā)布:
回復(fù) 紳士兄: 12MHZ晶振裝上了。還是不行。為什么???????????? 另外:我用來測試的CAN板是市場上買回來的。它與其它CAN設(shè)備通訊是正常的。 // 格式:3,0,0,177,239,33 在你給的例子中,上面這句話的意思是什么?? 網(wǎng)絡(luò)主機地址 網(wǎng)絡(luò)從機地址與回復(fù)主機地址又是如何設(shè)置的? 回答: // 格式:3,0,0,177,239,33 這個數(shù)據(jù)是沒有意義的,主要是設(shè)置29位標識符的,對測試來說沒有意義,MOB0中的屏蔽CANIDM都已經(jīng)設(shè)置成了0,所以對方發(fā)來的數(shù)據(jù)不會屏蔽的.至于你說的網(wǎng)絡(luò)的主機地址和從機地址,那應(yīng)該是協(xié)議的問題,應(yīng)該是設(shè)置CANIDT來完成的. 不通的話,你先查查硬件上數(shù)據(jù)是否到了單片機的接收引腳,每位時間是否是8us,有的時候因為線路上器件的延時,高電平的時間可能會小于8us,如果硬件上沒問題,那就用仿真器跑下,看看是否進中斷以及看下CAN寄存器的值時候正常 另外你可以先看發(fā)送程序是否能運行, |
15樓: | >>參與討論 |
作者: 胖兔子 于 2007/4/17 10:03:00 發(fā)布:
提問 紳士兄: 前幾天身體不適,一直沒有上網(wǎng)。今天看見你給的回答了。 你給我的例子在仿真器中運行的正常。 在AT90CAN128的輸出腳上有信號。但到了PCA82C250的CANH、CANL,沒有變化了。 這個電路我是按SJA1000的做的。不知對不對。 |
16樓: | >>參與討論 |
作者: 胖兔子 于 2007/4/27 12:31:00 發(fā)布:
哈哈 自己頂 |
17樓: | >>參與討論 |
作者: 問題 于 2008/3/31 14:47:00 發(fā)布:
紳士們: 在開發(fā)AT90CAN128的板子中,對CAN的驅(qū)動代碼中MAIN函數(shù)不知道怎么寫,能否提供一下!初始化配置我有了!但就是關(guān)于在MAIN函數(shù)中怎么操作CAN呢? 盼答復(fù)! |
|
|
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號 |