Hmm, vielleicht doch noch die Hardware der Lichtschranke.
Siehe Anhang. Hab halt das Case eines Optokopplers genommen, aber man wird wohl drauskommen...
Die Lichtschranke ist eine KTIR0621DS.
DB: http://www.datasheetcatalog.com/dat.....shtml
Hallo zusammen,
ich habe ein Lichtschranke, die am Int1 Eingang eines Mega16 hängt.
Solange nichts die Lichtschranke durchfährt, liegt eine 0 am Eingang an. Ist was dazwischen, gibts ne 1.
Ich hab den Interrupt so eingestellt, dass er bei einer L==>H Flanke auslösen soll. Also sobald etwas durch die Schranke rauscht. Hier die Initialisierung:
On Int1 Lichtschranke
Mcucr.2 = 1
Mcucr.3 = 1
Enable Interrupts
Enable Int1
Doch... Der Interrupt löst nur sehr unregelmässig aus... Eigentlich fast immer nur jedes zweite Mal, wenn etwas durch die Schranke geht. (Das 1 liegt an, aber es gibt keinen Interrupt)...
Ändere ich die Auslösecharakteristik des Interrupts auf "Change", also dass er triggern soll, sobald die Flanke wechselt, dann löst er jedes mal korrekt aus, einfach zwei mal, was ich vermeiden möchte... Die Hardware scheint mir in Ordnung, nur: wieso löst er nicht immer aus.. ?
Dasselbe Phänomen des "nicht immer auslösens" hab ich, wenn ich ihm sage, er soll von H zu L triggern... Funktioniert auch nicht immer... Komishce Sache.. Sobald er auf einen Flankenwechsel triggern soll, triggert er erfolgreich auf beide Flanken, und zwar immer.
Hab ich was vergessen?
Herzlichen Gruss
Mario
Hmm, vielleicht doch noch die Hardware der Lichtschranke.
Siehe Anhang. Hab halt das Case eines Optokopplers genommen, aber man wird wohl drauskommen...
Die Lichtschranke ist eine KTIR0621DS.
DB: http://www.datasheetcatalog.com/dat.....shtml
Hallo,
bei der URL kommt nur "Not Found", weil die Punkte so mit drinstehen !
Kann es evtl. sein, das die Flanke nicht Steil genug ist, weiss jetzt nicht wie das genau zu sein hat, das der AVR das auch als solches erkennt
Evtl. mal einen Schmitt-Trigger dazwischen bauen.
Nunja... bei Triggerung auf beide Flanken erwischt er diese immer..
Hier das Linktier:
http://www.datasheetcatalog.com/data...IR0621DS.shtml
Versuchs doch mal nicht mit dem Interrupt, sondern mit dem Analog Komperator.
Sollte es Wirklich an der Flankensteilheit liegen, müsste es damit eigentlich funktionieren.
Es sei denn du brauchst den Komperator anderweitig...
Geht net... Chip schon verlötet (SMD) und auf der Unterseite der Platine, die bereits eingebaut ist...
Kommst Du noch an den Optokoppler ran ?
Eventuell kannst Du dem Teil ja noch einen Komperator oder Transistor nachschalten um die Flankensteilheit zu erhöhen ?
Oh, bei mir ists ne Lichtschranke, hab nur den Optokoppler als Symbol genommen.
Hab nochmals nachgeschauen - auch wenn er auf beide Flanken triggern soll, dann erwischt er die fallende fast nie...
Aber das ist doch doof... Erkennt der AVR nun die Flanke, oder ein Wechsel von 0/1 oder 1/0? Erkennt er am Interrupteingang langsame Zustandswechsel nicht?
Ich fürchte fast das es so ist, auch wenn ich im Datenblatt auf die schnelle keine Angabe darüber gefunden hab.Erkennt er am Interrupteingang langsame Zustandswechsel nicht?
Da steht nur vom Timing bei Wakeup was drin.
Eventuell kann man ja mal im Datenblatt von nem ATMEGA 8 oder ATMEGA 32 schauen.
Ich denk nicht das die Interruptschaltungen bei den Chips wesentlich anders sind.
Der INT 2 ist anscheinend intern anders aufgebaut, wenn Du da rankommst kannst Du ja mal die beiden Pins brücken und den INT 0 softwaremäßig abschalten und deine Routine im INT 2 ausführen.
Ich denke eher, das der Wurm in der Software liegt.
Viel zu lange Interupt Routinen zeigen beispielsweise exakt diese Symtome. Allerdings kann man da ohne Code nicht allzuviel machen.
Grundregeln des Forenpostings:
1. Nutze niemals die Suchfunktion!
2. Überprüfe niemals die Topics nach Ähnlichkeiten!
3. Schreibe alles in hellgelb!
Lesezeichen