mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CAN-Bus Zickiger bei df als RS232?


Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein guten Abend allen Abstinezlern der ermüdenden Fernsehunterhaltung.
Ich habe jetzt ca. 2 Wochen nach dem Fehler in meiner Schaltung gesucht.
Basis des Ganzen ist ein 90CAN128 mit etwas Krimskrams drum herum und 
einem 8Mhz Quarz. Nun wollte ich mir noch ganz auf die Schnelle einen 
Adapter zaubern über den ich via RS232 alles sehe was so auf dem CAN-Bus 
vorgeht. Weil ich die Daten schnell vom Proz. weg haben wollte, um 
nichts zu verpassen habe ich aber im Lauscher einen 11.059 MHz Quarz 
verbaut, um schneller als 38.800 Baud auf der RS232-Seite sein zu 
können.
Um erst einmal die Funktion hinzubekommen habe ich mir gedacht, ich 
benutze den internen Oszillator, schreibe das OSCAL-Byte und wenn es der 
RS232 - Schnittstelle reicht, sollte es auch dem CAN-Bus reichen.
Nach Tagen erfolgloser Suche habe ich durch Zufall festgestellt, dass 
ein zyklisch alle Sekunde aus dem Lauscher gesendetes Signal ein paar uS 
zu früh kam. Das OSCCAL Byte von 0x5e auf 0x5d verändert löste das 
Problem schalgartig.
Nun meine Frage dazu.
Weil es noch keine funktionstüchtigen CAN-Libs von Atmel gab, als ich 
mit dem CAN90128 angefangen habe herumzubasteln habe ich mir selber was 
geschustert, was bisher ganz gut funktionierte.

Kann es sein dass ich bei der Programmiererei zu oberflächlich war, das 
mein CAN-Bus so zickig auf die Frequenzabweichung reagiert hat?
Kann man das verändern, anpassen, tolleranter gestalten?

Ich hänge mal meine Initialisierung an ...
#define init_mob_rx_0 init_mob_rx(0,8192,536862720);    // einkürzen des Befehls, damit Tag und Mask nicht immer mit eingegeben werden müssen. 

void Can_bit_timing (void)
{
CANBT1= 0x08;
CANBT2= 0x0C;
CANBT3= 0x37;
}

void can_init (void)
{
  Can_bit_timing();
  Can_clear_all_MOB();
  setbit(CANGCON,1);                   //Can_enable  
  
  if (Controller_ID > 0) candriver_enable;        //Hardware-Enable

  CANGIE = 0xa0;     //freigabe für Receive Interrupt + global interrupt
  CANIE2 = 0x0f;     // freigabe Interrupt MOB0 - 4
  init_mob_rx_0;
}

Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls jemand mal die Antwort auf die Frage suchen sollte.
Es besteht die Möglichkeit, den CAN etwas tolleranter zu gestalten. Im 
CANBT2  -Register sind dazu die SJW - Bits entsprechend zu setzen. In 
den Beispielen sind die immer 0 und damit sehr zickig bei 
Frequenzabweichungen.
Das 12MHz Beispiel passt nicht für 11.0542MHz Quarz.
Zu Fuss rechnen ist hier unerläßlich.

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe meinen CANSniffer mit 16MHz getaktet, damit kann ich über die 
RS232 500KBit (oder 250Kbit oder 1MBit) fahren. Damit schaffe ich auch 
die Daten schnell genug weg, wenn der CAN Bus mit z.B. 500KBit läuft.

Allerdings habe ich auch andere HW als du. Mit den krummen Baudwerten 
wollte ich mich aber nicht herumschlagen müssen...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für CAN nimmt man in der Regel Quarze mit glatten MHz.

Krumme Quarze oder den internen RC sollte man sich nicht antun, wenn man 
die Produkte verkaufen will.

11,05MHz sollte genau so gehen, wie 11,00MHz.
Mein Softwerker hat mich aber zu 16MHz überredet.


Peter

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.