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"
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?
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
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.
M.N. schrieb: > Du hättest Dir das Programm überhaupt einmal ansehen soll Tja, hier ist nur die HEX-Datei. Im Thread Beitrag "4-fach Flankenauswertung per Interrupt mit ATmega48/88" findet sich "Jede Flankenänderung wird mit einer schnellen Interruptroutine erfaßt." // init fuer Flankenauswertung per interrupt EICRA |= BIT(ISC10) + BIT(ISC00); // int0 + int1: beide flanken also gerade der Weg, mit dem man es NICHT macht und schon gar nciht dann damit wirbt, daß das programm gegen prellen immun ist. Allerdings ist in dem Programm der richtige Weg immerhin als Option drin, bloss woher soll der Leser das wissen daß du den meinst und nur den ? Über die Defizite warst du dir 2013 offenbar im Klaren (2015 hast du sie dann in diesme Thread einfach wieder vergessen): "die nicht prellen. Falls dies nicht garantiert werden kann, können die Eingangssignale per externen 2 x D-FF synchronisiert werden." (Nein, NIEMAND will das, 1 74HC74 extra spendieren weil das Programm zu dumm geschrieben wurde) aber die richtige Auswertung war da nur eine Option: "Ferner kann die Signalerfassung auch intern synchronisiert werden (Timer0"
Michael B. schrieb: > Über die Defizite warst du dir 2013 offenbar im Klaren (2015 hast du sie > dann in diesme Thread einfach wieder vergessen): > (Nein, NIEMAND will das, 1 74HC74 extra spendieren weil das Programm zu > dumm geschrieben wurde) aber die richtige Auswertung war da nur eine > Option: 100% Zustimmung ehrlich wenn dann würde ich dem Tiny25 PeDas Routine einplanzen wenn es unbedingt ein extra µC werden soll. Ausserdem ist der Tiny als I2C nicht OC was mixed voltage auch nicht vereinfacht, OK mit 8 MHz programmiert ist er wenigstens 8 MHz und 16 MHz kompatibel.
Die hier gezeigten Schaltungen und Programme von mir sind getestet, teilweise in Stückzahlen praktisch erprobt und funktionieren. Ernsthafte Fragen diesbezüglich beantworte ich gerne. Dummen Leuten aber laufe ich nicht hinterher.
M.N. schrieb: > 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. Meine Antwort ist kein Käse, sie sachlich und begründet. Es ist einfach bedauerlich, dass du es nicht schaffst ebenso sachlich zu antworten.
M.N. schrieb: > Die hier gezeigten Schaltungen und Programme von mir sind getestet Ja, das sagt der Hersteller meines Autoradios auch. Du hast eigentlich viele schöne Module erstellt, die für manchmal nachgefragte spezielle Lösungen eine gute Basis wären für die es keine Lösung von der Stange gibt die aber nur eine leichte Abwandlung durch Anpassung der Software oder Ergänzung der Elektronik brauchen, aber deine pentetrante Weigerung, den Stand der Technik zu folgen, sei es bei Vorwiderständen von LEDs oder eben der richtigen Drehgeberausleseroutine, macht es schwer, dich und deine Module zu empfehlen. Es würde dich NICHTS kosten, beim Drehgeber einfach die andere "PeDa" Routine als Default einzuschalten "bis 100000 Striche/s per entprellender Auswertung, auf Wunsch bis 120000 Striche/s mit Flankeninterrupt bei prellfreien Drehgebern umschaltbar', bei CD4094 die Platine mit den SMD Vorwiderständen zu nutzen 'wer nicht will kann 0 Ohm einlöten', ausser daß du über deine eigene völlig verrannte Selbstüberzeugung "in meinem Experiment klappte das aber" springen müsstest, und dir einfach mal sagst: "Die anderen werden schon wissen warum sie ständig darauf hinweisen daß das besser ist, dort liegt schliesslich millionenfache Erfahrung auch unter schwierigen Bedingungen 'handy neben optischem Drehgeber' und nachgemessen '360.0 Grad gedreht, kamen wirklich 1024 bei raus' statt bloss ausprobiert vor". Aber so stehst du dir selbst im Weg, bastelst auf chinesischem Niveau (das können die aber billiger und besser), und kommst nicht zu den relevanten Kriterien für Marktfähigkeit, Module mit bestandenem EMV+LVD Test und RoHS/UL Nachweis. Schade eigentlich.
Die neueren ATtiny2xx, 4xx, 8xx haben ein Hardware TWI, was das merkwürdige USI ersetzt. Um dies zu testen, habe ich die ursprügliche Schaltung angepaßt und das Programm umgeschrieben. Ferner gibt es ein kleines Arduino-Programm zum Auslesen des Zählerstandes, was den Einstieg erleichtert und angepaßt werden kann. http://www.mino-elektronik.de/mt12_iic/mt12_iic.htm#qcnt_tiny202
Mi N. schrieb: > Die neueren ATtiny2xx, 4xx, 8xx haben ein Hardware TWI,... Und was ist dann daran besser? Garnichts. Dieses Projekt war schon vor 5 Jahren einfach zu kurz gesprungen. Damit der Chip, der dieses Ding benutzen will, herauskriegen kann, ob tatsächlich etwas Neues anliegt oder nicht, muß er jedesmal per I2C das Ding pollen. Das ist ja noch umständlicher, als wenn er die DG_Signale selbst auswerten würde. Was hier fehlt, ist ein Status-Ausgang, der anzeigt, ob neue Daten zum Abholen bereitstehen oder nicht. W.S.
Mensch W.S., was ist los? Hat man Dir Deinen Rotwein weggehamstert? W.S. schrieb: > Das ist ja noch umständlicher, als wenn er die DG_Signale > selbst auswerten würde. Du kennst sicherlich nur manuelle Drehgeber, die für 10 ct über den Ladentisch gehen. Dem zuzusehen, sieht ja sicherlich recht lustig aus. Aber es gibt auch Inkrementalgeber, die an ihren Ausgängen Quadratursignale bis in den 100 kHz Bereich liefern. Und das macht dann Dein "Chip" nicht mehr so locker nebenbei. Dank IIC-Schnittstelle kann man einen oder bei Bedarf deutlich mehr dieser Dekoder an einen lahmen µC anschließen. Kostenpunkt pro Kanal < 1 Euro. Wer einen Statusausgang für Zähleränderungen braucht, programmiert ihn sich dazu.
Mi N. schrieb: > Und das macht dann > Dein "Chip" nicht mehr so locker nebenbei. Wenn man denn schon eine Motorwelle o.ä. auf solche Weise abtasten will, dann nimmt man dafür einen geeigneten µC - und der hat die dazu passende Elektronik bereits drin. In Hardware und schnell. Also "mein" Chip macht das mit links. Und Rotwein ist grad noch genug da. Du weißt doch, was der ALLERSCHLIMMSTE Alptraum von John Steed war? - daß kein Sekt mehr im Keller ist. W.S.
John war zwar interessant, aber Emma eben interessanter ;-) Keine Frage, daß Du und Dein "Chip" soetwas können. Aber was sagst Du z.B. einem Maschinenbauer, der einen inkrem. Messtaster an einen Arduino anschließen möchte? Zeigt doch ein Beispiel für Deinen "Chip", was für sie/ihn geeignet wäre. Und damit unsere Freunde hier nicht einschlafen, am besten mit flankengetriggerten Interrupts ;-)
Mi N. schrieb: > Aber was sagst Du > z.B. einem Maschinenbauer, der einen inkrem. Messtaster an einen Arduino > anschließen möchte? Ich sage dem, daß er da eine versierte Fachfirma engagieren soll. Auf die Idee, als Maschinenbauer nen Arduino überhaupt in die nähere Wahl zu nehmen, kommt nur ein grottenschlechter Maschinenbauer. W.S.
Zitat W.S. 25-04-2020: "Aber es ist wohl heutzutage so, daß die allermeisten Leute nicht selber etwas lernen wollen, sondern Ergebnisse ohne eigene Anstrengung haben wollen." Und wenn einer etwas lernen möchte kommt dann: W.S. schrieb: > Ich sage dem, daß er da eine versierte Fachfirma engagieren soll. Und ich dachte, Du würdest ihm weiterhelfen. Dein "Chip" ist doch ein Wunderding, wenn ich Dich richtig verstanden habe. Nur weil jemand Maschinenbau macht, ist er noch lange nicht unfähig, sich Programmieren anzueigenen. Ich kenne etliche Gegenbeispiele! Und wenn es ein Arduino ist, dann ist das ein guter, überschaubarer Einstieg.
:
Bearbeitet durch User
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.