mikrocontroller.net

Forum: Projekte & Code mini Quadraturdekoder + 32 Bit Zähler + TWI, Attiny25


Autor: M. N. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Als kleine kostengünstige Lösung für die Auswertung von Linear-, 
Rotations- oder Drehgebern bietet sich ein ATtiny25 an, da er nicht nur 
die Auswertung und Impulszählung erledigen kann, sondern zur 
Datenausgabe mit seinem USI auch eine IIC-Schnittstelle bedient.

Bei der Beschaltung des Tiny25 sind PB0 (SDA) und PB2 (SCL) für die 
IIC-Schnittstelle fest vorgegeben. Die freien Pins PB4 (Phase-A) und PB4 
(Phase-B) werden für den Anschluß des Inkrementalgebers verwendet; bei 
beiden Eingängen ist der interne Pullup-Widerstand aktiviert, sodaß auch 
passive Geber direkt angeschlossen werden können. Der verbleibende PB1 
kann für optinales /Reset-Signal genutzt werden und hat ebenfalls den 
internen Pullup-Widerstand eingeschaltet.
Sofern für SDA, SCL und /Reset noch zusätzliche Pullup-Widerstände im 
Schaltbild eingefügt sind, dienen diese der Erhöhung der Störsicherheit 
bzw. als Abschlußwiderstände für IIC, falls nicht an anderer Stelle der 
Schaltung bereits vorhanden.

Mit dem intern getakteten ATtiny werden Flankenänderungen bis ca. 350 
kHz erkannt und mit einem 32 Bit Zähler gezählt. Dabei ist es 
unerheblich, ob prellende mechanische Kontakte angeschlossen werden, 
oder das Signal von optischen Encodern oder Hallsensoren stammt. Alle 
Signale werden mit 4-fach Flankenbewertung gezählt. Um bei mechanischen 
Drehgebern die unbrauchbaren Zwischenflanken zu unterdrücken, kann man 
bei der Datenausgabe auf 2-fach Auswertung 'umschalten', was nicht 
anderes bedeutet, als daß Zählerwert/2 ausgegeben wird.

Die Datenausgabe per IIC ist minimal gehalten. Folgende Befehle werden 
beachtet:
'A'  Ausgabe des Zählerstandes
'B'  Ausgabe des Zählerstandes/2 für Geber mit Zwischenflanken
'Z'  Löschen des Zählers

Bei der Ausgabe wird das untere Byte zuerst gesendet. Daher ist es 
möglich, nur ein oder zwei Bytes auszulesen und die Übertragung 
abzukürzen. Werden mehr als vier Bytes gelesen, wiederholt sich die 
Ausgabe des 32 Bit Zählerstandes.

Als IIC-Adresse gibt das Programm 0xB8 vor, die (hoffentlich) nicht mit 
anderen Busteilnehmern zur Kollision führt. Alternativ kann man eine 
eigene Adresse vorgeben, die man ins interne EEPROM an Adresse 0x00 
schreibt. Hier steht normalerweise ein 0xFF. Wird beim Programmstart ein 
Wert != 0xFF gefunden, wird dieser als neue, eigene Adresse verwendet.

Bislang habe ich die Software mit 100 kHz Busfrequenz und einem 
IIC-Master per Software getestet. Vielleicht testet jemand bei Bedarf 
unter anderen Bedingungen und kann seine Erfahrungen mitteilen. Soweit 
bleibt die Software daher eine Testversion.

Die Funktion der Flankenauswertung ist an anderer Stelle schon 
beschrieben: Beitrag "4-fach Flankenauswertung per Interrupt mit ATmega48/88"

Autor: Bert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort. Genau so was suche ich. Habe zwar einen anderen 
Prozessor und zusätzlich noch RGB LED Dioden mit Drehgeber. Dein 
Programm ist allerdings in hex geschrieben. Arbeite mit C. dadurch kann 
ich es nicht anpassen. Hast du vielleicht eine Version in C dazu?

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bert schrieb:

> Danke für deine Antwort. Genau so was suche ich. Habe zwar einen anderen
> Prozessor und zusätzlich noch RGB LED Dioden mit Drehgeber. Dein
> Programm ist allerdings in hex geschrieben. Arbeite mit C. dadurch kann
> ich es nicht anpassen. Hast du vielleicht eine Version in C dazu?

Das Programm könnte ziemlicher Käse sein (Hervorhebung von mir):

> Die Funktion der Flankenauswertung ist an anderer Stelle schon
> beschrieben: Beitrag "4-fach Flankenauswertung per Interrupt mit
> ATmega48/88"

Interrupts sind im Allgemeinen zur Auswertung von Drehgebern nicht zu 
empfehlen.


Alternative: https://www.mikrocontroller.net/articles/Drehgeber

Autor: M.N. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harald schrieb:
> Interrupts sind im Allgemeinen zur Auswertung von Drehgebern nicht zu
> empfehlen.

Du hättest Dir das Programm überhaupt einmal ansehen soll; die 
einleitende Beschreibung hätte ja schon gereicht.
Dann hättest du (vielleicht) gemerkt, daß Deine Antwort Käse ist.

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.