Posts by Kellermann66

    was ist denn dein eigentliches Problem? (siehe xy-problem)

    Mein Ziel ist es die Kommunikation zwischen CAN-Controller und dem Raspi so schnell wie möglich einzustellen. Dadurch soll dann so wenig Zeit wie es geht benötigt werden.

    Btw, welches CAN overlay verwendest du denn eigentlich genau? Vorkompiliert dtbo von mcp2515-can0-overlay.dts

    GGf. kannst du ja daran drehen und nei kompilieren.

    Also in meiner config.txt habe das eingetragen:

    Code
    dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=22
    dtoverlay=mcp2517fd-can1,oscillator=40000000,interrupt=25

    Ob und wie man daran jetzt rumschrauben kann weiß ich leider nicht...

    Oha, du hast das CAN Modul also selbst entwickelt und gebaut mit Layout usw.?

    Ne leider nicht :D Ist ein Projekt auf der Arbeit. Das Board extern entwickelt...


    Das Einstellen der bitrate macht ja normalerweise das overlay beim öffnen

    Aber wird dabei nicht nur die Geschwindigkeit für den CAN-Bus eingestellt? Oder wird dabei auch der SPI-Bus verändert? Ich möchte nämlich den Datenaustausch zwischen dem Raspi und den CAN-Controllern erhöhen!

    Hallo,


    erstmal Danke für die Antworten! Also auf meinem Board sind die Controller MCP2515 und MCP2517FD verbaut. Beide hängen am SPI-Bus. Was ich jetzt vorhabe ist, die Geschwindkeit des SPI-Busses zu erhöhen. Dieser ist glaube ich standardmäßig auf 500 kHz gesetzt. Die beiden Controller können jedoch eine höhere Geschwindgkeit.

    Im Internet habe ich jetzt gelesen, dass für das Erhöhen nun die Schnittstellen "spidev0.0" und "spidev0.1" geöffnet werden müssen. Wenn jedoch die CAN-Schnittstellen aktiv sind kann ich die SPI-Schnittstellen nicht öffnen, weil diese nicht bekannt sind... Gibt es da irgendwie eine Möglichkeit die Geschwindkeit trotzdem zu erhöhen??

    Hallo zusammen,

    zunächst wünsche ich allen ein frohes neues Jahr!

    Zu meinem Anliegen: Zurzeit arbeite ich mit dem CAN-Bus an dem Raspberry Pi. Mein Problem ist jetzt, wenn die CAN-Schnittstellen aktiv sind kann ich nicht auf den SPI-Bus zugreifen. Deshalb wollte ich mal fragen, ob es möglich ist die SPI-Schnittstellen trotz CAN öffnen zu können?? Ich möchte nämlich die Geschwindigkeit von dem SPI-Bus variieren und dafür habe ich gelesen, dass dies programmtechnisch nur über die jeweiligen Schnittstellen geht...

    Wäre echt super wenn hier jemand ist, der mir einen Tipp geben könnte!

    Gruß Kilian

    Guten Tag,

    leider muss ich dieses Thema hier noch einmal reaktivieren...

    Dank dieser Hilfen hier, kann ich nun die LIN-Nachrichten fehlerfrei empfangen! Nur leider habe ich jetzt ein anderes Problem. Vorher konnte ich LIN-Nachrichten ohne Probleme auch senden. Jetzt geht das leider nicht mehr... In dem Bild habe ich auch mal das Ergebnis hinzugefügt, welches ich mithilfe eines Oszilloskops aufnehmen konnte. Die Daten zum Ende hin sehen recht normal aus aber die Busänderung am Anfang dürfte eigentlich nicht vorkommen! Da wird der Bus für ca. 1ms auf Low gezogen.

    Hat jemand vielleicht eine Idee voran das liegen könnte???

    Bin um jede Hilfe dankbar!

    Mfg Kilian

    Hallo zusammen,

    falls ich mit meinem Anliegen in dem falschen Bereich bin, kann dieses Thema gerne verschoben werden!

    Momentan habe ich ein Problem mit meiner CAN-Schnittstelle. Eine Kommunikation über den normalen CAN-Bus funktioniert. Jetzt wollte ich das mit CAN-FD ausprobieren. Nur das klappt leider nicht... Bei dem Booten des Systems werden die Controller erfolreich initialisiert.

    Code
    # Enable CANFD-Bus
    kernel=ms7/zImage
    device_tree=ms7/bcm2710-rpi-3-b.dtb
    overlay_prefix=ms7/overlays/
    dtoverlay=mcp2517fd-can0,oscillator=40000000,interrupt=22
    dtoverlay=mcp2517fd-can1,oscillator=40000000,interrupt=25

    Starten kann ich die Schnittstellen ebenfalls, allerdings bin ich mir da nicht sicher, ob ich die auch korrekt aktiviere!?

    Code
    ip link set can0 up type can fd off tq 250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1 berr-reporting off restart-ms 100
    ip link set can1 up type can fd off tq 250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1 berr-reporting off restart-ms 100

    Mein Programm ist in C geschrieben und ich initialisiere die Sockets so, wie es sämtliche Webseiten (z.B. https://copperhilltech.com/what-is-socketcan/) vorschreiben. Nur leider bekomme ich es nicht hin, CAN-FD-Daten zu senden. Ich habe mal nachgesehen und die MTU des Sockets sind immer 16 Bytes. Das müssten aber 72 Bytes sein wenn CAN-FD-Daten gesendet werden sollen...

    Ich bin gerade etwas ratlos und finde keinen Fehler... Hat hier jemand vielleicht schon eine CAN-FD-Schnittstelle erfolgreich erstellt und könnte mir helfen???

    Mein System ist übrigens ein Raspberry Pi 3B mit Raspbian Jessie.

    Mfg Kellermann66

    Hallo zusammen,

    ich hoffe ich bin mit meinem Anliegen in dem richtigen Bereich... Ansonsten kann das Thema ruhig verschoben werden!

    Weiß jemand zufällig wie man die Bezeichnungen der CAN0- und CAN1-Schnittstellen programmtechnisch ändern kann? Z.B. zu CAN1 und CAN2?

    Zurzeit verwende ich einen Raspberry Pi 3 mit dem Betriebssystem Jessie.

    Ich hoffe es kann mir hier jemand helfen, da ich bereits sämtliche Seiten durchsucht und nichts gefunden habe...

    Gruß Kellermann66

    Sorry ... da verstehe ich jetzt nicht was Du meinst ... :conf:

    Bei deinem Link habe ich es so verstanden, dass der Raspberry Pi komische Daten sendet. Aber ich möchte ja nicht senden sondern nur empfangen...

    Das ist egal. Wichtig ist die, die Du verwendest.

    Du musst halt berücksichtigen, dass auf den Pins #8 und #10 (GPIO14 und GPIO15) die Schnittstelle /dev/ttyS0 liegt und nicht, wie früher, /dev/ttyAMA0 ...

    Ich verwende die Schnittstelle /dev/ttyS0 aber die wird mir ja auch als inactive angezeigt.

    Hallo dreamshader,

    vielen Dank für deine Antwort. Kann das denn auch angewandt werden, wenn ich nur lesen möchte? Ich lese ja nur komische Daten...

    PS: Ich habe mal den Status-Befehl ausgeführt und meine Schnittstelle ist bereits inaktiv.

    Sollen eingentlich beide Schnittstellen (ttyAMA0 und ttyS0) "inactive" anzeigen??

    Guten Tag zusammen,

    ich weiß jetzt leider nicht, ob ich mit meinem Anliegen hier richtig bin. Zur Not kann der Eintrag gerne verschoben werden.

    Also, meine Situation sieht wie folgt aus. Ich nutze zur Zeit einen Raspberry Pi 3B mit Raspbian Jessie. Da ich kein Bluetooth aber die UART-Schnittstelle benötige, habe ich mit dem folgenden Befehlen

    Code
    dtoverlay=pi3-disable-bt
    sudo systemctl disable hciuart

    die Bluetooth-Schnittstelle deaktiviert. In C habe ich ein Programm geschrieben, mit dem ich nun LIN-Pakete empfangen möchte. Dafür verwende ich die Schnittstelle "/dev/serial0" um die Daten über die UART-Schnittstelle zu empfangen. Wenn ich jetzt Pakete an der Schnittstelle empfange und diese auslese, erhalte ich Daten, die in keinem Zusammenhang zueinander stehen. Die Nachrichten liegen allerdings richtig an den Pinnen an. Das habe ich mit Hilfe eines Oszilloskos geprüft. Also muss irgendwas zwischen empfangen und auslesen schiefgehen.

    Hat da jemand vielleicht schon mal ein ähnliches Problem gehabt?? Wäre echt super wenn mir einer etwas weiterhelfen kann! Bin momentan etwas ratlos...

    Gruß Kellermann66

    PS: Ich hatte es auch schon versucht die Bluetooth-Schnittstelle wieder zu aktivieren, allerdings habe ich danach ähnliche Daten empfangen...

    Da ich dazu bisher nichts gelesen habe: Wie aktualisierst du die Zellen deiner Tabelle - oder allgemein: Wie aktualisierst du deine Tabelle?


    Beitrag#5 habe ich gelesen, auch das bzgl. Websockets. Trotzdessen die Frage. Bitte Code-schnippel zeigen.

    Das ist meine Funktion, die eine neue Tabellenzeile erzeugt. Allerdings können zwei Tabellen damit aktualisiert werden. Ich hoffe, dass es nicht ganz so schlecht geschrieben ist, denn das ist bisher mein zweites Projekt mit Javascript und musste es mir halt selber beibringen... Für Tipps bin ich deswegen immer sehr dankbar!

    Ich habe es auch mal getestet. Bei ca. 8000 Einträgen bekommt der Browser Probleme...

    Die Webseite wird nicht bei jedem neuen Eintrag neu aufgebaut... Die Daten werden mittels jquery in die Tabelle eingefügt.

    außerdem spielt hier auch die Ausführungsgeschwindigkeit (der JS Engine) und die Geschwindigkeit der Netzwerkschnittstelle ein Rolle. Bei beidem ist der Raspi ja keine "Raket"...

    Wie viele Daten hälst du den im Speicher? Wie wie groß ist ein Datensatz? Wenn das OS anfangen sollten zu swappen, dann wird's richtig langsame.

    An dem Raspi wird es nicht liegen. Wenn ich mir die Daten über Putty ausgeben lasse, funktioniert alles. Der Browser auf dem Desktop-PC / Laptop macht irgendwann schlapp... Ich glaube, dass dem irgendwann die Daten zu viel werden.

    Erstmal danke für eure Antworten!

    wie definierst du "Tabelle" in deinem Kontext - ist das die DB-Tabelle oder eine Darstellung auf der Webseite?

    Bei der "Tabelle" geht es um die Darstellung auf der Webseite.

    Erfolgt der Eintrag von neuen Werten via Browser oder direkt serverseitig und der Browser holt "nur" die Daten ab?

    Also die Daten werden momentan nicht in der DB gespeichert. Wenn ein neuer Datensatz verfügbar ist, wird dieser direkt im JSON-Format vom Raspberry Pi mithilfe eines WebSockets zum Browser geschickt und dort in Javascript verarbeitet und und in die Tabelle geladen.

    Vielleicht kannst du mal den Hintergrund dieser Anwendung erläutern. ich glaube, dass dein Ansatz grundsätzlich nicht zur Aufgabe passt.

    Der Raspberry Pi hat zwei CAN-Kontroller die alle CAN-Botschaften mitlesen sollen. Wenn dann ein neuer Frame eingelesen wurde, wird dieser verarbeitet, zum Browser geschickt und dort angezeigt.

    Wenn die Tabelle alle paar ms aktualisiert wird, rauschen die neuen Einträge seitenweise über den Bildschirm - schneller als man sie lesen kann... Was bringt das?

    Bei 25 ms hast du 40 Einträge in der Sekunde. Macht in 24 Stunden 3,5 Mio Einträge.

    Das macht in diesem Fall nichts. Es kann eine Aufzeichnung gestartet sowie gestoppt werden. Ist die Aufzeichnung gestoppt, wird die Tabelle nicht aktualisiert. Hierbei heißt es auch nicht, dass alle paar Millisekunden, 24 Stunden lang Daten empfangen werden. Es sind immer nur kleine Zeiträume. Allerdings, wenn man mal paar Minuten aufzeichnet, bekommt man recht viele Daten. Damit hat der Browser dann Probleme...

    Hallo zusammen,

    ich hätte mal eine Frage zur effektiven Datenverarbeitung bei vielen Tabelleneinträgen... Die Tabelle auf meiner Webseite kann alle paar Millisekunden aktualisiert werden. Dabei wird jeder neue Datensatz in der ersten Zeile eingefügt und der rest dementsprechend nach unten geschoben. Wenn die Tabelle allerdings sehr viele Einträge hat, merkt man, dass der Browser mit der Datenverarbeitung nicht mehr hinterher kommt und es passiert so gut wie gar nichts mehr.

    Deshalb wollte ich mal hier fragen, wie ihr das so gelöst habt?!

    In diesem Projekt arbeite ich mit html, javascript, php und mit der Datenbank sqlite.

    Gruß Kellermann66