www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik CO2 Messung mit Mikrokontroller 8051

Autor: Martin (Gast)
Datum: 22.04.2008 07:14

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: 22.04.2008 07:26

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: 22.04.2008 07:59

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: 22.04.2008 08:09

>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: 22.04.2008 08:19

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: 22.04.2008 08:20

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: 22.04.2008 09:15

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: 22.04.2008 09:38

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: 22.04.2008 10:18

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: 22.04.2008 10:26

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: 22.04.2008 10:30

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: 22.04.2008 10:36

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: 22.04.2008 14:15

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: 22.04.2008 15:27

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: 22.04.2008 15:56

>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

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net