www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zählroutine


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rainer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dani (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dani (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.