Skocz do zawartości

Własny CAN-BUS Shield MCP2515 i problem z komunikacją


petrow17

Pomocna odpowiedź

Witam wszystkich zainteresowanych,
wpadłem na taki pomysł, żeby zrobić swoją własną płytkę do komunikacji z samochodem po sieci CAN - do tej pory w razie potrzeby używałem urządzenia EML327 opartego na układach MCP2515 i PCA82C250 i takie też scalaki wybrałem do budowy własnej płytki.

Znalazłem w sieci trochę informacji o samej CAN jak i kilka projektów wykorzystujących w.w. scalaki. Programuję w arduino a bibliotekę do obsługi MCP również pobrałem z sieci.

No i już na samym początku problem jest taki, że komunikacja po CAN-ie nie zostaje zainicjalizowana.

Być może spowodowane to jest tym że nano jest taktowane 12MHz jak się nie mylę, a mój MPC w tej chwili nie jest taktowany w ogóle. Wg. przykładowego projektu można go taktować albo zewnętrznym kwarcem, albo jakoś z atmegi ale tego właśnie też nie wiem jak zrobić.

Oto mój schemat; zawiera on też miejsce na dwa czujniki temperatury analogowe i na kostkę DHT-11. Złącza opisane jako AN_1 i AN_2 umożliwiają wpięcie arduino nano

Część dotyczącą interfejsu CAN wzorowałem na TYM projekcie:

Testowy program jest dość prosty, ponieważ obsługuje tylko czujniki temperatury i powinien zainicjalizować CAN, ale niestety z jakiegoś powodu się nie da 🙁

#define DHT_PIN 3
#define AT1_PIN 0
#define AT2_PIN 1
#define LED_PIN 13

#include <SPI.h>
#include <MCP2515.h>
#include <dht.h>

float getTemp_0();
float getTemp_1();
float getTemp_DHT();
float getHumi_DHT();
void abort(char *msg);

void setup(){
Serial.begin(9600);
Serial.println("Starting");

if(!MCP2515::initCAN(CAN_BAUD_500K)) abort("Failed initCAN");
if(!MCP2515::setCANNormalMode(LOW)) abort("Failed CANNormalMode"); 

pinMode(LED_PIN,OUTPUT);
}

void loop(){
digitalWrite(LED_PIN,HIGH);

Serial.print("Temp_0: ");
	Serial.println(getTemp_0());

Serial.print("Temp_1: ");
	Serial.println(getTemp_1());

Serial.print("Temp_DHT: ");
	Serial.println(getTemp_DHT());

Serial.print("Humi_DHT: ");
	Serial.println(getHumi_DHT());

digitalWrite(LED_PIN,LOW);
delay(500);
}

float getTemp_0(){
return ((analogRead(AT1_PIN) * 5 / 1024.0) - 0.55) / 0.01;
}

float getTemp_1(){
return ((analogRead(AT2_PIN) * 5 / 1024.0) - 0.55) / 0.01;
}

float getTemp_DHT(){
dht DHT;
return DHT.temperature;
}

float getHumi_DHT(){
dth DHT;
return DHT.humidity;
}

void abort(char *msg)
{
Serial.println(msg);
while(true);
}

bibliotekę MCP2515 zamieszczam w załączniku.

PODSUMOWUJĄC moje wypociny,
1. W jaki sposób mogę taktować MCP z Arduino?

2. Dlaczego nie udaje mi się inicjalizacja CAN?

P.S.

Aktualnie wygląda to tak:

MCP2515.zip

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.