Forum: Mikrocontroller und Digitale Elektronik ATmega64/128?!?


von matze (Gast)


Lesenswert?

folgendes problem:
ich steuere meine schaltung über einen drehschalter an. jede dieser 4
stellungen muss in der lage sein einen interrupt auszulösen, da so ein
timer aus den anderen routinen beendet werden muss.
Zusätzlich hab ich 4 Taster(!!)..die ebenfalls einen Interrupt auslösen
können wenn ein timer gesetzt ist.
es geht also darum einen µC zu finden der auf diese 8 interrupts
reagieren kann. nach einem blick auf die hp bei atmel hab ich dann den
oben genannten typen gefunden. falls jemand einen besseren/günstigeren
weiss bin ich ganz ohr :)allerdings gibt mir das datenblatt ein paar
rätsel auf. hat jemand mit dem schonmal etwas programmiert das diese
externen interrupts verwendet..oder weiss jemand wie man das
initialisiert..oder hat vielleicht jemand sogar mal ne resetschleife wo
die initialisierung gemacht wird?! irgendwie krieg ich das nicht so hin
wie es sein soll
danke schonmal für eure hilfe,
greetz matze

von crazy horse (Gast)


Lesenswert?

für Schalter/Taster brauchst du normalerweise überhaupt keine Ints.
Einen regelmässiger Timerinterrupt (1-10ms), da kannst du alle Schalter
abfragen, die Zustände speichern und im Hauptprogramm dann enntsprechend
verzweigen.

von matze (Gast)


Lesenswert?

hast du für sowas mal ein beispiel für mich?!?
ich hatte an sowas gedacht aber war mir nicht so ganz sicher ob das
klappt

von matze (Gast)


Lesenswert?

PS... du hast aber gesehen das du aus längeren timerroutinen heraus
abbrechen musst oder?!

von Peter D. (peda)


Lesenswert?

Der Mensch hat eine typische Reaktionszeit von etwa 0,3s (nüchtern).

Superschnelle Interrupts braucht es deshalb nicht.

Frage einfach im Timerinterrupt (10..300ms) alle 8 Eingänge ab, bzw.
entprelle sie darin auch gleich.
In der Codesammlung findest Du diverse Beispiele von mir, z.B.:
http://www.mikrocontroller.net/forum/read-4-20549.html


Peter

von Alex (Gast)


Lesenswert?

Man könnte auch alle Interruptquellen parallel auf ein ODER-Gatter legen
und dessen Ausgang auf einen Interrupteingang legen. Wechselt der Pegel
einer Interruptquelle von 0 auf 1 geht der ODER-Ausgang auf High und
löst einen Interrupts aus. In der ISR kann dann geprüft werden, was den
Interrupt ursprünglich ausgelöst hat (Auslesen der Ports) und
entsprechende Maßnahmen ergriffen werden.

Gruss Alex

von Thomas K (Gast)


Lesenswert?

Also eine Reaktionszeit von 0,3s ist meiner Meinung nach sehr
übertrieben. Soweit ich mich erinnern kann hat ein Mensch ungefähr eine
Reaktionszeit von 0,8s.
Im Verkehr(sunterricht) wird sie sogar mit 1s angegeben.

Wie schnell (eigentlich kurz) jemand einen Knopf drücken kann, hat
finde ich nichts mit der Reaktionszeit zu tun

von matze (Gast)


Lesenswert?

Okey...also vielleicht kann mir von euch wer weiterhelfen..das prob
wächst mir langsam über den kopf...
es geht um eine überwachungssteuerung für einen kleinen robot.
ich poste mal das problem mit den timern das ich hab

Aufgabe:
wir besitzen einen Drehschalter mit den stellungen 1 2 3 4
zusätzlich 5 zu überwachende kontakte(K1-K5) und 2 sensoren (S1 S2)
ausgänge sind die ports U V W X Y Z

K1 an: (10sec)
nur in der stellung 2 kann timer1 gesetzt werden, aber auch nur, wenn
S1 oder S2 an ist. sind diese an werden U und V gesetzt, W gelöscht.
erst wenn beide sensoren aus sind, startet der 10 sekunden timer.
springt innerhalb der 10 sekunden ein sensor wieder an, wird der zähler
wieder null gesetzt und wartet bis wieder beide aus sind, dann wieder 10
sec etc. sind die 10 sekunden um werden u und v gelöscht
In den stellungen 1 3 und 4 wird der zähler sofort resetet da der timer
in diesen stellungen nichts machen darf. die sensoren sind in den
stellungen uninteressant.

a)K1 aus: (30sec)
wenn S1 und K2 high sind, wird timer gesetzt und Z. befinden wir uns in
der stellung 2, dann wird auch port Y gesetzt. wenn K2 ausgeht wird
timer gestartet 30 sekunden. wenn in der zwischenzeit K2 wieder angeht,
muss wieder gewartet werden bis dieser wieder aus ist. Wenn K3 oder K4
activiert werden wenn K2 low ist wird der zähler neu gestartet. wenn er
irgendwann 30 erreicht hat werden die
Ports Y und Z gelöscht. zusätzlich wird eine warte schleife bnötigt.
wenn der zähler überläuft durch K2= low wartet er 120 sekunden und
ändert ein internen bit control von 0 auf 1


wie gesagt, das ist nur ein teil dieses programs, aber das ist der part
der mir kopfzerbrechen bereitet. welchen typ würdet ihr dafür bzgl port
anzahl und timing etc nehmen, bzw hat wer mal ne vergleichbare routine
für mich?!? ich brauche wirklich hilfe :/
gruss matze

von Matthias (Gast)


Lesenswert?

Hi

@Thomas K
die Reaktionszeit hat schon etwas damit zu tun wie auf Tasten reagiert
werden muß. Drückt ein Mensch diese Taste so erwartet er innerhalb
einer gewissen Zeit eine Reaktion auf seinen Tastendruck. Die Reaktion
sollte idealerweise "sofort" erfolgen. Was aber empfindet der Mensch
als "sofort". Hier würde ich mal max. 200ms ansetzen. Kannst du ja
mal selber ausprobieren: Schreibe ein Programm das nach einem
Tastendruck eine LED einschaltet und mach die Zeit zwischen Tastendruck
und LED einschalten variabel. Jetzt verkleinerst du die Zeit solange bis
Tastendruck und LED angehen für dich gleichzeitig passieren. 800ms sind
da viel zu viel.

Reaktionszeit ist ja ein dehnbarer Begriff. Die Reaktion auf ein
unerwartetes Ereigniss (irgend ein Depp der einem die Vorfahrt nimmt)
dürfte deutlich länger sein als die Reaktionszeit auf ein erwartetes
Ereignis z.B. der Start eines 100m Sprints. Dazu hab ich
http://sport.soft.uni-linz.ac.at/tour/tour.2.2.html gefunden. Da hat
der beste etwa 300ms Reaktionszeit. Da das aber wohl die Zeit vom Knall
bis zur ersten Muskelbewegung ist dürfte die reine Erfassungszeit für
ein Ereignis etwas darunter liegen.

Matthias

von Thomas K (Gast)


Lesenswert?

Ok, wenn man es so sieht, dann ist es eine Reaktionszeit.
Du kannst mir aber glauben, dass ich beim täglichen Weckerstellen nicht
auf das Umschalten der Ziffern warte, sonder so schnell wie möglich auf
eine gewissen Wert hin drücke.
Außerdem kann ich ja auch vor dem Drücken berechnen wie oft ich drücken
werde. Da drückt man dann so schnell und so kurz wie möglich z.B. 10 mal
den Knopf. Das hat dann sicher nichts mit Reaktionszeit zu tun. Da
reagiere ich ja auch nichts

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.