www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CO2 Messung mit Mikrokontroller 8051


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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!

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: jl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie würdest du den Schaltplan angehen?
Kann ich mit dir das genauer besprechen (E-mail, skype?)

Vielen Dank für dein Feedback!

Autor: PIC user (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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>

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: jl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Rufus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: PIC user (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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..

Autor: Christian Erker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Autor: Gerstl Reinhold (ccr60mgk35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: bvhjg,j (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mbvin bh jkbhj ol

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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-co...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.