Hallo,
ich will auf einem PIC16F88 ein Software I2C realisieren, da der SSP 
schon mit SPI belegt ist. So, zunächst hatte ich das Sample von Hi-Tech 
genommen, man muss das rad ja nicht immer neu erfinden. Das 
funktionierte nicht, und irgendwo hatte ich gelesen, dass der Code 
fehlerbehaftet sei. Ich habe mittlerweile mehrere Codes gefunden, und 
keine hat funktioniert. nehmen wir mal als Beispiel den Code von dieser 
Seite: http://www.electronicslab.ph/forum/index.php/topic,4679.0.html
Eigentlich muss ich nur noch die Pins definieren. Bei mir sieht dieser 
Teil dann so aus:
| 1 |  #define SCL             RA7
 | 
| 2 |  #define SCL_TRIS        TRISA7
 | 
| 3 |  #define SDA             RA6
 | 
| 4 |  #define SDA_TRIS        TRISA6
 | 
Um vorweg mögliche andere Fehler auszuschließen: Was ich ansteuern will 
ist ein RDS processor, der TDA7333. Dazu habe ich ein kleines Platinchen 
gemacht, wo dieser drauf sitzt. Verbinde ich diese an eine I2C Leitung, 
die von einem PIC24 mit Hardware I2C gesteuert wird, antwortet mein 
Platinchen brav. Will sagen, hardwaremäßig sollte alles in Ordnung sein. 
Sowohl beim PIC24 als auch beim PIC16 sind 10k Pull ups an den Clock- 
und Datenleitungen.
Mit dem Oszi sehe ich mit dem PIC24 als Master folgendes: Gebe ich die 
richtige Adresse ein, setzt der Slave (in diesem Fall der TDA7333) SDA 
auf LOW, der Master erkennt dies erwartungsgemäß, und gibt den Bus mit 
Setzen der SCL auf HIGH wieder frei. Anschließend wird dann auch SDA auf 
HIGH gesetzt. Gebe ich die falsche Adresse ein, bleibt SDA auf HIGH, der 
Master belässt somit die SCL auf LOW.
So, mit dem PIC16F88 verhält sich immer so, als würde sich der Slave 
nach Senden der richtigen Adresse erwartungsgemäß quasi zurückmelden, 
auch wenn ich die falsche Adresse schicke! Timings und Signale scheinen 
zu stimmen, aber irgendwie kommt immer nur Müll heraus. Was stimmt hier 
nicht? Wahrscheinlich übersehe ich irgend eine Banalität...