Zum Inhalt springen

Pic32


Empfohlene Beiträge

Gast KnapsackSolver
Geschrieben

Hallo Community,

ich arbeite mich gerade in den PIC32 ein. Hierbei liegt mein Hauptaugenmerk auf dem Bus I2C...

> Hat dazu jemand vollständigen Code, mit einem PIC18XXXX bin ich damit vertraut, jedoch ist die Struktur im vergleich zu einem PIC32 deutlich anders. Ich hoffe mir kann jemand helfen...

Im Moment sieht der Code so aus, jedoch weiß ich nicht, ACKs abfangen kann oder aber schauen kann ob die Bits richtig gesetzt sind... Danke für eure Hile....



void i2cInit(){

    I2CConfigure(I2C1,I2C_ENABLE_HIGH_SPEED);

    I2CSetFrequency(I2C1,GetSystemClock(),100000);

    OpenI2C1(I2C_EN,0);

    I2CEnable(I2C1,TRUE);

}



UINT8 getDataI2C(UINT8 u8_address){

    IdleI2C1();

    StartI2C1();

    if(MasterWriteI2C1(u8_address)==0){

        IdleI2C1();

        return MasterReadI2C1();

    }else{

        return i2cReadAddressFailure;

    }

}



/**

 * Sendet über den Bus an eine definierte Adresse die definierten Daten

 * @param u8_address -> Adresse des Bus

 * @param u8_data -> Adresse der Daten

 */

UINT8 dataSendI2C(UINT8 u8_address, UINT8 u8_data){

    IdleI2C1();                        

    StartI2C1();                       

    if(MasterWriteI2C1(u8_address)==0){

        IdleI2C1();

        if(MasterWriteI2C1(u8_data)==0){

            IdleI2C1();

            StopI2C1();

            return i2cWriteOK;

        }else{

            return i2cWriteDataFailure;

        }

    }else{

        return i2cWriteAddressFailure;

    }

}

Also detailiert geht die Frage an alle raus, was muss hier noch geändert werden im Bezug auf: -> Initialisierung des BUS -> Wie schaue ich ob eine Bus-Collision detektiert wurde ->Wie schaue ich ob ein ACK erhalten wurde etc. pp, unter PIC18XXXX wurde dies folgend erledigt:

UINT8 dataSendI2C(UINT8 u8_adress, UINT8 u8_data) {


	IdleI2C(); // Verfuegbar

	StartI2C(); // Startkondition

	while (SSPCON2bits.SEN); // Warten bis die Startkondition abgelaufen ist


	if (PIR2bits.BCLIF) { // Bus belegt? Kollision vorhanden?

		return (BUS_COLLISON); // Kollision ist vorhanden

	}

	else { // Keine Kollision

		/******************* Adressierung übertragen *******************/


		if (WriteI2C(u8_adress)) { // Adressierung übermitteln


			return (WRITE_COL_ADR); // schreiben erfolgreich

		}


		IdleI2C(); // Verfuegbar

		if (!SSPCON2bits.ACKSTAT) { // ACK erhalten


			/***************** Daten übertragen *******************/

			if (WriteI2C(u8_data)) { // Daten übermitteln


				return (WRITE_COL_COM); // Schreiben erfolgreich

			}

		}

		else {

			return (NO_ACK); // Kein ACK erhalten

		}

	}

	IdleI2C(); // Verfuegbar

	StopI2C(); // I2C Stop Kondition

	while (SSPCON2bits.PEN); // Stop Kondition

	if (PIR2bits.BCLIF) { // Bus belegt? Kollision vorhanden?


		return (BUS_COLLISON); // Kollision ist vorhanden

	}

	return (NO_ERROR); // Kein Error

}


Danke schonmal für eure Hilfe

  • 1 Monat später...
Geschrieben

Es ist grundsätzlich sehr schwer zu sagen was du da machst, da sich das meiste hinter unbekannten Funktionen und Makros versteckt.

So vom orakeln wuerde ich mal sagen dieser Aufruf ist nicht notwendig

OpenI2C1(I2C_EN,0);

und der start sollte vor den Idle wandern.

Warum ein PIC?

  • 3 Wochen später...
Gast KnapsackSolver
Geschrieben

Wieso denn kein PIC ? Billig, grosser Speicher, Erfahrungen mit den Vorgängern etc

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...