Forum: Mikrocontroller und Digitale Elektronik Avr mega 8 und MCP 2515 für einen CAN Bus


von Michael J. (michael_avr)


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

von akw (Gast)


Lesenswert?

Hört sich vllt dumm an, aber: selber machen!
Es gibt ein Datenblatt, da steht gaaanz genau, was du machen musst. 
Musst du halt durchlesen.

von crazy horse (Gast)


Lesenswert?

mit Bascom kann ich nicht weiter helfen, aber es sollte nicht allzu 
schwierig sein, dieses hier auf Basic zu portieren.
http://www.kreatives-chaos.com/index.php?seite=software

Das ist wirklich gut gemacht, verständlich, sauber programmiert und 
funktioniert auch bestens. Lob noch mal von mir an Fabian Greif.

von Michael J. (michael_avr)


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

von crazy horse (Gast)


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.

von inoffizieller WM-Rahul (Gast)


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.

von A.K. (Gast)


Lesenswert?

BASCOM - SPI - MCP2515 geht problemlos mit den vorhandenen SPI 
Funktionen.
Beachte: NOSS=1 verwenden und SS Leitung manuell steuern, sonst wird's 
nichts mit den Lesefunktionen.

von Michael J. (michael_avr)


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

von A.K. (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.