Hallo alle zusammen, Ich und ein Kumpel wollen für unsere Facharbeit in der Schule eine Lichtschranke bauen, die in einer hohen Frequenz blinken soll, um Störungen durch Fremdlicht zu vermeiden. Und da kommen wir nicht weiter. Ich habe schon in einem anderem Thread gesehen, dass es so manche gibt, die nicht so die Fans von BASIC sind, allerdings ist es mir leichter gefallen, in BASIC einzusteigen, als in Assembler. Da wir so ziemlich keine Ahnung vom Programmieren eines Mikrocontrollers haben - und wir benutzen zwi ATtiny12s - haben wir uns auf eine simple Methode geeinigt: Der eine tiny steuert ein Senderprgramm, der andere ein das Empfängerprogramm. Eine LED soll in einem gleichmäßigen Takt blinken, wobei An- und Auszeiten gleich lang sind. Das Empfängerprogramm soll warten, bis es einen ersten Input bekommt, sodass es sich mit der Blink-LED syncrhonisieren kann. Dann soll es in dem Takt, in dem die LED umschaltet, deren Status abfragen. D.h. es weiß, wann die LED an sein sollte und wann aus. Ist kein Licht vorhanden, obwohl die LED an ist, dann soll eine neue LED leuchten, die signalisiert, dass etwas den Lichstrahl blockiert. Genauso soll diese LED leuchten, wenn Licht vorhanden ist, obwohl die Blink-LED aus ist. So soll darauf hingewiesen werden, dass zuviel Störlicht vorhanden ist. Alles in allem recht simpel. Das Senderprogramm funktioniert. Die Blinkfrequenz ist uns momentan egal, Hauptsache es läuft. Gelötet ist der Sender bereits und eine Möglichkeit, das analoge Signal in ein digitales umzuwandeln haben wir auch. Was uns fehlt, ist ein funktionierender Code in BASIC. Ich habe schon versucht, einen zu schreiben, aber der scheint nicht zu funktionieren und ich glaube er ist so schlecht, dass ich ihn hier besser nicht poste. Könnt ihr uns irgendwie helfen?
> haben wir uns auf eine simple Methode geeinigt: > > Der eine tiny steuert ein Senderprgramm, der andere ein das > Empfängerprogramm. Merke: 2 Prozessoren in einem Projekt einzusetzen, in dem einer schon unterfordert ist, ist NIEMALS simpler, als alles nur auf einem Prozessor zu machen. Mehrere Prozessoren VERKOMPLIZIEREN die Dinge normalerweise, weil die beiden Prozessoren dann auch noch miteinander reden müssen! > Dann soll es in dem Takt, in dem die LED umschaltet, deren Status > abfragen. Woher weiß er den exakten Takt? > D.h. es weiß, wann die LED an sein sollte und wann aus. Trugschluss: Genau das weiß er eben nicht. Denn die beiden µC werden nicht exakt genau gleich schnell arbeiten. Noch nicht einmal dann, wenn beide einen Quarz spendiert bekommen.
Wenn ihr von Tuten und Blasen keine Ahnung habt, solltet ihr tunlichst davon Abstand nehmen, die Aufgabenstellung aus Coolness heraus komplizierter zu machen als unbedingt notwendig. Fremdlicht ist zwar ein Problem, aber wenn ihr das mit einer Modulationsfrequenz nicht hinbekommt, dann lasst das fürs erste weg. Kommt halt der Empfänger in ein Rohr mit einer Blende, so dass er tatsächlich nur den Sender sieht, und schon ist Femdlicht auch kein Problem mehr. (Hinweis: es gibt aber auch Infrarotempfänger, die haben die notwendigen Filter schon in Hardware eingebaut. Dieser Empfänger liefert nur dann eine 1, wenn Licht mit der richtigen Modulationsfrequenz drauf fällt)
Ok, sowas ähnliches hatte ich schon fast befürchtet. Dann ändern wir mal die Bedingungen: Es soll alles über einen Prozessor laufen und nicht über zwei. Ich hoffe, da lässt sich schon mehr machen. Und die Blinkfunktion hätten wir aber trotzdem gerne drin.^^ Wie sieht das Ganze jetzt aus?
Niklas schrieb: > Ok, sowas ähnliches hatte ich schon fast befürchtet. Dann ändern wir mal > die Bedingungen: Es soll alles über einen Prozessor laufen und nicht > über zwei. Ich hoffe, da lässt sich schon mehr machen. Und die > Blinkfunktion hätten wir aber trotzdem gerne drin.^^ Wie sieht das Ganze > jetzt aus? Programm schaltet LED ein Programm sieht nach ob der Empfänger das Licht auch sieht Programm schaltet LED wieder aus Programm sieht nach ob der Empfänger jetzt kein Licht sieht und alles wieder von vorne (und natürlich nocht entsprechende Ausgaben bzw. Fehlerausgaben wenn das erwartete Ergebnis nicht vorhanden ist) Wo ist da jetzt das Problem? (Und ehe du jetzt antwortest: Du wirst hier im Forum niemanden finden, der euch das Programm schreibt. Die Spielregeln lauten: Ihr legt vor, das Forum korrigiert oder erläutert unklare Punkte) Ehe es ans Coden geht, solltet ihr euch einen Ablaufplan zurecht legen. Dann stellt sich nämlich raus, das die umgekehrte Reihenfolge besser ist, weil die Erkennung einer Störung dann einfacher ist. Nur dann wenn keine Störung vorliegt, muss überhaupt nachgesehen werden, ob die Lichtschranke unterbrochen wurde.
1 | LED ausschalten <-----------------------------+<--+<--+ |
2 | Empfänger abfragen | | | |
3 | Licht vorhanden? Ja ----------> Störung! --------+ | | |
4 | | | | |
5 | Nein | | |
6 | | | | |
7 | LED eischalten | | |
8 | Empfänger abfragen | | |
9 | Licht vorhanden? Ja ----- LS nicht unterbrochen!-----+ | |
10 | | | |
11 | Nein | |
12 | | | |
13 | +---------------> Lichtschranke unterbrochen! ---------+ |
Meiner Meinung nach ist das Konzept nicht ganz durchacht. Der Trick bei der Modulationsfrequenz ist ja der, daß erkannt wird, ob die Beleuchtung jetzt durch den Sender oder durch Fremdlicht kommt. Wenn ihr jetzt eine einfache Fotodiode als Empfänger nehmt und nicht schon auf der analogen Ebene die Modulationsfrequenz als Nutzsignal herausfiltert passiert folgendes: Ohne Fremdlicht kommt tatsächlich die Modulationsfrequenz als Ausgangssignal raus. Mit Fremdlicht kommt ein Dauersignal mit überlagerter Frequenz heraus. Dieses Signal wird am Digitaleingang eines Mikrocontrollers nur einen dauerhaften Schaltzustand auslösen. Er erkennt: Licht da, aber keine Frequenz. Das kann nur noch als Störung ausgewertet werden, da jetzt nicht mehr erkennbar ist ob die Schranke unterbrochen ist. Empfehlung: Verwendet einen Empfänger, der bereits intern die Modulationsfrequenz ausfiltert wie z. B. SFH5110. Das Teil ist ziemlich unempfindlich gegen Fremdlicht. Da kann man dann ziemlich sehr sicher sein, daß ein Ausgangssignal nur noch dann vorhanden ist, wenn die Lichtschranke nicht unterbrochen ist.
Sooo.. $regfile = "attiny12.dat" $crystal = 8000000 $tiny Blinker Alias Portb.0 Eingang Alias Pinb.1 Status Alias Portb.2 Config Blinker = Output Config Eingang = Input Config Status = Output Do Ausphase: Blinker = 0 If Eingang = 1 Then Status = 1 Goto Ausphase Else Status = 0 Goto Anphase End If Anphase: Blinker = 1 If Eingang = 0 Then Status = 1 Goto Anphase Else Status = 0 Goto Ausphase End If End Da ich meinen Computer neu starten müsste, damit ich BASCOM zum Laufen bringe und ich darauf keine Lust habe, weiß ich nicht, ob vor dem End noch ein "Loop" fehlt. Laut meiner Logik sollte es aber sonst das tun, was ich möchte, aber funktioniert es auch so? PS: Falls der Code schon zu lang ist, um ihn im Text zu posten, dann sagt es mir bitte.
Hallo! Das Froblem des Fremdlichts ist ja nicht bei Gleichlicht oder Wechsellicht mit 50 oder 100 Hz zu Ende. EVGs (elektronische Vorschaltgeräte) oder LED-Dimmer erzeugen unter Umständen Wechsellicht im Modulationsbereich der Lichtschranke. Auch mehrere Lichtschranken an einer Maschine können sich manchmal, über spiegelnde Metallteile, gegenseitig "sehen". Eine geeignete Codierung des eigenen Senders, mit (quasi-)zufälligem Wechsel, ist ja für den Prozessor normalerweise kein Problem.
würde Euch jede Unterstützung verweigern, wenn Ihr schon zu faul seid, den Computer neu zu starten um ein Programm zu testen. Nur so, aus pädagogischen Gründen und weil ihr mal für unsere Rente zuständige sein sollt usw....
Das einfachste ist, eine komplette, fertige Lichtschrankge zu kaufen. Aber was wollt ihr mit dem Projekt lernen? Zwischen "Kaufen" und "Rad neu erfinden" gibt es diverse Abstufungen. Bei einer Lichtschranke, die ein bisschen mehr als eine Gabellichtschranke kann, gibt es diverse Baustelle: Optik, Analogelektronik, Auswertung, Steuerung usw. Je besser die Signale sind, um so einfacher ist die Auswertung. Also würde ich nicht ganz hinten anfangen sondern erstmal einen Plan machen, wie die Anforderungen genau sind, wo die Knackpunkte liegen, was fertig gelauft werden soll und wo selber Erfahrungen gemacht und Arbeit reingesteckt werden soll. Gruß Optiker
Ja, es fehlt noch das "Loop". Das Programm ist doch auch im Simulator von Bascom gut zu testen. Damit kannst Du schon mal "trocken" testen, ob es das tu, was Du erwartest. Entrümpele mal Deinen Rechner, wenn das Booten so lange dauert, daß Du Dich 2x rasieren kannst, bevor er benutzbar ist. ;-) MfG Paul
Paul Baumann schrieb: > wenn das Booten so lange dauert, daß Du Dich 2x rasieren kannst LOL... Erst mal so alt werden... ;-) Niklas schrieb: > Ich und ein Kumpel wollen für unsere Facharbeit in der Schule eine > Lichtschranke bauen, die in einer hohen Frequenz blinken soll, um > Störungen durch Fremdlicht zu vermeiden. Ich würde da einfach einen Pin mit einer PWM-Frequenz von 10kHz vor sich hin toggeln/"blinken" lassen und damit die LED ansteuern. Auf der Emfpängerseite reicht dann ein Phototransistor/-diode, ein Kondensator und ein Verstärker mit anschliessender Dioden-Gleichrichtung. Mit dem resultierenden Signal auf einen AD-Eingang und fertig ist die Laube. Warum macht ihr euch nicht erst mal schlau, wie Andere diese Aufgabe gelöst haben? Für einen Ideenklau auf nicht allzu hohem Niveau immer gut: http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/
Hm, ATtiny12 ist natürlich auch eine 'alte' Gurke, hat kein ADC. Ein ATtiny13 hat nen ADC, mit dem könnte man in Software einen einfachen digitalen Lock-in realisieren. Nette Idee, muss ich mir merken :) Wenn's unbedingt der ATtiny12 sein soll, klingt Lothars Vorschlag gut (vielleich noch mit nem Filter gene 50Hz?), oder eben die Benutzung von Standard-Fernbedienungskomponenten.
(Gast) schrieb: > vielleich noch mit nem Filter gene 50Hz?) 50Hz ist Gleichspannung verglichen mit 10kHz. Ein billiger Hochpass (aka. Kondensator) reicht da idR. schon aus... Und für die ganz Ausgefuchsten darf es dann ein Bandpass (aka. Schwingkreis) sein...
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.