Hallo, hab einen Quelltext zur Implenetierung einer softwaremäßigen I²C-Schnittstelle bekommen, welche ich gerade für meine Zwecke "umbaue". Im Moment hängt an der I²C-Schnittstelle ein Temperaturfühler. Über I²C ist dieser mit meinem Microprozessor 80C552 von Philips verbunden (8051er). Eigentlich soll mein Programm nur einfache Funktionen haben: Die Umgebungstemperatur soll gemessen werden, über I²C verarbeitet werden, und dann am angeschlossenen LCD-Display (geht normal über die Pins des MCU, nicht über I²C) ausgegeben werden. Nun bin ich ein wenig ratlos, ob ich rein für I²C alles impleniert habe.. Der Wert, der dann ans Display weitergegeben wird, wird in der Variable "data_received" gespeichert und dann eben über bestimmte Ports ans LCD-Display weitergegeben. (Der Quelltext für die Ansteuerung hab ich jetzt nicht beigelet). Was meint ihr? Die Ansteuerung kann doch nicht nur aus Start, Receive und Stop bestehen???!!? Ich glaub, ich guck nochmal in den Philips-Spezifikationen für I²C...
Hier ist noch die Main-Funktion dazu, mit den Aufrufen der Funktionen STart, REceive und Stop...
Verwendest du den lm75? du must dem temp.sensor vorher mitteilen, dass er dir dir temperatur senden soll, erst dann kannst du sie lesen.
Hallo Andreas In der i2c.h war doch ein Beispiel drin. Du musst natuerlich die entsprechenden Device-Adressen benutzen. Im Anhang noch mal ein etwas ausfuerlicheres Beispiel fuer einen DS1621 auf Adresse 0x90 (A0 bis A2 auf GND). Falls Du einen LM75 benutzt musst Du die Adresse und den Start-Befehl aendern. Nach Aufruf von GetTemp(0x90) stehen dann die gelesenen Bytes in MSB und LSB. Gruss Eddi
1m75? sorry, bin absoluter Anfänger in Sachen Microcontroller. Der Temperatursensor ist der AD (Analog Devices) 7416. Das Datenblatt hab ich hier vor mir liegen. Mein Betreuer meint jedoch, dass es reichen würde, wenn ich von den angeschlossen Temperatursensoren die Adressen (also die Adresse des angeschlossenen Devices, über die I²C dann den Sensor anspricht), weiß. Und die hab ich von ihm bekommen (000 und 111, wobei es vorerst reicht, nur einen der beiden Sensoren anzusprechen). Falls du den Microcontroller gemeint hast, mit 1m75, es ist ein 80C552 Mircrocontroller, der eigentlich eine hardwaremäßge implentierung von I²C hat. Wir brauchen aber eine softwaremäßige Lösung (nur, falls sich jemand darüber wundert...). Mhmmm, wie mache ich denn jetzt weiter? Im Moment füge ich die Ansteuerung für das LCD-Display in dieses I²C-Projekt ein... Wie muss ich dem Temp-Sensor mitteilen, dass er mir jetzt DAten senden soll??? Ich glaub, ich hab hier grad ein grundsätzliches Verständnisproblem bezüglich der Kommunikation Microcontroller-Temp.Sensor... Mit der bisherigen Software setze ich ja nur die beiden Ports (SCL, SDA) auf HIGH oder LOW, z.B. generiere ich halt so die Start-Funktion, die ja den Datentransport anleiert. Okay, zugegeben, der Temp-Sensor fühlt sich da noch nicht angesprochen, wie mache ich das denn jetzt? Eigentlich macht man das ja mit dem ersten DAtenbyte, oder???
Ich denke mal auf den Seiten 9-12 im Datenblatt steht alles wichtige. Zusammen mit dem Beispiel sollte das kein Problem mehr sein. Mehr Hilfe kann man da wohl nicht geben, ohne den Code gleich selber zu schreiben. Aber da fehlt dann der Lerneffekt. Ansonsten : Lesen, Lesen, Lesen...
Warum benutzt du nicht die im 80C552 vorhandenen I²C Schnittstelle ??? Hier mal ne ganz einfache Beschreibung wie der I²C funktioniert: Nach deinem Startbefehl mußt du die Adresse des Slaves(Sensor) senden, der antwortet mit ACK. Bit 0 der Adresse teilt dem Slave mit ob er Daten senden oder empfangen soll. Beim Empfang wird beim LM75 (Temperatursensor) einfach nach der Adresse ein "Repeated Start" gesendet und der LM75 schickt dann die Daten. Bevor man mich nun erschlägt: Nagelt mich nicht darauf fest das alles so stimmt :) Das alles ist auch im Datenblatt zur genüge beschrieben (wenn man einigermassen Englischen lesen kann ;) Bei einer Hardware I2C Schnittstelle hast du den großen Vorteil das man ein Statusregister auslesen kann und so alle Buszustände sieht. (schau mal ins Datenblatt des 80C552) Gugst du auch mal hier: http://www.elektronik-kompendium.de/public/borchers/i2c/whatis.htm#Einführung oder hier http://www.mcc-us.com/i2chowto.htm MfG Uwe
danke danke, bin gerade dabei, meine 2 Projekte (LCD und I²C) zusammenzuführen damit ich gleich testen kann, ob die Kommunikation über I²C funktionniert (also Temp. auslesen und so). Tja, die hardwaremäßige Implementiertung nehmen wir nicht, da wir 2 I²C-Interfaces brauchen und so bräuchte man noch einen nachgeschaltenten MUX-und das will mein Betreuer nicht.... Da ich mich ja auch überhaupt nicht auskenne, suche ich jetzt halt nach der softwaremäßigen Lösung für I²C. Datenblätter hab ich am Wochenende schon gewälzt, bzw. mir die Spezifikation von I²C durchgelesen, aber hängen geblieben ist jetzt nich sooo viel---> ich lese das ganze jetzt halt nochmal durch... Trotzdem danke für die Hinweise!
Ich hab da noch eine Frage (oh no...) bezüglich des Vorlagenquelltexts... Mit a) I2C_Transmit (0x90); b) I2C_Transmit (0xee); Spricht man ja a) das angeschlossene Device an und ob der Master Daten lesen oder schreiben will und mit b) setzt man doch den Adress Pointer auf das "Temperature Valure Register" danach wird die Datenübertragung gestoppt, und erst die eigentliche GetTemp()-Funktion aufgerufen. Das verstehe ich irgendwie nicht... Mit meinem Kollegen zusammen haben wir anhand des Datenblattes für den Temp.fühler und den Timing-Diagrammen für I²C folgende Funktionsaufrufe zusammengestellt (siehe Anhang)... Aber irgendwie kommen keine Daten von I²C zurück...wir haben auch keine Ahnung mehr, wieso. Habt ihr ne Ahnung?
Hat sich erledigt, haben mitm Oszi nachgemessen, der Temperatursensor war wohl im Eimer...Neuer Sensor und jetzt funktionnierts (also die abgeänderte Variante vom Eddi!) Sogar das Timing :-) year *year* year *year* year *year* year
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.