HA !

et löppt !

Nach langem Vergleichen der Unterschiede, umlöten der /CS Leitung (um sich erstmal irrerweise auf Bascom zu verlassen) und genauer Timinganalyse habe ich es nun geschafft, den Prescaler zu ändern.

Ich habe also die /CS mit /SS verbunden und die manuellen Befehle alle gegen spiout ersetzt. Dann ersteinmal nur einen Resetbefehl gefolgt von der Änderung des CANCTRL gesendet. Dabei fiel mir auf, daß nach dem Resetbefehl tatsächlich der Taktausgang des MCP 10µs aufhörte, d.h. der Befehl wurde verstanden. Fehler 1): Mein nächster Befehl wurde schon gesendet, während der MCP noch im Reset hing. Nach Einbau einer 20µs langen Pause sendete ich dann nacheinander die Bytes für modify, canctrl, mask und Wert - es änderte sich nichts. Dann fiel mir auf, daß Du ein ganzes Array rausschiebst und da kam es mir. Fehler 2) zwischen den einzelnen Bytes, welche zu einem Kommando gehören, wurde /CS immer wieder angehoben. Nachdem ich nun auch mit einem Array alle drei Byte hintereinander rausschiebe, bleibt /CS während der Übertragung unten und siehe da, nach dem letzten Bit ändert sich der Takt von 2 auf 16MHz !

An dieser Stelle ersteinmal recht herzlichen Dank - nun kann ich erstmal mit der restlichen Struktur weitermachen, die Initialisierung korrekt durchführen und dann kommen sicherlich weitere Fragen. Die nächsten Tage werde ich aber wohl genug zu tun haben...

Hier noch der entscheidende Codeschnipsel:

Code:
'SPI
Config Portb.3 = Output                                     'MOSI
Config Portb.4 = Input                                      'MISO
Config Portb.5 = Output                                     'SCK
Config Portb.2 = Output                                     '/SS - /CS

Config Spi = Hard , Data Order = Msb , Master = Yes , Noss = 0 , Clockrate = 4
Spiinit

'*******************************************************************************

Print " "
Print "Neustart !"
Print " "
Print "Reset 2515..."
Data_tmp = Cmd_reset
Spiout Data_tmp , 1
Waitus 20
Spi_write_buff(1) = Cmd_write
Spi_write_buff(2) = Canctrl
Spi_write_buff(3) = &B00000100

Spiout Spi_write_buff(1) , 3

Print "done!"
End
Ich muss auch nochmal Vitis Recht geben, der ja zu Anfang dieses Threads sagte, man müsse selber durchblicken. Hätte ein kopierter Code auf Anhieb funktioniert, wüsste ich immernoch nicht, wie der Kram wirklich läuft. Jetzt habe ich deutlich mehr Durchblick und habe ganz sicher (mal wieder) was gelernt.