- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 5 von 5

Thema: I²C Problem

  1. #1

    I²C Problem

    Anzeige

    Praxistest und DIY Projekte
    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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.01.2005
    Beiträge
    127
    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

  3. #3
    danke erstmal =)
    ich hab den code als attachment hinzugefügt. ich hoffe ihr könnt was damit anfangen!

    schönen abend!
    Angehängte Dateien Angehängte Dateien

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    39
    Beiträge
    246
    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!!!
    Angehängte Dateien Angehängte Dateien

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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress