- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: I2C Bus mit PIC18F252 Konfiguration

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2006
    Beiträge
    25

    I2C Bus mit PIC18F252 Konfiguration

    Anzeige

    E-Bike
    Hallo

    Ich möchte mich gerne mit dem I2C-Bus vertraut machen.
    Als erstes möchte ich zwischen 2 PICs (PIC18F252) eine Kommunikation aufbauen. Dabei soll am ersten PIC (Master) 8 Schalter eingelesen werden und diese Daten dann via I2C zum zweiten PIC (Slave) geschickt werden. Dort soll das ganze mittels 8 LEDs ausgegeben werden.

    Ich kenne mich mittelmässig gut mit den PICs aus und kenne auch den C-Syntax einigermassen. Ich habe allerdings noch nie mit I2C gearbeitet.
    Deshalb habe ich mich im Internet etwas schlau gemacht. Ich weiss also in den Grundzügen wie der I2C-Bus funktioniert.
    Nur leider habe ich keine Ahnung wie ich das alles beim PIC18F252 konfigurieren muss. Aus dem Datenblatt werde ich nicht recht schlau und hier habe ich auch nichts hilfreiches gefunden.

    Kann mir jemand sagen (oder einen Beispiel-Code liefern) wie ich das alles konfiguriere? Wie sieht ein "Grundprogramm" für I2C aus (mit C, kompatibel für PIC18F252)?
    Wie kann ich meine oben beschriebene Aufgabe lösen?


    Einige Zusatzinformationen:
    -PIC: PIC18F252
    -Brenner: Picstart Plus
    -Editor und Compiler: MPLab


    Mit freundlichen Grüssen

    Adonai

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2006
    Beiträge
    25
    Weiss denn das niemand?
    I2C sollte doch ein Begriff sein, wenn man Roboter baut.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.10.2006
    Ort
    Aulendorf
    Beiträge
    143
    sorry, die Glaskugel ist bei der Reparatur...

    Welchen C-Compiler ?

    was funktioniert schon ?

    was hast du bisher gezaubert ?

    ... fragen über fragen

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2006
    Beiträge
    25
    C-Compiler: MCC18
    -Was bisher funktioniert: Wie soll etwas funktionieren, wenn ich bereits bei der Initialisierung scheitere?
    -Bisher habe ich viel über den I2C-Bus gelesen, scheitere aber, wie gesagt, an der Konfiguration.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.10.2006
    Ort
    Aulendorf
    Beiträge
    143
    Google: C18 I2C
    2. Treffer: http://ww1.microchip.com/downloads/e...ies_51297f.pdf

    Seite 25 gehts los

    1. Treffer dürfte ein Beispiel sein... Ich schau jetzt net rein, aber klingt interessant...

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2006
    Beiträge
    25
    Danke für die Antwort.

    Zum 2. Treffer: Ich möchte den I2C-Bus versuchen zu verstehen, deshalb nutzt es mir nichts wenn ich das mit Libraries löse.

    Zum 1. Treffer: PIC --> EEPROM, ich brauche aber PIC --> PIC

    -------

    Ich habe auf einer russischen (!) Seite diesen Code gefunden.
    Leider sind die Kommentare unverständlich....
    Was meint ihr dazu?
    PS: Mache ich etwas falsch wenn ich SCL und SDA über 1.8kOhm an Speisung anschliesse?


    #include <p18f252.h>

    long int k;

    void i2c_wait (void) //îæèäàíèå ôëàãà SSPIF ïîñëå áèòà àäðåñà è ïîñëå áèòà ñòîï
    {
    while(PIR1bits.SSPIF==1)
    {
    PIR1bits.SSPIF=0; //ñáðîñ ôëàãà
    }
    }


    void i2c_start(void) //ñòàðò I2C áèò SEN ñòàâèì â 1 è ïåðåõîäèì â îæèäàíèå SSPIF
    {
    SSPCON2bits.SEN=1;
    i2c_wait();
    }


    void main()
    {
    TRISB=0x00;
    PORTC=0;
    PORTB=0b00111000;
    TRISC=0b00011000; // RC3 RC4 êàê âõîäû

    SSPCON1= 0b00101000; // âêë ìîäóëü MSSP,âêë âåäóùèé ðåæèì
    SSPADD=39; // ðàñ÷èòàí äëÿ ÷àñòîòû 100 êÃö

    PORTCbits.RC6=1; //âûâîäèì LCD èç ñáðîñà


    i2c_start(); //çàïóñê(ñòàðò) I2C
    SSPBUF=0x78; //àäðåñ, êàê â äîêóìåíòàöèè 0õ78 èëè 0õ7À-ðåçóëüòàòà íåò
    i2c_wait(); //æäåì ôëàã SSPIF ïîñëå ñòàðòà

    //òóò ïèøó ïåðåäà÷ó êîìàíä è äàííûõ êàê ïîëîæåíî ñ êîíòðîëüíûìè áàéòàìè è îæèäàíèåì ôëàãà

    SSPCON2bits.PEN=1; //ñòîï I2C
    i2c_wait(); //îæèäàíèå SSPIF
    }

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.10.2006
    Ort
    Aulendorf
    Beiträge
    143
    ich möcht jetzt nicht unhöflich erscheinen, aber möchtest du verlangen, dass dir hier jemand alles vorkaut ?

    Wenns dir wirklich ums verstehen des I2C geht, dann vergiss den C18, und hau dir das in Assembler rein.

    Wenn du ein ergebnis willst, dann bastel dir aus den gegebenen Sachen selber was.

    Wenn dich die "Libraries" stören, dann öffne die header und die .c einfach mal, und schau, was da drin ist. Schließlich stellen die dir nur die Funktionen zur Verfügung, mit denen du dann arbeitest.
    Wenn du diese so einsetzen kannst, dass was übertragen wird, und daran was ändern kannst und hinterher auch weisst, was die Änderung bewirkt, dann bist deinem Ziel des Verstehens schon einen Schritt näher.

    und der Ansatz PIC--> EEPROM sollte auch keine Fertige Lösung bieten, sondern etwas Arbeitsmaterial um dich damit zu befassen, und mal damit zu spielen, und vielleicht sogar mal was draus übernehmen zu können.
    Stichwort: Transferwissen... Soll angeblich immer wichtiger werden

    So, und zu den comments muss ich dich leider enttäuschen, da ich a) weder russisch kann, noch b) jemals mit c18 gearbeitet habe *G*

    Also mehr als das selbsterklärende kann ich leider net erzählen. Aber vielleicht hilft dir die Doku des compilers, die sich immerhin in einem der Links versteckt, um einfach mal selbst zu kommentieren und dann zu schauen, ob du verstehst, was da passiert.
    Hat viel lerneffekt.

    Du musst dir einfach im klaren werden, was du willst... Und lernen konkrete Fragen zu stellen statt nach mundgerechten Komplettlösungen zu verlangen.

    Gruss

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2006
    Beiträge
    25
    Zitat Zitat von BlinkyBill
    ich möcht jetzt nicht unhöflich erscheinen, aber möchtest du verlangen, dass dir hier jemand alles vorkaut ?
    Vorkauen? Was denn vorkauen? Ich habe lediglich nach einer Erklärung der Konfiguration für den I2C gefragt.


    Zitat Zitat von BlinkyBill
    Wenns dir wirklich ums verstehen des I2C geht, dann vergiss den C18, und hau dir das in Assembler rein.
    Wenn du ein ergebnis willst, dann bastel dir aus den gegebenen Sachen selber was.
    Sorry wenn ich jetzt unhöflich bin, aber wenn du einfach sagst "mach selber" dann brauchst du auch nicht auf eine Frage zu antworten...


    Zitat Zitat von BlinkyBill
    Wenn dich die "Libraries" stören, dann öffne die header und die .c einfach mal, und schau, was da drin ist. Schließlich stellen die dir nur die Funktionen zur Verfügung, mit denen du dann arbeitest.
    Wenn du diese so einsetzen kannst, dass was übertragen wird, und daran was ändern kannst und hinterher auch weisst, was die Änderung bewirkt, dann bist deinem Ziel des Verstehens schon einen Schritt näher.
    Dass man für den C-Syntax eine Library verwendet ist mir auch klar... Jedoch möchte einfach nur den I2C-Bus mit den Standard-C-Befehlen steuern.


    Zitat Zitat von BlinkyBill
    und der Ansatz PIC--> EEPROM sollte auch keine Fertige Lösung bieten, sondern etwas Arbeitsmaterial um dich damit zu befassen, und mal damit zu spielen, und vielleicht sogar mal was draus übernehmen zu können.
    Stichwort: Transferwissen... Soll angeblich immer wichtiger werden
    Transferwissen? Ist mir ein Fremdwort.


    Zitat Zitat von BlinkyBill
    So, und zu den comments muss ich dich leider enttäuschen, da ich a) weder russisch kann, noch b) jemals mit c18 gearbeitet habe *G*
    Nobody is perfect.


    Zitat Zitat von BlinkyBill
    Also mehr als das selbsterklärende kann ich leider net erzählen. Aber vielleicht hilft dir die Doku des compilers, die sich immerhin in einem der Links versteckt, um einfach mal selbst zu kommentieren und dann zu schauen, ob du verstehst, was da passiert.
    Hat viel lerneffekt.
    Du musst dir einfach im klaren werden, was du willst... Und lernen konkrete Fragen zu stellen statt nach mundgerechten Komplettlösungen zu verlangen.
    Das tönt wie ein Lehrer...



    Trotzdem danke für die Antwort...

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Alter
    60
    Beiträge
    114
    Bei Microchip gibt es zwei Quellen, einmal den "PIC18Fxx2 Data Sheet" und das "PIC18C Reference Manual". Wenn du in beiden das gelesen hast, was dort über I2C steht, dann sollten eigentlich keine Fragen zur Initialisierung mehr offen sein. Es ist wirklich alles dort beschrieben. Wenn du allerdings nicht weißt, wie du das in C umsetzen kannst, dann nimm doch lieber die fertigen Libraries.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.10.2006
    Ort
    Aulendorf
    Beiträge
    143
    Sorry wenn ich jetzt unhöflich bin, aber wenn du einfach sagst "mach selber" dann brauchst du auch nicht auf eine Frage zu antworten...
    Wie gesagt... Du musst dir schlüssig werden, was du willst...

    du hast jetzt schon 2 recht verschiedene Sachen behauptet:

    Zum 2. Treffer: Ich möchte den I2C-Bus versuchen zu verstehen, deshalb nutzt es mir nichts wenn ich das mit Libraries löse.
    Hier sagst du, dass dir die C-Funktionen nichts bringen um den I2C zu verstehen, und dann kommt wieder das Gegenteil raus

    Dass man für den C-Syntax eine Library verwendet ist mir auch klar... Jedoch möchte einfach nur den I2C-Bus mit den Standard-C-Befehlen steuern.
    Also ? Was machen denn nun die Header-Files, ausser den I2C mit C-Befehlen zu steuern ???
    Das könnte das Beispiel sein, das du zu Anfang des Threads erfragt hast...

    Ein Beispiel:
    du möchtest die Funktion byte_out(...) nicht benutzen, weils dir darum geht, das aus standardbefehlen zusammenzubasteln....

    Du öffnest aus der AN997 die Datei AN997_i2c.c und schon wirst du folgenden code finden:

    Code:
    /********************************************************************
     * Function:        unsigned char byte_out(unsigned char data)
     *
     * Description:     This function outputs a byte to the I2C bus.
     *                  It also receives the ACK bit and returns 0 if
     *                  successfully received, or 1 if not.
     *******************************************************************/
    unsigned char byte_out(unsigned char data)
    {
        unsigned char i;                // Loop counter
        unsigned char ack;              // ACK bit
    
        ack = 0;
        for (i = 0; i < 8; i++)         // Loop through each bit
        {
            bit_out(data);              // Output bit
            data = data << 1;           // Shift left for next bit
        }
        bit_in(&ack);                   // Input ACK bit
    
        return ack;
    } // end byte_out(unsigned char data)
    Und schon hast du die genaue Schritt für Schritt abfolge für das senden eines Bytes auf dem I2C.
    Und ebenso wirds da wohl Code zur Konfiguration geben.


    Ich hoffe, du weisst nun, warum ich mir nicht wirklich schlüssig bin, was du denn nun überhaupt willst...



    So, und wenn du weiterhin mit der Aussage,dass man da eben auch selber was machen muss (nämlich Dateien öffnen und lesen) nicht klar kommst, dann werde ich mir weitere Antworten ersparen. Es war lediglich ein Hinweis, dass dir die fertigen Funktionen zum verstehen nicht viel bringen. Aber das wusstest du ja offensichtlich bereits.
    Und für ein schnelles Ergebnis (scheinst ja etwas ungeduldig) sollst du dir "aus den gegebenen Sachen" selber was basteln... Copy&paste wirkt da wunder...

    Das tönt wie ein Lehrer...
    Ich wusste doch, dass ich in der falschen Branche bin...[/quote]

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress