Forum: Mikrocontroller und Digitale Elektronik Codevision, Xmega un IIC


von Thomas (Gast)


Lesenswert?

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

von Timmo H. (masterfx)


Lesenswert?

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...)

von Thomas (Gast)


Lesenswert?

In Codevision ?

von Thomas (Gast)


Lesenswert?

Ich habe das Problem, dass sich der Xmega aufhängt und an den Pin´s kann 
ich keine Veränderungen (Oszi) sehen.

von Timmo H. (masterfx)


Lesenswert?

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.

von Stephan W. (sir_wedeck)


Lesenswert?

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.

von Thomas (Gast)


Lesenswert?

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 ..

von Thomas (Gast)


Lesenswert?

Verkabelung und PullUp passen..

von Thomas (Gast)


Lesenswert?

SCL Pin muss nicht als Ausgang gesetzt werden oder ?

von Timmo H. (masterfx)


Lesenswert?

Ganzen code bitte. Interrupts hast aktiviert? Ohne geht's nicht, und 
nur sei()  reicht nicht. Zumindest PMIC.CTRL |= PMIC_LOLVLEN_bm;

: Bearbeitet durch User
von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hier der Code.

von Timmo H. (masterfx)


Lesenswert?

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
Noch kein Account? Hier anmelden.