Forum: Mikrocontroller und Digitale Elektronik Zählroutine


von Daniel (Gast)


Lesenswert?

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 ?

von Peter D. (peda)


Lesenswert?

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

von Daniel (Gast)


Lesenswert?

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

von Rainer (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Daniel (Gast)


Lesenswert?

@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

von Dani (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Dani (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.