- Labornetzteil AliExpress         
Seite 12 von 18 ErsteErste ... 21011121314 ... LetzteLetzte
Ergebnis 111 bis 120 von 177

Thema: Funktionierendes CAN Bus Projekt entwickeln unter Bascom

  1. #111
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Beim Highlevelbefehl von Bascom kann ich keine Auskunft geben,
    da ich die Hardwarenahe Programmierung bevorzuge,
    sprich ich schreibe direkt ins SPDR Register.
    Dabei ist es so, dass ich dieses abwechselnd lese und schreibe.
    Der Hintergrund ist, dass nur wenn die SPI sendet der Takt
    über CLK geht und die angehängte Hardware nur dann
    ihre Daten senden kann.
    Das läuft dann so ab, dass ich ne 0 (Null) ins SPDR schreibe,
    warte bis die Übertragung beendet ist und das empfangene
    Byte dann im SPDR steht. dieses dann herauskopiere und
    die nächste 0 schreibe usw. usw. bis die gewünschte zahl
    an Bytes rüber ist.
    Sorry, aber Dein Problem scheint mir entweder

    a) in der Initialisierung der SPI oder
    b) in der Hardware zu liegen.

    Haste die Bausteine mal getauscht um zu sehen ob nicht der MCP oder der
    ATMega ne Macke haben?

    Beim SPIIN scheint Bascom nullen zu senden und die emfangenen werte
    dann in Variablen zu speichern, beim SPIMOVE kann man gleichzeitig
    Daten senden und die Rückgabewerte auslesen.

    Ach so, ich initialisiere die SPI über:
    config pin_mcp_reset = output
    config pin_mcp_select = output
    config SPI_mosi = output
    config SPI_clk = output
    config SPI_miso = input
    SPCR=&B01010010
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  2. #112
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    Ich bin ja so bescheuert... ich hatte natürlich die Verbindung von /CS zu /SS wieder gelöscht und meine originale Portverbindung wieder erstellt. Und das manuelle setzen von MCP_CS hatte ich natürlich vergessen. Nevermind.... -.-

    Nun muss ich nur noch die Timings etc. in den Griff bekommen, er antworter jetzt und schickt mir beim auslesen von CANCTRL eine &04, welche ich ja auch hineingeschrieben habe. Jetzt muss ich erstmal wieder weiter rumprobieren, aber ich denke, ich bekomme es in den Griff...
    Alles wird gut... Gruß Alex

  3. #113
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    Nun, die Fragen werden ja immer detailiierter... ich kann nun korrekt Register auslesen und beschreiben, zumindest das Register CANCTRL. Mit diesen Subs:
    Code:
    Sub Mcpinit()
       Local Can_tmp As Byte                                    'Lokale Variable
    
       Print "Reset 2515..."                                    'MCP Resetten
       Can_tmp = Cmd_reset
       Reset Mcp_cs
       Waitus 1
       Spiout Data_tmp , 1
       Waitus 1
       Set Mcp_cs
       Waitus 20                                                'Warten bis Reset erledigt, evtl. Abfrage MCP einbauen ?
       Print "done!"
    
    '(   Print "change prescaler..."
       Spi_write_buff(1) = Cmd_write
       Spi_write_buff(2) = Canctrl
       Spi_write_buff(3) = &B00000100                           'Prescaler CLKOUT auf Takt/1
       Reset Mcp_cs
       Waitus 1
       Spiout Spi_write_buff(1) , 3
       Waitus 1
       Set Mcp_cs
       Print "done!"
    ')
       Set Trigger
       Canwrite Cnf1 , &B00000100                               'forum &B00010011                               'selbst:&B00000100
       Reset Trigger
       Canwrite Cnf2 , &B11100010                               'forum &B10010000                               'selbst:&B11100010                               '
       Canwrite Cnf3 , &B00000011                               '&B00000010                               'selbst: &B00000011                               '
       Canwrite Caninte , &B00000011                            'Interrupt einstellen
       Canwrite Rxb0ctrl , &B01100000                           'Buffer 0: Empfangen aller Nachrichten
       Canwrite Rxb1ctrl , &B01100000                           'Buffer 1: Empfang aller Nachrichten
    
       Canwrite Rxm0sidh , 0                                    'Kein Filter, Empfängeradresse Null
       Canwrite Rxm0sidl , 0
       Canwrite Rxm0eid8 , 0
       Canwrite Rxm0eid0 , 0
       Canwrite Rxm1sidh , 0
       Canwrite Rxm1sidl , 0
       Canwrite Rxm1eid8 , 0
       Canwrite Rxm1eid0 , 0
    
       Canwrite Bfpctrl , 0                                     'Deaktivieren der RXnBF Pins (High Impedance)
       Canwrite Txrtsctrl , 0                                   'TXnRTS Bits als Inputs schalten
       Canmod Canctrl , &B11100000 , &B00000000                 'Device zurück in den normalen Modus versetzen
    End Sub
    
    Sub Canwrite(reg_add , Reg_val)                             'Subroutine "schreiben"
       Print Cmd_write
       Print Reg_add
       Print Reg_val
       Spi_write_buff(1) = Cmd_write
       Spi_write_buff(2) = Reg_add
       Spi_write_buff(3) = Reg_val
       Reset Mcp_cs
       Waitus 1
       Spiout Spi_write_buff(1) , 3
       Waitus 1
       Set Mcp_cs
    End Sub
    Mit dem ausgeklammerten Teil ändere ich den Prescaler. Nun soll ja auch der Rest der Konfiguration gemacht werden, dort schreibt er aber immer Nullen in die Register. Ich habe daraufhin in der Sub Canwrite die übergebenen Variablen ausgeben lassen, Reg_val wird immer mit Null ausgegeben, also offenbar nicht richtig an die Subroutine übergeben - woran kann das liegen ? Die anderen Variablen (Reg_add etc.) kommen richtig an...
    Alles wird gut... Gruß Alex

  4. #114
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    solche Dinge kommen vor wenn Stack und Frame zu klein
    sind ... probiers mal mit größeren Werten dafür

    ääääääääähhhhhhmmmmmm ... falscher Fehler.
    Es wird wohl daran liegen, dass Du den CANCTRL nicht
    in den Konfigurationsmodus versetzt.
    Dann frisst er nämlich keine Konfigurationsänderung
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #115
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    Ist er denn nicht nach dem Reset automatisch im Configmodus ? So stand es doch unter Punkt 10, oder ? Ich schaue mir das gleich mal an !
    Alles wird gut... Gruß Alex

  6. #116
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    37
    Beiträge
    674
    Das stimmt, nach dem Reset ist der Chip erstmal im Konfigurationsmodus.

  7. #117
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    das mag wohl sein, wenn du aber bit 7 bis 5 von canctral auf 0 setzt
    bist du aus dem config-mode raus

    edit: sorry, hab die Klammer übersehen ...

    ich würds dennoch mal mit dem config Mode probieren.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  8. #118
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    ja, ich setze mich gleich nochmal dran... kann eigentlich nur noch eine Kleinigkeit sein.
    Alles wird gut... Gruß Alex

  9. #119
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    Also, wenn ich die Register manuell schreibe, läufts. Aber sobald ich die Sub CANWRITE benutze, ist Reg_val immer null ?! Die Variable wird nicht übergeben...

    /edit/

    Ich habe es nochmals getestet. Schreibe ich CNF1 manuell, d.h. ohne nutzen der Subroutine, funktioniert es bestens, ich lese den geschriebenen Wert wieder aus. Sobald ich die Subroutine verwende, ist immer Reg_val &H00, egal, welchen Wert ich übergebe. Nach mehrfachem durchlesen und vergleichen checke ich einfach nicht, warum das so ist. Die anderen Variablen werden korrekt übergeben ....
    Alles wird gut... Gruß Alex

  10. #120
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    50
    Beiträge
    80
    Ja, Problem gefunden. HWStack und Framesize zu klein, wie Du sagtest...
    Alles wird gut... Gruß Alex

Seite 12 von 18 ErsteErste ... 21011121314 ... LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress