RN-Speak antwortet nicht auf I2C-Bus
Hallo,
ich habe das RN-Speak Sprachausgabemodul aufgebaut.
Es lassen sich Nachrichten über die Tasten und das Mikrophon aufnehmen und abspielen und auch über die RS232 läuft alles einwandfrei.
Doch leider reagiert das Modul nicht auf die I2C-Bus-Adresse 0x52. Die Jumper sind richtig gesteckt. Die Brücken J1 und J3 sind nicht eingelötet, weil Version 1.1! Das Modul habe ich in den I2C-Bus-Modus umgeschaltet. Es reagiert nicht mehr auf die Tasten wie in der Doku beschrieben.
Habe Direkt an den Pins die Signale von SCL und SDA gemessen und für gut befunden.
Das Modul weigert sich aber beharrlich nach der Adresse 0x52 ein ACK (SDA wird bei Bit 9 der Übertragung nicht auf LOW gezogen) zu senden, woran kann es liegen?
Habe noch andere I2C-Bus-Bausteine am Bus, die alle einwandfrei funktionieren! Den Bus betreibe ich zur Zeit mit 25kHz.
Bin sehr dankbar für schnelle Hilfe
Claus
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
inzwischen bin ich einen Schritt weiter. Zumindest sendet das Sprachmodul ein ACK auf seine Adresse 0x52. Bei meinen vorigen Versuchen hatte sich das Modul immer schon vom Datentransfer verabschiedet und deshalb nicht mehr geantwortet.
Auf dem Aufkleber steht Version 1.1; über die serielle Schnittstelle wird Version 1.2 gemeldet.
Habe den Datentransfer auf dem I2C-Bus mal genau untersucht. Das beiliegende Bild zeigt die Übertragung eines Bytes ans Sprachmodul. Oben ist das Datensignal SDA und unten das Taksignal SCL zu sehen. Das Sprachmodul antwortet ordnungsgemäß auf die Adresse 0x52 mit einem sauberen ACK. Doch nach dem Senden des Datenbytes 0x59 (01010100B) kommt es zum Komunikationsproblem zwischen dem eingesetzten Controler (80C552 mit "Hardware"-I2C-Bus) und dem Sprachmodul. Der nadelförmige Impuls auf der Clock-Leitung wird vom Controller als 9. Impuls (Bit) gewertet und somit als ACK interpretiert. Für das Sprachmodul ist dies aber kein Impuls. Es versucht wohl einfach die Clockleitung auf LOW zu ziehen um den Master zum Warten zu veranlassen (gemäß I2C-Bus Spezifikationen) doch geschieht dies zu spät, da der Controller bereits den Impuls erkannt hat. Das Sprachmodul hält im folgenden die SDA-Leitung auf LOW um dem Contoller ein ACK zu senden. (Auf das dieser nicht mehr wartet, da schon empfangen) Das anschließende Stop-Signal des Contollers wird vom Sprachmodul nicht erkannt, da die SDA-Leitung immer noch auf LOW gehalten wird.
Wenn mann 2 Bytes zum Sprachmodul sendet ist sehr schön zu erkennen, das Controller und Sprachmodul über die Anzahl der Impulse auf der Taktleitung uneins sind. Wird als 2. Byte der Wert 4 übertragen wird Meldung 8 abgespielt. Der erste Impuls der Controllers für die Übertragung des 2. Bytes wird vom Sprachmodul als das 9. Bit vom 1.Byte interpretiert, so kommt es zu einer Bit-Verschiebung.
Wird in der Version 1.3 exakt die gleiche Software für die I2C-Bus-Routinen verwendet und nur andere Pins belegt?
Ist eine Anpassung der Sprachmodul-Software möglich, so dass sie sich an den I2C-Bus-Standard hält?
Gruß Claus