Hallo Forum,
ich habe folgenden Quellcode für meinen MCP2515:
Dieser Code beschreibt erstmal ein paar Register und ließt diese dann 1x die Sekunde aus (ist erstmal nur ein Testcode um die Register nacheinander zu beschreiben. Das Senden über CAN kommt später dazu). Im Terminal habe ich dann aber das hier stehen:Code:'Mikrocontroller $regfile = "m32def.dat" $crystal = 16000000 'Stacks $hwstack = 200 $swstack = 200 $framesize = 400 'UART konfigurieren $baud = 19200 'SPI konfigurieren Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Noss = 1 , Clockrate = 16 Spiinit 'Unterprogramme Declare Sub Read_register(byval Adress As Byte ) Declare Sub Write_register(byval Adress As Byte , Byval Daten As Byte) Declare Sub Bit_modify(byval Register As Byte , Byval Bitmaske As Byte , Byval Daten As Byte) Declare Sub Senden(byval Daten As Byte) Declare Sub Init Declare Sub Prio_txb0 'Befehle Const Spi_read = &H03 Const Spi_write = &H02 Const Spi_reset = &HC0 Const Spi_rts = &H80 'Registeradressen Const Cnf1 = &H2A Const Cnf2 = &H29 Const Cnf3 = &H28 Const Canctrl = &H0F Const Caninte = &H2B Const Txb0ctrl = &H30 'I/O Einstellungen Config Portb.4 = Output 'Namen vergeben Css Alias Portb.4 'Variablen Dim Canin As Byte Dim Data_out As Byte 'Chipselect auf High setzen Set Css Wait 1 'MCP2515 initialisieren Call Init Write_register Canctrl , &H86 'Priorität von TXB1 auf "Highest" setzen Call Prio_txb0 'Hauptprogramm Do Read_register Cnf1 Print "Registerinhalt CNF1: " ; Canin Read_register Cnf2 Print "Registerinhalt CNF2: " ; Canin Read_register Cnf3 Print "Registerinhalt CNF3: " ; Canin Read_register Canctrl Print "Registerinhalt CAN Control: " ; Canin Read_register Txb0ctrl Print "Registerinhalt TXB0 Control: " ; Canin Print "----------------------------------------------------------" Wait 1 Loop End '------------------------------------------------------------------------------------------------------------------- Sub Read_register(byval Adress As Byte ) Reset Css 'Chipselect auf Low ziehen Spdr = Spi_read 'Inhalt von "SPI_Read" im Datenregister speichern Spiout Spdr , 1 'Read Instruction (0000 0011) senden Spiout Adress , 1 'Registeradresse senden Spiin Canin , 1 'Registerinhalt einlesen Waitms 10 Set Css 'Chipselect auf High ziehen End Sub '------------------------------------------------------------------------------------------------------------------- Sub Write_register(byval Adress As Byte , Byval Daten As Byte) Reset Css 'Chipselect auf Low ziehen Spdr = Spi_write 'Inhalt von "SPI-Write" ins SPI_Data_Register schieben Do 'Schleife bis SPI Interrupt Flag gesetzt wurde, also bis Loop Until Spsr.spif = 1 'die Übertragung abgeschlossen ist Spdr = Adress Do Loop Until Spsr.spif = 1 Spdr = Daten Do Loop Until Spsr.spif = 1 Set Css 'Chipselect auf High ziehen End Sub '------------------------------------------------------------------------------------------------------------------- Sub Init 'MCP2515 reseten Reset Css Spdr = Spi_reset Spiout Spdr , 1 Set Css Waitms 10 '10ms warten, da sonst das Auslesen von CNF1 'nicht richtig erfolgen kann 'Bittiming einstellen Write_register Cnf1 , &H06 'Baudrate einstellen Write_register Cnf2 , &HA0 'Phasensegmenteinstellungen Write_register Cnf3 , &H02 Write_register Caninte , &H03 End Sub '------------------------------------------------------------------------------------------------------------------- Sub Senden(byval Daten As Byte) Reset Css Spdr = Spi_rts Spiout Spdr , 1 Spdr = Daten Spiout Spdr , 1 Set Css Print "GESENDET" End Sub '------------------------------------------------------------------------------------------------------------------- Sub Bit_modify(byval Register As Byte , Byval Bitmaske As Byte , Byval Daten As Byte) Reset Css 'Chipselect auf Low ziehen Spiout Register , 1 'Registeradresse ausgeben Spiout Bitmaske , 1 'Bitmaske ins Register schreiben Spiout Daten , 1 Set Css End Sub '------------------------------------------------------------------------------------------------------------------- Sub Prio_txb0 Bit_modify Txb0ctrl , &H03 , &H03 End Sub '-------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------
Registerinhalt CNF1: 6
Registerinhalt CNF2: 160
Registerinhalt CNF3: 2
Registerinhalt CAN Control: 134
Registerinhalt TXB0 Control: 0
----------------------------------------------------------
Wie man sieht steht bei "TXBO Control" eine 0 aber da soll eine 3 stehen.
Ich finde den Fehler einfach nicht.
Kann da mal jemand drüber gucken und mir sagen wo ich was falsch gemacht habe?
Danke für die Hilfe!







Zitieren

Lesezeichen