PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zielscheibensystem mit Zufall



DjEKI
10.02.2013, 17:06
Moin,

Ich hatte damals etwas Hilfe bekommen von jemandem, der sich mit Bascom auskennt und leider ist er jetzt sehr schwer zu erreichen, oder hat anschein keine Lust mehr ^^ Ich wollte das jetzt mal allein versuchen, aber mit etwas Hilfe von Euch.

Ich habe erst vor kurzem den AVR- Einstieg leicht gemacht (http://www.rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht) durchgearbeitet und ein paar Befehle in Basecom Language Reference (http://avrhelp.mcselec.com/) angeschaut. Ich will nur damit sagen, dass ich ziehmlich neu bin in solchen Sachen, aber mich schon mal darauf vorbereitet habe.

Mein Projekt ist ein Zielscheibensystem, dass automatisch aufleuchtet und während dessen getroffen werden kann, und danach eine andere Zielscheibe leuchtet. Alles soll mit Punkten bewertet werden. Natürlich soll dann eine Digitale Zahl zu sehen sein in typisch Roter leuchender Schrift.

24487

Jetzt steh ich da mit einen Script von jemand anderem, den ich sogar zum Teil verstehe, aber irgendwie nicht so funktioniert wie vorgesehen.

Dieser Script gehört zum ATtiny2313 auf dem ATMEL Evaluations-Board Version 2.0.1

$regfile = "m8def.dat"
$crystal = 8000000


'************************************************* **********************'

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc


Dim Scheibe As Integer


Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output


Do

If Scheibe > 204 Then
Portd.0 = 1
Else
Portd.0 = 0
End If
If Scheibe > 408 Then
Portd.1 = 1
Portd.0 = 0
Else
Portd.1 = 0
End If
If Scheibe > 611 Then
Portd.2 = 1
Portd.1 = 0
Portd.0 = 0
Else
Portd.2 = 0
End If
If Scheibe > 615 Then
Portd.3 = 1
Portd.2 = 0
Portd.1 = 0
Portd.0 = 0
Else
Portd.3 = 0
End If
If Scheibe > 819 Then
Portd.4 = 1
Portd.3 = 0
Portd.2 = 0
Portd.1 = 0
Portd.0 = 0
Else
Portd.4 = 0
End If

Loop
End
'************************************************* ************************

Config Int0 = Rising
Enable Int0
On Int0 On_int0




On_int0:

Scheibe = Getadc(0)

Return

'

Wir wollten das ADC ausnutzen.
Er sagte da nur, alle Scheiben müssten an den INT0 Pin angelegt werden und die LEDs an die anderen Pins. Nur scheint mir das etwas unlogisch zu sein und wollte euch mal fragen, wie ich das weiter machen könnte.

Ich möchte aber jetzt ein ATmega32 16PU 1218 verwenden und habe den Code umgeschrieben mit erstmal 3 Zielscheiben.

$regfile = "m8def.dat"
$crystal = 8000000


'************************************************* **********************'

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc


Dim Scheibe As Integer


Config Portd.0 = Output
Config Portd.5 = Output
Config Portd.6 = Output



Do

If Scheibe > 204 Then
Portd.0 = 1
Else
Portd.0 = 0
End If
If Scheibe > 408 Then
Portd.5 = 1
Portd.0 = 0
Else
Portd.5 = 0
End If
If Scheibe > 611 Then
Portd.6 = 1
Portd.5 = 0
Portd.0 = 0
Else
Portd.6 = 0
End If


Loop
End
'************************************************* ************************

Config Int0 = Rising
Enable Int0
On Int0 On_int0




On_int0:

Scheibe = Getadc(0)

Return

'

Könntet Ihr mir bitte weiter helfen?
Bis jetzt leuchtet keine LED

mfg EKI

Sauerbruch
10.02.2013, 21:44
Als erstes solltest Du das Projekt mal so beschreiben, dass man wenigstens ansatzweise eine grobe Idee davon bekommen kann, worum es geht.


Mein Projekt ist ein Zielscheibensystem, dass automatisch aufleuchtet und während dessen getroffen werden kann

Von was wird es denn getroffen? Kugeln, Farbbeutel, Laserstrahlen? Was für Sensoren registrieren den Treffer? Was für Signale müssen ausgewertet werden?

Und dann sehe ich auf den ersten Blick drei Bugs in Deinem Code:

Erstens muss die Konfiguration des Interrupts VOR die Do-Loop-Schleife! Wenn sie dahinter steht, wird sie niemals ausgeführt - und somit gibt´s auch keinen Interrupt!

Zweitens müssen die Interrupts auch global freigegeben werden, damit der einzelne Interrupt auch tatsächlich ausgeführt werden kann. D.h. als letzter Befehl der Interrupt-Konfiguration muss noch ein "Enable Interrupts" dazu.

Drittens kann die Abfrage der Variablen Scheibe so wohl nicht funktionieren (auch wenn ich nicht verstehe, welche Bedeutung dieser Parameter hat).
Stell Dir mal vor, der Wert wäre z.B. 820. Dann wären doch alle Bedingungen der einzelnen IF-Abfrage erfüllt:
Scheibe > 204 ist wahr, d.h. PORTD.0 wird auf 1 gesetzt.
Scheibe > 408 ist auch wahr, d.h. PORTD.1 wird auf 1 gesetzt, PORTD.0 wieder auf 0.
Scheibe > 611 ist auch wahr, d.h. PORTD.2 wird auf 1 gesetzt, PORTD.1 wieder auf 0
(usw)

Du musst also schon den Bereich definieren, in dem der Wert liegen soll. Z.B. so:




If Scheibe > 204 AND Scheibe <= 408 then
...
Else
...
End if


Oder Du nimmst den schönen Select Case-Befehl:




Select Case Scheibe

Case 205 to 408:
PORTD.2=0
PORTD.1=0
PORTD.0=1

Case 409 to 610:
PORTD.2=0
PORTD.1=1
PORTD.0=0

Case is > 611:
PORTD.2=1
PORTD.1=0
PORTD.0=0

End select


Im Übrigen gibt´s auch ein paar Methoden, um beliebig viele Bits eines Bytes (also z.B. PORTD-Ausgänge) mit wenigen Befehlen auf den gewünschten Wert zu setzen. Wenn Du jeden einzelnen Ausgang einzeln auf 1 oder 0 setzt, verbraucht das ´ne Menge Code.

Die einfachste Lösung ist die, gleich das ganze PORTD-Byte zu setzen. Soll z.B. NUR D.4 1 sein, ginge das so:

PORTD = &B00010000

(&B signalisiert an Bascom, dass jetzt ´ne Binär-Zahl kommt. Das höchstwertige Bit (also PORTD.7) steht hierbei links, PORTD.0 ganz rechts)

Damit beeinflusst Du natürlich aber auch diejenigen Bits vom PORTD-Byte, die nicht direkt mit den Zielscheiben zu tun haben, also PORTD.7 und D.6. Wenn diese Ausgänge keine Funktion haben, wäre das kein Problem, ansonsten könnte man das elegant mit AND- und OR-Funktionen lösen .

Aber das vielleicht später??

DjEKI
10.02.2013, 22:19
Ja, es sind Druckplatten die ich selber herstelle und es werden Plastikkugeln geschossen. (softair)
Also praktisch ein Taster. In der Mitte gibt es 10 Punkte und Außen 5 Punkte. Eine Zielscheibe bleibt ca 2 Sekunden aktiv die dann getroffen werden muss. Danach passiert 2 Sekunden nichts, und dann leuchtet die andere Zielscheibe auf.

Ich habe auch sehr viele Ideen wie ich das alles perfektionieren könnte, aber das sind dann wieder sachen die mir etwas zu Hoch sind und erstmal das einfachste zu schreiben. Später kann man das alles verbessern.

Mit Punkt 1, ja, das kam mir auch Spanisch vor. Denn ich kenn mich mit PHP Sprache aus, und da ist es genauso.
Mit Punkt 2, dass muss ich mir mal irgendwie genauer anschaun, aber heute nicht. Denn die Interrupts habe ich durchgelesen, aber überhaubt nicht verstanden was die zu tun haben.
Mit Punkt 3, als ich mir die Bibliothek durchgelesen habe, ist mir das auch aufgefallen, dass logischerweise mehr als nur einer leuchten würde.

Ich glaube, daher hab ich keine Antwort mehr von dem jenigen gehört, der diesen Script geschrieben hat ^^

Besser ich bleibe bei den standard codes, denn PORTD = &B00010000 würde mir jetzt auf der Schnelle nix sagen ^^ Und dann sehe ich nacher gar nicht mehr durch.

Mir ist auch wichtig, dass das Zufallsprinzip funktioniert. Mir ist es egal, ob esein echter Zufall ist oder nicht, hauptsache, es ist ein zufall :) Aber ich habe nur lesen können, dass ADC für sowas ideal wäre, aber wie man den Code schreibt, habe ich nichts brauchbare gefunden.

Danke für den Hinweis mit dem Select, das werde ich morgen mal ausprobieren.

HeXPloreR
10.02.2013, 22:21
...und viertens: Ist das erste Script nicht für einen ATtiny2313, sowie das zweite nicht für einen ATmega32 ist - obwohl schon umgschrieben wurde ;)

Viele Grüße

DjEKI
10.02.2013, 22:47
ui, da müsstest mich mal bitte aufklären. Die Ports sind jedenfals richtig.

mfg EKI

Sauerbruch
10.02.2013, 22:54
Ich glaube, daher hab ich keine Antwort mehr von dem jenigen gehört, der diesen Script geschrieben hat

Na ja, hier wirst Du auch geholfen :-)

Ein Interrupt ist ein Ereignis, das den normalen Ablauf des Programmes unterbricht, damit eine bestimmte, verknüpfte Aktion ausgeführt werden kann. Dieses Ereignis kann z.B. eine fallende Flanke an einem Interrupt-Eingang sein.

Wenn Du also z.B. möchtest, dass beim Schließen eines Tasters eine bestimmte Punktzahl addiert werden soll, könntest Du natürlich permanent die Taster abfragen. Da der Kontakt ja aber wahrscheinlich nur ziemlich kurz von der Kugel geschlossen wird könnte es passieren, dass der Abfrage ein kurzer Kontaktschluss quasi entgeht.

Mit einem Interrupt geht´s aber einfacher und zuverlässiger: Sobald der Eingang einen Übergang von High auf Low detektiert (d.h. der Taster geschlossen wurde) wird das Hauptprogramm unterbrochen, und die dazugehörige Interrupt-Routine (auch ISR genannt) ausfgeführt. Ist sie abgearbeitet, geht´s an der Stelle im Hauptprogramm weiter, wo es kurz vorher unterbrochen wurde.

Man muss dem Controller also erstmal sagen, was das auslösende Ereignis sein soll:
Config INT0 = Risisng

Der Taster muss also auf den Anschluss des Interrupts INT0 gelegt werden (beim Mega32 wäre das Pin Nr. 16 bzw. PD2), und ausgelöst wird der Interrupt bei einer steigenden Flanke (rising). Alternativ könnte man auch falling oder change nehmen - dann würde eine fallende Flanke bzw. jede Flanke den Interrupt auslösen.

Dann muss man der auszuführenden Interrupt-Routine einen Namen geben (beliebig, müssen keiner Syntax entsprechen):
On Int0 on_int0

Im Klartext: Wenn das Interrupt-Ereignis eintritt, gehe nach on_int0. Etwas verwirrend ist hier, dass der Codeschreiber den Bascom-Befehl gleichzeitig auch als Namen für die ISR verwendet hat. Man könnte genausogut schreiben
On Int0 5Punkte oder On Int0 10Punkte

Dann muss der Interrupt aktiviert werden:
Enable INT0

Beim Einschalten des Controllers sind nämlich alle Interrupts erstmal deaktiviert - mit enable aktiviert man den einzelnen Interrupt.

Und die "globale" Freigabe ist auch notwendig:
Enable Interrupts

Damit hat es folgendes auf sich: manchmal kann es ja sehr wichtig sein, dass das Hauptprogramm mal für eine Zeit NICHT von Interrupts unterbrochen wird. Damit man in diesem Fall nicht alle Interrupts einzeln deaktivieren muss (bei größeren Controllern können das schon mal 20 Stück sein), gibt es sozusagen eine Art "Hauptschalter" für alle Interrupts - die globale Aktivierung bzw. Deaktivierung.
Und auch dieser "Schalter" steht erstmal auf aus, wenn der Controller hochfährt. Deshalb muss man die globale Interrupt-Freigabe auch noch ausführen.

Das mit den Zufallszahlen ist nicht so ganz einfach - darüber wurde hier kürzlich schon eine Menge gepostet. Man könnte aber z.B. aus der Zeit zwischen zwei Schüssen eine Art Zufallszahl ableiten, denn da reichen schon Unterschiede von ein paar Millionstel Sekunden aus, um komplett andere Zahlen zu produzieren.

DjEKI
10.02.2013, 23:45
Das mit den Interrupts habe ich warscheinlich verstanden. Aber mit der Globale Freigabe ist mir noch etwas Fragwürdig. Also, wenn ich ein Schalter aktiviere der auf Int0 oder Int1 liegt, dann wird automatisch das Programm unterbrochen. Wenn ein Programm unterbrochen wurde, was läuft dann ? Irgendwie muss doch was weiter gehen. Oder ist es so, so lange wie ich auf den Taster drücke, wird auch das Programm unterbrochen?

also, würde es mit den ADC als Zufall nicht so einfach funktionieren.
An solche Zahlenrotation habe ich schon gedacht, dass die Zahlen als Variabel sehr schnell rotieren und die Zeitverzögerung als Zufall zu nutzen. Da der Script aber nur in einer Richtung ausgeführt werden kann, wird das doch ohne einen 2. Chip gar nicht möglich, oder?

mfg EKI

Sauerbruch
11.02.2013, 00:06
Wen ein Interrupt-Eeignis auftritt (also z.B. die steigende Flanke am Eingang D2 bzw. INT0) passiert folgendes:
1. alle Register-Inhalte werden gesichert
2. das Hauptprogramm bleibt an der Stelle stehen, an der es gerade ist
3. die Interrupt-Routine wird ausgeführt (und weil sie das Programm tatsächlich unterbricht, sollte sie so kurz wie möglich sein!!)
4. nach Abarbeiten der Interrupt-Routine werden alle "gerretteten" Register-Inhalte wieder zurückkgeschrieben, und
5. das Hauptprogramm an der Stelle fortgeführt, an der es unterbrochen wurde

Wie gesagt - es gibt haufenweise Ereignisse, die einen Interrupt auslösen können (!), z.B. wenn ein Timer seinen maximalwert erreicht und "überläuft", wenn ein AD-Wandler fertig gewandelt hat, wenn über die UART-Schnittstelle Daten reinkommen usw., usw.
Damit das Hauptprogramm nicht alle Nase lang von diesen Interrupts unterbrochen wird, sind ALLE Interrupts erstmal AUS und müssen bei Bedarf aktiviert werden.

Du kannst das mit ´nem Sicherungskasten eines Hauses vergleichen (nur mit dem Unterschied, dass der Normalzustand dort "Ein" ist):
Wenn Du einzelne Zimmer stromlos machen möchtest um z.B. Lampen zu wechseln, kannst Du gezielt einzelne Sicherungen rausdrehen (entspricht dem enablen bzw. disablen einzelner Interrupts, also z.B. enable INT0).

Wenn Du aber ganz sicher und in ALLEN Zimmern keinen Strom mehr haben möchtest, brauchst Du nicht alle 17 Einzelsicherungen rauszudrehen, sondern drehst einfach die Hauptsicherung raus. Das wäre dann das globale Ein- und Ausschalten der Interrupts (enable bzw. disable Interrupts).

Wenn Du also einen Interrupt ausführen lassen möchtest, musst Du sowohl den Interrupt selber, als auch die globale Freigabe aktivieren.

Und wenn die Aufgabe nur die ist, "zufällig" jeweils eine der 6 Zielscheiben zu aktivieren, für 2 Sekunden die beiden Taster zu überwachen und ggf. 5 bzw. 10 Punkte zu verbuchen, dann kann das ein einzelner Mikrocontroller alleine!

DjEKI
11.02.2013, 16:44
Ohja, jetzt habe ich das voll verstanden, danke :)

Gut, dann werde ich mich mal rann setzen und das irgendwie umsetzen. Ich mache das jetzt nicht mehr per ADC, sondern lasse halt die Zeitverzögerung entscheiden. Kann man 2 Abläufe gleichzeitig durchlaufen kassen? zB ein Hauptprogramm und den Zufallsgenerator (ein Ablauf bestimmter Zahlen mit Loop Effekt). Sonbst habe ich schon andere Ideen.

Ansonsten muss ich noch die Variabeln kennen lernen. Dass die Punkte addiert werden.

Und später auch die LCD anzeige (stinknormale Rote leuchtende Zahlen)

Normalerweise habe ich mir ein Konzept gedacht, wie es wirklich Fertig aussehen sollte:
1.er Modus: Normales schießen mit Zufall der Ziele und 2 Sekunden Aufblinkzeit. 5-10 Punkte.
2.er Modus: schnelles schießen, Zufall der Ziele, Punkte ergeben sich durch den Zeitraum. Umso schneller man trifft, umso mehr Punkte.
3.er Modus: Man bekommt 500 Punkte, beim Treffer werden sie abgezogen bis wirklich nur Null erreicht worden ist, die Zeit ist dann das Ergebnis

Und? Scheint es machbar zu sein ? ^^

mfg EKI

DjEKI
11.02.2013, 19:19
Moin, mein erstes Programm ist fertig, und da stoße ich schon mal auf ein Problem.
Erstmal will ich dazu was sagen, dass ist meine 1 Variante, die evtl durch Profis besser und kürzer geht, aber mein Wissen ist leider nur so weit wie in diesem Programm zusehen ist.
Aber leider stoße ich da auf ein Problem. Ganz unten darf kein GOTO im Interrupt sein, aber ich hätte dort zugern eins. Nur wie Löse ich das Problem?


$regfile = "m8def.dat"
$crystal = 1000000


'************************************************* **********************'


Dim Scheibe As Integer
Dim 5punkte As Integer
Dim 10punkte As Integer
Dim Punkte As Integer
Dim A As Byte

A = 0
Scheibe = 0
Punkte = 0


Config Portd.0 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Int0 = Rising
Config Int1 = Rising
Enable Interrupts
Enable Int0
Enable Int1
On Int0 Int0_5punkte
On Int1 Int1_10punkte

Anfang:
Do

If Scheibe = 1 Then
Goto Scheibe1
Else
Portd.0 = 0
End If

If Scheibe = 2 Then
Goto Scheibe2
Else
Portd.5 = 0
End If

If Scheibe = 3 Then
Goto Scheibe3
Else
Portd.6 = 0
End If

Incr A
Loop Until A = 20
End 'hier erscheint ein Ton und zeigt das Ende mit Ergebnis.

'************************************************* ************************'
Scheibe1:
Portd.0 = 1
Set Scheibe = 1
Waitms 250
Set Scheibe = 2
Waitms 250
Set Scheibe = 3
Waitms 250
Set Scheibe = 1
Waitms 250
Set Scheibe = 2
Waitms 250 'wenn hier getroffen wurde, ist die variable 2, also die 2. Scheibe ist aktiv'
Set Scheibe = 3
Waitms 250
Set Scheibe = 1
Waitms 250
Set Scheibe = 2
Waitms 250
Set Scheibe = 3
Portd.0 = 0
Goto Anfang

Scheibe2:
Portd.0 = 1
Set Scheibe = 1
Waitms 250
Set Scheibe = 2
Waitms 250
Set Scheibe = 3
Waitms 250
Set Scheibe = 1
Waitms 250
Set Scheibe = 2
Waitms 250
Set Scheibe = 3
Waitms 250
Set Scheibe = 1
Waitms 250
Set Scheibe = 2
Waitms 250
Set Scheibe = 2
Portd.0 = 0
Goto Anfang

Scheibe3:
Portd.0 = 1
Set Scheibe = 1
Waitms 250
Set Scheibe = 2
Waitms 250
Set Scheibe = 3
Waitms 250
Set Scheibe = 1
Waitms 250
Set Scheibe = 2
Waitms 250
Set Scheibe = 3
Waitms 250
Set Scheibe = 1
Waitms 250
Set Scheibe = 2
Waitms 250
Set Scheibe = 1
Portd.0 = 0
Goto ANFANG

'************************************************* ************************'
Int0_5punkte:
5punkte = Punkte + 5
Goto Anfang 'mein größtes Problem, der hier wäre sehr wichtig, geht aber nicht... Interrupt braucht ein Return'


Int1_10punkte:
10punkte = Punkte + 10
Goto Anfang 'mein größtes Problem, der hier wäre sehr wichtig, geht aber nicht... Interrupt braucht ein Return'

HeXPloreR
11.02.2013, 19:59
Du schreibst immer noch für einen Atmega8 - ist Dir das schon aufgefallen?

Was soll man jetzt zu diesem Programm sagen?? - fang nochmal an oder das ist es wohl noch nicht.

Also cih verstehe nichts von dem was Du hier codest.

Wozu änderst Du alle 250ms den Wert von Scheibe? Da kanst Du doch auch gleich den letzten Wert im Block nehmen.
Wofür sind die Interrups überhaupt angegeben? - Die machen doch nichts wenn ich das richtig sehe.
A wird nicht zurückgesetzt.
Die Scheife wird vermutlich auch schneller durchlaufen sein, als Du blinzeln kannst.


Viele Grüße

DjEKI
11.02.2013, 20:52
Du hattest mir keine Antwort geschrieben, warum du meinst, dass es nicht für den ATmega32 ist und hast mich schon wieder nur darauf hingewiesen, dass dieser Script nicht für den ATmega32 ist, sondern für den mega8. Könntest du mir denn jetzt bitte sagen, warum dass so ist?

Meine Idee war, die 250ms so auf zu teilen, dass es am Ende 2 Sekunden ergibt. Und fals ein Interrupt auftreten sollte, genau in der MilliSekunde stehen bleibt, dann ist der letzte vergebene Wert für die Aktivierung der nächsten Zielscheibe.
Dann wollte ich: Der letzte Wert am ende des Layers, hat bei Scheibe1 den Wert 3, Scheibe2 den Wert 2 und Scheib3 den Wert 1. Die sind desshalb unterschiedlich, fals man die Zielscheibe nicht getroffen hat, dann kommt die nächste Zielscheibe und nicht nochmal die Selbe.

-EDIT-
Ich habe sowieso eben bemergt:
Line:58 "und" 60 Variable can not be used with SET [SCHEIBE = 1 "und" 2]

mfg EKI

HeXPloreR
11.02.2013, 21:02
oh sorry, ich hatte in dem Beitrag überlesen das ich angesprochen war :oops: ganz oben die erste Zeile sagt es aus: m8def.dat (-> m32def.dat)


Wieso darf denn nicht auch die selbe Zielscheibe nochmal kommen? Wäre doch okay, vor allem wenn man schon weggezogen hat um ne neu aus zu suchen? Vielleicht aber dann nicht nochmal ;)
Ich denke den ganzen Block mit den drei verschieden Scheiben kann man sehr viel kürzer schreiben.
Wenn man annimmt der Wert ist 2, dann zählt man solange durch, bis Interrupt, wenn der Wert dann gleich 2 ist, ziehe eine 1 ab oder zähle 1 dazu, man könnte auch 3 dazu zählen lassen um ne neue Scheibe auszuwählen - schon ist das Problem weg.

Aber woher weiß den Dein Programm wann es welchen Interrupt ausführen soll? - vielleicht habe ich das selbst auch nur noch nicht verstanden.
Wenn ich soweit verstanden habe, dann müßtest du im Interrupt den Wert der Scheibe ändern, denn sonst läuft es bis zum letzten wert durch sobald es aus dem interrupt wieder zurück an Stelle springt.

Viele Grüße

DjEKI
11.02.2013, 21:18
Axo, der Interrupt kommt durch ein Taster. Int0 und Int1 sollen per Taster, Also Zielscheibe 5 Punkte und 10 Punkte aktiviert werden. Oder muss ich die Int0 und 1 als Input angeben?
Wenn nicht, habe ich ja nur 2 Interrupt eingänge. Und die müssen ja irgendwie mit den Druckplatten verbunden werden. Ich hätte es lieber so, dass nur die aktiverte Scheibe funktioniert, und alle anderen deaktiviert sind. Da aber sich alles nur mit Interrupt arbeiten lässt, sind halt alle Scheiben aktiv, dass heißt, auch wenn die SCheibe nicht leuchtet, könnte man damit ein Punkt machen. Wäre ja aber Betrug ^^

PS, danke für den Hinweis, die obere Zeile mit m8def.dat habe ich von nen anderen SCript kopiert und mir nichts dabei gedacht.

mfg EKI

Sauerbruch
12.02.2013, 00:17
Wenn nicht, habe ich ja nur 2 Interrupt eingänge. Und die müssen ja irgendwie mit den Druckplatten verbunden werden. Ich hätte es lieber so, dass nur die aktiverte Scheibe funktioniert, und alle anderen deaktiviert sind. Da aber sich alles nur mit Interrupt arbeiten lässt, sind halt alle Scheiben aktiv, dass heißt, auch wenn die SCheibe nicht leuchtet, könnte man damit ein Punkt machen. Wäre ja aber Betrug

Das habe ich mir auch überlegt (auch wenn ich mich in den Rest des Codes nicht wirklich reingedacht habe).
Ich glaube, die einzig gute Lösung hierfür ist ein Controller mit 12 Interrupt-Eingängen, von denen jeweils immer nur die zwei aktiviert werden, die zur momentan aktiven Scheibe gehören. Da gäbe es z.B. den Mega88 (28 Pins, kompatibel zum Mega8 , der hat 2 "normale" Interrupt-Eingänge, und 20 (!) sogenannte Pin-Change-Interrupt-Eingänge.

Aber bevor ich lange weitererzähle was es damit auf sich hat, müsstest Du erstmal sagen, ob Du hinsichtlich des verwendeten Controllers soweit flexibel bist...

DjEKI
12.02.2013, 08:08
vom geld her sollte es nicht scheitern. ich werde mir den besorgen. ich bin jetzt auf arbeit und kann daher nicht sagen, ob mein board sowas ansteuern kann. ich müsste sowieso bei conrad noch was bestellen, aber könntest du mir bitte sagen, ob es ein passendes board gibt? ich bräuchte endlich mal usb :-) aber wenn das zu teuer ist, dann löte i mir auch selber was zusammen.

ok, aber in meinem code habe i sowieso 2 Fehler. set scheibe und goto im label int0_5punkte, wie könnte i die beheben ?

mfg eki

Rone
12.02.2013, 09:30
Hallo!

Eine Interruptroutine muß mit "RETURN" abgeschlossen werden!

Set Scheibe = X ist Unsinnig.
Entweder Set Scheibe (Scheibe = 1) oder Reset Scheibe (Scheibe = 0)
Die ganzen GOTO's sind zu vermeiden.
Stackwerte einfügen.

Bascom Hilfe lesen, lesen, lesen.

MfG

DjEKI
12.02.2013, 09:52
die seite ist gut. von dem hab ich fast mein ganzes wissen. aber den set befehl habe ich dort nicht erklärt bekommen. ich dachte, man könnte den wert ersetzen. dann mach ich eben incr und um auf 1 wieder zu kommen reset und dann wieder incr.
was meinst du mit stackwerte einfügen ?
return nach interrupt ist klar, das wusste ich, steht auch als begründung dar und ich wollte dafür ein ersatz haben, wie ich das ändern könnte. das war nur als hilfe, dass ich dlnach dem interrupt zu einer bestimmten lane möchte. da goto aber den interrupt nicht verlässt ist halt doof...

mfg eki

Rone
12.02.2013, 10:33
Ich meine die interne Bascom_Hilfe. Die Verlinkung erzeugt die Forensoftware.
Oder hier (http://avrhelp.mcselec.com/index.html).

MfG

DjEKI
12.02.2013, 18:58
Axo die, die nutze ich auch sehr häufig. Leider konnte ich zu Variabeln nichts finden, zb das mit den SET. Aber das Problem wäre ja nun gelöst mit incr.

Aber hättest du ne Lösung für mich, wie ich das mit dem Goto lösen kann? Kann man überhaupt mit ein Interrupt zu einer bestimmten Lane springen? Oder geht ein Interrupt immer nur dort weiter, wo es unterbrochen wurde.

-EDIT-
Das mit dem SET ersatz habe ich behoben. Einfach nur Scheibe = 1. Praktisch ohne Set. Funktioniert jedenfals in der Simulation.

mfg EKI

DjEKI
12.02.2013, 22:53
Ui, mein erster Code hatte doch viele Fehler. Jetzt habe ich sogar das mit dem Interrupt verbessert und im Simulator funktioniert bisher alles tadellos.



$regfile = "m32def.dat"
$crystal = 1000000


'************************************************* **********************'


Dim Scheibe As Integer
Dim Punkte As Integer
Dim Scheibe_akt As Bit
Dim A As Byte
Dim B As Byte

A = 0
B = 0
Scheibe = 2
Punkte = 0


Config Portd.0 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Int0 = Rising
Config Int1 = Rising
Enable Interrupts
Enable Int0
Enable Int1
On Int0 Int0_5punkte
On Int1 Int1_10punkte



Do
'---------------------'
If Scheibe = 1 Then
Portd.0 = 1
Scheibe = 0
Do
Incr Scheibe
Waitms 250
If Scheibe_akt = 1 Then
Goto Anfang
End If
Incr B
If Scheibe = 3 Then
Scheibe = 0
End If
Loop Until B = 8
Scheibe = 2
Goto Anfang
Else
Portd.0 = 0
End If
'---------------------'
If Scheibe = 2 Then
Portd.5 = 0
Scheibe = 0
Do
Incr Scheibe
Waitms 250
If Scheibe_akt = 1 Then
Goto Anfang
End If
Incr B
If Scheibe = 3 Then
Scheibe = 0
End If
Loop Until B = 8
Scheibe = 3
Goto Anfang
Else
Portd.5 = 0
End If
'---------------------'
If Scheibe = 3 Then
Portd.6 = 1
Scheibe = 0
Do
Incr Scheibe
Waitms 250
If Scheibe_akt = 1 Then
Goto Anfang
End If
Incr B
If Scheibe = 3 Then
Scheibe = 0
End If
Loop Until B = 8
Scheibe = 1
Goto Anfang
Else
Portd.6 = 0
End If

Anfang:
Scheibe_akt = 0
B = 0
Waitms 1000

Incr A
Loop Until A = 20
End 'hier erscheint ein Ton und zeigt das Ende mit Ergebnis.

'************************************************* ************************'

Int0_5punkte:
Punkte = Punkte + 5
Portd.0 = 0
Portd.5 = 0
Portd.6 = 0
Scheibe_akt = 1
Return

Int1_10punkte:
Punkte = Punkte + 10
Portd.0 = 0
Portd.5 = 0
Portd.6 = 0
Scheibe_akt = 1
Return

DjEKI
13.02.2013, 17:46
Moin,

Nun funktioniert alles super. Der Zufall ist sogar viel besser mit 50ms.
Ich wollte dies jetzt nur für mich vollenden, damit ich auch mal eins hin bekomme :) Und nun muss ich mich mal mit den ATmega88 beschäftigen, was der so alles braucht.

Wenn ich das ATmega88 habe, kann ich die einzelnen Trigger deaktiveren, um ein 2. Treffer zu verhinden?

-EDIT-
Ich habe eben bemergt, das ich schon bei 3kb bin und ich werde bestimmt über 8kb kommen, und von daher lohnt sich der atmega88 leider nicht. Kennt jemand noch einen der mindestens 6 Triggers umschalten kann?

mfg EKI

Hier der Code, und sogar noch optimiert:

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000


'************************************************* **********************'


Dim Scheibe As Integer
Dim Punkte As Integer
Dim Scheibe_akt As Bit
Dim A As Byte
Dim B As Byte

A = 0
B = 0
Scheibe = 1
Punkte = 0


Config Portd.0 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Int0 = Rising
Config Int1 = Rising
Enable Interrupts
Enable Int0
Enable Int1
On Int0 Int0_5punkte
On Int1 Int1_10punkte



Do
'---------------------'
If Scheibe = 1 Then
Portd.0 = 1
Scheibe = 0
Do
Incr Scheibe
Waitms 50
If Scheibe_akt = 1 Then
Goto Anfang
End If
Incr B
If Scheibe = 3 Then
Scheibe = 0
End If
Loop Until B = 15
Scheibe = 2
Portd.0 = 0
Goto Anfang
Else
Portd.0 = 0
End If
'---------------------'
If Scheibe = 2 Then
Portd.5 = 1
Scheibe = 0
Do
Incr Scheibe
Waitms 50
If Scheibe_akt = 1 Then
Goto Anfang
End If
Incr B
If Scheibe = 3 Then
Scheibe = 0
End If
Loop Until B = 15
Scheibe = 3
Portd.5 = 0
Goto Anfang
Else
Portd.5 = 0
End If
'---------------------'
If Scheibe = 3 Then
Portd.6 = 1
Scheibe = 0
Do
Incr Scheibe
Waitms 50
If Scheibe_akt = 1 Then
Goto Anfang
End If
Incr B
If Scheibe = 3 Then
Scheibe = 0
End If
Loop Until B = 15
Scheibe = 1
Portd.6 = 0
Goto Anfang
Else
Portd.6 = 0
End If

Anfang:
Scheibe_akt = 0
B = 0
Waitms 2000

Incr A
Loop Until A = 20
Portd.0 = 1
Portd.5 = 1
Portd.6 = 1
End 'hier erscheint ein Ton und zeigt das Ende mit Ergebnis.

'************************************************* ************************'

Int0_5punkte:
Punkte = Punkte + 5
Portd.0 = 0
Portd.5 = 0
Portd.6 = 0
Scheibe_akt = 1
Return

Int1_10punkte:
Punkte = Punkte + 10
Portd.0 = 0
Portd.5 = 0
Portd.6 = 0
Scheibe_akt = 1
Return

HeXPloreR
13.02.2013, 18:01
Aha...das läuft also.
Für mich sieht es immer noch ziemlich wirr aus - das ist dann wohl der sogenannte "Spagetti Code".
Wo genau ist die Optimierung?
Die Integers würde ich durch Words ersetzen, nicht das jemand denkt Du rechnest damit auch ins minus.

Soll es nun ein Mega8 ; 32 oder 88 werden? Dann sollte man das vielleicht in den Code mit rein schreiben....

Kennst Du das hier schon:
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/

Ich hoffe das Dir bald klar wird, das dieser momentan Code sehr, wirklich,sehr sehr schwer auf 6 Scheiben erweitert werden kann.

Viele Grüße

DjEKI
13.02.2013, 18:16
danke, da kann ich auch mal vorbei schauen.

Der mega88 wird wohl zu klein sein vom Speicher her. Daher schau ich grad bei den mega325 und die haben derbe viele Interrupts, aber da sind soooo viele Pins, da will ich doch lieber die längliche Form haben :) Es kann aber auch ein Mega16 sein. Nur die Interrupts müssen mindestens 6 mal vorhanden sein. Der Code wird natürlich dementsprechend angepasst. Aber wenigstens konnte ich mal sehen, dass der Zufall und ein programmierter MC von mir funktioniert ^^

mhm, der hier wirds wohl sein: ATmega328P (http://www.conrad.de/ce/de/product/155197/ATMEL-AVR-RISC-Microcontroller-Atmel-ATMEGA328P-PU-Gehaeuseart-PDIP-28-Flash-Speicher-32-kB-Speicher-RAM-2-kB)
Was meint Ihr? Ich habe irgendwo gelesen, dass PonyProg mit der P Serie nicht klar kommt. Stimmt das?

mfg EKI

HeXPloreR
13.02.2013, 18:45
Warum sollte der damit nicht klar kommen? - davon hab ich jetzt noch nichts gehört.
Allerdings kenn ich mich auch nicht mit PonyProg aus.

Schau mal hier, vielleicht fällt dir was auf:
EDIT: LINK ENTFERNT - DEFEKT

Viele Grüße

EDIT: Versuch den: http://www.reichelt.de/0/ADW/0/index.html?;ACTION=0;LA=70;SID=11T9ozjH8AAAIAACSMO Csf3e6045d4f0a9bfc52bc7ca1d4be5885
Suche dann nach "328P"

DjEKI
13.02.2013, 19:18
ja, dass die Suche null treffer ergab :)

Dein Link scheint nicht zu funktionieren.

Sauerbruch
13.02.2013, 23:07
Der mega88 wird wohl zu klein sein vom Speicher her.

Also, wenn die ganze Aufgabe darin besteht, per "Zufall" eine von 6 Scheiben auszuwählen und für eine bestimmte Zeit zu aktivieren, 12 Taster zu überwachen und ab und an mal 5 bzw. 10 Punkte aufzuaddieren, brauchst Du (wenn´s einigermaßen programmiert ist) garantiert nur einen Bruchteil von den 8 kB, die z.B. der Mega88 hat.


aber da sind soooo viele Pins, da will ich doch lieber die längliche Form haben

Das ist für den Anfang auch leichter, aber Du wirst schon eine ganze Menge I/O-Ports brauchen: Alleine schon für eine 4-stellige LED-Anzeige wären es mindestens 11 (wenn Du nicht weitere Hardware wie z.B. Display-Treiber verbauen willst). Plus 6 Stück, um die LEDs der sechs Scheiben anzusteuern. Und für die Taster-Abfrage gäbe es zwar die Port-sparende Alternative, nur mit 2 Interrupt-Eingängen zu arbeiten, und die Taster jeder Scheibe über einen eigenen I/O-Port auf High bzw. Low legen, um sie zu aktivieren bzw. zu deaktivieren. Macht also auch nochmal 8 Ports, womit Du schon mal bei 25 Anschlüssen bist...

Sauerbruch
14.02.2013, 09:01
Ich hab nochmal darüber nachgedacht, wie man etwas sparsamer mit den I/O-Ports umgehen könnte. Herausgekommen ist eine Lösung, die mit zwei Interrupt-Eingängen auskommt, und weitere 6 Ports die Aktivierung der einzelnen Scheiben übernehmen, und zwar sowohl der Taster als auch der LEDs, die bei der aktiven Scheibe ja leuchten sollen.

Zur Funktion: Die beiden Interrupt-Eingänge sind über die internen PullUp-Widerstände auf 1 gelegt und müssen folglich als "falling" konfiguriert werden. Die Taster jeder einzelnen Scheibe gehen dann auf einen I/O-Port. Liegt an diesem Port ein High, sind die Taster wirkungslos, weil sie den Interrupt-Eingang somit nicht auf Low ziehen können. Einer der 6 I/O-Ports ist also immer auf Low, und nur die daran angeschlossenen Taster können den Interrupt auslösen.

Als "Abfallprodukt" kann man mit diesem Low-Pegel dann über einen PNP-Transistor auch gleich die LEDs einschalten. Für 6 LEDs (so sah ja Deine Zeichnung aus) brauchst Du sowieso pro Scheibe einen Transistor, denn soviel Strom kann ein normaler Port nicht liefern.

Das hieße also, dass Du für die komplette Steuerung und Abfrage der Scheiben lediglich die beiden Interrupts + 6 I/O-Ports bräuchtest. Und somit käme der Mega8 wieder in Frage :-)

24506

DjEKI
14.02.2013, 18:35
mhmmm, sehr schön. Habe ich sogar verstanden :)
Transistoren habe ich reichlich hier. Denn ich wusste schon, dass die LEDs einen Transistor benötigen. Und da man Transistor sowieso benötigt, haut alles hin :D

Also, dass werde ich noch ausprobieren. Dann werden später 3 weitere Zielscheiben ergänzt.

Und da ich 2 weitere Spielmodies auf den MC programmieren wollte, fand ich den atmega8 etwas zu klein. Aber das is ja sowieso wurscht, ich habe hier nen atmega32 und der kann ruig dafür genutzt werden.

Dann habe ich noch eine Frage. Der MC kann bis zu 16Mhz. Heißt das, intern sind 16Mhz Quarz verbaut? Wenn ich auf mein Board die Frequenz erhöhe, dann dauert das Programm doppelt so lang. Und was bringt mir, mehr Mhz einzustellen ?

mfg EKI

HeXPloreR
14.02.2013, 18:50
Das heißt Du kannst z.B. einen Quarz bis 16Mhz EXTERN anschliessen und der µC kann diesen Takt garantiert benutzen. Dazu müssen die Fuses eingestellt werden UND im Programm muss der verwendete Takt bei Crystal angegeben sein, damit die Zeiten im Programm richtig berechnet werden von Bascom.

Was es bringt, neben mehr Stromverbrauch....naja, Dein Programm läuft mit 16MHz dann eben 16 mal schneller durch, als mit 1Mhz .... Pausen sollten klar sein: Wenn man 2000ms warten möchte, dass das Quarz unabhängig passieren soll.
Daher auch die Angabe im Code...danach muss neu Compiliert und geflasht werden - sollte auch klar sein ;)

Viele Grüße

DjEKI
14.02.2013, 19:33
super danke. am Board sind 8 und 16Mhz verbaut. Da müsste man erstmal schauen, wie man die nutzen kann. Aber das ist nebensache. Reicht denn 1MHz aus? Denn Quarze verursachen ja nur Störungen...
Ich werde die Tage das Programm schreiben mit sauerbruchs tolle Idee.

-EDIT-
Jetzt ist mir aber noch aufgefallen, wegen dem Display. Eigentlich müsste der mega32 dafür noch reichen, oder? Ich habe da auch ncoh gar keine Idee, wie man das Display ansteuert und dann auch Zahlen ergeben.

Weis jemand, wieviel Maximal Strom der mega32 leisten kann? Und wieviel auf jedem Pin? Im Datenblatt habe ich es nicht gefunden.

mfg EKI

HeXPloreR
14.02.2013, 19:51
ja, das machmal.

Ehrlich gesagt von welchem Board redest Du jetzt? - Dein Link zum C zeigte auf einen nakigen Mikrocontroller - sowie meiner auch bei R.


Reicht denn 1MHz aus?

Wenn Du Lucky Luke bist hast Du vielleicht vor Langeweile ein Problem, aber ich denke mit 1Mhz auf einen Interrupt zu horchen ist eher für den µC langweilig - mit 16Mhz verbessert sich die Situation für den µC denke ich nicht besonders ;)



Denn Quarze verursachen ja nur Störungen...

achso, ich dachte das wäre schon noch etwas anders...

DjEKI
14.02.2013, 20:33
ich habe nur den evuluationsboard von Atmel.

DjEKI
16.02.2013, 16:05
Was für Ideen hättet ihr, um die Scheiben als Sensor zu bauen. Die Scheibe an Taster zu kleben wird warscheinlich nicht klappen, da die kleinen Plastikkugeln die Kraft nicht haben.

Es sind Kugeln von 0,20g und werden 65m/s - 70m/s geschossen

mfg EKI

Sauerbruch
24.02.2013, 11:34
Die Scheibe an Taster zu kleben wird warscheinlich nicht klappen, da die kleinen Plastikkugeln die Kraft nicht haben.


Na - was ist das denn für ein Pessimismus? Ts, ts... :nö:

Ich habe mir gerade mal die technischen Daten von ganz normalen Feld-, Wald- und Wiesentastern angesehen, die es z.B. beim großen "C" zu kaufen gibt. Zum Beispiel dieser hier:

http://www.conrad.de/ce/de/product/703673/Cherry-Switches-Subminiaturschalter-DB1-250-VAC-DB1C-A1RD-1-Wechsler-Loetanschluss

Und dann habe ich ein wenig mein Physik-Wissen aus lange vergangenen Schulzeiten rausgekramt :-)

Die Betätigung dieses Tasters erfordert laut Datenblatt eine Kraft von 20 cN, der Tastweg beträgt 15 mm. Nach der Formel "Energie = Kraft * Weg" resultiert, dass zum Betätigen des Tasters eine Energie von 0,2 N * 0,015 m = 0,003 J = 3 Millijoule benötigt wird.

Die Energie der abgeschossenen Kugeln kann man genauso einfach berechnen, nämlich nach der Formel E = 1/2 * m * V^2. Aus Deinen Angaben zu Masse und Geschwindigkeit folgt in diesem Fall, dass die Energie der fliegenden Kugeln 0,5 * 0,0002 kg * (60 m/s)^2 = 0,36 J = 360 Millijoule beträgt.

Wenn die Zahlen für Gewicht und Geschwindigkeit der Kugeln stimmen, könntest Du mit einer einzigen Kugel also etwa 100 (!) Taster gleichzeitig betätigen. Nun muss man natürlich noch berücksichtigen, dass die Scheibe selbst ja auch noch eine kleine Masse hat, deren Beschleunigung auch ein wenig Energie verbraucht. Aber wenn Du irgendein leichtes Material nimmst, sollte das nicht so ins Gewicht fallen.

Dann wäre schon eher die Frage, wie man die Verbindung zwischen der Scheibe und dem Taster herstellt. Für die Innenscheibe ist das ja kein großes Problem, da sie ja einen Mittelpunkt hat, an dem man sie einfach an den Arm des Tasters ankleben kann. Die äußere Scheibe ist ja aber eher mal ein Ring, was das ganze schon etwas schwieriger macht. Man könnte aber z.B. drei Taster kreisförmig anordnen (wie ´ne Art Mercedesstern...), und die äußere Scheibe auf die drei Arme aufkleben. Je nachdem wo die Kugel die Scheibe trifft, würde dann entweder nur ein einziger Taster ausgelöst werden (wenn sie relativ nahe an einem der Taster auftrifft), oder eben zwei, wenn sie in der Mitte zwischen zwei Tastern einschlägt. Wenn Du alle drei Taster parallel schaltest ist es ja aber egal, ob einer oder zwei schließen - einen Kontakt gibt es so oder so.

Oder ist das Projekt etwa schon beerdigt??? :-k

DjEKI
24.02.2013, 12:56
Seid dem 16. Dez 2011 exestiert schon mein Projekt :) Ich habe es noch nicht aufgegeben ^^
Erst jetzt habe ich mich entschlossen die Programmierung selbst in die Hand zu nehmen, mit Eurer Hilfe natürlich :)

Der Taster höhrt sich gut an. bin alle Taster durchgegangen.... wie du den jetzt finden konntest ist mir ein Rätzel... aber bestimmt habe ich den ignoriert, weil der nen Wechsler hat. Aber müsste ja trotzdem funktionieren. Ich seh manchmal auch nicht so richtig durch, mit 1 x Ein/(Ein) .

Ich werde die mal bei gelegenheit bestellen, fals es noch keine bessere Möglichkeit gibt.

Zum glück hattest du noch dein Physikwissen :) Ich habe lange nach einer Formel geschaut und kam immer auf ein anderes Ergebnis -.-

mfg EKI

Sauerbruch
24.02.2013, 13:13
Ich seh manchmal auch nicht so richtig durch, mit 1 x Ein/(Ein) .

Das ist ja das schöne am Arbeiten mit Mikrocontrollern: Man hat so viele Möglichkeiten, sich ganz flexibel an alle möglichen Rahmenbedingungen anzupassen. Wenn der Taster z.B. ein Öffner wäre, dann geht der Pegel halt auf High, wenn der Taster gedrückt wird - mann müsste den Interrupt dann nur als "rising" konfigurieren - fertig.

Mit was für einem Ansatz hast Du die Sache denn gerechnet? Ich bin jetzt nicht so der Mega-Physiker - aber nur mal zum groben Überschlagen ob etwas überhaupt realistisch ist, reicht´s dann doch meistens aus :-)

DjEKI
25.06.2013, 18:17
Moin, Nu lang ist es her und ich kann wieder weiter machen. Einiges hatte mir noch den Kopf zerbrochen.
Nun würde ich die Scheiben so gestalten.
25843
Der Schaumstoff wird als Platzhalter und als Feder genutzt. Praktisch hält der Schaumstoff die Scheibe an der Grundplatte fest. Die Schrauben werden so weit an die Platte geschraubt, dass sie 1mm kurz vor einem Kontakt sind.

Jetzt wollte ich aber gleich weiter denken. Wenn ich darauf schieße, dann muss ich leider damit rechnen, dass die Kugeln zurück geschossen kommen und überall liegen bleiben. Dass ist eher ungünstig. Hätte jemand dafür eine Lösung? Ein Auffangnetz wäre super. Ich wollte schon erst die Platten 45 Grad aufstellen, so dass die Kugel in das unten angeschraubte Netz abprallen. Geil wäre, ein Sensor mit Lichtschranke und dahinter ein Netz. Nur leider ist dies logischerweise nicht möglich.

mfg EKI

HeXPloreR
25.06.2013, 18:30
hmm, ein Kontakt...von einem Schalter? Ich sehe hier nun nur "Schaumstoff und Schrauben". Aus welchem Material ist die Scheibe jetzt geplant?

Anscheinend haben wir hier was verpasst. Klärst Du uns auf?

DjEKI
25.06.2013, 20:11
oh entschuldige, die Scheiben bestehen aus Alu und Kontakt kommt zwischen schraube und Scheibe zustande.

DjEKI
01.07.2013, 15:48
Oh, keine ne Idee? ^^

Nagut, dann lassen wir das erstmal beiseite und wollte mal fragen, ob jemand nen schönes Tutorial weiß, womit ich mich mit dem Dysplay beschäftigen kann. Muss ja bestimmt ne extra Hardware sein.

mfg EKI

DjEKI
10.10.2014, 22:15
Ja, ich habe das Projekt noch nicht aufgegeben und wollte mal nachfragen, was ihr von ein Erschütterungssensor, Schlagsensor sagen würdet. Dies würde meine Sache bestimmt wesentlich erleichtern. Es gibt einige Sensoren, die zutreffen würden, aber evtl könnt ihr mir ein paar nennen und woher ich die bekomme. Ich bin auch auf ein Piezo-Sensor gestoßen und würde auch da gerne wissen, ob es sich lohnt und wie man es anwendet.