Avr mega 8 und MCP 2515 für einen CAN Bus

#423986
Lesenswert?

Hallo zusammen,
ich bin auf der Suche nach einem funktionstätigen Programm für eine 
mega8 mit einem MCP 2515.
Ich programmiere derzeit auf Bascom, nur leider ist darüber nichts zu 
finden und die Litaratur gibt auch nicht viel her.....

überall findet man nur Denkanstöße..... kann man nicht mal gemeinsam ein 
Programm hinbekommen?

Vielen Dank
Michael
#424209
Lesenswert?

Ich habe die gesammte Dokumentation sogar ausgedruckt vor mit 
liegen..... jedoch wie bekomme ich die Daten in die drei register, wie 
kann ich überhaupt ein register über spi ansprechen? Wie schreibe ich 
die Daten dann rein, wie Initialisiere ich das ganze Ding zu 
senden....... ?
Und wie kann die Gegenseite auslesen???

Danke für den link an crazy Horse, jedoch ist das c, oder? Wer kann das 
übersetzen zu bascom?

Ich stelle auch anschließend das FUNKTIONIERNDE komplettprogramm zur 
Verfügung,

Also, bitte helft mir

Viele Grüße
Michael
Gast #424211
Lesenswert?

Mit Basic werden dir hier wirklich nicht viele helfen können. Ohne einen 
weiteren Glaubenskrieg anzetteln zu wollen: zu >90% arbeiten die Leute 
hier mit C oder Assembler.
Versuchs mal da:
http://www.roboternetz.de/
Da sind viele unterwegs, die mit Bascom arbeiten. Ich glaube nicht, dass 
sich einer für dich extra die Mühe macht, sich dafür in Basic 
einzuarbeiten.
Gast #424285
Lesenswert?

Vielleicht solltest im Betreff auch Bascom erwähnen. (nur ein Tip am 
Rande...)

Ich gehe davon aus, dass im Bascom-Handbuch eine SPI-Funktion 
beschrieben wird (suchen!).
Eigentlich ist es ziemlich einfach per SPI zu kommunikzieren.
Das Protokoll ist ja auch im Datenblatt des MCP2515 beschrieben.
#425430
Lesenswert?

Danke für die Infos, jedoch sehe ich immer mehr, dass mir die 
Grundkentnisse für die SPI Kommunikation fehlen. Ich habe zwei Bücher 
über Bascom und die Hilfe aus dem Programm, jedoch ist alles nur als 
Grundthema behandelt.

Wenn ich es richtig für die Praxis des MCP2515 verstanden habe;

1. Slave Select manuell auf Masse ziehen
2. 1. Register anspechen , Daten hineinschreiben
3. 2. Register anspechen , Daten hineinschreiben
4. 3. Register anspechen , Daten hineinschreiben
5. Slave Select manuell wieder auf Potential

..... und wenn man alles richtig gemacht hat müsste das Ding senden

und zum lesen müsste es dann einen Interrupt geben oder so?

Oder?

Dank Euch
Gast #425549
Lesenswert?

Nicht ganz so. Das erste Byte nach aktiviertem SS ist das Kommando. Vor 
dem nächsten Kommando muss also erstmal SS inaktiv sein.

Schreiben ginge auch mit einem einfachen spiout und NOSS=0. Lesen indes 
nicht, weil BASCOM die Richtungsumschaltung mitten drin nicht hinkriegt, 
spimove kann nur 1 Byte, müsste N Bytes können. Deshalb muss SS manuell 
gesteuert werden.

Lass das mit den Interrupts mal für den Anfang bleiben.


Der Kern:

Const CanCmdReset = &HC0
Const CanCmdRead = &H03
Const CanCmdWrite = &H02

Function CanRegRead(byval Addr) As Byte
   Reset PortB.4
   Local Tmp As Byte
   Tmp = CanCmdRead
   SpiOut Tmp , 1
   SpiOut Addr , 1
   SpiIn Tmp , 1
   CanRegRead = Tmp
   Set PortB.4
End Function

Sub CanRegWrite(byval Addr As Byte , byval Value As Byte)
   Reset PortB.4
   Local Tmp As Byte
   Tmp = CanCmdWrite
   SpiOut Tmp , 1
   SpiOut Addr , 1
   SpiOut Value , 1
   Set PortB.4
End Sub

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren