Go Down

Topic: "8-Bit" Eingang, Texte definieren und speichern (Read 13084 times) previous topic - next topic

Jannomag

Ich habe gelernt, jede LED braucht ihren eigenen Widerstand.
Ich habe mal bei Conrad, weil von Dir erwähnt, nach Optokopplern gesucht und vier in einem IC gefunden. Was Du auswählst, ist eine Frage der passenden Spezifikation und des Preises.

Ein Widerstand reicht, muss nur richtig dimensioniert sein (in dem Fall 56 Ohm).


Bei Conrad habe ich z.B. den ILQ615 gefunden.
Soweit ich das verstanden hab, ist die Eingangsspannung bei 1,5V mit einem max. Strom von 60mA.
Das heißt, ich benötige pro Eingang noch einen 375Ω Vorwiderstand ( (24V - 1,5V) / 0,06A ).
Ist also nur minimal weniger Arbeit, man kann die ICs lediglich bei einem Defekt leichter tauschen und die Haltbarkeit ist vielleicht etwas höher.

Sonst irgendwelche überwiegenden Vorteile eines Optokopplers für diesen Einsatz?

Die 5V würde ich weiterhin mit dem LM7805 erzeugen, welcher bis 1,5A kann.

Theseus

#16
Nov 25, 2017, 10:21 am Last Edit: Nov 25, 2017, 10:24 am by Theseus
Quote
Ich habe gelernt, jede LED braucht ihren eigenen Widerstand.
Ein Widerstand reicht, muss nur richtig dimensioniert sein (in dem Fall 56 Ohm).
Jede Led braucht ihren eigenen Vorwiderstand. Ein gemeinsamer ginge höchstens, wenn alle Leds gleich geschaltet werden, was am Sinn der Schaltung vorbeiginge. Außerdem wäre das auch elektrisch ungünstig, da die Leds leicht unterschiedliche Schwellspannungen haben können, so dass durch die Led mit der geringsten wesentlich mehr Strom als vorgesehen fließt. Alternativ kann man den Widerstand für eine Led dimensionieren. Dann können zwar alle Acht unterschiedlich angesteuert werden, aber die Leuchtkraft variiert nach Zahl der gleichzeitig leuchtenden Leds. Bei 8 leuchtenden Leds wird es funzelig. 


ElEspanol

#17
Nov 25, 2017, 10:34 am Last Edit: Nov 25, 2017, 10:35 am by ElEspanol
So wie ich es verstanden habe, leuchtet doch max. eine der acht, zusammen mit der Powerled. Somit sollte auch ein Vorwiderstand reichen

agmue

#18
Nov 25, 2017, 10:41 am Last Edit: Nov 25, 2017, 10:42 am by agmue
Sonst irgendwelche überwiegenden Vorteile eines Optokopplers für diesen Einsatz?
Galvanische Trennung: Auf meinem Schreibtisch kaum notwendig, im industriellen Umfeld gebräuchlich. Die Hutschienen-Arduino-Nachbauten haben auch Optokoppler drin. Da ich Deine Anwendung nicht genau genug kenne, kann ich nicht beurteilen, was da notwendig ist und was nicht. Auch kann ich nicht einschätzen, wie genau Du das beurteilen kannst, da Du offensichtlich etwas tust, was nicht zu Deinen beruflichen Aufgaben gehört. Willst Du das wirklich? Diese Frage solltest Du bitte nochmal in Ruhe überdenken. Ich würde jeder LED einen Widerstand spendieren und Optokoppler verwenden.

Und Du machst, was Du für richtig erachtest und verantwortest das :)

So wie ich es verstanden habe, leuchtet doch max. eine der acht, zusammen mit der Powerled. Somit sollte auch ein Vorwiderstand reichen
Es gibt 46 verschiedene relevante Texte, theoretisch aber 255. In #6 ist das erklärt.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Theseus

So wie ich es verstanden habe, leuchtet doch max. eine der acht, zusammen mit der Powerled. Somit sollte auch ein Vorwiderstand reichen
Ich habe verstanden, dass ein Binär-Code übertragen wird. Also leuchten verschiedene Anzahlen.

ElEspanol

#20
Nov 25, 2017, 10:48 am Last Edit: Nov 25, 2017, 10:52 am by ElEspanol
Ich habe verstanden, dass ein Binär-Code übertragen wird. Also leuchten verschiedene Anzahlen.
Hast recht, Denkfehler. Liegt wohl an der frühen Morgenstunde. ;)

Theseus

#21
Nov 25, 2017, 10:54 am Last Edit: Nov 25, 2017, 10:57 am by Theseus
Ich habe verstanden, dass Fehlermeldungen protokolliert werden sollen. Somit ging ich davon aus, dass immer nur ein Fehler gleichzeitig übermittelt wird.

Hier besteht dann offensichtlich etwas Klärungsbedarf vom TO
Es steht doch am Anfang, dass es 46 verschiedene Fehlermeldungen gibt. Die jeweilige Fehlermeldung wird mit einem 8bit-Code binär codiert. So wie du es verstehst, könnte man aber nur 8Meldungen übertragen, dafür aber mehrere gleichzeitig. Steht alles im ersten Beitrag sogar mit Beispielen.


Soweit ich das verstanden hab, ist die Eingangsspannung bei 1,5V mit einem max. Strom von 60mA.
Das heißt, ich benötige pro Eingang noch einen 375Ω Vorwiderstand ( (24V - 1,5V) / 0,06A ).
Beim Optokoppler würde ich nicht den maximalen Strom nehmen. Meist reichen wenige mA Strom durch die Koppler-Led um ein sicher erkennbares Ausgangssignal zu erzeugen. Ich würde die Vorwiderstände auf 10-20mA Strom dimensionieren. Da ist mehr Sicherheit drin und die Lebensdauer der Optokoppler könnte höher sein.

Jannomag

Zum LED Vorwiderstand: Ich habe den Widerstand deswegen für alle LEDs gemeinsam dimensioniert, da die Platine so klein wie möglich werden sollte. Da ich aber nicht ätzen kann, muss ich Lochraster nehmen. Optimal ist diese Lösung nicht, da dann die LEDs unterschiedlich hell leuchten, aber das ist egal. Die sollen nur die Rückmeldung geben, welcher Bit gerade aktiv ist, bzw. dass die Transistoren alle i.O. sind. Dass alle LEDs an sind, kommt, soweit ich das an der SPS erkennen konnte, gar nicht vor.


Galvanische Trennung: Auf meinem Schreibtisch kaum notwendig, im industriellen Umfeld gebräuchlich. Die Hutschienen-Arduino-Nachbauten haben auch Optokoppler drin. Da ich Deine Anwendung nicht genau genug kenne, kann ich nicht beurteilen, was da notwendig ist und was nicht. Auch kann ich nicht einschätzen, wie genau Du das beurteilen kannst, da Du offensichtlich etwas tust, was nicht zu Deinen beruflichen Aufgaben gehört. Willst Du das wirklich? Diese Frage solltest Du bitte nochmal in Ruhe überdenken. Ich würde jeder LED einen Widerstand spendieren und Optokoppler verwenden.

Und Du machst, was Du für richtig erachtest und verantwortest das :)

Ich mache es als "Netten-Kollegen-Dienst", weil ich ersten Bock drauf habe und zweitens der einzige in der gesamten Firma (ca. 2000 MA) bin, der sich zumindest etwas mit der Anlage (elektrisch) auskennt. Ich habe dort vor 6 Jahren meine praktische Prüfung gemacht und musste dafür die Anlage und das SPS Programm studieren. Klar, das meiste ist weg, weil ich nicht mehr damit arbeiten konnte / musste, jedoch weiß ich zumindest grob, wie die Anlage aufgebaut ist und funktioniert.
Ich habe das SPS Programm damals ausgelesen und ausgedruckt. Die Unterladen wurden durch nen Wasserschaden teilweise zerstört und in den vorhandenen fehlen, auslesebedingt, die Bezeichnung der einzelnen Programmbausteine.
Daher kann ich auch nicht genau sagen, welches Bit für welche Meldung ist - es gibt darüber keine Unterlagen und auslesen kann ich es momentan auch nicht.

Der Hutschienenarduino wäre perfekt, da das jetzige Gerät ebenfalls auf einer Hutschiene sitzt und somit Platz dafür wäre.
Jedoch kann ich halt erst kaufen, wenn das Programm läuft.

Nächste Woche habe ich wohl wieder etwas Zeit für den Arduino-Kram. Vielleicht auch schon morgen. Dann werde ich mal dein Programm, agmue, aufspielen und versuchen die SD Karte einzubinden. Als Bit-Eingänge nehme ich erstmal 5V - mit Breadboard und Labornetzteil gehts ja.


Ich habe verstanden, dass ein Binär-Code übertragen wird. Also leuchten verschiedene Anzahlen.
Ich habe 8 Bits:
0 0 0 0 0 0 0 0

Beispiele:
Meldung 1: 1 0 0 0 1 0 0 0
Meldung 2: 0 1 1 1 0 0 0 0
Meldung 3: 1 0 1 1 0 1 0 1
Meldung 4: 0 0 0 0 1 1 0 0
usw....

Daher können auch mehrere Bit-Kanäle gleichzeitig "EIN" sein. Die SPS gibt immer nur eine Meldung zur Zeit aus, wechselt hin und her, wenn mehrere Meldungen gleichzeitig anstehen.
Aktuell werden diese Mehrfachmeldungen weggefiltert, ist aber nur weil es Papier sparen soll.
Wenn es digital gespeichert wird, sollen ruhig alle Meldungen erscheinen, die ausgegeben werden. Ist einfacher zu programmieren und die Leute, die sich diese Meldungen angucken, sollen auch was zu tun haben :D
 

Theseus

#23
Nov 25, 2017, 12:35 pm Last Edit: Nov 25, 2017, 12:43 pm by Theseus
Zum LED Vorwiderstand: Ich habe den Widerstand deswegen für alle LEDs gemeinsam dimensioniert, da die Platine so klein wie möglich werden sollte. Da ich aber nicht ätzen kann, muss ich Lochraster nehmen. Optimal ist diese Lösung nicht, da dann die LEDs unterschiedlich hell leuchten, aber das ist egal. Die sollen nur die Rückmeldung geben, welcher Bit gerade aktiv ist, bzw. dass die Transistoren alle i.O. sind. Dass alle LEDs an sind, kommt, soweit ich das an der SPS erkennen konnte, gar nicht vor.
Dann ist der Vorwiderstand zu klein. Siganlled: ca. 2V Schwellspannung. Spannungsregler 5V. Am Widerstand müssen 3V abfallen. 3V/56Ohm=53,6mA. Leuchtet die Betriebs-Led D10 allein, dann ist sie in kürzester Zeit defekt. Bei den anderen Leds dürften die 2V, die sich wegen der Betriebs-Led einstellen, nicht für Led plus Transistor reichen. Außerdem dürften der Eingänge des Arduinos gegenüber Masse auf zu hohem Potential liegen, so dass er immer High erkennt.

Bevor du die Schaltung so zusammen lötest, probiere sie unbedingt auf einem Breadboard aus. Je länger ich darüber nachdenke, um so mehr zweifle ich, dass sie funktioniert.

Jannomag

Dann ist der Vorwiderstand zu klein. Siganlled: ca. 2V Schwellspannung. Spannungsregler 5V. Am Widerstand müssen 3V abfallen. 3V/56Ohm=53,6mA. Leuchtet die Betriebs-Led D10 allein, dann ist sie in kürzester Zeit defekt. Bei den anderen Leds dürften die 2V, die sich wegen der Betriebs-Led einstellen, nicht für Led plus Transistor reichen. Außerdem dürften der Eingänge des Arduinos gegenüber Masse auf zu hohem Potential liegen, so dass er immer High erkennt.

Bevor du die Schaltung so zusammen lötest, probiere sie unbedingt auf einem Breadboard aus. Je länger ich darüber nachdenke, um so mehr zweifle ich, dass sie funktioniert.
Du hast vollkommen Recht...wie kann ich nur so doof sein :D

Hab mir die Schaltung eben nochmal genau angeguckt und gemerkt, dass ich beim Einbau des Widerstandes gedacht habe, dass jede LED gleichzeitig an ist - hab also die Gesamtlast berechnet.

Macht absolut keinen Sinn und ich Zweifel gerade an mir selbst ... Aber ich denke, ich mach das zu wenig, als dass ich das verinnerlicht habe. Schließlich hab ich das alles Mal richtig gelernt.
Traurig...aber egal jetzt.

Hab die Schaltung jetzt mit Vorwiderständen für jede LED gebaut und werde dafür SMD Widerstände nehmen und diese auf die Kupferseite der Lochrasterplatine löten. Spart Platz und ist auch nicht schwer.

agmue

Wie ist denn der Ablauf? Null - Code1 - Null - Code2 oder wie? So ein µC ist ja recht flink. Wenn die SPS auf einem Bit zuckt, könnte ein anderes möglicherweise noch nicht richtig erkannt werden. Wenn sich der Code auf ungleich Null ändert, sollte eine kleine Pause zwecks Stabilisierung der SPS-Ausgänge eingelegt werden, bevor der Code gelesen wird.

Nur so eine Idee :)
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Jannomag

#26
Nov 27, 2017, 09:17 pm Last Edit: Nov 27, 2017, 09:25 pm by Jannomag
Wie ist denn der Ablauf? Null - Code1 - Null - Code2 oder wie?
Die SPS gibt die Meldungen direkt ohne Pause aus. Das heißt sie wechselt die Bits direkt ohne Unterbrechung.
Wenn mehrere Meldungen anstehen, dann gibt sie diese abwechselnd alle, ich glaube, 5 Sekunden aus. Für die genaue Zeit muss ich nochmal die Unterlagen durchwühlen, in der Hoffnung, dass das noch vom Wasserschaden übrig geblieben ist.


Ich versuch die Anlage mal genauer zu beschreiben:
Es handelt sich um eine mehr oder weniger simple Schiebersteuerung für Abwasser.
Es gibt 5 Schieber, die von der SPS angesteuert werden auf einer Strecke von ca. 2km.
Es gibt mehrere Stellungen der Schieber. Bei einer wird das Wasser direkt in einen Fluss geleitet, bei einer in ein Becken und bei einer weiteren direkt ins städtische Abwasser.

Die Motorschutzschalter und Abgänge sind alle im Kasten der SPS, vor Ort sind nur die Motoren ohne Steuerung (haben wenig Leistung).

Zusätzlich gibt es ein Messgerät, was über eine Pumpe, mit Wasser versorgt wird, um dieses Wasser auf seine Bestandteile zu untersuchen. Liegt der Wert höher, als am Messgerät eingestellt, gibt dieses ein Signal an die SPS. Diese meldet dann "Alarm" und fährt gewisse Schieber so, dass das Wasser in die Kanalisation gelangt und nicht in den Fluss oder ins Becken.

Zu diesem Ablauf kommt noch eine Not-Aus-Kette hinzu, die über die gesamte Anlage in Reihe geht.

Für jede Schieberstellung gibt es Meldungen, genauso für Alarme, Störungen an den Motorschutzeinrichtungen und einige Sicherungen. Auch bei einem ausgelösten Not-Aus wird eine Meldung ausgegeben.

Welche Schieber jetzt für welchen Ablauf sind, weiß ich nicht aus dem Kopf und ist eigentlich auch irrelevant.


Ich hoffe, mit der Beschreibung ist es verständlicher.



Zum Programm:
Ich versuche nun seit Stunden mal ähnliche Beispiele zu finden, mit denen ich vielleicht arbeiten könnte. Aber entweder suche ich falsch oder es gibt keinen, der das ähnliches vor hatte wie ich.
Wie kann ich dem Arduino sagen, welcher Text bei welchem Bit ausgegeben werden soll?

agmue

Wie kann ich dem Arduino sagen, welcher Text bei welchem Bit ausgegeben werden soll?
Bits einlesen, jedem Bit einen Wert zuordnen, Werte addieren, Wert als Index verwenden für ein Textfeld, Text ausgeben. Den letzten Punkt findest Du in #2 und #7, wobei noch die Effizienz erhöht werden könnte.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

postmaster-ino

Hi

Wenn das Port als Ganzes eingelesen werden kann, bekommst Du Deine 8Bit direkt mit einem Mal Lesen, wenn Du die 8 Eingangssignale auf die 'Beinchen' legst, Die intern dieses eine Port darstellen.
Ob/Wie Das in C++ geht - bin ich der Falsche für (in Assembler geht Das)

Wenn der Platz vorhanden ist (und wenn ich mich recht entsinne: Post #7 ). kannst Du einfach ein Array mit 256 Einträgen anlegen, wo für jedes Bitmuster (bestehend aus 8 Bit ergibt eine Zahl 0...255) eine Meldung direkt greifbar ausgegeben wird.
Da der Platz eh belegt ist, sollten leere Meldungen zumindest die Nummer der Meldung enthalten - mach das Fehler finden einfacher, als wenn nur ein leeres Display die Meldung repräsentiert (Zahlendreher, oder die Bits nicht so angeschlossen, wie's angedacht war).

Klingt nach einem Regen-Überlauf-Becken - Deine Bastelei dient (nur) als Daten-Logger?

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

Jannomag

Mein Problem ist jetzt, dass ich weiß, was ich dem Arduino sagen soll / will, aber nicht WIE.
Dass ich jeder Meldung einen Zahlenwert zuweise und diesen dann über die Bits abfrage, ist mir klar. Jedoch nicht, wie ich das Programmiere.
Bin gerade dabei folgenden Sketch zu testen:
Code: [Select]

int ledPin[8] = {10,11,12,13,A0,A1,A2,A3};
int buttonPin[8] = {2,3,4,5,6,7,8,9};

byte switchState = 0b11111111;
byte lastByte;

void setup() 
{
 Serial.begin(9600);
 for (byte i = 0; i < 8; i++)
 {
   pinMode(buttonPin[i], INPUT_PULLUP);
   pinMode(ledPin[i], OUTPUT);
 }
}

void loop() 
{
 for (byte i = 0; i < 8; i++)
 {
   bitWrite(switchState, i, digitalRead(buttonPin[i]));
 }
 for (byte i = 0; i < 8; i++)
 {
   digitalWrite(ledPin[i], bitRead(switchState, i));
 }
 if (lastByte != switchState)
 {
   Serial.println(switchState, BIN);
 }
 lastByte = switchState;
}


Über den Serial Monitor kann ich die Bits auch sehen. Jedoch wird immer 11111111 angezeigt, sofern kein INPUT auf Masse gelegt wurde. So wirklich verstehen tue ich das nicht - eigentlich sollte es doch 0000000 anzeigen, wenn nix anliegt...


Klingt nach einem Regen-Überlauf-Becken - Deine Bastelei dient (nur) als Daten-Logger?

MfG
Das Regenwasser muss, bevor es abfließen kann, auf Schadstoffe untersucht werden. Wenn der Gehalt zu hoch ist, geht's richtung Klärwerk, ansonsten in den Fluss. Dient dem Naturschutz.

Die Bastelei dient ausschließlich als Daten-Logger, welcher später auf SD Karte schreiben soll. Die Daten werden dann von einem Menschen ausgewertet. Aktuell durch einen Drucker gelöst, der aber langsam den Geist aufgibt und es soll zusätzlich Papier gespart werden.

Go Up