Hallo, ich möchte den CO2 Gehalt mittels einem CO2 Messmodul in einem Raum messen. Dieses Messmodul wird über die I2C an einen Mikrokontroller (8051)angeschlossen. Der Mikrokontroller verwältet die Daten und gibt die Werte über die Boards aus. Je nach Gehalt soll eine LED leuchten. 1600ppm: rot 1500ppm: grün 1400ppm: gelb Mein Problem ist, dass ich noch nie auf so einer Ebene programmiert habe. Kann mir jemand sagen wie ich die Sache angehen soll? Vielen Dank
Hallo, > Mein Problem ist, dass ich noch nie auf so einer Ebene programmiert habe. Und auf welcher Ebene hast du schon programmiert? Hochsprachen? Und Erfahrung mit Controllern oder nur PC? > Kann mir jemand sagen wie ich die Sache angehen soll? 1. Daten auslesen 2. Daten auswerten 3. LEDs ansteuern Okay, ernsthaft, dass war jetzt genau die Antwort, nach der du gefragt hast. Sag doch bitte mal, wie weit dein Code ist, welche Sprache, usw. Je mehr wir wissen, desto besser können wir helfen. Ralf
Hallo, bis jetzt habe ich mur auf C++ programmiert. Versuche mich aber in Assembler auch ein bisschen. Ich habe ein CO2 Messmodul von der Fa. Driesen Kern (K21). Dieses Modul soll den CO2 Gehalt aufnehmen und einem Mikrokontroller übermitteln(I2C). Der Mikrokontroller soll an Hand des Wertes die dazugehörige LED ansteuern. Da ich noch sehr unerfahren bin was Hardwareprogrammierung betrifft, tue ich mir ziemlich schwer beim Programmaufbau
>Da ich noch sehr unerfahren bin was Hardwareprogrammierung betrifft, tue >ich mir ziemlich schwer beim Programmaufbau Dann lass es halt! C++ scheint ja keinen sinnvollen Programmierstil zu zulassen (deiner Aussage nach zu folgern). Liefert Driesen und Kern nicht sogar ein Codebaispiel mit? Ich kenne das vom SHT11, den D&K vertreibt. Da es sich um den 8051 handelt, solltest du dir vielleicht besser das "Mikrocontroller-Kochbuch" von Andreas Roth besorgen. Und man fängt auch nicht ohne Vorwissen mit solch einem "Mördertprojekt" an. Lass doch erst mal die LEDs blinken!
Ich müsste nur wissen wie man eine Hardware deklariert. Ich denke die Daten einzulesen und zu verwalten wäre nicht so das Problem. Dieses Buch gibt jemanden einen Überblick über die Herangehensweise?
Welche Controller benutzt du? Hat der schon eine Hardware I2C? Das würde die Sache vereinfachen, anders müsstest Du die Schnittstelle in Software nachbilden. Geht auch machts aber umständlicher! Aber dazu gibt es ja im Netz zig Beispiele.
OK, ich versuch mal was konstruktives. Lass es ist hier einfach der falsche Ansatz. Programmieren würde ich an deiner Stelle in C. Da uCs gerade hardwarenah etwas anders zu behandeln sind als du es bei C++ gewöhnt bist ist es am besten mit der LED Ausgabe zu beginnen. Steht der Schaltplan schon? Jedes Port (P0, P1, P2 ...) am Controller hat eine fix definierte Adresse. Auf diese kannst du schreiben und die Pins werden entsprechend geschalten. Ebenso muss das Port vorher konfiguriert werden (Input oder Output), was du in der Controller Spec gut beschrieben finden kannst. DIe Configregister sind auch fixe Adressen. Als nächstes kannst du den I2C-Bus angehen. Dort musst du deinen eigenen "Treiber" schreiben. Ist aber nicht so kompliziert wie in der PC Welt. Es geht wiederum ums konfigurieren der Register. Und schon kannst du die Daten senden/empfangen. Es ist alles kein Hexenwerk, benötigt aber etwas Einarbeitung in die Controllerwelt. Geh es Schritt für Schritt an. Für Codebeispiele gibt es bei den einzelnen Herstellern der 8051 Derivate application notes, die auch einfach gehalten sind um sich einzuarbeiten. Das oben empfohlene Controller Kochbuch ist wirklich zu empfehlen. JL
Wie würdest du den Schaltplan angehen? Kann ich mit dir das genauer besprechen (E-mail, skype?) Vielen Dank für dein Feedback!
Was liefert denn der Sensor? Eine analoge Spannung linear zum CO2 gehalt? Dann müsstest du aufpassen, dass der MCU nicht mehr Spannung in den als analogen Eingang konfigurierten Pin bekommt, als er aushält. Also ne Pegelanpassung durch nen Spannungsteiler bietet sich an. Wie beschrieben musst du per entsprechendem Register zwischen Analog und Digital unterscheiden. Dann musst du noch (auch per Register) zwischen Input und Output enscheiden. (Wie die Register bei deinem MCU heißen, steht dann in dem Datenblatt) Ich würde dann das analoge Signal des Sensors in der Software auswerten. Also die Größe in Drei bereiche Aufteilen, <c> zb. # define x... # define y... while(1) { aktuellen messwert in variable "analoger_wert" schreiben if(analoger_wert < X){} wenig CO2 if(analoger_wert > X && < Y){} normaler CO2-Gehalt if(analoger_wert > Y){} viel CO2 } </c>
Der Sensor liefert analoge Spannungen. Die Kommunikation wird über die I2C Schnittstelle laufen. Das Problem über die Pegelanpassung höre ich zum ersten Mal. Wie deklariere ich das CO2 Modul?
So wie es aussieht hast du noch keine genauen Hardwarevorstellungen. Warum hast du den 8051 gewählt (einfach vorhanden gewesen, evaluation Bord, Entwicklungsvorgabe)? Kannst mich unter joerglippmann bei web de anmailen. JL
Ich habe noch nie Hardware programmiert. Mit dem 8051er habe ich schon ein paar Programmiererfahrungen und außerdem habe ich eine Entwicklungsumgebung zur Verfügung. Ich müsste eben wissen, wie ich die Hardwarekomponenten deklariere. Kann ich dir das Blockschaltbild meiner Aufgabenstellung mailen?
Hallo Martin, besorg Dir den 8051er-Lehrgang aus dem Elektor-Verlag. Da lernst Du von Grund auf die Programmierung eines 8051 in C und auch den Hardware-Aufbau und Hardware-Ergänzungen kennen. Ich habe schon einiges gelesen, aber zum 8051 gibt es meiner Meinung nach z.Zt. für den Einsteiger nichts besseres. Gruß Rufus.
ok die frage nach der Art der Spannung des Sensors ist ja geklärt. Jetzt müssen wir noch wissen, wie groß diese Spannung ist. z.B 0V bis 2,4V Dann hast du fast schon gewonnen. liefert der Sensor aber ne Signalspannung von was weiß ich bis zu 7V, dann verkraftet der Controller das net. Dann würde ich nen Spannungsteiler benutzen. Also, wo liegt jetzt der Wertebereich der Sensorspannung?? Dann können wir was zur Beschaltung, also zur Hardware sagen..
>Ich habe noch nie Hardware programmiert. >Mit dem 8051er habe ich schon ein paar Programmiererfahrungen und >außerdem habe ich eine Entwicklungsumgebung zur Verfügung. >Ich müsste eben wissen, wie ich die Hardwarekomponenten deklariere. Mit einem Pointer (entsprechender Breite) auf die IO-Adresse, in der Regel gibt es aber für das jeweilige Target schon vorgefertige Headerfiles die das übernehmen. du kannst dann einfach schreiben: Register = Wert/Variable; oder Variable = Register; Ich weiss nicht was du dir genau vorstellst, aber da du von C++ kommst denke ich das du objektorientierte Programmierung gewohnt bist. Es ist absolut kein technisches Problem einen Mikrocontroller objektorientiert zu programmieren, aber es ist doch unüblich da hier eher geringer Resourcenverbrauch und schneller Ablauf nötig ist. Also es gibt keine Klassenbibliothek oder so für deinen CO2 Sensor... (keiner verbietet dir eine zu machen, bloss unüblich). Da der 8051 sehr weit verbreitet ist, würde ich in deinem Fall nach einer fertigen Lib für die I²C-Schnittstelle schauen, die sollte es relativ sicher irgendwo geben. Wenn du den Datenstrom erstmal hast, ist kein Unterschied mehr zur PC-Programmierung, lediglich die Ansteuerung der LEDs ist noch Hardwarespezifisch, aber: Port auf Ausgang Wert Schreiben fertich :D Gruß, Christian
Hallo Martin ich hoffe du hast in der Zwischenzeit dein Problem gelöst. Ich würde gerne wissen wo du das CO2 Messmodul von der Fa. Driesen Kern (K21)erworben hast und zu welchen Preise. Grüsse Reinhold
Bei Elektor gab's gerade ein Projekt zum Thema CO2 Messung. War diesen oder letzten Monat. aja ich hab den Link: http://www.elektor.de/jahrgang/2010/mai/mobiles-co2-messgerat.1322221.lynkx
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.