kolisson
03.03.2010, 13:04
hallo,
ich da gerade auf einen eintrag gestossen, der mir zunächst fehlerhaft vorkommt.
vielleicht kann das mal jemand überprüfen.
es geht um folgende seite:
http://rn-wissen.de/index.php/Bascom_I2C_Master#Hardware_TWI
wenn man dort auf punkt2 klickt (Hardware TWI ) findet man einen programmcode unterhalb des textes "Unter Zuhilfenahme des Datenblattes könnte eine Highend-Version so aussehen: "
$regfile = "M32def.dat" ' the used chip
$crystal = 16000000 ' frequency used
$baud = 9600
$lib "i2c_twi.lbx" ' Für Hardware TWI
Config Twi = 400000 ' Init TWBR und TWSR
' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
TWCR = &B00000100 ' nur TWEN setzen
Const Pcf_write = &H40 ' Slaveadresse
Const Pcf_read = &H41
' Startausgabe
Print
Print "I2C-TWI High-Demo mit PCF 8574"
Print
Do
I2cstart
If TWSR = &H08 Then ' Start wurde abgesetzt
I2cwbyte Pcf_write ' Slaveadresse ausgeben
If TWSR = &H18 Then ' Slave hat sich gemeldet
I2cwbyte &HAA ' Datenbyte ausgeben
?FEHLER? If TWSR <> &H28 Then ' Byte erfolgreich übertragen
Print "Byte mit NACK quittiert !"
End If
Else
Print "kein Slave !"
End If
Else
Print "Fehler bei Start"
End If
' Immer Stop, damit die Buspegel wieder stimmen
I2cstop
Print "E " ; Err ' Err = 0 -> kein Fehler !
Waitms 1500
I2cstart
If TWSR = &H08 Then ' Start wurde abgesetzt
I2cwbyte Pcf_write ' Slaveadresse ausgeben
If TWSR = &H18 Then ' Slave hat sich gemeldet
I2cwbyte &H55 ' Datenbyte ausgeben
If TWSR <> &H28 Then ' Byte erfolgreich übertragen
Print "Byte mit NACK quittiert !"
End If
Else
Print "kein Slave !"
End If
Else
Print "Fehler bei Start"
End If
' Immer Stop, damit die Buspegel wieder stimmen
I2cstop
Print "E " ; Err ' Err = 0 -> kein Fehler !
Waitms 1500
Loop
End
ich habe die fragwürdige zeile mal mit "?FEHLER?" markiert.
meines erachtens sollte es nicht " If TWSR <> &H28 Then ' Byte erfolgreich übertragen " heissen sondern " If TWSR = &H28 Then ' Byte erfolgreich übertragen "
da kann ja mal einer drüberschauen.
gruss klaus
ich da gerade auf einen eintrag gestossen, der mir zunächst fehlerhaft vorkommt.
vielleicht kann das mal jemand überprüfen.
es geht um folgende seite:
http://rn-wissen.de/index.php/Bascom_I2C_Master#Hardware_TWI
wenn man dort auf punkt2 klickt (Hardware TWI ) findet man einen programmcode unterhalb des textes "Unter Zuhilfenahme des Datenblattes könnte eine Highend-Version so aussehen: "
$regfile = "M32def.dat" ' the used chip
$crystal = 16000000 ' frequency used
$baud = 9600
$lib "i2c_twi.lbx" ' Für Hardware TWI
Config Twi = 400000 ' Init TWBR und TWSR
' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
TWCR = &B00000100 ' nur TWEN setzen
Const Pcf_write = &H40 ' Slaveadresse
Const Pcf_read = &H41
' Startausgabe
Print "I2C-TWI High-Demo mit PCF 8574"
Do
I2cstart
If TWSR = &H08 Then ' Start wurde abgesetzt
I2cwbyte Pcf_write ' Slaveadresse ausgeben
If TWSR = &H18 Then ' Slave hat sich gemeldet
I2cwbyte &HAA ' Datenbyte ausgeben
?FEHLER? If TWSR <> &H28 Then ' Byte erfolgreich übertragen
Print "Byte mit NACK quittiert !"
End If
Else
Print "kein Slave !"
End If
Else
Print "Fehler bei Start"
End If
' Immer Stop, damit die Buspegel wieder stimmen
I2cstop
Print "E " ; Err ' Err = 0 -> kein Fehler !
Waitms 1500
I2cstart
If TWSR = &H08 Then ' Start wurde abgesetzt
I2cwbyte Pcf_write ' Slaveadresse ausgeben
If TWSR = &H18 Then ' Slave hat sich gemeldet
I2cwbyte &H55 ' Datenbyte ausgeben
If TWSR <> &H28 Then ' Byte erfolgreich übertragen
Print "Byte mit NACK quittiert !"
End If
Else
Print "kein Slave !"
End If
Else
Print "Fehler bei Start"
End If
' Immer Stop, damit die Buspegel wieder stimmen
I2cstop
Print "E " ; Err ' Err = 0 -> kein Fehler !
Waitms 1500
Loop
End
ich habe die fragwürdige zeile mal mit "?FEHLER?" markiert.
meines erachtens sollte es nicht " If TWSR <> &H28 Then ' Byte erfolgreich übertragen " heissen sondern " If TWSR = &H28 Then ' Byte erfolgreich übertragen "
da kann ja mal einer drüberschauen.
gruss klaus