PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I²C Problem



noiqwastl
22.02.2008, 13:59
Hallo!

Ich habe eine frage zum I²C Bus: ich verwende einen ST7 Microcontroller um über I²C Bus einen tongenerator (PCD3312) anzusprechen.

ich kann die adressierung und auch das datenbyte, dass die tonhöhe codiert, an den tongenerator schicken und diese beiden bytes werden jeweils mit einem acknowledge vom slave quittiert.

dennoch piept mein kleiner schatz nicht, und ich weiß einfach nicht mehr wieso.
die hardware funktioniert, denn ich habe das gleiche programm auch als assembler code (allerdings nicht von mir geschrieben) und da funktioniert das ganze einwandfrei. Ich schreibe das ganze gerade in C um.

ich hoffe jemand hat eine idee,
danke Sebastian

StEndres
22.02.2008, 19:10
Wenn die Hardware funktioniert, wirds wohl an der Software liegen...
Da hier keiner hellsehen kann ein kleiner Tipp am Rande: mit gepostetem Code lässt es sich leichter einen Fehler darin zu suchen

noiqwastl
22.02.2008, 19:36
danke erstmal =)
ich hab den code als attachment hinzugefügt. ich hoffe ihr könnt was damit anfangen!

schönen abend!

zerush
22.02.2008, 20:26
Hi,

also mein Beitrag dazu:

1. In der I2C_stop() würde ich am Ende wieder SCL auf low setzen
2. **EDIT**
3. while((PFDR | 0xFE)%2 != 0){} sieht so viel schöner aus:
while(PFDR & 0x01){}

Ich hoffe ich konnte damit ein wenig helfen?!

mfg
zerush

edit: du darfst während du die beiden bytes sendest nicht eine neue Transmission starten:
Nimm aus der send_I2C_byte() die Funktionen I2C_start() und I2C_stop() heraus.
Ruf dann in deinen tongenerator funktionen folgendes auf:
I2C_start();
send_I2C_byte(adresse);
send_I2C_byte(ton);
I2C_stop();

Dann aber darauf achten, dass du SDA in der I2C_start() und I2C_stop() wieder als output konfigurierst!!!

noiqwastl
23.02.2008, 12:48
hallo!

ad 1) okay werd ich versuchen
ad 2) stimmt.. da bin ich wohl mit der kirche ums kreuz gefahren
ad 3) das klingt logisch... wenn ich bei jedem byte jedes mal die start sequenz reinhau kennt er sich vielleicht nicht mehr aus!
sobald ich kann werd ichs ausprobiern und das ergebnis wieder hier posten!

danke also, schönes wochenende
sebastian