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
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.