Hab's gefunden. Der Reset eines MCP2515's hing in der Luft und nicht via Widerstand an VDD.
Druckbare Version
Hab's gefunden. Der Reset eines MCP2515's hing in der Luft und nicht via Widerstand an VDD.
Hallo!
ich versuche mich gerade damit auch auseinander zu setzen.
kann mal Jemand, bitte, den Schaltplan angucken?
ich habe die RS232 und ISPL von Atmega weggelassen, weil ich die Schaltung möglichst klein haben möchte. Der Atmega8 wird auf dem STK500 geflasht und einfach in den Sockel auf der Platine eingesetzt.
Sieht da Jemand Fehler im Schaltplan?
Wenn der Taster gedrückt wird, möchte ich eine CAN-Bootschaft absenden.
Passt das so?
Gruss
Hallo a4b68e,
die Schaltung passt! Jett mal ans Programmieren ;-)
So, die Schaltung habe ich vor 3 Tagen fertiggelötet.
Nun habe ich mich gestern an das Programmieren gesetzt und wusste nicht, wie ich anfangen soll.
Ich will KEINE fertige Lösung. ich bin so ein Mensch, der ein Beispiel braucht, um Etwas zu verstehen.
Könnt Ihr mir sagen welches Quellcode von oben geposteten ich am besten nehmen soll?
Dann werde ich mich mal hinsetzen und das Studieren.
Trocken Datenblatt (MCP2515) zu lesen bringt bei mir leider nicht viel.
Durchgelesen habe ich es aber schon (nur nicht VIEL schlauer geworden).
Wie ich oben schon geschrieben habe, ich möchte nichts empfangen, sondern erst mal nur senden.
das Programm wollte ich so aufbauen (ganz grob):
1. µC configuration
2. Dim xxx as xxx
3. CAN configuration
4. ABFRAGE:
do
if Taster=0 then
goto SENDEN
5. Senden
Goto ABFRAGE
6. End
Warum nehmen die meisten die 7,3728 MHz Quarze?
Kann ich auch die 8,000 Mhz nehmen, oder gar den internen 1 Mhz Oszillator verwenden?
Gruss Alex
Hallo!
Kann mit jemand was zum Quarz sagen?
Frage ist oben.
Gruss
Hallo!
habe mich mal wieder an das Projekt hingesetzt.
Die Hardware ist fertig.
Wie soll ich mit der Software anfangen?
Gruss Alex
Hallo,
wenn du ganz neu mit dem CAN anfängst würde ich dir empfehlen die den Code aus diesem Beitrag zu nehmen, mit vielen "Print"-Kommentaren zu versehen und einfach mal zu verfolgen was da im Programm so alles passiert.
Ganz ohne Datenblatt wirst du nicht auskommen da es sehr viele Konfigurationsmöglichkeiten gibt.
Fang einfach mal klein an und frag wenn du etwas nicht verstehst!
ja, ich fange so zu sagen von 0 mit dem Can-Bus an.
Mit den µC habe ich aber schon Erfahrung.
Welchen Code sollte ich genau als Beispiel nehmen?
Meistens sind es doch spezielle Sachen, die mich "ablenken" und für den Anfang zu kompliziert sind.
Danke
Gruss Alex
Hallo!
ich kenne mein Code schon fast auswendig, aber ich habe das programm immer noch nicht zum Laufen bekommen.
Ich habe schon alles probiert, was mir nur einfallen konnte.
Habe jetzt den gesammten Code so weit gekürzt wie es nur geht.
Ich hoffe ich habe nichts "falsches" weggekürzt.
für mich scheint das Programm logisch zu sein, und müsste laufen. Tut es aber nicht.
ich habe am TX vom MCP2515 kein Signal.
Falls Jemand Zeit hat, BITTE durchgucken. Ich bin schon Ratlos.
Im Anhang ist der Schaltplan.Code:$regfile = "m8def.dat" ' ATMega8
$crystal = 16000000 ' Baudratenquarz der AVR (mega8 mit 16MHz)
$hwstack = 40 ' default use 32 for the hardware stack
$swstack = 80 ' default use 10 for the SW stack
$framesize = 90
$baud = 9600
' Allgemeine Config ************************************************************
Config Pind.2 = Input 'Taster
Config Portb.0 = Output 'LED
Taster Alias Pind.2
Led Alias Portb.0
Led = 0 'Grundstellung
'CAN relevante Config **********************************************************
Declare Sub Mcp2515_write(byval Reg_add As Byte , Byval Reg_val As Word)
Declare Sub Mcp2515_bitmodify(byval Reg_add As Byte , Byval Reg_mask As Byte , Byval Reg_val As Byte)
Mcp2515cs Alias Portb.2 'CS am Mega8
Config Mcp2515cs = Output
Const Cmd_write = &H02 ' Write Command
Const Cmd_bitmodify = &H05 ' Bit-modify Command
Const Cmd_reset = &HC0 ' Reset Command
Const Cmd_rts0 = &H81
Const Cmd_rts1 = &H82
Const Caninte = &H2B
Const Canctrl = &H0F
Const Canstat = &H0E ' Statusregister
Const Eflg = &H2D ' Error Flag Register
Const Cnf3 = &H28 ' Configuration Register 3
Const Cnf2 = &H29 ' Configuration Register 2
Const Cnf1 = &H2A ' Configuration Register 1
Const Txb0ctrl = &B00110000 ' Transmit Buffer 0 Control Register
Const Txb0sidh = &B00110001 ' Transmit Buffer 0 Std Identifier High
Const Txb0sidl = &B00110010 ' Transmit Buffer 0 Std Identifier Low
Const Txb0dlc = &B00110101 ' Transmit Buffer 0 Data Length Code
Const Txb0d0 = &B00110110 ' Transmit Buffer 0 Data Byte 0
' Hardware SPI-Schnittstelle konfigurieren**************************************
Config Portb.4 = Input 'MISO von 2515
Config Portb.3 = Output 'MOSI von 2515
Config Portb.5 = Output 'SCK
Spcr = &B01010001 'Bit7=0:IntAus, Bit6=1:SPIAn, Bit5=0:MSBfirst,
'Bit4=1:Masterfunktion, Bit3=0:SCK=0wennIdle,
'Bit2=0:L-H-Flanke, Bit1+0=01:AVRClock/16
'Programm Start*****************************************************************
Gosub Can_init
Abfrage:
Do
If Taster = 0 Then
Set Led
Wait 1
Reset Led
Waitms 500
Gosub Data_send
Else
Goto Abfrage
Loop
End If
End
'CAN Initialisieren *****************************
Can_init:
Reset Mcp2515cs ' Reset MCP2515
Spdr = &HC0 ' IC reset
Do
Loop Until Spsr.spif = 1
Set Mcp2515cs
Waitms 2000
Mcp2515_write Canctrl , &B10001101 ' set configuration mode, osm=1, clkout enabled, prescaler /2
' CAN 100 kbit/s
Mcp2515_write Cnf1 , &B00000001 ' Can Geschwindigkeit einstellen (Cnf1-Cnf3)
Mcp2515_write Cnf2 , &B10111010 ' Cnf2 = &H29
Mcp2515_write Cnf3 , &B00000111 ' Cnf3 = &H28
Mcp2515_write Caninte , &B00000000 'Can interrupt disabled
Mcp2515_write Canctrl , &B00001101 ' set normal operation mode, osm=1, clkout enabled, prescaler /2
Return
'Daten ubertargen ***********************************************************
Data_send:
Mcp2515_bitmodify Txb0ctrl , &B00000011 , &B00000011 ' TX-Konfiguration
Mcp2515_write Txb0sidh , &B10101010 ' Empfangeradresse setzen
Mcp2515_write Txb0sidl , &B10101010 ' Empfangeradresse setzen
Mcp2515_write Txb0dlc , &B00000001 ' Paketlange festlegen fur ein Byte
'Daten zur Uebertragung************************
Mcp2515_write Txb0d0 , &B01011101 ' Zu ubertragende Daten setzen
' Ubertragung auslosen
Reset Mcp2515cs
Waitms 20
Spdr = Cmd_rts0 '!!!!! DIESE STELLE IST MIR UNKLAR
Do
Loop Until Spsr.spif = 1
Waitus 20
Set Mcp2515cs
Waitms 2
Set Led 'LED als Anzeige "Gesendet"
Waitms 200
Reset Led
Waitms 100
Goto Abfrage 'Zurück zur Abfrage
Sub Mcp2515_bitmodify(reg_add , Reg_mask , Reg_val)
Local Can_tmp2 As Byte
Mcp2515cs = 0
Can_tmp2 = Cmd_bitmodify
Spdr = Can_tmp2
Do
Loop Until Spsr.spif = 1
Waitms 2
Spdr = Reg_add
Do
Loop Until Spsr.spif = 1
Spdr = Reg_mask
Do
Loop Until Spsr.spif = 1
Spdr = Reg_val
Do
Loop Until Spsr.spif = 1
Mcp2515cs = 1
End Sub
Sub Mcp2515_write(reg_add , Reg_val)
Local Can_tmp2 As Byte
Mcp2515cs = 0
Can_tmp2 = Cmd_write
Spdr = Can_tmp2
Do
Loop Until Spsr.spif = 1
Waitms 2
Spdr = Reg_add
Do
Loop Until Spsr.spif = 1
Spdr = Reg_val
Do
Loop Until Spsr.spif = 1
Mcp2515cs = 1
End Sub
Danke schön
Gruss Alexander
Hi @ all,
ich heiße Oliver bin 27 Jahre jung.
Immer wenn ich mal Zeit habe beschäftige ich mich mit Elektronik und co.
So dann wollen wir mal :-)
Ich weiß das dieses Thema schon älter ist, aber wie man sieht immer noch nicht abgeschoben ;-)
Beschäftige mich schon länger mit dem CAN-BUS, wie gesagt wenn zeit war.
Habe jetzt ein par Schaltpläne erstellt die ich später mal selber Ätzen möchte usw.
Wollte jetzt gerne eure meinung zu den Schaltplänen hören, vom Grund her sind sie alle gleich
es sollen nur verschiedene Knoten sein.
CAN Atmega USB soll als verbindung zum PC dienen
CAN Mini Knoten soll nachher in ein Unterputz gehäuse passen
CAN Uni Knoten soll ein Universal Knoten sein für alles wo ich ein wenig mehr platz habe als in einer Unterputzdose.
Anstat des Atmega 168 soll ein Atmega 328P-AU in gleicher Form zum einsatz kommen.
Gruß Olli