Striebel
05.10.2004, 17:46
Moin...
Ich habe einen Atmega16 und den CAN-Controller SJA1000 von Philips folgendermaßen verbunden:
ATMEGA SJA1000
PORTA -------------------> Daten/Steuerbus AD1...7
PORTD.7 -----------------> ALE
PORTD.5 -----------------> RD
PORTD.4 -----------------> WR
CS -------> GND
Die Resetpins der beiden chips sind via 10kohm auf +5V gelegt. Sonst ist nichts angeschlossen.
Mit dem folgenden CODE kann ich nix zum SJA1000 schicken/lesen. Er nimmt nichts an. D.h. ich schreibe etwas in ein Register des SJA1000, jedoch kommt der Wert dort nie an. Woran kann es liegen? Ich verzweifel hier langsam... ](*,)
WUNDERT EUCH NICHT ÜBER DIE ART UNF WEISE DER PROGRAMMIERUNG, ICH HAB NUR ALLES MAL AUSPROBIERT.
(meine vor allem so sachen, wie die parameterübergabe in canschreiben, ist so schwachsinn, ich weiß, aber wollte da fehler ausschließen)
Ale Alias Portd.7
Rde Alias Portd.5
Wr Alias Portd.4
Dim Daten As Byte
Dim Adresse As Byte
Dim A As String * 3
Dim Aus As Byte
Declare Sub Can_schreiben
Declare Sub Can_lesen
Declare Sub Can_init
Declare Sub Init
Declare Sub Pause
Do
Input "(V0.09)Prompt> " , A
Select Case A
Case "L00"
Adresse = 0
Can_lesen
Aus = Daten
Print ">>" ; Aus
Case "L01"
Adresse = 1
Can_lesen
Aus = Daten
Print ">>" ; Aus
Case "L02"
Adresse = 2
Can_lesen
Aus = Daten
Print ">>" ; Aus
Case "L03"
Adresse = 3
Can_lesen
Aus = Daten
Print ">>" ; Aus
Case "L04"
Adresse = 4
Can_lesen
Aus = Daten
Print ">>" ; Aus
Case "LST"
Aus = Pina
Print "PortA: " ; Aus
Aus = Pinb
Print "PortB: " ; Aus
Aus = Pinc
Print "PortC: " ; Aus
Aus = Pind
Print "PortD: " ; Aus
Case "HGH"
Init
Portc = &HFF
Porta = &HFF
Print "ok"
Case "LOW"
Init
Portc = &H00
Porta = &H00
Print "ok"
Case "ini"
Can_init
Print "ok"
Case "sta"
Porta = &H00
Portb = &H00
Portc = &H00
Portd = &H00
Print "ok"
Case "stc"
Ale = 0
Rde = 1
Wr = 1
Print "ok"
Case Else
Print "???"
End Select
Loop
Sub Init
'Statusports
Config Portd = Output
Config Porta = Output
Config Portc = Output
Porta = &H00
Ale = 0
Rde = 1
Wr = 1
End Sub Init()
Sub Pause
$asm
nop
$end Asm
End Sub Pause()
Sub Can_init()
Daten = 1
Adresse = 0
Can_schreiben
Pause
Daten = 255
Adresse = 4
Can_schreiben
Daten = 255
Adresse = 5
Can_schreiben
Daten = 159
Adresse = 6
Can_schreiben
Daten = 255
Adresse = 7
Can_schreiben
Daten = 234
Adresse = 8
Can_schreiben
Daten = 72
Adresse = 3
Can_schreiben
'Daten = 0
'Adresse = 0
'Can_schreiben
Pause
End Sub
Sub Can_schreiben
Init
Ale = 1
Pause
Porta = Adresse
Pause
Ale = 0
Pause
Porta = Daten
Pause
Wr = 0
Wr = 1
Porta = 0
End Sub
Sub Can_lesen
Daten = 0
Ale = 1
Pause
Porta = Adresse
Pause
Ale = 0
Pause
Config Porta = Input
Pause
Rde = 0
Pause
Daten = Pina
Rde = 1
Config Porta = Output
End Sub
BITTE HELFT MIR!!!!!!
greetz
Striebel[/code]
Ich habe einen Atmega16 und den CAN-Controller SJA1000 von Philips folgendermaßen verbunden:
ATMEGA SJA1000
PORTA -------------------> Daten/Steuerbus AD1...7
PORTD.7 -----------------> ALE
PORTD.5 -----------------> RD
PORTD.4 -----------------> WR
CS -------> GND
Die Resetpins der beiden chips sind via 10kohm auf +5V gelegt. Sonst ist nichts angeschlossen.
Mit dem folgenden CODE kann ich nix zum SJA1000 schicken/lesen. Er nimmt nichts an. D.h. ich schreibe etwas in ein Register des SJA1000, jedoch kommt der Wert dort nie an. Woran kann es liegen? Ich verzweifel hier langsam... ](*,)
WUNDERT EUCH NICHT ÜBER DIE ART UNF WEISE DER PROGRAMMIERUNG, ICH HAB NUR ALLES MAL AUSPROBIERT.
(meine vor allem so sachen, wie die parameterübergabe in canschreiben, ist so schwachsinn, ich weiß, aber wollte da fehler ausschließen)
Ale Alias Portd.7
Rde Alias Portd.5
Wr Alias Portd.4
Dim Daten As Byte
Dim Adresse As Byte
Dim A As String * 3
Dim Aus As Byte
Declare Sub Can_schreiben
Declare Sub Can_lesen
Declare Sub Can_init
Declare Sub Init
Declare Sub Pause
Do
Input "(V0.09)Prompt> " , A
Select Case A
Case "L00"
Adresse = 0
Can_lesen
Aus = Daten
Print ">>" ; Aus
Case "L01"
Adresse = 1
Can_lesen
Aus = Daten
Print ">>" ; Aus
Case "L02"
Adresse = 2
Can_lesen
Aus = Daten
Print ">>" ; Aus
Case "L03"
Adresse = 3
Can_lesen
Aus = Daten
Print ">>" ; Aus
Case "L04"
Adresse = 4
Can_lesen
Aus = Daten
Print ">>" ; Aus
Case "LST"
Aus = Pina
Print "PortA: " ; Aus
Aus = Pinb
Print "PortB: " ; Aus
Aus = Pinc
Print "PortC: " ; Aus
Aus = Pind
Print "PortD: " ; Aus
Case "HGH"
Init
Portc = &HFF
Porta = &HFF
Print "ok"
Case "LOW"
Init
Portc = &H00
Porta = &H00
Print "ok"
Case "ini"
Can_init
Print "ok"
Case "sta"
Porta = &H00
Portb = &H00
Portc = &H00
Portd = &H00
Print "ok"
Case "stc"
Ale = 0
Rde = 1
Wr = 1
Print "ok"
Case Else
Print "???"
End Select
Loop
Sub Init
'Statusports
Config Portd = Output
Config Porta = Output
Config Portc = Output
Porta = &H00
Ale = 0
Rde = 1
Wr = 1
End Sub Init()
Sub Pause
$asm
nop
$end Asm
End Sub Pause()
Sub Can_init()
Daten = 1
Adresse = 0
Can_schreiben
Pause
Daten = 255
Adresse = 4
Can_schreiben
Daten = 255
Adresse = 5
Can_schreiben
Daten = 159
Adresse = 6
Can_schreiben
Daten = 255
Adresse = 7
Can_schreiben
Daten = 234
Adresse = 8
Can_schreiben
Daten = 72
Adresse = 3
Can_schreiben
'Daten = 0
'Adresse = 0
'Can_schreiben
Pause
End Sub
Sub Can_schreiben
Init
Ale = 1
Pause
Porta = Adresse
Pause
Ale = 0
Pause
Porta = Daten
Pause
Wr = 0
Wr = 1
Porta = 0
End Sub
Sub Can_lesen
Daten = 0
Ale = 1
Pause
Porta = Adresse
Pause
Ale = 0
Pause
Config Porta = Input
Pause
Rde = 0
Pause
Daten = Pina
Rde = 1
Config Porta = Output
End Sub
BITTE HELFT MIR!!!!!!
greetz
Striebel[/code]