Hallo allerseits!
Ich habe etwas Pech mit meiner Schaltung. Ich habe 2 Temperatursensoren LM73 und ein Accelerometer MMA8451Q an einem TWI_C eines XMEGA256A3.
Leider kann ich mit dem TWI_C die LM73 nur 8bit lesen, bei 16bit kommt immer "False". Soweit ich gesehen habe, haben LM7x Probleme mit dem TWI, also nehme ich den I2C.
Nun habe ich aber das Phänomen, dass der MMA8451Q nur via TWI_C überhaupt antwortet, mit dem I2C antwortet er nicht mal auf ein "hallo". Keine Ahnung wieso. Geschwindigkeitsprobleme kann ich ausschliessen, ob schnell oder langsam es bleibt so in allen Varianten. Auch elektrisch sieht das Signal gut aus, Die Pullups haben 4k7 Ohm.
Soweit so mühsam. Nun beginnt aber des eigentliche Problem.
Um die Register des MMA8451Q zu lesen, muss (nach der Device-Adresse) zuerst die Register-Adresse geschrieben werden und dann (ohne Stop-Condition!) mit einer Repeated Start Condition das Register gelesen werden. Im Datenblatt ist das detailliert beschrieben und es steht explizit:
(Solche Details liest man erst, wenn alles fixfertig gelötet ist...)
So wie ich das verstanden habe, kann weder TWI_n noch I2C repeated STARTs auslösen bzw. eine Operation ohne STOP condition durchführen.
Hat irgend jemand Ideen?
Ich fürchte ich muss selber eine Implementierung direkt mit den TWI-Registern machen. Ist das mit vernüntigem Aufwand ohne Assembler machbar? Hat jemand Erfahrungen damit?
Danke und Gruss,
Mike
Ich habe etwas Pech mit meiner Schaltung. Ich habe 2 Temperatursensoren LM73 und ein Accelerometer MMA8451Q an einem TWI_C eines XMEGA256A3.
Leider kann ich mit dem TWI_C die LM73 nur 8bit lesen, bei 16bit kommt immer "False". Soweit ich gesehen habe, haben LM7x Probleme mit dem TWI, also nehme ich den I2C.
Nun habe ich aber das Phänomen, dass der MMA8451Q nur via TWI_C überhaupt antwortet, mit dem I2C antwortet er nicht mal auf ein "hallo". Keine Ahnung wieso. Geschwindigkeitsprobleme kann ich ausschliessen, ob schnell oder langsam es bleibt so in allen Varianten. Auch elektrisch sieht das Signal gut aus, Die Pullups haben 4k7 Ohm.
Soweit so mühsam. Nun beginnt aber des eigentliche Problem.
Um die Register des MMA8451Q zu lesen, muss (nach der Device-Adresse) zuerst die Register-Adresse geschrieben werden und dann (ohne Stop-Condition!) mit einer Repeated Start Condition das Register gelesen werden. Im Datenblatt ist das detailliert beschrieben und es steht explizit:
Quote
The MMA8451Q expects repeated STARTs to be used to randomly read from specific registers.
(Solche Details liest man erst, wenn alles fixfertig gelötet ist...)
So wie ich das verstanden habe, kann weder TWI_n noch I2C repeated STARTs auslösen bzw. eine Operation ohne STOP condition durchführen.
Hat irgend jemand Ideen?
Ich fürchte ich muss selber eine Implementierung direkt mit den TWI-Registern machen. Ist das mit vernüntigem Aufwand ohne Assembler machbar? Hat jemand Erfahrungen damit?
Danke und Gruss,
Mike