Archiv verlassen und diese Seite im Standarddesign anzeigen : I²C in C-programmieren
surf_andre
06.10.2007, 19:31
Hallo,
ich habe mich in die C - Programmierung nun langsam eingelesen. Der normale umgang mit dem 8 Bit Bus klappt ganz gut. Das Display geht auch aber was ich zur zeit überhaupt nicht hin bekomme ist der I²C bus in C. In assembler habe ich das auch alles zum laufen nur nicht in C. Im Internet finde ich auch nur Assembler.
Weiß jemand wie das in C geht? oder wo man anregungen dazu findet?
Oder geht man da über nen Buscontroller baustein?
µC-System bei mir ist ein AT89S8253
Gruß Andre
Hi,
generell geht das wie in Assembler - nur hat man in C leider wenig Kontrolle über das Timing. Zwar nicht schlimm bei I²C (sofern Master), aber das kann trotzdem zu unerklärlichen problemen führen.
Der Grund warum Du nichts findest ist dass die meisten C-Compiler I²C Funktionen bereits eingebaut haben. Der dahinterstehende Assemblercode der vom Compiler generiert wird hat das korrekte Timing. Also such nach I²C Funktionen von Deinem Compiler. Im Programmkopf muß man nur noch Quarzgeschwindigkeit (muß man eh immer) und die beiden Pins vom Soft-I²C Bus angeben. Im Code ruft man nur noch die entsprechenden Funktionen auf und die Sache steht.
Wie die Funktionen heißen musst Du im Compiler herausfinden, meist enthalten die "I2C". Also durchstöber mal die Librarys.
Es gibt mindestens 4 Funktionen:
Start condition
Stop Condition
Byte senden
Byte empfangen
Gruß
Elmar
surf_andre
07.10.2007, 01:02
Danke für die schnelle Antwort Elmar,
ich habe schon in meinem Compiler geschaut habe da aber nichts gefunden. Ich benutze den SDCC. Aber IIC oder I²C .lib sind da in meiner Version nicht zu finden...
Gruss
André
Hi,
das ist teil irgendeiner Library. Mach einfach eine Volltextsuche aller *.h dateien nach "I2C" bzw. "IIC" ("²" können die Amis nicht ;) ).
Hast Du den namen der Funktion, guck unbedingt in der Hilfe nach! Da einige µC eine hardwaremässige I²C unterstützung haben, kann es zwei Sätze geben!
Gruß
Elmar
"startcondition" und "stopcondition" sind in jedem Fall Suchworte, welche zielführend sein sollten, da diese unverzichtbarere und feststehende Begrifflichkeiten der I²C Kommunikation darstellen. Bei ATMEL heißt die Schnittstelle im Übrigen aus patentrechtlichen Gründen Two Wire Interface kurz TWI. Die "startcondition" und "stopcondition" werden jedoch nicht durch Synonyme kaschiert sondern existieren in gleicher Weise wie bei I²C.
surf_andre
07.10.2007, 12:36
So nun habe ich mal nach genannten Stichwörter gesucht bin da bei dem Compiler nicht richtig fündig geworden. Scheinbar gibt es für " besondere " Bussysteme im SDCC keine mitgelieferten Funktionen. Über Umwege bin ich dann auf eine Webseite gestoßen dir mir dann doch weiterhelfen konnte.
( http://sdccokr.dl9sec.de )
Da gibt es einige Funktionn die nützlich sind.
Auch findet man dort einen interessantes Projekt für ein µC-Board ( µAnt51 - A universal and modular µC-board (http://sdccokr.dl9sec.de/dld/top11_pac05.zip) ) in dem wird ein Editor vorgestellt der für den SDCC geignet und auf deutsch ist. ( http://home.t-online.de/home/Jens.Altmann/jfe.htm (http://home.t-online.de/home/Jens.Altmann/) )
Gruß
André
surf_andre
11.11.2007, 21:19
Hallo zusammen,
kann mir vielleicht jemand erklären wie man beim SDCC eine Bibliothek ein bzw ausgelagerte Funktion ein bindet?
Bekomme da irgendwie nur Fehler.
Oder weiß jemand wie man ASM in SDCC ein binden kann?
Gruß
André
Hallo!
Probier es dochmal beim Hersteller des Prozessor!Die haben sicherlich ein paar Infos!
Oder die nächste Uni-Bibliothek aufsuchen und nach nem Buch vom Franzis-Verlag suchen.Bereich Messen-Steuern-Regeln mit uProzessoren!
Ein Bekannter Autor ist zB ein H.Kainka!
Nun hab ich ne Frage!?
Will ne meherere Analoge-Spannung von ca.20-30 Volt messen.Und diese auf nen uP geben.Um dort eine Messwerterfassung durchzuführen.Bzw um per C++ Prgrammanweisungen durchzuführen.
Hast du ein paar tips wie ich dies am besten realisiere.
Über ein paat Tips bin immer zu haben.
Gruß,Thomas
surf_andre
01.12.2007, 00:08
Hallo TomPI,
zu deiner Frage...
Erst mal was wäre interessant zu wissen was du für Möglichkeiten hast?
Hast du ein µC Board?
Welchen Controller verwendest du?
Wie genau willst du die Spannung messen?
Davon hängt im großen und ganzen das weitere ab.
Denn es gibt Controller mit integriertem AD Wandler die so eine auflösung um die 10 bit haben.
Hast du keinen internen AD Wandler mußt du dir den auch noch selbst entwerfen oder kaufen.
Wie sagt Nummer5 immer: Mehr Input..
Gruß André
Hi,
die Spannungen müßen erst mal auf 0..5V angepasst werden. Eine 5.1V Z-Diode zum Schutz gegen überpsannungen am A/D Eingang ist auch nicht schlecht ;)
Wenn I²C kein problem ist, dann kann man leicht A/D Wandler nachrüsten. Die meisten haben zwei Jumperbare Adressbits, so dass man 4 vom selben Typ an den selben Bus hängen kann. Auflösung usw. hängt dann natürlich vom verwendeten Typen ab.
Gleichzeitig kann man an den I²C Bus auch externes RAM bzw EEPROMs hängen um auch größere Mengen an Daten speichern zu können. Gerade beim Datenlogger ist eine Echtzeituhr (fast alle haben batteriegepuffertes RAM "on Board" für Datenspeicherung) praktisch.
Gruß
Elmar
Powered by vBulletin® Version 4.1.12 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.