Man kann die Software-SPI verwenden, geht fast genauso gut wie die Hardware, aber halt nur fast. Sie hat den Nachteil, dass sie deutlich langsamer ist und die Codegröße in die Höhe schnellt. Der AVR hat ne Hardware-SPI und die würde ich auch raten zu verwenden, wenn die Datenübertragung auch hurtig vonstatten gehen soll
@Michael_avr
Wenns mit C nicht klappt und mit Bascom schon, dann verlässt Du dich scheinbar voll auf die Bascominternen Funktionen. Das ist so auch ganz ok, knifflig wirds bei Peripheriebausteinen, die nicht den Bascomfunktionen entsprechen. LCDs sind da n schönes Beispiel. Dann stehst Du nämlich genau da wo du mit C hingekommen bist. Wichtig bei der Programmierung egal welcher Sprache oder Syntax ist das Verstehen der zugrundeliegenden Logik. Sitzt die einmal ist der Rest drum herum nur Fassade. Ob die Sytax dann
if x=y then
endif
oder
if (x==y) {
}
ist ist Dir dann sowas von egal. Im Grunde unterscheiden sich die Programmiersprachen nur in ihrer Syntax und was halt der Interpreter oder Compiler daraus wurstelt. Obs dann C, C++, Bascom, Java, VBasic oder PHP ist macht Dir dann echt keinen Kummer mehr.
Mit C hättest Du halt den deutlichen Vorteil auch auf anderen Bausteinen wie ARM oder AVR32 zu werkeln. Für die Bascom-Fraktion wirds dann schon eng.
@nikolaus10
Ich für meinen Teil lass liber die Finger weg vom KFz-Bus, das kann (!) mächtig ins Auge gehen. Hab schon genug Blech verbogen und auch verbogen bekommen, mein Bedarf daran ist gedeckt.
Zum geposteten Code, also ich kann da auf den ersten Blick nix verkehrtes dran finden ... achso, doch evtl. Du setzt:
Spi_write Canctrl , &B00000100 also CLK-Pin aktiv, ok. Aber den REQUOP2 lässt Du 0. Das ist Bit 7, und ist zuständig dafür das der MCP in den Configuration-Mode geht und nur dann ist CNF1 - CNF3, Filter und Maskenregister änderbar.
Spi_write Cnf1 , &H07 '03
Spi_write Cnf2 , &H90 '90
Spi_write Cnf3 , &H02 '02
geht dann nicht. (Datenblatt Seite 55-56)
Lesezeichen