petrow17 Napisano Sierpień 31, 2015 Udostępnij Napisano Sierpień 31, 2015 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 Cytuj Link do komentarza Share on other sites More sharing options...
stonczers Wrzesień 29, 2015 Udostępnij Wrzesień 29, 2015 Masz zamienione Tx z Rx Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!