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!
Thomas schrieb: > Ja ich habe auf SDA und SCL 5k6 Widerstände.. bei 3.3V ist das schon ziemlich groß, besser wären < 2K.
Hi
>Beim ersten senden hängt das ganze System...
Sicher, das die 0x38 als I2C-Adresse stimmen?
MfG Spess
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..
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?
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
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.
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.
Heute habe ich mal wieder etwas mit dem TWI gespielt... Bin schon soweit, dass ich einen Software IIC programmiere..
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
Ich bekomme es nicht hin... gibt es eine Software Lösung ? --> IIC über Software Danke
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?
#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)
Tja, nur wenige benutzen die XMegas, und noch weniger CodeVision. Die Schnittmenge dürfte gegen Null gehen.
Ist bei dem Code nicht egal welchen Compiler man nimmt ich schreibe direkt auf die Register ? Grüße
Ich verstehe nicht warum am SDA nichts raus kommt, auf dem SCL sieht man genau die 2 Byte...
Nö, ist nicht egal. #include twix.h Du benutzt doch sicher Funktionen daraus?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.