Hallo, Ich muss für meine Abschlussarbeit einen Display mit einem I2C-Bus ansteuern. Dazu verwende ich einen PIC16F1827 von der Firma Microchip. Ich programmiere im MCC und scheitere daran etwas am Display auszugeben bzw. den I2C-Bus erstmals anzusprechen. Auch durch viel Recherche konnte ich keine Lösung finden. Meine Frage ist, ob jemand weiß wie ich z.B. ein A auf meinem Display ausgebe. void I2C1_Write1ByteRegister(i2c1_address_t address, uint8_t reg, uint8_t data) { while(!I2C1_Open(address)); // sit here until we get the bus.. I2C1_SetDataCompleteCallback(wr1RegCompleteHandler,&data); I2C1_SetBuffer(®,1); I2C1_SetAddressNackCallback(NULL,NULL); //NACK polling? I2C1_MasterWrite(); while(I2C1_BUSY == I2C1_Close()); // sit here until finished. } Ich habe dieses vorgefertigte Teilprogramm gefunden, weiß aber nicht wie ich damit umgehe bzw. ob es das richtige für mich ist. Bin ein ziemlicher Anfänger, wenn es um programmieren geht. Darum würde ich mich über jedes Kommentar freuen, welches mich etwas weiterbringt. Danke!
Oooooh je ! Dieses Code-Snippet das du hier gepostet hat, stellt mit seiner Deklaration eine Funktion zur Verfügung, die ein Register im I2C Slave beschreiben kann. Diese Funktion geht davon aus, dass der I2C Bus des Controllers schon initialisiert ist und betriebsbereit ist. Die Funktion eines I2C Busses kannst du unter: https://de.wikipedia.org/wiki/i2c nachlesen. Auf einem I2C Bus können mehrere Geräte (Devices) mit nur 2 Leitungen angesprochen werden. Damit sich die Devices nicht gegenseitig ins Gehege kommen, besitzt jedes Device eine Adresse. Eine Kommunikation zu einem I2C Slave kommt dadurch zustande, dass auf dem Bus eine Start-Condition hergestellt wird, danach erfolgt die Geräteadresse des Devices das angesprochen werden soll mit dem niederwertigsten Bit des ersten gesendeten Bytes wird bestimmt, ob auf dieses Gerät geschrieben oder gelesen werden soll (bei deiner obigen Funktion wird geschrieben). Grob gesagt stellt deine Funktion eine Verbindung zu deinem Slave (bei dir willst du dort ein I2C Display haben) mit angegebener Deviceadresse her und schreibst genau ein einzelnes unsigned char (byte). Kurz gesagt bist du damit in der Lage mit einem I2C-Display zu kommunizieren. Viele Devices (im besonderen Displays) besitzen mehrere Register (Device eigene Speicherplätze) die unterschiedliche Bedeutung haben können (vllt. hat dein Display eine Helligkeitssteuerung, auf jeden Fall hat es ein Kommandoregister (um bspw. invertierte Darstellung zu generieren) oder auch ein Register, welches die Displayadresse setzt an die ein Wert geschrieben werden soll. Damit also auf einem Display auch nur irgendetwas geschieht (und sei es nur ein verrauschte Darstellung) sind zuvor viele Datentransfers notwendig und du mußt erst das Display mit den vom Display benötigten Daten füttern. Displays haben in aller Regel eigene Displaycontroller, die ihrerseits wieder das TFT-LCD steuern und jeder Controller funktioniert anderst. D. h. du mußt genau wissen WAS für ein Display du hast und welcher im Controller verbauten Display vorhanden ist. Hast du ein graphikfähiges Display, kannst du bspw. keinen Buchstaben darauf setzen, sondern dein Programm benötigt ein Array mit einem Zeichensatz, der die Bitmaps für jeden einzelnen Buchstaben enthält. Zu deinem Unglück sind Beispielsprogramme für deinen Controller nicht so arg viele vorhanden und (deswegen kann man dir hier fast nicht helfen) du machst keine Angaben über das Display, das du ansteuern möchtest. Wenn du, was ich annehme, ein so großer Anfänger bist, kann I2C schon eine Herausforderung sein und du solltest erst einmal grundsätzlich den Umgang mit diesem Bus an einem sehr einfachen I2C Baustein wie bpsw. PCF8574 lernen. Dieser I2C Baustein verfügt, wenn man in schreibend betreibt über ein einziges Register das mit deiner obigen Funktion beschrieben werden kann. Schreibst du in dieses Register einen Bytewert hinein kannst du bspw. mittels 8 LED's die einzelnen Bits dieses Bytes sehen. Wenn das geklappt hat, kannst du sicher sein, dass dein Bus funktioniert und du kannst dich daran machen, dich um das Display zu kümmern.
Niklas Koch schrieb: > Ich muss für meine Abschlussarbeit einen Display mit einem > I2C-Bus ansteuern. Aber: Niklas Koch schrieb: > Bin ein ziemlicher Anfänger, wenn es um programmieren geht. Dann hast du wohl das Falsche gelernt, bist im falschen Film oder dein Ausbilder kennt dich nicht und überfordert dich total. Niklas Koch schrieb: > einen Display Es heisst übrigens: ein Display, also das Display, nicht der Display.
> Auch durch viel Recherche konnte ich keine Lösung finden.
Lies das Datenblatt deines COntrollers und programmiere es. Klauen im
Internet ist nicht das Ziel von Abschlussarbeiten. Ansonsten hoffe ich
naemlich das du durchfaellst weil niemanden spaeter einen Typen als
Arbeitskollegen haben will dessen Faehigkeiten aus kopieren im Internet
bestehen.
Olaf
Olaf schrieb: > Auch durch viel Recherche konnte ich keine Lösung finden. > > Lies das Datenblatt deines COntrollers und programmiere es. Klauen im > Internet ist nicht das Ziel von Abschlussarbeiten. Ansonsten hoffe ich > naemlich das du durchfaellst weil niemanden spaeter einen Typen als > Arbeitskollegen haben will dessen Faehigkeiten aus kopieren im Internet > bestehen. > > Olaf Olaf, Ich glaube nicht, dass man jemanden mit solchen Kommentaren hilft. Tipp: Erspar dir solche Bemerkungen und versuche zu helfen. Danke!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.