Weiss denn das niemand?
I2C sollte doch ein Begriff sein, wenn man Roboter baut.
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
Weiss denn das niemand?
I2C sollte doch ein Begriff sein, wenn man Roboter baut.
sorry, die Glaskugel ist bei der Reparatur...
Welchen C-Compiler ?
was funktioniert schon ?
was hast du bisher gezaubert ?
... fragen über fragen
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.
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...
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
}
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
Vorkauen? Was denn vorkauen? Ich habe lediglich nach einer Erklärung der Konfiguration für den I2C gefragt.Zitat von BlinkyBill
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 von BlinkyBill
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 von BlinkyBill
Transferwissen? Ist mir ein Fremdwort.Zitat von BlinkyBill
Nobody is perfect.Zitat von BlinkyBill
Das tönt wie ein Lehrer...Zitat von BlinkyBill
Trotzdem danke für die Antwort...
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.
Wie gesagt... Du musst dir schlüssig werden, was du willst...Sorry wenn ich jetzt unhöflich bin, aber wenn du einfach sagst "mach selber" dann brauchst du auch nicht auf eine Frage zu antworten...
du hast jetzt schon 2 recht verschiedene Sachen behauptet:
Hier sagst du, dass dir die C-Funktionen nichts bringen um den I2C zu verstehen, und dann kommt wieder das Gegenteil rausZum 2. Treffer: Ich möchte den I2C-Bus versuchen zu verstehen, deshalb nutzt es mir nichts wenn ich das mit Libraries löse.
Also ? Was machen denn nun die Header-Files, ausser den I2C mit C-Befehlen zu steuern ???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.
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:
Und schon hast du die genaue Schritt für Schritt abfolge für das senden eines Bytes auf dem I2C.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 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...
Ich wusste doch, dass ich in der falschen Branche bin...[/quote]Das tönt wie ein Lehrer...
Lesezeichen