www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC CAN-Module


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich verwende einen PIC32 und wollte mal nur um den CAN ein bisschen zu 
verstehen eine Nachricht mit dem PIC rausschicken. Leider funktioniert 
meine Minimalkonfiguration nicht. Welche Register sind den mindestens 
notwendig um den CAN zum laufen zu bringen?

Gruß Stefan

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1) Hardware - wie sieht's da aus?
2) poste mal bitte deine minimal Konfiguartaion =)

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also hardware hab ich keine. Ich möchte erst einmal direkt am 
ausgangspin messen ob sich da was tut. Minimialkonfiguration ist:

  C1CONbits.REQOP=4;    //Requestion Operation Mode: CAN Configuration
while(C1CONbits.OPMOD != 4);  //Operation mode STATUS bit


  C1CONbits.CANCAP=1;        //CANTMR Empfangs Zeit wird gespeichert mit 
Nachricht

  C1CONbits.ON=1;        //CAN1-Module is enabled
  while(C1CONbits.CANBUSY == 1);


// !!!!FUNKTIONIERT NICHT KEIN PLAN WARUM!
//C1CONbits.SIDLE=0;        //CAN läuft in IDLE mode weiter

  C1CONbits.DNCNT=0;        //DeviceNet Filter: DO not compare bytes

  /* CAN Control-Register C1CON ENDE */


  /* CAN Control-Register C1CFG */

  C1CFGbits.SEG2PHTS = 1;        // Segment 2 kann frei programmiert 
werden
  C1CFGbits.SEG2PH = 1;      // 2 TimeQuantum fuer letztes Segment

  C1CFGbits.SAM = 1;        // CAN Bus wird dreimal hintereinander 
gesampelt (nur möglich wenn BRP<2)

  C1CFGbits.SEG1PH = 5;      // 6 TimQuantum für zwischen Segment (legt 
sample point fest -> 80%)

  C1CFGbits.PRSEG = 0;      // Verzögerungssegment enthält ein 
TimeQuantum

  C1CFGbits.SJW = 1;        //Synchronisationssprungweite -> muss 
kleiner oder gleich groß wie Segment2 sein

  C1CFGbits.BRP = 31;        // ergibt die länge des TimeQuantums: TQ = 
2*(BRP+1)/ Fsys -> Hier TQ = 2*32/80Mhz = 800ns

  /* CAN Control-Register C1CFG ENDE */

  /* CAN Interrupt Register C1INT */

  C1INTbits.IVRIE = 1;      // Invalid Message received interrupt 
erlaubt

  C1INTbits.WAKIE = 0;      // CAN bus activity wake-up interrupt nicht 
erlaubt

  C1INTbits.CERRIE = 1;      // CAN bus error bit erlaubt

  C1INTbits.SERRIE = 1;        // System error interrupt erlaubt

  C1INTbits.RBOVIE = 1;      //Receive buffer overflow interrupt erlaubt

  C1INTbits.MODIE = 0;      // Mode changed interrupt nicht erlaubt;

  C1INTbits.CTMRIE = 0;      // ??? CAN Timestamp Timer interrupt nicht 
erlaubt

  C1INTbits.RBIE = 1;        // Receive buffer interrupt enabled

  C1INTbits.TBIE = 1;        // Transmit buffer interrupt erlaubt

C1CONbits.REQOP=0x7;    //Requestion Operation Mode: Normal Mode
  while(C1CONbits.OPMOD != 0x7);

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh...hab noch die fifo konfiguration vergessen zu kopieren:

  C1FIFOBA=0;

  /* C1FIFOCONn CAN FIFO control Register (0..31)*/

    //Transmit FIFO1
    C1FIFOCON1bits.FSIZE = 31;      // 32 Messages tief
    C1FIFOCON1bits.TXEN=1;        // FIFO ist ein Transmit FIFO

    //Receive FIFO2
    C1FIFOCON2bits.FSIZE = 31;      // 32 Messages tief
    C1FIFOCON2bits.TXEN=0;        // FIFO ist ein Transmit FIFO

  //Receive FIFO3
    C1FIFOCON3bits.FSIZE = 31;      // 32 Messages tief
    C1FIFOCON3bits.TXEN=0;        // FIFO ist ein Transmit FIFO

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am einfachsten geht es mit der "peripheral library". Ein simples 
Beispiel, das funktioniert, gibt es hier:
http://ww1.microchip.com/downloads/en/DeviceDoc/ca...

Gruß,
Alex

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

danke. Das ist mir echt ne Hilfe!

Ich hab jetzt mal das programm auf mein PIC 32 Module geladen. Der 
CAN-Ausgangspin zeigt jedoch immer noch keine Regung. Lässt sich daraus 
schließen, dass ich erst noch hardware benötige? oder liegt es vlt. 
daran dass das Beispielprogramm mit einem Explorer 16 Board gemacht 
worden ist und ich ein anderes habe? Der Pin müsste doch trotzdem am TX 
ausgang zucken, oder?

Danke für die Hilfe,

Gruß

Stefan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.