• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Plytka Proto - MCP2025
#1
Cześć kupiłem se płytke prototypową wlutowałem do niej MCP2025 500 i teraz mam odbieranie danych, Wysyłać danych nie wysyła nawet jak mu daje że ma podgłośnić to się nic nie dzieje nie wiem jak wzbudzić MCP2025 do możliwości wysyłania wiadomości, ogólnie Pin 2 MCP mam podłączony do Pinu 3 Arduino i tak sie staram go wzbudzić

Kod:
   pinMode(3, OUTPUT);
   digitalWrite(3, HIGH);

Lecz to nic nie pomaga dalej chyba jest uśpiony bo się nie da wysyłać proszę was o pomoc.

Zdjecie pokazane od drugiej strony po lewej jest od pinu 8 po prawej o pinu 1

Kod
Kod:
#include <SoftwareSerial.h>

SoftwareSerial IBusSerial(11,10); // RX, TX for IBus

//Lbus = Ibus from Car
//Vss = Ground
//Vbb = +12V do Pin LWAKE - Rezystor 220ohm

// Pins we use for MCP2004
const int faultPin = 6; //FAULT
const int cspin = 8;  //CS
const int disablerx = 2;  //CS

boolean read_byte = false;
byte readbuffer[64];

int i;
int buffer_index = 0;
int buffer_max = 64; // 64 default
int cksum;
long lastrx;
long lasttx;
char *Buffer = new char[buffer_max];

boolean byteSTATE = false;
int EventID = 0; // Event number (for case select)

   byte volup[6] = {0x50,0x4,0x68,0x32,0x11,0x1F}; // Steering wheel Volume Up
   //char volume_up[]="\x50\x04\x68\x32\x11\x1F";
   byte voldown[6] = { 0x50 , 0x4 , 0x68 , 0x32, 0x10 , 0x1E }; // Steering wheel Volume Down
   //50 4 68 32 11 1F
   //50 4 68 32 10 1E
   byte pressmode[6] = { 0xF0, 0x4, 0x68, 0x48, 0x23, 0xF7 };
   byte pressmenu[6] = {0x68,0x4,0x3B,0x46,0x1,0x10}; //Menu Klikniecie
   byte showmenu[6] = {0x68,0x4,0x3B,0x46,0xC,0x1D};  //Menu Pokazanie
   byte releasemode[6] = { 0xF0, 0x4, 0x68, 0x48, 0xA3, 0x77 };
   //MENU  68 4 3B 46 1 10
   ////68 4 3B 46 C 1D
   byte ibussucks[22] = {
       0x68, 0x12, 0x3B, 0x23, 0x62, 0x10, 0x49, 0x42, 0x55,
       0x53, 0x53, 0x55, 0x43, 0x4b, 0x53, 0x20, 0x20, 0x20,
       0x20, 0x20, 0x20, 0x40
   };
int messagelen;
void setup(){
   // initialize buffer array to 0's
   memset(readbuffer, 0, sizeof(readbuffer));
   
   // Open serial communications to host (PC) and wait for port to open:
   Serial.begin(9600, SERIAL_8E1);
   Serial.println("IBus Debugging begins");
   
   // set the data rate for the SoftwareSerial port
   IBusSerial.begin(9600);
   
   // Set high to enable TX on MCP2025
   pinMode(cspin, OUTPUT);
   digitalWrite(cspin, HIGH);

   pinMode(13, OUTPUT);
   digitalWrite(13, LOW);

 
   //pinMode(faultPin, OUTPUT);
   //digitalWrite(faultPin, HIGH);
   
   lastrx = millis();
   lasttx = millis();
}

void loop(){
   delayMicroseconds(3000);
   
   if (Serial.available()){
       Serial.println("Got Input");
       handleMessage(Serial.read());
   }
   lasttx = millis();

   if ((millis() - lastrx) > 15) {
       memset(readbuffer, 0, sizeof(readbuffer));
       buffer_index = 0;
       read_byte = false;
       buffer_max = 64;
       lastrx = millis();
       return;
   }

   if (IBusSerial.available()) {
       readbuffer[buffer_index] = IBusSerial.read();
       read_byte = true;
   }

   if (read_byte){
       if (buffer_index == 1){
           buffer_max = readbuffer[buffer_index] + 2;
           cksum = readbuffer[0] ^ readbuffer[1];
       } else if ((buffer_index > 1 ) && (buffer_index < buffer_max)){
           cksum = cksum ^ readbuffer[buffer_index];
       }
   }

   // Reset buffer_index when it is buffer_max - 1.
   if (buffer_index == (buffer_max - 1)) {
    //  if ((readbuffer[0] == 0x68) || (readbuffer[2] == 0x68)) {
           if (cksum == 0) {
             //  Serial.print("Good message: ");
             //  Serial.print(millis());
             //  Serial.print(": ");
               for (i = 0; i < buffer_max; i++){
                  Serial.print(readbuffer[i],HEX);        
               }
               if(memcmp(readbuffer, volup, 6) == 0 ){ Serial.println("Wcisniety guzik z głośnosci"); }
           }else {
               Serial.print("Invalid message. cksum: ");
               Serial.println(cksum, HEX);
               for (i = 0; i < buffer_max; i++){
                   Serial.print(readbuffer[i], HEX);
                   Serial.print(" ");
               }
           }
           Serial.println();
//      }

       // Empty the buffer
       memset(readbuffer, 0, sizeof(readbuffer));
       buffer_index = 0;
       read_byte = false;
       lastrx = millis();
   }
   
   // Increment index if we put something into the buffer
   if (read_byte == true){
       read_byte = false;
       buffer_index++;
       lastrx = millis();
   }
}

void handleMessage(byte messageType){
// OP Was setting faultPin HIGH to write?
//IBusSerial.flush();
//digitalWrite(8, HIGH);
// Serial.println(messageType);
pinMode(11, INPUT);
digitalWrite(11, LOW);  // don't pull up
   switch (messageType){
       case 0x70: // p for vol up
           Serial.println("Sending vol up.");
           sendMessage(volup);
           break;
       case 0x6E: // n for vol down
           Serial.println("Sending vol down.");
           sendMessage(voldown);
           break;
       case 0x42: // B for IBus Sucks
           Serial.println("Sending IBus Sucks.");
           sendMessage(ibussucks);
           break;
       case 0x6D: // m for mode
           Serial.println(" Mode.");
           sendMessage(pressmode);
           delay(150);
           sendMessage(releasemode);
           break;
   }
//digitalWrite(8, LOW);
}

void sendMessage(byte message_data[]){
 digitalWrite(11, LOW);
   for (int i=0; i <= sizeof(message_data); i++){
     digitalWrite(10, message_data[i]);
     IBusSerial.write(message_data[i]);
  }
}

Zdjęcia Proto:
           
 
Odpowiedź
#2
narysuj mi schemat połączenia z uc
 
Odpowiedź
#3
Podłączenie jest takie według tego schematu.

[Obrazek: ibus+-+linbus+V01.JPG]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości