mikrocontroller.net

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


Autor: Michael John (michael_avr)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: akw (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael John (michael_avr)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael John (michael_avr)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.