Guten Abend im tüftle im Moment an einem kleinen Projekt mit einem ATmega8 der zwei DC Motoren steuert. Beide Motoren haben an ihrer Achse eine HAll Dehgeber der ein steigend und eine fallende Flake pro Umdrehung erzeugt. Da ich die genaue Position der Motoren brauche und keine Umdrehung verlieren möchte habe ich die beiden Halls an die exteren Interrupteingange INT0 und INT1 D2 und D3 des mega8 gehängt. Aus irgedeinem Grund zählt mein Programm aber nur mit einem Eingang korrekt. Sobald ich zwei Eingänge überwache stimme die gezählten Flanken mit den tatsächelichen Umdrehungen nicht mehr überein. Kann mir vielleicht juemand einen Tip geben. Hängt es evtl. mit den Prioritäten der Interrupts zusammen? Wenn ja wie lege ich diese überhaupt fest? Wie kann ich sicher gehen dass beide Hall Sensoren zuverlässige gezählt werden? Beste Grüße Sven
guck mal hier: zum Thema Hallsignal --> müsste ja auch einen Rechteck generieren. http://www.mikrocontroller.net/articles/Drehgeber zum Thama Interrupt: http://www.mikrocontroller.net/articles/Interrupt zum Thema ATmega8: http://www.mikrocontroller.net/articles/AVR-Tutorial Falls es an deinem Code liegen sollte oder an deiner Schaltung stell die doch bitte online, denn ohne den Code, oder ohne deine Beschaltung können wir nur raten...
Wenn dein Programm nicht grottenschlecht ist, verliert der MC keine Interrupts. Selbst wenn sie gleichzeitig kommen, sind sie gespeichert. Problem entsteht, wenn die Laufzeit der Ints (dieser oder noch weitere) zu lang ist. Ich vermute dort das Problem.
Weiteres Problem kann sein, dass, wenn der Interrupt durchlaufen wird, bereits neue Interrupts gespeichert werden können, die dann die ISR nochmal aufrufen. Wenn nicht aller Code in der ISR ist, was man ja meist nicht macht, dann darf man nicht vergessen ein Flag zu setzen, ob der Interrupt schon abgearbeitet ist oder nicht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.