Forum: Mikrocontroller und Digitale Elektronik Freescale Drucksensor an Atmega8


von Andreas H. (raucher91)


Lesenswert?

Hallo Forumsmitglieder,

ich hoffe Ihr könnt mir weiterhelfen.

und Zwar geht es darum diesen Drucksensor

http://www.reichelt.de/MPX-53DP/3/index.html?&ACTION=3&LA=446&ARTICLE=82335&artnr=MPX+53DP&SEARCH=freescale+drucksensor+mpx

an einem Atmega zu Betreiben
das Projekt dient dazu eine Vakuum sauganlage an Mehreren Stellen im 
System zu Überwachen und bei Vakuum-Problemen Alarm zu Schlagen.

Die Sauganlage baut max -0,5 bar auf.


mein Problem der Drucksensor liefert mir ein signal von 1,2mV / kPa

köönt ihr mir helfen wie Ich das Signal richtig auswerten kann ?

weil über google finde ich leider nichts passendes.

von nicht"Gast" (Gast)


Lesenswert?

klar kann man dir helfen.

wo liegt denn jetzt sein Problem?

beim Umrechnen der Einheiten?
beim Verstärken vom Signal?
beim Einlesen mit dem ADC?
bei Übertragen der Daten?

von Andreas H. (raucher91)


Lesenswert?

Hauptsächlich beim Verstärken vom Signal

von Otti (Gast)


Lesenswert?

>Hauptsächlich beim Verstärken vom Signal

Bitte schön:
http://de.wikipedia.org/wiki/Instrumentenverst%C3%A4rker

von Martin (Gast)


Lesenswert?

Warum nimmst du nicht einen Drucksensor mit integrierter Kompensation 
und Verstärker?

von Lutz (Gast)


Lesenswert?

- Weil er (vielleicht) jetzt schon diesen Sensor gekauft hat
- Weil ihm dieser Sensor (vielleicht) vorgegeben wurde
- Weil er ja (vielleicht) auch was lernen will/soll

Es ist wohl generell besser, etwas mit Standardkomponenten selber 
aufzubauen. Zumal das hier ja wirklich keine Raketentechnik ist.

von Mike (Gast)


Lesenswert?

Lutz schrieb:
> Es ist wohl generell besser, etwas mit Standardkomponenten selber
> aufzubauen.

Dein Handy ist aus Transistoren und Widerständen selbst gelötet? Oder 
hast du das etwa fertig gekauft?

Bei mir ist es, ehrlich gesagt, schon lange her, dass ich einen OP aus 
Einzeltransistoren aufgebaut habe und statt eines µC eine 
Logikverknüpfung in handverlöteter DT-Logik verwendet habe.
http://de.wikipedia.org/wiki/Diode-Transistor-Logik

von spess53 (Gast)


Lesenswert?


von Lutz (Gast)


Lesenswert?

Lutz schrieb:
> - Weil er ja (vielleicht) auch was lernen will/soll
Lutz schrieb:
> Zumal das hier ja wirklich keine Raketentechnik ist.

@Mike: Das mußt du schon im Zusammenhang sehen.

Mike schrieb:
> Bei mir ist es, ehrlich gesagt, schon lange her, dass ich einen OP aus
> Einzeltransistoren aufgebaut habe und statt eines µC eine
> Logikverknüpfung in handverlöteter DT-Logik verwendet habe.

Also gab es damals® noch keine IC's? ;-)

von Mike (Gast)


Lesenswert?

Lutz schrieb:
> Also gab es damals® noch keine IC's? ;-)

Zumindest waren viele, gemessen am Taschengeld, schweineteuer. Da 
standen Drucksensoren, wie BMP085, BMP180 oder MS5611, die einem die 
Druckdaten für wenige Euro fertig für die digitale Weiterverarbeitung 
auf dem Silbertablett präsentieren, gar nicht zur Debatte. ;-)

von Martin (Gast)


Lesenswert?

Lutz schrieb:
> - Weil er (vielleicht) jetzt schon diesen Sensor gekauft hat
> - Weil ihm dieser Sensor (vielleicht) vorgegeben wurde
> - Weil er ja (vielleicht) auch was lernen will/soll
> ...

Tja, Lutz, vielleicht sollte Andreas selber antworten? Er wird die 
Antworten nämlich kennen.

von Andreas H. (raucher91)


Lesenswert?

spess53 schrieb:
> Frescale hat eine große Anzahl Appnotes zu Drucksensoren
>
> z.B.
>
> http://cache.freescale.com/files/sensors/doc/app_note/AN1100.pdf

Danke Erstmal für die vielen Antworten.

@ spess53  - ist dies ein Vorschlag wie Ich meinen Sensor anschließen 
soll/muss ? oder nur ein Beispiel ?


@ Lutz    - Ja ich habe den Sensor bereits gekauft und Ja ich möchte 
natürlich lernen.

@ alle    - mein Problem ist das Budget wo Ich für dieses Projekt habe 
ist sehr gering und da Ich ja Alleine schon 5-6 Drucksensoren brauche 
schlägt dies schon gewaltig zu. Außerdem sollte es mit möglichst vielen 
fertig Komponenten ( bezogen auf Signal Verstärken ) geschehen. Außerdem 
wird Das Signal über eine Leitungslänge von ca 35 m Transportiert ( 
könnte dies eine Rolle Spielen bzgl. Leitungswiederstand ??? )

mir wäre natürlich ein "einfacher" Signalverstärker lieber vorallem 
müsste es was sein wo Ich wüsste wie Ich dies Anschließen muss.

Vielen Dank Schonmal für Hilfe

von Wolfgang (Gast)


Lesenswert?

Andreas Hermann schrieb:
> @ alle    - mein Problem ist das Budget wo Ich für dieses Projekt habe
> ist sehr gering und da Ich ja Alleine schon 5-6 Drucksensoren brauche
> schlägt dies schon gewaltig zu.

Von dem BMP180 kosten 5 Stück, fertig auf einem Board zum direkten 
Anschluss an den Arduino, zusammen weniger als einer deiner MPX-53, 
beispielsweise ebay 400567862490

von Andreas H. (raucher91)


Lesenswert?

Hallo Wolfgang,

danke für deinen Tipp.

Problem nur der Drucksensor muss einen Schlauchanschluss haben.
leider hatte Ich vergessen dies zu erwähnen =(

von Jörg E. (jackfritt)


Lesenswert?

Also ich würde das Signal direkt am sensor messen und digital wandeln. 
Bei 35m sollte das schon
lieber digital übertragen werden. Evtl auch wegen umgebungstörungen?

von Andreas H. (raucher91)


Lesenswert?

Jörg Esser schrieb:
> Also ich würde das Signal direkt am sensor messen und digital wandeln.
> Bei 35m sollte das schon
> lieber digital übertragen werden. Evtl auch wegen umgebungstörungen?

könntest du mir Erklären wie Ich das am Einfachsten machen würde ?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Andreas Hermann schrieb:
> Jörg Esser schrieb:
>> Also ich würde das Signal direkt am sensor messen und digital wandeln.
>> Bei 35m sollte das schon
>> lieber digital übertragen werden. Evtl auch wegen umgebungstörungen?
>
> könntest du mir Erklären wie Ich das am Einfachsten machen würde ?

Du könntest einen ATTiny25/45/85 mit eingebautem Differenzverstärker 
nehmen, der Verstärkung und Digitalisierung übernimmt - wenn dir die 10 
Bit des internen A/D Wandlers genügen. Da der ATTiny auch einen 
eingebauten Temperatursensor hat, könnte er auch gleich den 
Temperaturgang des Sensors kompensieren.
Jeder Sensor bekommt so einen MC 'Kopf'. Ein geschickt gemachtes 1-Wire 
oder 2-Wire Protokoll (z.B. langsames SPI oder I²C) könnte dann alle 
Sensoren auf einen gemeinsamen Bus bringen.

von Carsten R. (kaffeetante)


Lesenswert?

Brauchst Du den tatsächlichen Sensorwert? Oder soll er einfach nur bei 
Unterschreiten eines bestimmten Wertes ein Alarmsignal geben?

Für letzteres brauchst du nur einen (einstellaren) Vergleichswert, da 
könnte schon ein Poti reichen, und ein Komparator pro Sensor. Fertig ist 
das binäre Ausgangssignal. Eine weitere analog zu digital Wandlung wäre 
nicht nötig. Das sind keine teuren Teile. Da wäre kein Mikrocontroller 
und keine Software nötig.

Eventuell benötigst du noch eine Schaltung mit Operationsverstärkern, 
wenn Du das Signal vergrößern willst um den Schwellwert und die 
Hysterese etwas genauer eintstellen zu können. Auch das ist kein 
Hexenwerk.

Um das zu vertiefen müßten die Anforderungen aber genauer beschrieben 
werden.

: Bearbeitet durch User
von Andreas H. (raucher91)


Lesenswert?

Also ich benötige die Tatsächlichen Sensorwerte da eben 3 Sensoren in 
einer Vakuumleitung sitzen und eben ich den genauen Druck brauche.

Wenn es möglich ist alle Sensoren auf eine Leitung zu bringen wäre 
natürlich nicht schlecht.

Also nochmal zu Veranschaulichung der Tatsachen:

Ich habe eine Vakuumsystem bei der -0,5 bar aufgebaut werden. Es Sitzen 
je 3 Sensoren in einer Leitung ( Abstand dazwischen ca 40 m ) und je 
nachdem bei welchen Sensor der Druck zuerst wegfällt sollte dieser Alarm 
schlagen und der Atmega soll  ein Relais Schalten und dies Optisch an 
einer Schalttafel ( dort ist die Halle mit den Vakuumleitungen und den 
Bereichen der Sensoren abgebildet) anzeigen.

Eingesetzter Sensor ist der MPX-53 der ein Signal von 1,2mV / kPa 
ausgibt somit habe ich bei vollem Vakkum 0,6 V. Der Alarmwert sollte ca 
-0,3 bar sein .

Ich hoffe ich habe jetzt nichts vergessen.

vll könnte mir ja jemand eine skizze machen wie Ich das System mit den 
Sensoren zusammenbasteln muss.

von Carsten R. (kaffeetante)


Lesenswert?

Darf man fragen wofür du die Messwerte sonst noch benötigst? Das könnte 
helfen das auf eine Leitung zu bekommen.

Für den Alarm benötigst du die ja nicht. Da reicht ja die 
Schwellwertüberschreitung bzw. -unterschreitung.

Was ist der maximale Messbereich? Was ist der maximale Unterdruck. Was 
ist der maximale Überdruck, sofern das auftreten kann. Alternativ:  Was 
ist der minimale Unterdruck. Und welcher Bereich davon soll auch korrekt 
angezeigt werden? Auf welchen Wertebereich soll das abgebildet werden um 
es dann zu digitalisieren? 0-5 Volt, 0-10 Volt 020 mA bzw 4-20 mA?

So kann an nur sagen: Schalte eine Standard OPV schaltungvor den ADC.

Mach dir mal einen Kopf um die Anforderungen genau zu spezifizieren.

http://www.elektronik-kompendium.de/sites/slt/0210151.htm

Da brauchst du dann nur noch die Zahlen in die Formel einsetzen.

: Bearbeitet durch User
von Andreas H. (raucher91)


Lesenswert?

@ Carsten - Danke für die vielen Fragen / Infos also der Maximale 
Messbereich ist 0 bis -0,5 bar  die Messwerte werden benötigt um diese 
auf einem Display wiederzugeben. Ausgegeben soll der Wert des Sensors 
auf einen wertebereich von 0-5 Volt. Überdruck kann keiner Enstehen. Bei 
Unterschreiten des Unterdrucks von -0,3 bar sollte Alarm geschlagen 
werden.

Also ich werde jetzt einfach mal einen OPV bestellen und diesen dann an 
meinen Drucksensor anschließen. z.B. diesen Hier 
http://www.conrad.de/ce/de/product/157032/Operationsverstaerker-Typ-K-KEC-Korea-Electronics-KIA358P-Gehaeuseart-DIP-8-Ausfuehrung-Dual-OP-Amp?ref=searchDetail

verstehe ich das richtig ich muss einfach das SignalOut+ von meinem 
Sensor an den +inA des OPV anschließen und den OutA des OPV an den 
Atmega und an VCC ganz normal die 5V des Atmega und an VEE die Spannung 
die der Verstärkung enspricht ??

von Carsten R. (kaffeetante)


Lesenswert?

Andreas Hermann schrieb:
> VEE die Spannung
> die der Verstärkung enspricht ??

Ich bin mir nicht sicher was Du da vor hast. Ich nehme an du meinst mit 
"die der Verstärkung entspricht" die Rückkopplung über den 
Spannungsteiler. Dann heißt das nein. Das kommt an negativen EINGANG. 
Der Rest ist richtig. Vee ist die "negative" VERSORGUNG. Da kommt also 
die negative Versorgungsspannung dran. Die muß nicht unbedingt negativ 
sein. Wenn Du den Pin auf Masse legst, nennt sich das single Supply. Das 
geht mit dem 358.

Um dann aber auch auf die vollen 0-5 Volt abzubilden benötigst du 
eigentlich einen Rail to Rail Typen, weil normale OPVs verzerren, wenn 
die Ausgangsspannung nahe an Vcc bzw Vee herankommt. Zum Beispeil ginge 
der TS912. Ich vermute allerdings, daß du dich ohnehin mehr für den 
Bereich um die 0,3 Bar interessierst und mit Ungenauigkeiten bei den 
Maximalwerten leben kannst. Dann reicht das von Dir gewählte Modell.

Ich würde Trotzdem den Meßbereich nicht auf 0,5 Bar begrenzen und etwas 
Platz lassen, damit du sehen kannst wenn man den Rahmen doch mal 
verläßt, vielleicht 0,6 bar...

Das alles auf einen Draht zu Multiplexen, da fällt mir jetzt keine 
einfache Lösung ein. Da würde ich entweder ein mehradriges Kabel nehmen 
oder mich der schon gegebenen Empfehlung anschließen und vor Ort 
digitalisieren und das dann digital auf einen gemeinsamemn Bus 
weiterleiten. Das erhöht die Kosten pro Sensor aber spart vermutlich 
Kabel und veringert somit dort Kosten und möglche Störeinflüsse. Das 
wäre deine Entscheidung.

: Bearbeitet durch User
von loren (Gast)


Lesenswert?

Andreas Hermann schrieb:
> Eingesetzter Sensor ist der MPX-53 der ein Signal von 1,2mV / kPa
> ausgibt somit habe ich bei vollem Vakkum 0,6 V. Der Alarmwert sollte ca
> -0,3 bar sein .
Da ist die Kommastelle verrutscht. Das Ding hat einen FS von 60mV und 
ist nicht temperaturkompensiert. Selbst wenn du einen geeigneten 
Verstärker (Instrumentation, Differential) mit einstellbarem Gain und 
Offset nimmst, bleibt das Problem mit der Temperatur.

Auch wenn du schon einen Sensor gekauft hast - tu dir den Gefallen und 
nimm einen der MP3V5050xx.
Gibt es bei Mouser für €8,5 + Steuer, entspricht also dem 
Reichelt-Preis.

Der hat aber einen 2,8V FS Ausgang (Vcc=3V). Zusammen mit einem XTR111 
(4-20mA 1,72) ergibt das ein einfach auszuwertendes und auch über 35m 
stabiles Signal. Das einzige Problem dabei ist die Stromaufnahme des 
Drucksensors von max. 10mA. Dadurch ist eine echte Zweidrahtlösung nicht 
möglich. Auch an REGF muß noch ein zusätzlicher Transistor.

Als Alternative:
AD7740 (V/f-Konverter 2,-) und Übertragung mit Leitungstreiber FIN1019 
1,40 über normale UTP-Kabel. Clk entweder lokal mit Oszillator oder 
zentral über den zweiten Kanal des FIN1019.

p.s. Mit für Brückenschaltungen vollig ungeeigneten einzelnen Opamps wie 
dem verlinkten bei Conrad wird das nix.

von Carsten R. (kaffeetante)


Lesenswert?

Hi Loren,

der Sensor gefällt mir auch. :)

Könntest du bitte kurz mit ein zwei Sätzen vertiefen was beim LM358 
völlig ungeeignet ist?

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Carsten R. schrieb:
> Könntest du bitte kurz mit ein zwei Sätzen vertiefen was beim LM358
> völlig ungeeignet ist?

Die Offsetspannung ist mit etlichen Millivolt angegeben. Bei anderen 
OPs steht da "Mikrovolt".

von loren (Gast)


Lesenswert?

Carsten R. schrieb:
> Könntest du bitte kurz mit ein zwei Sätzen vertiefen was beim LM358
> völlig ungeeignet ist?

Gegenfrage: Kriegst du damit z.B. eine Schaltung nach
https://de.wikipedia.org/wiki/Instrumentenverst%C3%A4rker#Zwei_OPVs
mit einem Gain von ca. 50 gebacken?

Allein die Offsetspannung bzw. deren Drift sprechen zusammen mit den 
Widerstandstoleranzen meiner Meinung nach dagegen.

von Andreas H. (raucher91)


Lesenswert?

würde dieser Sensor vom Reichelt auch gehen ? der hat ja 0,2V bis 4,7 V 
http://www.reichelt.de/MPX-5050DP/3/index.html?&ACTION=3&LA=446&ARTICLE=82339&artnr=MPX+5050DP&SEARCH=freescale+drucksensor

und sollte somit auch ohne Verstärker auskommen oder ?

von loren (Gast)


Lesenswert?

Der entspricht dem vorgeschlagenen MP3V5050xx. Ist aber die 5V-Version, 
etwas größer und teurer.

von Carsten R. (kaffeetante)


Lesenswert?

Da hast Du genau die richtige Schaltung ausgesucht. Eine die erhöhte 
Anforderungen an die Offsetgenauigkeit stellt. ;-) Was spricht denn 
gegen die einfachere Version vom Kompendium? Natürlich gibt es schönere 
OPVs.

Ist halt eine lowcost Lösung. Einen Offsetabgleich muß man ohnehin 
durchführen. Wenn euch die paar Millivolt des LM358 stören, setzt das 
mal in Relation zum Offset des ursprünglichen Sensors. Ein 
Hardwareabgleich wäre zwar zusätzlicher Aufwand, aber hier folgt ja 
direkt danach keine weitere Analogschaltung sondern ein ADC. :) Einfach 
und billig, wenn auch nicht maximal genau, wäre ein Null-Abgleich per 
Software.

Auch dafür ist es praktisch etwas mehr Luft in der Skalierung zu haben. 
Angesichts des Datenblattes des Ursprünglichen Sensors halte ich 
ebenfalls eine Verstärkung von maximal ca. Faktor 50 für angemessen 
(ergibt bis zu 4,5 Volt am Ausgang). Da es kein Rail-to-Rail ist macht 
es kaum Sinn ganz nahe an die 5 Volt gehen zu vollen.

Zur geforderten Auflösung, Genauigkeit und Umgebungstemperatur und 
dessen Schwankungsbreite fehlen noch die Angaben. Muß es absolut genau 
sein oder nur Relativ genau? Im ersten Fall müßten man ohnehin irgendwie 
eichen.

von Andreas H. (raucher91)


Lesenswert?

loren schrieb:
> Der entspricht dem vorgeschlagenen MP3V5050xx. Ist aber die 5V-Version,
> etwas größer und teurer.

Ok Vielen Dank.

das mit Größer und bisschen Teurer ist ned ganz so tragisch da ich's 
über meine Firma in der Ich Arbeite kaufe und dann kommt es fast auf den 
Preis von dir.

Wäre es evtl klug nach dem Sensor einen AD Wandler dran zu hängen und 
das Signal dann gleich per I2C zu senden ?? Welcher AD-Wandler wäre denn 
dann perfekt ?

gruß und schönen Abend Andy

von Carsten R. (kaffeetante)


Lesenswert?

Andreas Hermann schrieb:
> Welcher AD-Wandler wäre denn
> dann perfekt ?

Welche Auflösung wird denn gefordert?

von Wolfgang (Gast)


Lesenswert?

Carsten R. schrieb:
> Welche Auflösung wird denn gefordert?

Andreas Hermann schrieb:
> Der Alarmwert sollte ca -0,3 bar sein .

Dafür sollte 1 Bit reichen

von Andreas H. (raucher91)


Lesenswert?

Puhh gute Frage. Wie darf ich des verstehen mit der Auflösung ? Also 
wenn bar gemeint sind dann 0,05 bar

von Andreas H. (raucher91)


Lesenswert?


von Carsten R. (kaffeetante)


Lesenswert?

Das wären 11 Schritte. Da käme man mit 4 Bit hin. Bei so geringen 
Anforderungen sollte das mit der Temperatur auch zu lösen sein, je 
nachdem wie extrem die Temperaturschwankungen sind, könnte man das 
eventuell auch vernachlässigen. Schlaf nochmal eine Nacht drüber wie 
genau das alles werden soll bevor wir hier mit Kanonen auf Spatzen 
schießen und uns mit Details unterhalb der geforderten Meßgenauigkeit 
beschäftigen.

Unterscheide Auflösung und Genauigkeit. Will man nur x Stufen 
unterscheiden können (Auflösung)oder soll Stufe x auch einem bestimmten 
Wert entsprechen.

Sollst Du das bauen oder ist das eine Hobbyschaltung für Dich selbst? 
Wenn Du es bauen sollst, würde ich die Fragen mal weiterreichen damit 
man eine Anforderungsspezifikation bekommt. Sonst wird das ein 
Lamborghini Diablo wobei ein VW Polo bestellt wurde.

Wolfgang schrieb:
> Dafür sollte 1 Bit reichen

Den Gedanken hatten wir schon. Der Unterdruck soll aber auch angezeigt 
werden.

von Andreas H. (raucher91)


Lesenswert?

Carsten R. schrieb:
> Unterscheide Auflösung und Genauigkeit. Will man nur x Stufen
> unterscheiden können (Auflösung)oder soll Stufe x auch einem bestimmten
> Wert entsprechen.
>
> Sollst Du das bauen oder ist das eine Hobbyschaltung für Dich selbst?
> Wenn Du es bauen sollst, würde ich die Fragen mal weiterreichen damit
> man eine Anforderungsspezifikation bekommt. Sonst wird das ein
> Lamborghini Diablo wobei ein VW Polo bestellt wurde.

Also Stufe x sollte auch einen Wert entsechen und das ganz sollte eine 
genauigkeit von 0,05 bar haben.

Das Projekt hat sich mein Arbeitskollege und Ich ausgedacht da wir immer 
wieder Probleme mit dem Vakkum haben und dann eben mal 30 min suchen bis 
wir das Problem gefunden haben.

Also Ich habe mich dazu entschlossen den Sensor von Reichelt den 
MPX-5050 zu nehmen. Nun noch eine Frage wäre es dann Möglich diesen an 
einen Attiny anzuschließen ( über ADC-Wandler ) und diese 6 Attinys über 
I2C an den Atmega anzuschließen und dort die Werte zu erhalten und dann 
die AAuswertung zu übernehmen ?

von Carsten R. (kaffeetante)


Lesenswert?

Andreas Hermann schrieb:
> Also Stufe x sollte auch einen Wert entsechen und das ganz sollte eine
> genauigkeit von 0,05 bar haben.

Ich fasse das so auf. Wenn Du 4 Bit Auflösung hättest, entspricht 16 
Stufen, und Du hast einen Wert der umgerechnet 0,27 entspräche und die 
Realität weicht um weniger als 0,05 Bar ab, dann wäre das ok?

Ich unterstelle mal. Es reicht dir wenn dir dein maximales Vakuum als 
0,5 Bar "angezeigt". Es müssen keine geeichten echten 0,5 Bar sein. 
Werte sollen nur untereinander zwecks Fehlersuche vergleichbar und 
einigermaßen genau sein. Kommt das hin?

Ansonsten müßtest du in der Billigvariante irgenwann einmal ein 
bekanntes Vergleichsvakuum einmessen oder mit einen geeichten Gerät eine 
Vergleichsmessung machen.

Sind die Sensoren denn nun schon gekauft oder nicht. Ich komme da nicht 
mit, weil du nun doch die anderen nehmen willst. Wenn Du sie doch noch 
nicht bestellt hast und noch umsatteln kannst würde ich dir auch 
empfehlen dich nach Lorens Vorschlag zu richten. Der Aufpreis der 
höhrwertigen Komponenten ist gering. Wenn die Sensoren schon da sind 
geht das bei deinen Anforderungen auch mit denen. Du mußt nur den Offset 
Abgleichen. Im Leerlauf messen und das ist dann deine Null.

Zu deiner letzten Frage. Vergiß I²C. Der ist dafür nicht gedacht. Das 
ist eher ein Chip-to-Chip-Bus geräteintern. Der ist nicht dafür gedacht 
zig Meter zu überbrücken. Dafür gibt es andere Systeme. Da Du vermutlich 
nicht mehrfach pro Sekunde messen mußt ist die Datenrate gering. Damit 
wäre das Beispielsweise mit der seriellen Schnittstelle zu lösen. Ich 
meine damit eine bestimmte serielle Schnittstelle, RS232 genannt. Bei 
mäßiger Datenrate schafft die das.
http://www.mikrocontroller.net/articles/RS-232

Auch wenn der Tiny etwas günstiger ist würde ich an deiner Stelle einen 
kleinen Atmega nehmen. Suche Dir ein Modell daß schon den Verstärker 
drinnen hat. Der Faktor wird zwar nicht optimal sein, aber ausreichend. 
Warum ich den Atmega empfehle?

Die Mehrkosten sind in diesem Falle überschaubar. Dafür haben die den 
vollständigen USART für RS232 drin. Es fehlt nur der Leitungstreiber 
(z.B. MAX232A). Der USART unterstützt es auch in Hardware die Leitung 
wie einen Bus mit mehreren Teilnehmern zu nutzen. Das geht zwar auch mit 
einer Softwareversion oder mit einer Mischung aus Software, unterstützt 
von der Sparversion der seriellen Schnittstelle im Tiny, aber dann muß 
man etwas mehr programmieren. Das ist natürlich machbar, aber ich 
vermute, daß du da keine umfassende Routine hast. Als ich damit anfing 
war ich froh, daß ich im Atmega die volle Hardware hatte. Zeitersparnis 
versus höherer Preis bei einem halben Dutzend Mikrocontrollern.

: Bearbeitet durch User
von Andreas H. (raucher91)


Lesenswert?

Carsten R. schrieb:
> Sind die Sensoren denn nun schon gekauft oder nicht. Ich komme da nicht
> mit, weil du nun doch die anderen nehmen willst. Wenn Du sie doch noch
> nicht bestellt hast und noch umsatteln kannst würde ich dir auch
> empfehlen dich nach Lorens Vorschlag zu richten

Ja es ist der MPX-53 da und eben der MPX-5050 da wir eben erst einmal 
Testen wollten welcher dieser Sensoren besser geeignet ist.

Unsere Entscheidung liegt auf grund der Hier gewonnenen Erkentnisse nun 
bei dem MPX-5050.

Ok Das mit I²C hatte ich nicht gewusst dass dieser nicht für Große wege 
Geeignet ist.

Nun zu RS232 -->  1. kann ich dann einfach sag Ich mal 6  Sensoren auf 
eine Leitung hängen und dann Meinetwegen dazwischen noch Relaiskarten ?
                 2. brauche ich dann nur 1 Atmega8 als Master und dann 
lauter kleinere Atmega's als Slave zum Auswerten der Sensoren und 
Schalten der Relais ?
                 3. Muss Ich dazu einfach nur die RxD und TxD leitung 
sowie Masse und VCC durschleifen ? Dieser MAX232A dient ja dazu den 
Pegel zu wandeln zur Kommunikation mit dem PC versteh Ich das nun 
richtig ?

Ich Werde mal schauen ob ich auf die Schnelle einen Schaltplan hinbekomm 
um zu Veranschaulichen wie Ich es nun machen würde.

von Wolfgang (Gast)


Lesenswert?

Carsten R. schrieb:
> Vergiß I²C. Der ist dafür nicht gedacht. Das ist eher ein
> Chip-to-Chip-Bus geräteintern. Der ist nicht dafür gedacht
> zig Meter zu überbrücken.

Der "Erfinder" des I²C ist da inzwischen weiter und spricht von 100 
Metern, wenn man sich ein bisschen Mühe gibt. Dazu gibt es die APP-Note 
AN10658.
http://www.nxp.com/documents/application_note/AN10658.pdf

RS232 bekommt bei der Länge genauso Probleme. Für lange Strecken wäre 
wohl sonst entweder eine klassische Stromschleife oder etwas moderneres, 
wie z.B. CAN, angesagt.

von Carsten R. (kaffeetante)


Lesenswert?

Andreas Hermann schrieb:
> 1. kann ich dann einfach sag Ich mal 6  Sensoren auf
> eine Leitung hängen und dann Meinetwegen dazwischen noch Relaiskarten ?

Zur ersen Hälfte: Ja
Zur zweiten Hälfte ist unklar was die Relaiskarte da soll und wie sie 
"dazwischen" soll. Was ich mir vorstellen kann: Sie kann mit an der 
Versorgung hängen und wird vom Sensorcontroller gesteuert bzw hat ihren 
eigenen Controller und hängt damit wie die Sensoren mit auf dem Bus.

Andreas Hermann schrieb:
> brauche ich dann nur 1 Atmega8 als Master und dann
> lauter kleinere Atmega's als Slave zum Auswerten der Sensoren und
> Schalten der Relais ?

Kannst Du so machen. Wer wann Master ist, ist Sache der Software. Die 
Rollenverteilung ist nicht in Hardware gegossen. Von der Programmlogik 
wäre dies aber vermutlich eine übersichtliche Rollenverteilung. Es hängt 
auch ein wenig von der Aufgabenverteilung bezüglich der Relaiskarten ab.

Andreas Hermann schrieb:
> 3. Muss Ich dazu einfach nur die RxD und TxD leitung
> sowie Masse und VCC durschleifen ? Dieser MAX232A dient ja dazu den
> Pegel zu wandeln zur Kommunikation mit dem PC versteh Ich das nun
> richtig ?

Ja, das kann man so machen. Ich würde es aber eher bezeichnen als: 
Jeweils eine Hauptleitung legen un diese dann von den Teilnehmern per 
"Stichleitung" anzapfen. Das entspricht eher der Natur des Busses von 
der Logik. Es gäbe auch noch Alternativen.

Und ja, das kann er auch, wenn Du so eine Schnittstelle noch hast. Ich 
finde sie auch heute noch immer praktisch. Es gibt auch Atmels mit zwei 
USART. So einen kannst du auch als Master nehmen. Dann muß der PC nicht 
mit auf den Bus.

Allerdings habe ich noch nie 10 Teilnehmer auf 35 Metern gehabt. In der 
Größenordnung fehlen mir die Erfahrungswerte. Zur Not muß irgendwann ein 
Controller als Repeater zwei getrennte Bussegmente verbinden, sollte die 
hohe Teilnehmerzahl bei der Länge und der dann gewählten Datenrate 
elektrisch an die Grenzen kommen. Aber auch das wäre keine 
Raketentechnik, sondern das gleiche Prinzip wie beim Master der 
einerseits den Bus hat und andererseits den PC. Ich würde, wenn die 
ersten Module ferig sind, das Netz nach und nach aufbauen und testen. 
Zuerst testen ob das geGerät prinzipiel funktioniert. Danach die 
Teilnehmeranzahl rhöhen. Ansonsten hat an im Fehlerfall zu viele 
Eventualitäten zugleich.

von Andreas H. (raucher91)


Angehängte Dateien:

Lesenswert?

So nun habe Ich mal alles getestet und Die Drucksensoren erfüllen genau 
meine wünsche. Nur stehe Ich nun von einem Neuen Problem und zwar mit 
der Kommunikation zwischen den Atmega's. Zwischen atmega und PC 
funktioniert alles super und genauso wie es soll.

Im Bild sieht man wie die Atmega's versucht habe zu verbinden aber 
leider ohne Erfolg.

Woran könnte es denn liegen ?

von Carsten R. (kaffeetante)


Lesenswert?

Ich kann das nicht entziffern zu klein. Ich unterstelle mal daß Du die 
richtigen PINs genommen hast.

-Dann kann es am (unbekannten) Code liegen.
-Oder wenn Du schon mit lagen Leitungen testest: Jeder µC braucht seinen 
eigenen Max232 als Leitungstreiber.

Nachtrag:

Ach ja, es könne helfen wenn Du bschreibst was nicht funktioniert. Du 
schreibst von einem Problem zwischen den ATMegas. Aber anstatt dieses zu 
beschreiben schrebst Du dann, daß etwas anderes funktioniert.

: Bearbeitet durch User
von Andreas H. (raucher91)


Lesenswert?

Hey also ich Teste es aktuell mit kurzen Leitungen. Es funktioniert die 
Kommunikation zwischen den Atmegas nicht. Wenn ich aber jeden Atmega 
einzeln Teste mit Terminal Programm dann funktioniert es genauso wie es 
soll.

Also brauch ich vor jedem Controller nen MAX232 ? Ich habe nur einen vor 
dem ersten und dann bin Ich vom Master RxD an Slave TxD und umgekehrt. 
Leider haut des dann nicht mehr hin.

von spess53 (Gast)


Lesenswert?

Hi

>Also brauch ich vor jedem Controller nen MAX232 ? Ich habe nur einen vor
>dem ersten und dann bin Ich vom Master RxD an Slave TxD und umgekehrt.
>Leider haut des dann nicht mehr hin.

Dir ist bewusst, das die TX-Pins der ATMega8(?), alles Ausgänge sind, 
die du einfach parallel geschaltet hast. Mit einem Max232 ist es auch 
nicht besser.

MfG Spess

von Andreas H. (raucher91)


Angehängte Dateien:

Lesenswert?

Also hier hab ich mal den Programmcode vom Master und vom Slave ( dieser 
funktioniert auch in verbindung mit dem Terminalprogramm] jedoch 
funktionieren Sie nicht untereinander also Sprich nicht von Mega zu 
Mega.

könnte es am Programm liegen oder am Anschluss?

von Mike (Gast)


Lesenswert?

Andreas Hermann schrieb:
> könnte es am Programm liegen oder am Anschluss?

Ja.

Zeig mal einen kompletten, lesbaren Schaltplan.

von Carsten R. (kaffeetante)


Lesenswert?

Da gibt es nun mehrere Möglicheiten.

Tx und Rx sind ja Sende- und Empfangsleitung. Je nachdem wie du das fest 
verdrahtest wird also festgelegt wer mit wem reden kann. Für die Chips, 
die miteinander "reden" sollen, gilt jeweils:

Tx des Senders muß mit Rx des Empfängrs verbunden werden und umgekehrt. 
Die Kommunikation benötigt immer ein solches Crossover/Kreuz. Ohne eine 
Art Hub, welcher die "Kreuze" nach Bedarf passend setzt, ist also keine 
beliebige Punkt zu Punkt Kommunikation möglich.

Wie gesagt, die Schrift im Bild ist kaum zu entziffern. Ich rate da mal 
halb nach der Leitungsführung.

Andreas Hermann schrieb:
> Es funktioniert die
> Kommunikation zwischen den Atmegas nicht. Wenn ich aber jeden Atmega
> einzeln Teste mit Terminal Programm dann funktioniert es genauso wie es
> soll.

Das paßt zu Schaltungsaufbau 1.

Das Kreuz sitzt im der Verbindug zwischen PC und MAX232. Sendepin des PC 
ist mit allen Empfangspins der ATMegas verbunden und alle Sendepins 
gehen auf den Empfangspin des PC. Sie "hören" deinen PC und können ihm 
Antworten. Das ist allerdings das einzige "Kreuz" Die gesammte 
Kommunikation muß da durch. Die Controller könnten also nur über den 
Umweg über den PC miteinander sprechen, wenn dieser den Hub spielt, 
Daten empfängt und weiterleitet. Diese Aufgabe wäre eigentlich dem 
Master-Controller zugedacht.

In Schaltung 2 sitzt ein zweites Kreuz zwischen Master und den Slaves. 
Er kann mit den Slaves sprechen, diese aber nicht untereinander, es sei 
denn der Master spielt wieder Hub und vermittelt. Diese Komunikation 
untereinander ist aber durch die Aufgabe kaum erforderlich.

Da dieses zweite Kreuz auf dem Weg von PC zu Slave zum ersten Kreuz 
zwischen PC und MAX232 hinzukommt, heben sich hier die Kreuze wieder 
auf. Sender sind mit Sender und Empfänger sind mit Empfänger parallel 
verbunden. Man kann die Slaves nicht vom PC direkt erreichen, aber der 
Master kann es.

Darum wiederhole ich meine Empfehlung für die Wahl des 
Mastercontrollers:

Carsten R. schrieb:
> Es gibt auch Atmels mit zwei
> USART. So einen kannst du auch als Master nehmen. Dann muß der PC nicht
> mit auf den Bus.

Dazu nimmtman noch beschaltungsvariante 2. Dann läuft da nicht so leicht 
was durcheinander wenn die Sensoren und der PC gleichzeitig mit dem 
Master sprechen wollen. Und der PC muß auch nicht alles was auf dem Bus 
geschieht erfahren. Er bekommt die Daten gesammelt und vorverdaut in 
einem Päckchen vom Master.

Man kann das auch mit einem Master mit nur einem USART frickeln wenn man 
will. Aber hier bleibt es bei dem selben Argument wie beim vollwertigen 
USART vs abgespecktes serielles Interface bzw Softwareemulation.

Für das im Vergleich zum passenden Chip gesparte Geld bekommt man nur 
ein sehr billiges Bier um den Frust herunterzuspülen weil es unnötig 
lang gedauert hat. ;-)

: Bearbeitet durch User
von loren (Gast)


Lesenswert?

Wie gesagt, mit einem einfachen 4-20mA-Ausgang gäbe es diese Probleme 
nicht, du hättest eine universelle Schnittstelle (z.B. für SPS) und es 
wäre vermutlich billiger.

Wozu sollen die einzelnen Controller gut sein sollen. Kupfer sparen? 
Wegen der Relais - wo sollen die überhaupt sitzen - einen eigenen Bus 
erfinden?

Aus eigener Erfahrung (z.B. Verbindung industrielle 
Schaltwarte<->Analysengeräte über ca. 25m, max. 9600 Bd erreichbar, 
Probeme mit Potentialausgleich) halte ich RS232 für ungeeignet.

Wenn du schon eine solche Topologie haben willst, solltest du zumindest 
RS422/RS485 als Hardware einsetzen (ST485, MAX485...). Für deine Zwecke 
(Geschwindigkeit) sollte ein Half-Duplex-Betrieb ausreichen. Für die 
Implementierung des dafür unbedingt notwendigen Protokolls kannst du 
dann bei den diversen Hausbussen oder eben Profibus, CAN etc. abkupfern.

PC <-RS232-> Master <-RS422-> + <-RS422-> + <-RS422->
                              Sensor1     Sensor2

Selbst zum Testen der Kommmunikation ist deine Konfiguration, bei der 
die Pins direkt zusammengeschaltet werden, denkbar ungeeignet, da der 
wesentliche Pin (Enable Sender) nicht abgebildet wird. Kann man 
natürlich diskret oder mit einzelnen Gattern/Transceivern nachbauen, ist 
aber nicht sehr sinnvoll.
Auch ein MAX232 kann das nicht - es gibt keine Möglichkeit die 
TX-Ausgänge abzuschalten und damit direkt zusammenzuschalten. Man kann 
maximal die beiden Ports kombinieren, so dass eine (transparente) Brücke 
entsteht - mit allen Nachteilen (z.B. Ausfall einer Komponente legt den 
gesamten Bus lahm).
1
Rx1 -- R1in(13) - R1out(12) - Brücke - T2in(11) - T2out(7) -- Tx2
2
Tx1 -- T1out(14) - T1in(11) - µC/Gatter - R2out(9) - R2in(8) -- Rx2
3
4
Tx(PC) - Rx1(C1) Tx2(C1) - Rx1(C2) Tx2(C2) - Rx1(Cn) Tx2(Cn)
5
Rx(PC) - Tx1(C1) Rx2(C1) - Tx1(C2) Rx2(C2) - Tx1(Cn) Rx2(Cn)
Der jeweilige Client entscheidet dann, ob die Daten weitergeleitet 
werden, oder ob er selber antwortet (und alle Dahinterliegenden 
ablemmt).


Mit RS422/85 läuft das im Prinzip immer nach dem selben Schema des 
Schnittstellenstatus:

          Master    Client
Command   Send      Receive
Data      R         S

Wobei innerhalb der Command-Sequenz eine Adresse zum eindeutigen 
Ansprechen des Clients übertragen wird. Nur der Angesprochene darf 
antworten, alle anderen halten die Klappe.
Dazu kommen noch Routinen zu Überwachung (z.B. Timeout wenn niemand 
antwortet, Handshakeprotokoll,...) und Datenintegrität (z.B. CRC für 
Command und Data). Das kann dann beliebig komplex werden.
Irgendwie habe ich den Eindruck, dass den Aufwand für eine solche 
Schnittstelle unterschätzt.

ps. Bei dieser Gelegenheit würde ich mir auch Gedanken zu Stomversorgung 
(zentral mit 5V ist keine gute Idee) und EMV machen.

von Carsten R. (kaffeetante)


Lesenswert?

loren schrieb:
> da der
> wesentliche Pin (Enable Sender) nicht abgebildet wird.

Stimmt, mein Fehler, das hatte ich übersehen.

Ich benutze den USART wie ein Bus entweder direkt im Nahbreich, da kann 
man den TX-Pin am Controller auf High-Z (high impedance) passiv 
schalten, oder den 232 für weitere Strecken für eine Punkt zu Punkt 
Verbindung. Hier wäre in der Tat RS485 sinnvoller.

Zum Rest:

Es ist ja nicht neu erfunden. BAUD-Rate und Reichweite passen auch, so 
schnell muß es ja nicht sein. Das TX-Problem ist aber ein echtes Dilemma 
und Ausschlußkriterium.

loren schrieb:
> Wobei innerhalb der Command-Sequenz eine Adresse zum eindeutigen
> Ansprechen des Clients übertragen wird. Nur der Angesprochene darf
> antworten, alle anderen halten die Klappe.

Das erweckt ein bisschen den Eindruck, das dies RS485 spezifisch wäre. 
Diese Verwaltung kann der USART von Haus aus und kommt dann hier zum 
Zug. Es kann aber mit jeder anderen Technik kombiniert werden.

Bei der Stromschnittstelle sehe ich allerdings auch ein Problem. Wie 
bekommt man das auf eine Leitung (Mutiplex) bzw. wie vergrößert man so 
ein System ohne Multiplexing mit wenig Aufwand ohne jedes mal von ganz 
hinten eine neue Leitung zu holen.

Was auch immer das Motiv war welches ursprünglich zu der Anforderung 
führte, daß alles auf eine Leitung sollte...

von loren (Gast)


Lesenswert?

Carsten R. schrieb:
> loren schrieb:
>> Wobei innerhalb der Command-Sequenz eine Adresse zum eindeutigen
>> Ansprechen des Clients übertragen wird. Nur der Angesprochene darf
>> antworten, alle anderen halten die Klappe.
>
> Das erweckt ein bisschen den Eindruck, das dies RS485 spezifisch wäre.
> Diese Verwaltung kann der USART von Haus aus und kommt dann hier zum
> Zug. Es kann aber mit jeder anderen Technik kombiniert werden.

Sobald mehrere Teilnehmer an einer Leitung hängen muß eine Logik 
vorhanden sein, welche festlegt wer nun gerade Senden darf. Das gilt 
unabhängig von der Hard-/Software-spezifischen Implementierung des 
gemeinen UART - auf welche Version beziehst du dich denn?
Und, nach welchem Kriterium erfolgt dabei dein "schalte TX-Pin am 
Controller auf High-Z"?

von Carsten R. (kaffeetante)


Lesenswert?

Ich beziehe mich auf den USART den man in ATMegas findet. Die kennen ein 
Adressframe. Das nennt sich dort Multi-processor Communication mode 
(MPCM). Paßt die Adresse im Header so kann man in der Interruproutine 
eine Antwort auslösen. Dabei schaltet der Slave sein TX online und 
danach wieder aus. Die Anderen "halten die Klappe" und ihren Tx-Pin auf 
High-Z. Das setzt allerdings einen Master voraus, den wir hier aber auch 
haben.

Leider hilft uns das hier ja nicht weiter, weil der Sender zu schwach 
für einen so "weiten Bus" ist. Daher wird ein Leitungstreiber benötigt 
den man idealerweise auch auf high-z schalten kann wenn er nicht senden 
muß. Mehr muß der nicht können. Dank Dir sind wir mit einem Max485 
versorgt.

Nun ist nur noch die Frage wie die "Tickets" zu verteilen sind. Werden 
nur Daten (zyklisch und planbar) abgerufen wie hier, so ist das 
eigentlich egal wie der Master das macht. Interessant wird es wenn die 
Clients nicht nur als passive Slaves laufen, sondern sich auch mal 
ungeplant zu Wort melden müssen/sollen.

Das wäre aber ein eigenes Thema was hier nicht benötigt wird. Die 
einfachen Methoden sind nicht universell. Sie haben ihre Vor- und 
Nachteile. Sie aufzulisten würde den Rahmen sprengen. Ein weiteres 
Anwendungsbespiel wäre von Nöten um eine passende Vorauswahl zu treffen. 
Exemplarisch seien hier aber genannt:

-Eine Selectleitung pro Client, woraufhin der Arbiter wie auch immer die 
Erlaubnis erteilt. Hier nicht anwendbar, da wir nicht zig Leitungen 
zusätzlich legen wollen.
-Zeitmultiplexverfahren, verschiedenste Auführungen, z.B. jedem Client 
wird ein Zeitschlitz zutegteilt in dem er eine Transmission beginnen 
darf.

von loren (Gast)


Lesenswert?

Carsten R. schrieb:
> Ich beziehe mich auf den USART den man in ATMegas findet. Die kennen ein
> Adressframe. Das nennt sich dort Multi-processor Communication mode
> (MPCM).

Also doch mit Adressierung ;). Das die Adresse, wie in diesem Fall, als 
eigenes Byte übertragen und automagisch ausgewertet wird, ist da eher 
sekundär.

> Dank Dir sind wir mit einem Max485 versorgt.

Fehlt also nur noch die entsprechende Initialisierung  und eine passende 
Interupt-Routine - in Bascom, wenn ich den Quelltext richtig 
interpretiere.
Auch wenn ich mit diversen Basic-Derivaten aufgewachsen bin, dazu kann 
ich beim besten Willen nix beitragen.

von Carsten R. (kaffeetante)


Lesenswert?

loren schrieb:
> Also doch mit Adressierung ;)

Ja klar, was denn sonst. Ohne Adresse kann man niemanden anschreiben. 
;-)

Ich meinte bei dem ursprünglichen Zitat auch nur, daß das nichts 
485-spezifisches ist und das schon über den USART ud seine Software 
geregelt wird. Der MAX485 macht ja nur die elektrische Umsetzung des 
Signals auf die Leitung, so wie es auch der MAX232 tut, nur kann 
letzterer sich dummerweise nicht passiv verhalten beim Däumchen drehen.

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
Noch kein Account? Hier anmelden.