- fchao-Sinus-Wechselrichter AliExpress         
Seite 13 von 18 ErsteErste ... 31112131415 ... LetzteLetzte
Ergebnis 121 bis 130 von 177

Thema: Funktionierendes CAN Bus Projekt entwickeln unter Bascom

  1. #121
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    Anzeige

    Powerstation Test
    Goil ! Nun kann ich bereits zwischen zwei Boards Nachrichten hin- und herschicken und sie empfangen sogar das richtige Byte *froi* ganz automatisch mit ISR.

    Nun fehlt eigentlich nur noch die Ausmaskierung und Identifier, die sind zur Zeit noch alle disabled.

    Mit
    Canwrite Bfpctrl , &B00001111 'RXnBF Pins Buffer Full Anzeige

    müsste man doch eigentliche eine Anzeige an D4 (mein Schaltplan) bekommen, wenn ein Buffer voll ist, oder ?

    Ansonsten hier mal der aktuelle Stand, wie er testhalber läuft. Allen nochmals herzlichen Dank soweit !
    Angehängte Dateien Angehängte Dateien
    Alles wird gut... Gruß Alex

  2. #122
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Bei ID und Maske ist zu beachten, welche Bits als ID-Bits verwendet werden.
    Das sind mitnichten bit 0-7 usw. die sind lustig übers Register verteilt ...

    Nur mal noch n Einwurf ... ist n häufiger Stolperstein.
    Also der Befehl "shift left" ist Dein Freund dabei.

    Das mit dem Flag setzen in der ISR haste schön gemacht ...

    "Sie haben Post ..."
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #123
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    Falls Feitzi noch mitliest: Deine Leseroutine kannst Du vielleicht etwas optimieren, so wie hier:

    Code:
          Dlc0 = Canread(rxb0dlc)
          Print "RxB0DLC=" ; Bin(canread(rxb0dlc))
          Print "RxB0CTRL=" ; Bin(canread(rxb0ctrl))
          Spi_read_buff(1) = Cmd_read
          Spi_read_buff(2) = Rxb0d0
          Reset Mcp_cs
          Waitus 1
          Spiout Spi_read_buff(1) , 2
          Spiin Can_rxd_data(1) , Dlc0
          Waitus 1
          Set Mcp_cs
          For N = 1 To Dlc0
             M = N - 1
             Print "0D" ; M ; "=" ; Can_rxd_data(n) ; "-"
          Next N
          Canmod Canintf , &B00000001 , &B00000000
          Canmod Eflg , &B01000000 , &B00000000
    natürlich noch ohne Fehlerauswertung, aber deutlich übersichtlicher. Diese Routine liest so lange Register aus, wie der DLC lang ist und legt sie automatisch in einem maximal 8 Byte langen Array ab. Braucht deutlich weniger Hilfsvariablen (eine nur zur Anzeige) und eine deutlich kleinere Schleife - und diese auch nur zum Anzeigen.
    Alles wird gut... Gruß Alex

  4. #124
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    Nun habe ich eine Senderoutine, die abwechselnd eine Nachricht mit sidl=00100000 und sidl=00000000 sendet. Der Empfänger soll nur die Nachrichten mit sidl=00100000 empfangen. Boh - aber er empfängt noch beide Nachrichten:
    Code:
       Canwrite Caninte , &B00000011                            'Interrupt einstellen
       Canwrite Rxb0ctrl , &B00100100                           'Buffer 0: Empfangen aller Nachrichten
       Canwrite Rxb1ctrl , &B00100000                           'Buffer 1: Empfang aller Nachrichten
    
       Canwrite Rxm0sidh , 0                                    'Kein Filter, Empfängeradresse Null
       Canwrite Rxm0sidl , &B00100000
       Canwrite Rxm0eid8 , 0
       Canwrite Rxm0eid0 , 0
       Canwrite Rxm1sidh , 0
       Canwrite Rxm1sidl , &B00100000
       Canwrite Rxm1eid8 , 0
       Canwrite Rxm1eid0 , 0
    
       Canwrite Rxf0sidl , &B00100000
       Canwrite Rxf1sidl , &B00100000
       Canwrite Rxf2sidl , &B00100000
       Canwrite Rxf3sidl , &B00100000
       Canwrite Rxf4sidl , &B00100000
    Mit dieser Config sollte die Maske und auch alle Filter nur durchlassen, was sidl=00100000 hat, oder was habe ich da nicht geblickt ? Kommt jetzt genau das, was Du meintest ?
    Alles wird gut... Gruß Alex

  5. #125
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    Vitis,

    kannst Du mir nochmal sagen, wo ich dazu etwas finde ? Ich habe nun Sender und Empfänger, wenn ich per Dipschalter z.B. SIDL=00001111 einstelle, zeigt der Empfänger an, daß die SIDL 00001011 ist ? Ich bin verwirrt....
    Alles wird gut... Gruß Alex

  6. #126
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    arghs... Nun, ich hatte auch die völlig falschen Bits in SIDL eingestellt, nun überträgt er immer richtig. Jetzt muss ich es nur noch hinbekommen, daß er nur eine bestimmte Nachricht empfängt, aber irgendwie habe ich die Filter noch nicht richtig eingestellt:

    mit radress=00100000

    Canwrite Rxb0sidl , Radress
    Canwrite Rxf0sidl , Radress
    Canwrite Rxm0sidl , Radress

    sollte jetzt ein so konfigurierter client nur Nachrichten mit SIDL 00100000 empfangen, oder nicht ? Jedenfalls werden noch alle Nachrichten empfangen, rollover ist ausgeschaltet.
    Alles wird gut... Gruß Alex

  7. #127
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Auszug aus einer CAN-Bus-Beschreibung ( http://www.me-systeme.de/canbus.html ):

    Prinzip des Datenaustausches im CAN Netzwerk

    Bei der Datenübertragung in einem CAN Bus werden keine Knoten adressiert, sondern der Inhalt einer Nachricht (z.B. Drehzahl oder Motortemperatur) wird durch einen eindeutigen Identifier gekennzeichnet.

    Neben der Inhaltskennzeichnung legt der Identifier auch die Priorität der Nachricht fest.

    Mit der dann folgenden Akzeptanzprüfung stellen alle Stationen nach korrektem Empfang der Nachricht anhand des Identifiers fest, ob die empfangenen Daten für sie relevant sind oder nicht. Durch die inhaltsbezogene Adressierung wird eine hohe Flexibilität erreicht: Es lassen sich sehr einfach Stationen zum bestehenden CAN-Netz hinzufügen.

    Außerdem ergibt sich die Möglichkeit des Multicasting: Eine Nachricht kann von mehreren Teilnehmern gleichzeitig empfangen und ausgewertet werden. Messgrößen, die von mehreren Steuergeräten als Information benötigt werden, können über das CAN-Netz so verteilt werden, dass nicht jedes Steuergerät einen eigenen Sensor benötigt.

    Ev kannst du die Lesung nicht selektieren?
    Geht sonst alles?

  8. #128
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    Ansonsten geht alles. Der Identifier wird ja auch korrekt gesendet, nur habe ich offenbar noch ein Problem mit der Erkennung, ob die Nachricht nun für den Empfänger wichtig war und somit empfangen wird... Ich lese mich da gerade noch tiefer rein, aber noch checke ich das nicht...
    Alles wird gut... Gruß Alex

  9. #129
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Hallo Alex,
    wenn alles soweit funktioniert, würdest du den Code hier reinstellen? Interessiert nicht nur mich wie es scheint.
    Manche gute Programmmierer könnten eine Lib draus machen.
    Ich bin schon aus Frust auf MBasic bei CAN umgestiegen, da gibt es eine Lib. Und Diese ist easy zu handeln.
    Ev. könntest du den Code bei Mscelec abgeben, vielleicht macht er was draus, wäre doch für alle Bascom-Anwender gut.
    Vielen Dank

  10. #130
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    Kann ich machen, das ist ja nur ein Testboard und somit nicht schlimm. Ich poste dann Schaltplan etc.

    Ich muss halt nur noch die "Adressierung" bzw. Nachrichtenselektion richtig hinbekommen und den Code verschönern...
    Alles wird gut... Gruß Alex

Seite 13 von 18 ErsteErste ... 31112131415 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test