Ext. Interrupt wird nicht immer ausgelöst

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 21 5 2025  20:13:48      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Oszilloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( 1 | 2 Nächste Seite )      


Autor
Ext. Interrupt wird nicht immer ausgelöst

    







BID = 397101

Steppenwolf

Schreibmaschine



Beiträge: 1757
Wohnort: Zürich, Schweiz
Zur Homepage von Steppenwolf
 

  


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 der Zustand wechselt, dann löst er jedes mal korrekt aus, einfach zwei mal, was ich vermeiden möchte...(Der Gegenstand kommt in die Schranke und geht wieder ==> zwei Flanken ==> Zwei mal ISR) 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?

Kurz und knackig:
Int1 wird benutzt
Int1 auf Eingang, Pullup ein.
Obwohl die Flanke L==>H da ist, wird die ISR nicht ausgeführt
Ändert man die Einstellung, sodass er auf alle Flanken triggert, dann löst er absolut immer aus. Ansonsten löst er eigentlich, bis auf wenige Ausnahmen, nur jedes zweite mal aus.


Herzlichen Gruss
Mario

_________________
Meine Projekte:
http://mauerer.m.googlepages.com

[ Diese Nachricht wurde geändert von: Steppenwolf am  5 Jan 2007 16:59 ]

BID = 397234

Steppenwolf

Schreibmaschine



Beiträge: 1757
Wohnort: Zürich, Schweiz
Zur Homepage von Steppenwolf

 

  

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

Herzlichen Gruss
Mario

_________________
Meine Projekte:
http://mauerer.m.googlepages.com

BID = 397235

Steppenwolf

Schreibmaschine



Beiträge: 1757
Wohnort: Zürich, Schweiz
Zur Homepage von Steppenwolf

*zensur*

jaja...




_________________
Meine Projekte:
http://mauerer.m.googlepages.com

BID = 397277

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Also, soweit ich das überblicke, (habe grade ein ASM-Programm fertiggestellt, was ebenfalls auf nem '16er läuft und den ext. INT verwendet), sind alle Werte richtig gesetzt.

Schreibe doch mal ein kleines Diagnoseprogramm, dass z.b. immer über RS232 einen Wert zum Rechner sendet, wenn es eine fallende Flanke gibt.

Diese müssen nicht unbedingt von der LS kommen. Wenn damit alles gut funktioniert, dann muss es an der Lichtschranke liegen.

PS: Pull-Up richtig aktiviert?

DDRx.n muss 0 sein; PORTx.n muss 1 sein; dann wird der Pull-Up aktiviert.

Also:

On INT1 LS
Enable INT1
Enable Interrupts
MCUCR = MCUCR OR &HC 'Fallende Flanke
GICR = CICR OR &H40 'INT1 in GICR setzen
...

_________________

BID = 397296

Steppenwolf

Schreibmaschine



Beiträge: 1757
Wohnort: Zürich, Schweiz
Zur Homepage von Steppenwolf

Ja, pullups drinne, richtiger Pin genommen.

Ich lass immer ein paar Leds aufblinken, falls der Interrupt kommt (zur Diagnose)
Ich nehme mal die Sensorleitung der LS und halte sie direkt an GND oder VCC, mal schauen, obs dann noch klemmt.

Auffällig ist auch, dass es fast nur jedes zweite mal nicht klappt... Also fast, als ob es zufällig verteilt ist

edit:
direktes Dranhalten geht net so gut ==> es prellt zu stark...

edit:

Oh, habs grad nochmals so gemacht, dass er auf beide Flanken triggern soll... Meist erwischt er die fallende auch nicht richtig... Die steigende geht besser...
Liegt wohl an der LS... Die Leitung zum AVR hat etwa 10cm Länge.

_________________
Meine Projekte:
http://mauerer.m.googlepages.com

[ Diese Nachricht wurde geändert von: Steppenwolf am  6 Jan 2007 10:11 ]

[ Diese Nachricht wurde geändert von: Steppenwolf am  6 Jan 2007 10:17 ]

BID = 397314

Morgoth

Schreibmaschine



Beiträge: 2930
Wohnort: Rockenhausen (Pfalz)

Nimm im zweifelsfall einfach mal nen hochohmigeren widerstand für den Empfänger. Bei meinem Torzähler hab ich 2MOhm

_________________
Es irrt der Mensch solang er strebt

BID = 397333

Steppenwolf

Schreibmaschine



Beiträge: 1757
Wohnort: Zürich, Schweiz
Zur Homepage von Steppenwolf

Der war mal 10k.. Bin damit runtergegangen, weil je kleiner, desto höher die response time gemäss Datenblatt. Ich kann auch mal 2MOhm reinhängen, hab ich sogar hier.
Aber komisch ist das doch.. Die Schranke geht bis 4.6V hoch, jedes mal, sehe es auch am Oszi. Ausserdem beträgt die Frequenz, bei der die Schranke durchquert wird, gerade mal 880 Hz, also vorig Zeit..

_________________
Meine Projekte:
http://mauerer.m.googlepages.com

BID = 397336

Ltof

Inventar



Beiträge: 9369
Wohnort: Hommingberg

<spekulationsmodus>
Zu geringe Flankensteilheit?
Klemm mal einen Schmitt-Trigger zwischen Lichtschranke und µC.

Gegenprobe:
Einen Taster mit langsamer RC-Kombination am µC.
</spekulationsmodus>

Gruß,
Ltof

_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)

BID = 397340

Steppenwolf

Schreibmaschine



Beiträge: 1757
Wohnort: Zürich, Schweiz
Zur Homepage von Steppenwolf

So ein AVR triggert doch nicht auf die Flanke, sondern auf den Wechsel von 0 zu 1... würd ich sagen, denn so erkennt er ja eine Flanke... Ischt dem nicht wurscht, wie steil die Flanke ist? Hauptsache Wechsel würd ich sagen...

_________________
Meine Projekte:
http://mauerer.m.googlepages.com

BID = 397343

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Es muss eigentlich an den Flanken liegen.

Mach das wirklich mal mit nem Schmitttrigger ('40106 o.ä.), denn softwaremäßig scheint alles in Ordnung zu sein.

Hast du die möglichkeit, saubere Rechtecke zu erzeugen? Wenn ja, dann stell' z.B. ne Frequenz von 10Hz ein und lasse bei jeder fallenden Flanke einen IRQ auslösen. In der ISR kannst du ja dann einen Pin immer togglen. Den schließt du dann an ein Oszi an. Auf Kanal 1 also das Rechtecksignal, auf Kanal 2 das vom AVR erzeugte Signal.
Es wird dann ein Signal erzeugt, dessen Frequenz 1/2 der Eingangsfrequenz ist.

Da sieht man dann genau, ob das Ding ordentlich läuft.


Zitat :

So ein AVR triggert doch nicht auf die Flanke, sondern auf den Wechsel von 0 zu 1

Einen Wechsel von 0 auf 1 oder umgekert nennt man Flanke .
Und natürlich muss eine gewisse Flankensteilheit da sein. Sonst ist das Signal zu lange im undefinierten Bereich (irgendwo zw. 1 und 0).


_________________


[ Diese Nachricht wurde ge&auml;ndert von: DonComi am &nbsp;6 Jan 2007 14:26 ]

[ Diese Nachricht wurde geändert von: DonComi am  6 Jan 2007 14:28 ]

BID = 397345

Morgoth

Schreibmaschine



Beiträge: 2930
Wohnort: Rockenhausen (Pfalz)


Zitat :
Steppenwolf hat am  6 Jan 2007 13:42 geschrieben :

Der war mal 10k.. Bin damit runtergegangen, weil je kleiner, desto höher die response time gemäss Datenblatt.

Tippfehler?
Bei mir sind das 2M, weil die Flanke anders (für µC-Ermessen)überhaupt nicht zustande kam. Und superflott ist das Ding immer noch.
Aber: bei mir ist das auch andersrum verschaltet:
also IRTRANS1+2-->µC
-----------------------------R
----------------------------GND


_________________
Es irrt der Mensch solang er strebt

BID = 397346

Steppenwolf

Schreibmaschine



Beiträge: 1757
Wohnort: Zürich, Schweiz
Zur Homepage von Steppenwolf

jäsoo..
hmhm, Rechteckgenerator.. muss ich was zusammenstricken. Mach ich später mal, werde berichten.
Schmitttrigger hab ich keine hier.

Aber irgendwie komisch So ne Lichtschranke sollte doch schnell genug sein.. bei anderen verbauten LS klappt das.
Alternative: ich könnte sie näher zum AVR bringen und so die 10cm Signalkabel, die den Int. am AVR auslösen, verkürzen...

Also folgendes:

- Grösseren Pullup für die LS
- LS näher bei AVR positionieren
- Rechteck auf den AVR loslassen
- Schmitttriger dazwischen

Werde mal ein wenig spielen.
Edit: Die LS-Schaltung wie ich sie hab wird im DB angegeben, um die Response Time zu testen. Ich hab sie auch schon früher so verwendet, sollte ja auch funktionieren.
Ja schaut mal ins DB der LS, da unten bei den Diagrammen. Die Response Time wird grösser, je grösser der Widerstand...

_________________
Meine Projekte:
http://mauerer.m.googlepages.com

[ Diese Nachricht wurde geändert von: Steppenwolf am  6 Jan 2007 14:35 ]

BID = 397366

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Ich denke, du verwendest den internen Pull-Up?

Wie siehts denn aus, du hast doch ein Oszi. Schau dir doch mal an, wie die Flanke aussieht. Im Idealfall darfst du die Flanke als solche nicht erkennen. Da ist dann der Strahl oben (5V) und im nächsten Moment auf 0V. Wenn die Flanke allerdings langsam sinkt, hätten wir (schön wärs) das Problem gefunden.

Außerdem sollte der Pull-Up, wenn denn der interne nicht verwendet wird, nicht zu hoch sein. Der AVR hat zwar recht hochohmige Eingänge, aber ich würde dennoch niederohmig bleiben. (So im Bereich 4.7-10k&Omega;.
Die LS hat ja nen OC-Ausgang, vllt. wird der Transistor nicht voll durchgesteuert -> mit nem zweiten verbessern, der wirklich schnell den Eingang auf Masse zieht.

_________________

BID = 397378

Steppenwolf

Schreibmaschine



Beiträge: 1757
Wohnort: Zürich, Schweiz
Zur Homepage von Steppenwolf

Nunja, mitm Oszi is nix... Das ist die LS meiner Propclock.. .Da kann ich schlecht die Oszikabel ranmachen
Der interne Pullup läuft.
Ich schau mal... Momentan muss ich die Uhr reparieren... Es hat sie zerlegt (Den Ausgleichsbehälter hats bei 1300 RPM abgerissen)

Herzlichen Gruss und Danke für die Tipps

Mario

_________________
Meine Projekte:
http://mauerer.m.googlepages.com

BID = 397524

Ltof

Inventar



Beiträge: 9369
Wohnort: Hommingberg


Zitat :
Steppenwolf hat am  6 Jan 2007 14:33 geschrieben :

Aber irgendwie komisch So ne Lichtschranke sollte doch schnell genug sein..

Die Flanke wird doch auch von der Geschwindigkeit der Verdunkelung geformt.

Gruß,
Ltof

_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)


      Nächste Seite
Gehe zu Seite ( 1 | 2 Nächste Seite )
Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 13 Beiträge im Durchschnitt pro Tag       heute wurden bisher 6 Beiträge verfasst
© x sparkkelsputz        Besucher : 184153293   Heute : 6114    Gestern : 6673    Online : 248        21.5.2025    20:13
2 Besucher in den letzten 60 Sekunden        alle 30.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0440771579742