Forum: Mikrocontroller und Digitale Elektronik Codevision CodeWizardAVR TWI Probleme


von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

Ich habe ein Problem mit CodeVisionAVR.

Ich starte ein Projekt mit dem CodeWizardAVR (XMEGA128) und möchte gerne 
auf einen PCF8574A schreiben. Leider funktioniert es nicht so wie ich 
gerne möchte.

Könnt ihr an der Software einen Fehler erkennen?

Danke für eure Hilfe!

von Thomas (Gast)


Lesenswert?

Beim ersten senden hängt das ganze System...

von Josef (Gast)


Lesenswert?

Die Hardware passt? PullUp..

von Thomas (Gast)


Lesenswert?

Ja ich habe auf SDA und SCL 5k6 Widerstände..

von ThomasF (Gast)


Lesenswert?

Thomas schrieb:
> Ja ich habe auf SDA und SCL 5k6 Widerstände..

bei 3.3V ist das schon ziemlich groß, besser wären < 2K.

von spess53 (Gast)


Lesenswert?

Hi

>Beim ersten senden hängt das ganze System...

Sicher, das die 0x38 als I2C-Adresse stimmen?

MfG Spess

von Thomas (Gast)


Lesenswert?

0x70 ist die 8bit Adresse, diese habe ich um eins nach links geschoben.
Auch mit 0x40 habe ich es versucht.(0x20) Aber keine Chance!

Die Widerstände habe ich auf 1K8 geändert. Auch nix..

von H.Joachim S. (crazyhorse)


Lesenswert?

Was hast du mir den Adresseingängen A0-A2 gemacht?
Falls die auf Masse liegen, ist die Adresse 0x40 bzw 0x41.

Mal mit dem scope geschaut, ob zumindest das 1.Byte rausgeflogen kommt, 
sowohl auf SCL und SDA?

von spess53 (Gast)


Lesenswert?

Hi

>Falls die auf Masse liegen, ist die Adresse 0x40 bzw 0x41.

Er hat einen PCF8574A. Da sind die Adressen 0x70/0x71.

Die Frage ist, ob die Lib das Schieben selbst macht oder den geschobenen 
Wert braucht.

MfG Spess

von H.Joachim S. (crazyhorse)


Lesenswert?

Ok, hab auf den link geklickt und das A übersehen :-)

von Thomas (Gast)


Lesenswert?

Abend!
A0 - A2 liegen auf Masse.

Soweit ich gesehen habe, benötigt die Lib einen 7bit Wert. Wie kommst du 
auf 0x71?

Am Bus sehe ich nichts mit dem Scope kein Trig. oder sonst was.

von Thomas (Gast)


Lesenswert?

Ich habe jetzt mal den PCF gegen eine RTC DS1307 getauscht. Auch nichts. 
Auf den Pin´s gibt es kein Anzeichen von einem Signal.

Es muss irgendwas an der Software sein.

von Thomas (Gast)


Lesenswert?

Heute habe ich mal wieder etwas mit dem TWI gespielt...

Bin schon soweit, dass ich einen Software IIC programmiere..

von spess53 (Gast)


Lesenswert?

Hi

>Bin schon soweit, dass ich einen Software IIC programmiere.

Schon mal

AVR1308: Using the XMEGA TWI

http://www.atmel.com/devices/ATXMEGA128A4U.aspx?tab=documents

getestet?

MfG Spess

von Thomas (Gast)


Lesenswert?

Ich bekomme es nicht hin... gibt es eine Software Lösung ?
--> IIC über Software

Danke

von Thomas (Gast)


Lesenswert?

Hallo nochmal !

Ich habe das HowTodo von Kampis Elektroecke getestet. Ich bin jetzt 
soweit dass ich am SCL ein Signal sehe aber am SDA ist nichts - immer HI

INIT
void TWI_MasterInit(TWI_t *twi)
 {
   twi->MASTER.BAUD = TWI_BAUDRATE;
   twi->MASTER.CTRLA = TWI_MASTER_ENABLE_bm |
   TWI_MASTER_INTLVL_HI_gc |
   TWI_MASTER_RIEN_bm |
   TWI_MASTER_WIEN_bm;
   twi->MASTER.STATUS = TWI_MASTER_BUSSTATE_IDLE_gc;
 }


PCF-Schreiben
void PCF8574_send_byte(TWI_t *twi, char Adresse, char byte)
 {
   twi->MASTER.ADDR = (Adresse << 1) + 0;
   delay_us(500);
   twi->MASTER.DATA = byte;
 }


Main aufruf
PCF8574_send_byte(&TWIC, 0x38, 0x55);
delay_ms(500);
PCF8574_send_byte(&TWIC, 0x38, 0xAA);
delay_ms(500);


Habe ich wo nen Fehler?

von Thomas (Gast)


Lesenswert?

#define Taktfreuqenz 32000000
#define Takt_TWI 100000
#define TWI_BAUD(F_SYS, F_TWI) ((F_SYS / (2 * F_TWI)) - 5)
#define TWI_BAUDRATE TWI_BAUD(Taktfreuqenz, Takt_TWI)

von bkd (Gast)


Lesenswert?

Hallo Thomas,

hast du die Leitung schon ausgemessen ?

von Thomas (Gast)


Lesenswert?

Keiner eine Ahnung ?

lg

von H.Joachim S. (crazyhorse)


Lesenswert?

Tja, nur wenige benutzen die XMegas, und noch weniger CodeVision. Die 
Schnittmenge dürfte gegen Null gehen.

von Thomas (Gast)


Lesenswert?

Ist bei dem Code nicht egal welchen Compiler man nimmt ich schreibe 
direkt auf die Register ?

Grüße

von Thomas (Gast)


Lesenswert?

Ich verstehe nicht warum am SDA nichts raus kommt, auf dem SCL sieht man 
genau die 2 Byte...

von H.Joachim S. (crazyhorse)


Lesenswert?

Nö, ist nicht egal.

#include twix.h

Du benutzt doch sicher Funktionen daraus?

von Thomas (Gast)


Lesenswert?

Hallo!

Ne eben nicht...

Ich habe mein eigenes Init:

#define Taktfreuqenz 32000000
#define Takt_TWI 100000
#define TWI_BAUD(F_SYS, F_TWI) ((F_SYS / (2 * F_TWI)) - 5)
#define TWI_BAUDRATE TWI_BAUD(Taktfreuqenz, Takt_TWI)

void TWI_MasterInit(TWI_t *twi)
 {
   twi->MASTER.BAUD = TWI_BAUDRATE;
   twi->MASTER.CTRLA = TWI_MASTER_ENABLE_bm |
   TWI_MASTER_INTLVL_HI_gc |
   TWI_MASTER_RIEN_bm |
   TWI_MASTER_WIEN_bm;
   twi->MASTER.STATUS = TWI_MASTER_BUSSTATE_IDLE_gc;
 }

lg

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.