www.mikrocontroller.net

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


Autor: matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: matze (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas K (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas K (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.