Hallo Forum! Ich versuche jetzt schon seit mehreren Tagen eine Kommunikation zu einem PFC8574 aufzubauen, leider funktioniert es nicht so wie ich will (garnicht) Gibt es nicht eine ganz einfachen weg um IIC laufen zubringen? Das mit TWI funktioniert einfach nicht. (geht Software IIC nicht mehr ?) Kennt jemand eine Page wo ich mir das mit dem TWI ansehen kann? Ich will nur Ausgänge schreiben können und in Zukunft dann vl mal einen RTC auslesen. Danke für eure Hilfe Thomas
Also ich habe für I2C immer die AVR1308 praktisch unverändert übernommen. Hat bisher bei alles I2C ICs bei mir funktioniert (Gyro, Temo, Acc, Drucksensoren...)
Ich habe das Problem, dass sich der Xmega aufhängt und an den Pin´s kann ich keine Veränderungen (Oszi) sehen.
Wo hängt er sich denn auf? Bleibt ja eigentlich nur
1 | while (twiMaster.status != TWIM_STATUS_READY) |
Dann läuft da wohl was falsch bei der Kommunikation. Kannst ja auch ein Timeout einbauen. Vielleicht verwendest du den Treiber auch einfach falsch, oder hast den Clock zu schnell, oder hast bei der I2C-Verdrahtung was was falsch. Wenn nichts am I2C hast kann natürlich auch keiner Antworten.
Hi schick mir mal eine mail, vielleicht kann ich dir online helfen. Du kennst die Beispiele von Codevision? Hast du da mal den Code verglichen? Beispiel: http://www.hpinfotech.ro/twi_master_xmega.zip Zitat von der HP von Codevision: >Note: The bit-banged I2C library doesn't support the XMEGA chips, for these >chips the TWI library must be used.
Also: TWI_MASTER_INFO_t twic_master; Meine Init void twic_init(void) { twi_init(&TWIC,false,0); twi_master_init(&twic_master,&TWIC,TWI_MASTER_INTLVL_LO_gc,TWI_BAUD_REG( 32000000,100000)); TWIC.SLAVE.CTRLA=0; } Interrupt #pragma optsize- interrupt [TWIC_TWIM_vect] void twic_master_isr(void) { twi_master_int_handler(&twic_master); } #pragma optsize_default Aufruf if (twi_master_trans(&twic_master,PCF8574_ADDR,&pcf_value,1,0,0)) printf("send_ok"); else printf("send_error"); Ich bekomme einmal ein send_error und dann hängt er ..
Ganzen code bitte. Interrupts hast aktiviert? Ohne geht's nicht, und nur sei() reicht nicht. Zumindest PMIC.CTRL |= PMIC_LOLVLEN_bm;
:
Bearbeitet durch User
Besteht ja fast nur aus unnützen kommentaren. Aber wenn ich das richtig sehe hast du die Adresse der I2C Slaves schon um 1 nach links geshiftet. Das TWI Example erwartet aber die ungeshiftete 7 Bit Adresse. Und das twi_master_trans hast du dir scheinbar auch selbst ausgedacht und den Code nicht gepostet. Und das twi_init in der twic_init? Was macht das?
1 | void twic_init(void) |
2 | {
|
3 | // General TWIC initialization
|
4 | // External Driver Interface: Off
|
5 | // SDA Hold: Off
|
6 | twi_init(&TWIC,false,0); |
Und zweimal aufgerufen in der Main? Bitte mal ein Minimalbeispiel und du hast scheinbar eben nicht die AVR1308 Appnote genommen...
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.