Hallo, ich bin neu hier und mache eine Ausbildung zum Elektroniker für Geräte und Systeme. Ich bin am Ende des zweiten Lehrjahres und arbeite mit einem Arduino Mega 2560. Ich möchte ein Projekt realisieren, welches mit einem RFID Sensor über ein Relais ein Türschloss ansteuert. Dieser Teil funktioniert. Mein Meister hat sich mein Projekt angeschaut und hat mich gefragt, ob ich es vorne an unserer Eingangstüre installieren möchte. Jeder Azubi bekommt einen eigenen RFID Chip, um dann Zugang zur Werkstatt zu bekommen. Damit neue Chips hinzugefügt werden können, habe ich mir überlegt den Code des jeweiligen Chips in den EEPROM des ATMEGA's zu speichern. Wird nun ein Chip vorgehalten, wird der Code mit dem EEPROM verglichen und die Türe öffnet sich. Damit die Azubis aber keine zwei RFID Chips benötigen und es bei uns einen "Pieper" gibt, um die Anwesenheit zu kontrollieren, muss ich nun noch eine LED-Matrix die 14x4 groß ist, einbauen und genau da liegt mein Problem. Ich habe mir überlegt, mit einem Max7219 Baustein, diese Matrix anzusteuern. Gesagt, getan...jedoch leuchtet dann immer nur die jeweilige LED und wenn jemand neues kommt, brennt dann nur die vom neuen. Meine nächste Idee wäre es, die 14 LEDs mit 2^x zu bezeichnen. Die erste LED hätte dann den Binärwert 1, die nächste den Wert 2 und so weiter. Kommt nun der erste Azubi, brennt seine LED und der Wert wird in einem Speicher zwischengespeichert. Kommt der nächste Azubi aus dem Lehrjahr, wird der neue Wert mit dem Wert aus dem Zwischenspeicher addiert, zb. 1+2 (also LED 1 und LED 2) und im Programm ist hinterlegt, dass bei dem Endwert "3" die 1. und die 2. LED brennen. Hier habe ich nur das Problem, dass ich 2^14 Möglichkeiten habe und es sehr viel Aufwand wäre, diese alle zu hinterlegen. Als dritte Möglichkeit bliebe noch, jede LED einzelnd anzusteuern, hier müsste ich die Schaltung jedoch erst mit einem Schieberegister erweitern um genug Ports zu Verfügung zu haben. Es wäre mir lieber, die erste Idee umzusetzen, jedoch weiß ich nicht, ob es so klappt wie ich es möchte. Hat da jemand vielleicht eine Idee? Schon einmal vielen Danke! Grüße Chris
Christopher Willms schrieb: > Meine nächste Idee wäre es, die 14 LEDs mit 2^x zu bezeichnen. Die erste > LED hätte dann den Binärwert 1, die nächste den Wert 2 und so weiter. > Kommt nun der erste Azubi, brennt seine LED und der Wert wird in einem > Speicher zwischengespeichert. Kommt der nächste Azubi aus dem Lehrjahr, > wird der neue Wert mit dem Wert aus dem Zwischenspeicher addiert, zb. > 1+2 (also LED 1 und LED 2) und im Programm ist hinterlegt, dass bei dem > Endwert "3" die 1. und die 2. LED brennen. Wunderbar. Ds ist die korrekte Lösung zu deinem Problem. Was passiert aber wenn zwei Azubis gleichzeitig kommen? Einer öffnet die Tür, geht durch und der 2. kommt dirket nach ohen sich "anzumelden"... Und wie sollen die Azubis sich wieder abmelden? > Hier habe ich nur das > Problem, dass ich 2^14 Möglichkeiten habe und es sehr viel Aufwand wäre, > diese alle zu hinterlegen. Was ist daran "sehr viel Aufwand"? Du brauchst 1 (ein!) 16-bit Variable, dessen Wert du an einem Ausgang in ein Schieberegister schiebst. Das Schieberegister steuert die 14 LEDs.
Morgens muss jeder Azubi einmal "piepsen", danach ist es egal. Von daher sollte das kein Problem sein. Ich habe angenommen, dass es viel Aufwand wäre, die verschiedenen Möglichkeiten rauszuschreiben. Wie genau müsste ich das denn mit der einen Variablen denn machen? Danke für deine Hilfe!
Christopher Willms schrieb: > Morgens muss jeder Azubi einmal "piepsen", danach ist es egal. Von daher > sollte das kein Problem sein. > > Ich habe angenommen, dass es viel Aufwand wäre, die verschiedenen > Möglichkeiten rauszuschreiben. Wie genau müsste ich das denn mit der > einen Variablen denn machen? Du hast EINE 16 Bit Variable, die du aufs Schieberegister rausgibst. In dieser 16 Bit Variablen setzt du oder löscht du das jeweilige Bit, um die zugehörige LED leuchten oder nicht leuchten zu lassen. Ist diese Manipulation erledigt, dann wird der komplette 16 Bit Wert erneut mit allen Bits auf das Schieberegister ausgegeben. Bitoperationen! Genauso, wie du an einem Port 1 Bit setzen oder löschen kannst, genauso kannst du das auch in einer 16 Bit Variablen. Wenn also der Azubi mit der Nummer 5 kommt, dann weisst du damit, dass in deiner 'LED-Status-Variablen' das Bit Nummero 5 zu setzen ist (oder zu löschen, wenn deine LED bei einer 0 am Ausgang leuchten). Wenn der Azubi mit der Nummer 12 geht, dann wird das Bit Nummer 12 in dieser Status Variablen wieder auf 0 gesetzt (oder auf 1, je nachdem wie die LED angeschlossen sind). Da gibt es also keine 'Möglichkeiten'. Kennst du die 'Nummer' des Azubi, dann kennst du damit auch die Nummer des Bits, das zu setzen bzw. zu löschen ist. Die 'Möglickeiten', die sich ergeben, weil da 15 Azubi jeweils ihr eigens Bit haben, die ergeben sich ganz von alleine, weil du nur das jeweilige Bit setzt bzw. löscht.
:
Bearbeitet durch User
Christopher Willms schrieb: > Ich habe mir überlegt, mit einem Max7219 Baustein, diese Matrix > anzusteuern. Gesagt, getan...jedoch leuchtet dann immer nur die > jeweilige LED und wenn jemand neues kommt, brennt dann nur die vom > neuen. Denkst du nicht, dass dieser Baustein ein wenig witzlos wäre, wenn dem wirklich so wäre? Auch hier - selbe Technik: Du musst den MAX schon mit dem entsprechenden Datenwort füttern, damit die gewünschten LED brennen. Das bedeutet, dass du dir im Programm den aktuellen Zustand aller LED in einer Variablen merkst und wenn eine LED zusätzlich leuchten soll, dann kommt die zu diesem Zustands-Set dazu; der MAX wird angewiesen diesen neuen Zustand aller LED anzuzeigen. Dein Haupt-Gedankenfehler liegt darin, dass du nicht bedenkst, dass es sich bei dem Teilbereich deiner Aufgabe nicht darum handelt, einzelne LED ein bzw auszuschalten. Du hast einen Zustand aller LED, über den du im Programm Buch führen musst. Soll eine LED eingeschaltet werden, dann wird in diesem 'Zustand aller LED' diese eine eingeschaltet und der komplette neue Zustand an die Ausgabe übermittelt. Womit wir wieder bei Bitoperationen wären.
:
Bearbeitet durch User
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.