Hallo
Ich möchte mit einem Mikrocontroller (80C51 Basierend) auf jede
aufsteigende Flanke von einer externen Lichtschranke eine Counter im mC
heraufzählen. Leider ist dies wie geplant nicht mit einem Hardware
Interrupt (externer Interrupt) nicht möglich, da sie die Frequenz max.
400 mal die Sekunde ist. Nun hab ich gehört, dass es möglich ist einen
unabhängigen Zählmechanismus zu nutzten aus welchem ich z.B. alle 500ms
den gezählten Wert lesen kann.
Weiss jemand wie ich den einbauen muss ?
Oder hat jemand eine andere (bessere) lösung ?
Hallo Daniel,
bei nur 400Hz kannst Du bequem einen externen Interrupt nehmen und dann
ein oder mehrere Byte hochzählen. Das sind immerhin riesige 2500 Befehle
Zeit bis zum nächsten Interrupt.
Wenn es unbedingt die aufsteigende Flanke sein soll, mußt Du einen
Timerinerrupt im Gate-Modus verwenden, siehe:
http://www.specs.de/~danni/tutorial/extint/index.htm
Peter
Hallo Peter
Also, wenn ich 400 mal die Sek. mit einem Interrupt komme ist das alle
1,2ms, reicht es zwischendurch wirklich weitere Progammabläufe zu
realisiern, auch hab ich noch einen RS232 Interrupt sowei einen zweiten
externen Interrupt welcher in der Spitze auch so um die 200 mal die Sek.
kommt.
Mein Prozessor ist mit 14MHz getaktet.
Danke
Dani
Ich würd den Timer/Counter im Gate-Modus verwenden, das ist die
suaberste (und einfachste) Lösung, da da alles hardwareseitig
funktioniert: Flanke kommt, uC zählt (ohne Software oder was auch immer,
100% selbstständig) eins hoch :). Du kannst den aktuellen Wert einfach
aus nem Register rauslesen (wenn das überläuft musst halt was
unternehmen, aber das ist ja auch nur ein Interrupt, der ausgeführt
werden muss).
Rainer.
Ja,
2500 Befehle (bei 12MHz) sind ne Menge.
Du darfst natürlich in Interrupts die Zeit nicht mit Warteschleifen
verschwenden oder umfangreiche Floating-Point-Berechnungen durchführen.
Außerdem hast Du ja je nach Chip 2 oder 4 Interruptprioritäten, d.h. der
Lichtschranke kannst Du dann die höchste zuweisen und somit kann sie
andere Interrupts unterbrechen.
Peter
@Rainer
Ich glaube das ist das was ich suche ! Diese wäre wohl die sauberste
Lösunge welche auch keine Rechen-Recoursen braucht.
Könntest du mir irgendwelche Dokumentationen über diese Sache empfehlen,
die Timer geschichte in diesem uC ist doch sehr kompliziert, oder weisst
du gerade wie ich dies realisieren könnte ?
@Peter
Ja man müsste dieses ausprobieren, doch denke ich ist dies nur eine
Notlösung da ich neben diesen Interrupts doch noch einiges and
Rechenleistung brauche, vielleicht würde es funktionieren, doch da ich
mir nicht sicher bin denke ich das die der Vorschlag von Rainer ein sehr
guter Ansatz ist.
Vielen Dank für die Antworten
dani
Habe mich nun so ziemlich durch das Datenblatt des 89C51RD2
"durchgekämpft", doch fand ich keinen Ansatz zu der Berschreibung von
Rainer (Counter im Gate-Modus) passt.
Könnte mir jemand vielleich eine Tip geben wo ich anfangen könnte, oder
was mit diesem Counter gemeint ist ?
Danke
Dani
Also ein Notlösung ist das keinesfalls. Dazu sind Interrupts ja
schließlich da, daß man schnell auf irgendwas reagiert.
Ich hab schon mit einem DS80C320 einen Interrupt alle 30µs (= 180
Zyklen) realisiert.
Der Gate-Modus ist nur für Impulsdauermessung geeignet oder als
0->1-Interrupt.
Im Counter-Modus kannst Du nur 1->0-Flanken zählen.
Peter
Hallo Peter
Ich verstehe die Gate-Modus Logik leider immer noch nicht, was meinst du
mit "Im Counter-Modus kannst Du nur 1->0-Flanken zählen" ?
Du hast wirklich alle 30µs eine Interrupt (das wären dann ja über 3000
in der Sek) ?.
Alles was ich in der Interrupt routine machen muss ist eine Variable um
eins zu erhöhen und zwar immer wenn ein Signal der Lichtschranke
ankommt, that's it.
Hallo Dani,
ich kann Dir hier natürlich nicht das ganze 8051-Handbuch erklären. Das
must Du schon selber lesen.
Sehr gut ist z.B. das IC20 von Philips, das ist quasi die 8051-Bibel.
Ich weiß bloß nicht, ob die das noch rausgeben. Heutzutage gibt es wohl
nur noch CDs.
Auch von Intel, AMD, Atmel, Dallas gab es solche Handbücher.
Es gab früher auch deutschsprachige Handbücher von Siemens oder Valvo
über den 8051. Vielleicht findet man die noch in Fachbibliotheken.
Peter
Eine eigene Frage?
Dieser Thread ist über 24 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.