sebastian.heyn
20.01.2005, 23:12
Hi,
hab ein problem: 2x ATMEGA128, beide verbunden an Pind.0-->Pind.0 und Pind.1-->Pind.1 und gnd natürlich
der eine sendet i2c was:
$regfile = "m128def.dat"
$crystal = 16000000
Config Portd = Output
Config Scl = Portd.0
Config Sda = Portd.1
Do
I2cstart
I2cwbyte 10
I2cstop
Wait 3
Loop
End
'#########################################
dewr andere soll es empfangen, es geht aber nicht. schon die startbedingung macht ihm zu schaffen. (siehe debug im kommentar) Der code zum empfangen läuft mit anderen devices prima...Ich logge mit ähnlichem code i2c aktivität an einer schnittstelle prima. Liegt es an dem obrern code das er nicht sendet???
$regfile = "m128def.dat"
$crystal = 16000000
$baud = 57600
Config Portd = Input
'Portd = &B00000001 'interner Pullup an PD0 aktivieren
Cl Alias Pind.0 'Clock an Pind.0
Da Alias Pind.1 'SDA an Pind.1
On Int1 Startchk
Config Int1 = Falling
Dim Adr As Byte
dim c as Byte
Dim i as byte
Enable Interrupts
Enable Int1
On Int1 Startchk
Config Int1 = Falling 'startbedingung: da fällt (es wird dann gecheckt ob CL=1)
Do
nop
Loop
End
Startchk:
If Cl = 1 Then
Disable Int1
'Gosub Rxdata (auskommentiert für debug)
Print "got started" '(debug)
End If
Waitms 10
Enable Int1
Return
Rxdata:
Adr = 0
C = 128
For I = 1 To 8
Do
Loop Until Cl = 0
Do
Loop Until Cl = 1
If Da = 1 Then Adr = Adr + C
C = C / 2
Next
'ack überspringen
Gosub Jmpack
Return
Jmpack:
'ack überspringen
Do
Loop Until Cl = 0
Do
Loop Until Cl = 1
Print Hex(adr)
Return
hab ein problem: 2x ATMEGA128, beide verbunden an Pind.0-->Pind.0 und Pind.1-->Pind.1 und gnd natürlich
der eine sendet i2c was:
$regfile = "m128def.dat"
$crystal = 16000000
Config Portd = Output
Config Scl = Portd.0
Config Sda = Portd.1
Do
I2cstart
I2cwbyte 10
I2cstop
Wait 3
Loop
End
'#########################################
dewr andere soll es empfangen, es geht aber nicht. schon die startbedingung macht ihm zu schaffen. (siehe debug im kommentar) Der code zum empfangen läuft mit anderen devices prima...Ich logge mit ähnlichem code i2c aktivität an einer schnittstelle prima. Liegt es an dem obrern code das er nicht sendet???
$regfile = "m128def.dat"
$crystal = 16000000
$baud = 57600
Config Portd = Input
'Portd = &B00000001 'interner Pullup an PD0 aktivieren
Cl Alias Pind.0 'Clock an Pind.0
Da Alias Pind.1 'SDA an Pind.1
On Int1 Startchk
Config Int1 = Falling
Dim Adr As Byte
dim c as Byte
Dim i as byte
Enable Interrupts
Enable Int1
On Int1 Startchk
Config Int1 = Falling 'startbedingung: da fällt (es wird dann gecheckt ob CL=1)
Do
nop
Loop
End
Startchk:
If Cl = 1 Then
Disable Int1
'Gosub Rxdata (auskommentiert für debug)
Print "got started" '(debug)
End If
Waitms 10
Enable Int1
Return
Rxdata:
Adr = 0
C = 128
For I = 1 To 8
Do
Loop Until Cl = 0
Do
Loop Until Cl = 1
If Da = 1 Then Adr = Adr + C
C = C / 2
Next
'ack überspringen
Gosub Jmpack
Return
Jmpack:
'ack überspringen
Do
Loop Until Cl = 0
Do
Loop Until Cl = 1
Print Hex(adr)
Return