- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 8 von 18 ErsteErste ... 678910 ... LetzteLetzte
Ergebnis 71 bis 80 von 177

Thema: Funktionierendes CAN Bus Projekt entwickeln unter Bascom

  1. #71
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    51
    Beiträge
    128
    Anzeige

    Powerstation Test
    Hey Vitis, das nenn ich doch mal Unterstützung!
    Nimms und nicht übel, wenn wir so doofe Fragen stellen aber jeder fängt doch mal klein an

    Jetzt würde mich aber auch mal interessieren wie eine Rückmeldung des Empfängers aussieht. Es ist ja wesentlich besser wenn der Sender die Info bekommt das sein Senden erfolgreich war.
    Wie muss die Nachricht an den Sender aussehen?

    Könntest du mir dazu einen Code basteln? (würde die anderen sicher auch interessieren)

  2. #72
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Zunächst mal solltest Du Dir mal genau überlegen
    wie Dein Bus laufen soll.
    Du kannst Deine Kommunikation so aufbauen, dass alle
    Busteilnehmer ihre Werte beliebig auf den Bus senden
    und die Anderen Busteilnehmer eben nur wenn sie
    Werte von einem Anderen benötigen diese dann annehmen,
    oder Du kannst Deinen Bus bauen, dass Busteilnehmer
    andere anrufen, damit diese dann ihre Werte schicken,
    also auf Polling.
    Für letztere Kommunikation stellt der MCP ne besondere
    automatische Funktion bereit, das RTR (siehe Datenblatt),
    mit welchem die Anwesenheit des angesprochenen
    Busteilnehmers erstmal erfragt werden kann.

    Bei den Kommunikationsformen bist Du dann eben
    schon im Protokoll. Hier bietet sich dann schon die
    Verwendung von standardisierten Protokollen an,
    such mal im Netz unter CANOpen.

    PS: ich könnte nen Code basteln, tu dies aber nicht. Ich gebe nur Hilfe zur Selbsthilfe und Tips.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #73
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    51
    Beiträge
    128
    Hallo zusammen,

    der letzte Beitrag zu diesem Thema ist ja schon einige Zeit her. Zeit genug um ihn wieder zu erwecken =D>

    Ich habe nochmal ein paar grundsätzliche Fragen:

    1. Wieso werden die Register immer hintereinander beschrieben z.B.
    z.B. Mcp2515_bitmodify Canctrl , &B11101000 , &B00001000
    Die zweite hebt doch die erste Anweisung auf?!

    2. Die Idee von Vits, das Bit 3 (OSM) auf 1 zu setzen und damit eine fortlaufende Übertragung zu stoppen hat leider nichts gebracht!

    Müsste man das Problem nicht eigentlich in den Buffern suchen?
    Wenn diese ihre Meldung gesendet haben, also Buffer0, 1 und 2 durchlaufen wurden, könnte die Nachricht darin wieder gelöscht werden.


    Im Code erfolgt dies doch auch jeweils am Ende der jeweiligen Bufferanweisung durch ein Reset, oder?



    Code:
    Send_buffer2:
     Hilf1 = Id / 8
     Idh = Hilf1
     Hilf1 = Idh * 8
     Hilf1 = Id - Hilf1
     Hilf1 = Hilf1 * 32
     Idl = Hilf1
    
     Mcp2515_bitmodify Txb2ctrl , &B00000011 , &B00000011
      'Standard ID einstellen
    
     Mcp2515_write_register Txb2sidh , Idh
     Mcp2515_write_register Txb2sidl , Idl
      'Nachrichtenlänge einstellen (DFL)
     Mcp2515_write_register Txb2dlc , Dfl
       'Daten
     Mcp2515_write_register Txb2d0 , Db0(1)
     Mcp2515_write_register Txb2d1 , Db0(2)
     Mcp2515_write_register Txb2d2 , Db0(3)
     Mcp2515_write_register Txb2d3 , Db0(4)
     Mcp2515_write_register Txb2d4 , Db0(5)
     Mcp2515_write_register Txb2d5 , Db0(6)
     Mcp2515_write_register Txb2d6 , Db0(7)
     Mcp2515_write_register Txb2d7 , Db0(8)
      'nachricht versenden
     Reset Css
       Waitus 10
       Mcphilf = Spi_rts2
       Spdr = Mcphilf
       Do
       Loop Until Spsr.spif = 1
       Waitus 10
     Set Css
    ' Print "gesendet Buffer-2"
     Waitms 50
    
    
    Return
    Außerdem wird das Register vor der eigentlichen Übertragung beschrieben
    Mcp2515_bitmodify Txb2ctrl , &B00000011 , &B00000011

    Wieso wird das Bit 6 nach Abschluss der Übertragung nicht nachträglich gesetzt? Oder liege ich jetzt völlig falsch?


    Edit: Hätte ich fast vergessen! Die Fortlaufende Übertragung erfolgt immer aus dem letzten Buffer. Die beiden ersten senden nur einmal.
    Ich habs mit zwei versucht, der Effekt ist der selbe.
    D.h. der Inhalt des Vorgängers wurde doch mit der Übertragung des aktuellen Buffers gelöscht, oder?

  4. #74
    Neuer Benutzer Öfters hier
    Registriert seit
    25.11.2005
    Beiträge
    9
    Hallo Düsentrieb,

    ich habe das Programm ebenfalls übernommen und der Tip von Vitis hat bei mir geholfen.
    Schau noch malgenau nach, sicher hast du nur einen Zahlendreher!

    Leider habe ich ein anderes Problem.
    Ich habe 3 Knoten am Bus hängen.
    Einer Empfängt alle Nachrichten und gibt sie auf einem Display aus.
    Die beiden anderen senden nur.

    Nun ist es so dass wenn einer der beiden sendet, der andere keine Nachrichtem mehr senden kann.
    Die Kommunikation ist nur noch zwischen dem ersten Sender zum Empfänger möglich.
    Woran kann das liegen?

    Klaus

  5. #75
    Neuer Benutzer Öfters hier
    Registriert seit
    25.11.2005
    Beiträge
    9
    Habe den Fehler gefunden.
    Natürlich müssen alle Meldungen in jedem Knoten ausgewertet werden bzw. jeder Knoten muss nach dem Empfang wieder in eine Grundstellung gebracht werden.
    Das habe ich nicht gemach....

    Aber ich habe mal ne andere Frage an die Experten.
    Im hier mehrfach beschriebenen Code wird die ID des Senders neu berechnet:

    Hilf1 = ID/8
    IDH = Hilf1
    Hilf1 = IDH *8
    Hilf1 = ID - Hilf1
    Hilf1 = Hilf1 *32
    Idl = Hilf1

    wieso macht man das?

  6. #76
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    51
    Beiträge
    128
    \/ Prost Neujahr!

    Hallo Klaus1973,
    bin mein Programm noch mal durchgegangen und habe tatsächlich den Fehler gefunden!
    Noch ungeklärt ist allerdings meine Frage

    1. Wieso werden die Register immer hintereinander beschrieben z.B.
    z.B. Mcp2515_bitmodify Canctrl , &B11101000 , &B00001000
    Die zweite hebt doch die erste Anweisung auf?

    Weis darauf keiner einen Rat?

    Ich versuche mich jetzt mal an der Adressierung.
    Wenn ich es richtig verstehe, dann müsste doch mit der folgende Initialisierungssequenz eines Empfängers, jede Nachricht mit der Sender-ID zur Auswertung kommen:

    Code:
     Mcp2515_init:
     Mcphilf = Spi_reset
     Reset Css
       Waitus 10
       Spdr = Mcphilf
       Do
       Loop Until Spsr.spif = 1
       Waitus 10
     Set Css
     Mcp2515_write_register Cnf1 , &H13
     Mcp2515_write_register Cnf2 , &H90
     Mcp2515_write_register Cnf3 , &H02
    
     'Interrupt einstellen
     Mcp2515_write_register Caninte , &B00000011
    
     'Buffer 0: Empfangen aller Nachrichten mit ID 255
     Mcp2515_write_register Rxb0ctrl , &B00100000
    
     'Buffer 1: Empfangen aller Nachrichten mit ID 255
     Mcp2515_write_register Rxb1ctrl , &B00100000
    
     Mcp2515_write_register Rxm0sidh , &B11111111
     Mcp2515_write_register Rxm0sidl , &B11111111
     Mcp2515_write_register Rxm0eid8 , 0
     Mcp2515_write_register Rxm0eid0 , 0
     Mcp2515_write_register Rxm1sidh , &B11111111
     Mcp2515_write_register Rxm1sidl , &B11111111
     Mcp2515_write_register Rxm1eid8 , 0
     Mcp2515_write_register Rxm1eid0 , 0
    
     'Einstellen der Pin Funktionen
     'Deaktivieren der Pins RXnBF Pins (High Impedance State)
     Mcp2515_write_register Bfpctrl , 0
    
     'TXnRTS Bits als Input schalten
     Mcp2515_write_register Txrtsctrl , 0
    
     'Device zurück in den normalen Modus versetzen
     Mcp2515_bitmodify Canctrl , &B11100000 , &B00000000
    
     'ende MCP2515_init
     Return

    Leider reagiert der Empfänger darauf überhaupt nicht.
    Wo habe ich den Fehler gemacht?[/code]

  7. #77
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    51
    Beiträge
    180
    @Klaus1973:
    Die Rechenoperation ist erforderlich um die Hight und Low-Bits so zu befüllen dass sie richtig übertragen werden <32 im IDH >31 im IDL

    @Duesentrieb:
    Ich habe bisher nur 2 Teilnehmer am Bus hängen und den Ursprungscode beibehalten.
    Damit wird alles Empfangen was gesendet wird.
    Ich werde mich aber bald auch mit dem Thema beschäftigen so dass mir eine Antwort auf deine Frage sicher auch helfen würde.
    Bist du schon weiter gekommen?

  8. #78
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.03.2006
    Ort
    WOB
    Beiträge
    630
    Hi,

    ich benötige auch mal eure hilfe.
    Ich habe ein CAN aufgebaut mit 2 Teilnehmern. Ein Empfänger, der läuft mit 8MHz und gibt die Daten auf ein Display aus. Der hat die Config:

    Code:
    Cnf1, H04
    Cnf2, H00
    Cnf3, H00
    Der funktioniert Tadellos mit einem Sender, der gleichen Art. Das ist ein PIC mit CAN controller integriert.

    Jetzt habe ich aber als Sender einen Mega32 mit einem 2510 als Controller (eigentlich 16MHz, nun aber einen 8MHz Quarz geholt), der nun mit der gleichen Taktfrequenz läuft. Auf diesem läuft das angehangene Programm. Ich habe die gleiche Config eingestellt, trotzdem empfange ich nur falsche Daten. Aber es kommt was (Inhalt ist 00000000).

    Kann mir jemand helfen was ich bei den 3 Cnf registern einstellen sollte??? Ich habe den RS Pin des 2551 auf GND. Und kann mir bitte jemand sagen, ob mein Bascom prog soweit korrekt ist so dass ich sicher sein kann dass es an der config liegt?

    Das wäre sehr nett!
    Angehängte Dateien Angehängte Dateien
    Gruß Thomas \/

    Alles über AVR, PIC und CAN
    blog.cc-robotics.de

  9. #79
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    Hi,

    ich habe nun auch mal endlich angefangen und mir hier und da ein paar Codeschnipsel angeschaut und endlose Mengen Unterlagen gewälzt. Nun läuft das prinzipiell auch schon, nur plötzlich ging es nicht mehr und ich stehe auf dem Schlauch. Hat jemand eine Idee ? Sobald MCPinit aufgerufen wird, geht das Programm beim ersten canwrite in den Watchdog...
    Angehängte Dateien Angehängte Dateien
    Alles wird gut... Gruß Alex

  10. #80
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    Haben alle Urlaub ?
    Alles wird gut... Gruß Alex

Seite 8 von 18 ErsteErste ... 678910 ... LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad