Hi, vorab: Ich habe schon einige Theards zu diesem Thema durchgelesen, aber wie bei so manch anderen passen die Theards nur bedingt zu meiner Anwendung. Den sehr ausfuehrlichen Theard von Peter Dannenberger habe ich ebenfalls schon gesehen... allerdings können die Beiträge mir nur bedingt zur Lösung meines speziellen Problems helfen. Ich hoffe, dass ich nichts übersehen habe. Nun zum eigentlichen Thema: Ich moechten 3 Optoreflexkoppler vom Typ CNY70 auslesen um daraus auf die zurueckgelegte Wegstrecke von 3 Rädern zu schließen. Der Schaltplan ist oben sichtbar. Ich habe die CNY70 an die Interrupt Pins des Atmega32 angeschlossen und bin mir bei dieser Sache schon nicht wirklich sicher. 1.) Ich habe schon einen kleinen Test mit einer blinkenden LED gemacht, die aufleuchdet, wenn der Sensor Kontakt hat und aus ist wenn er keinen hat. Das funktionierte soweit ganz gut. Allerdings habe ich, wie man sehr gut sehen kann, keinen Schmitt Trigger eingebaut und bin mir deshalb nicht sicher, inwiefern das die Messergebnisse beeinflussen koennte. 2.) Wenn ich die 3 CNY an die Interrupt Pins anschließe, koennte das ja unter Umstaenden eine sehr hohe CPU-Auslastung zur Folge haben, wie ich in dem Artikel "Drehgeber" auf dieser Seite nachgelesen habe. Außerdem war mit INT2 irgendwas besonderes, das weis ich aber nicht mehr genau. Ist es vielleicht sinnvoll die Sensoren an einen anderen Pin anzuschließen? 3.) Die Frage ist vielleicht wirklich idiotisch, aber ich bin relativ neu in diesem Geschaeft. Ich nehme mal an, dass ich keinen Timer brauche, wenn ich die Sensoren direkt an die Interrupt Pins anschliesse? Ist es vielleicht nicht sinnvoller auf einen Atmega128 umzusteigen und dann einen Sensor jeweils an einen Timer Pin anzuschließen, um somit die Zählung mithilfe eines Timers vorzunehmen? Gruß, Bernd
>1.) Ich habe schon einen kleinen Test mit einer blinkenden LED gemacht, >die aufleuchdet, wenn der Sensor Kontakt hat und aus ist wenn er keinen >hat. Das funktionierte soweit ganz gut. Allerdings habe ich, wie man >sehr gut sehen kann, keinen Schmitt Trigger eingebaut und bin mir >deshalb nicht sicher, inwiefern das die Messergebnisse beeinflussen >koennte. Ein Schmitttrigger vor dem Eingang wuerde die Stoerscherheit deutlich erhoehen. Eventuell noch mit einem kleinen RC-Filter. >2.) Wenn ich die 3 CNY an die Interrupt Pins anschließe, koennte das ja >unter Umstaenden eine sehr hohe CPU-Auslastung zur Folge haben, Um wieviele Impulse / Sekunde reden wir hier ? Nur um mal kurz einen Zaehler hochzuzaehlen da wurde ich sagen da schaut die CPU fast den ganzen Tag zum Fenster raus. Da geht dir die CPU vor Langeweile ein. Gruss Helmi
Hi, also das habe ich noch vergessen zu schreiben: Die Motoren habe eine maximale Umdrehungsgeschwindigkeit von 200U/min. Ich wollte dann bei jeder viertel Umdrehung einen Zähler hochzähln lassen. Wie siehst du das denn mit dem Anschluss an INT0, INT1, INT2. Wuerdest du das anders machen? Gruß, Bernd
>Die Motoren habe eine maximale Umdrehungsgeschwindigkeit von 200U/min. Das sind ja mal gerade ca. 13 Hz. Da schlaeft die CPU ein. >Wie siehst du das denn mit dem Anschluss an INT0, INT1, INT2. Wuerdest >du das anders machen? Da es mehrere moeglichkeiten gibt waere das ein davon. Bei 13 Hz kannst du das ganze aber auch per Polling der IO Pins machen in einer Timerinterrupt routine. Aber mach das mal per INT 0 .. Aber denk daran das du ein sauberes Signal auf die Pins gibst. Also RC-Filter -> Schmitttrigger -> Eingang. Ich habe so was aenliches vor ein paar Wochen fuer einen Kunden gemacht.
Moin, danke fuer die schnelle Hilfe. Ich denke, dass ich die Prellungen durch einen Schmitttrigger von dieser Art beseitigen kann: http://www.reichelt.de/?;ACTION=3;LA=444;GROUP=A2211;GROUPID=2924;ARTICLE=12636;START=0;SORT=user;OFFSET=16;SID=32Iy6GdKwQASAAAEZ@VfAd7521acc4438dd631887bef3b55d1ad2 Oder brauche ich sonst noch Extrateile? Gruß, Bernd
Wozu braucht man denn einen externen Schmitt-Trigger, wenn der AVR schon an jedem Pin einen eingebauten hat? Bei 200U/min dauert eine Umdrehung 0,3 Sekunden (60 Sekunden/200 Umdrehungen) das ist eine halbe Ewigkeit für einen Mikrocontroller. Die Abtastrate ergibt sich dann noch aus der Teilung (10 Striche pro Umdrehung benötigen eine höhere Abtastrate als 5...) Bei einer Viertelteilung ergibt sich also alle 0,075 Sekunden (75ms) ein "Tick". Das sollte sich per Timer-Interrupt und Polling erreichen lassen... Zum Vergleich: Ein 16Bit-Timer mit 1MHz betrieben braucht für einen Überlauf 65,536ms... Wie kommt Helmut eigentlich auf ca. 13Hz? Das wären nach meiner Rechznung ~800 Umdrehungen/Min.
>Oder brauche ich sonst noch Extrateile? Ausser Huehnerfutter wie R und C nicht. Kannst aber auch einen 74HC14 verwenden. Dann haste sogar 6 Mann drin. Denk daran das die Teile das Signale invertieren.
>Wie kommt Helmut eigentlich auf ca. 13Hz? Das wären nach meiner >Rechznung ~800 Umdrehungen/Min. Oben stand was von 4 Impulse / Umdrehung. Ok die Schmitttrigger kann man weglassen hatte ich im Moment nicht daran gedacht.
Hallo, also ich habe wohl ein Missverstaendnis selbst produziert. Ich habe natuerlich eine Odometriescheibe mit 60Segmenten und ich wollte von dieser Odometriescheibe jeweils eine Viertel Drehung nehmen. Also nach 15 Segmenten eine variable z.b "vierteldrehung=0,1,2,3,4" oder so setzen, danach beginnt die natuerlich wieder bei 0. Ich wollte das fuer jede einzelne Scheibe machen, da ich dachte, dass ich spaeter auch jeden einzelnen Motor selbst regle. Dieser vierteldrehungswert soll dann fuer eine bessere Reglung der Motoren sorgen. Ich mache das zum ersten mal und deswegen kann es natuerlich sein, dass das totaler Unsinn ist. Ich nehme aber mal an, dass ich die Variable, wenn ich sie Global als volatile bezeichne auch außerhalb der ISR verwenden kann oder? Nun noch eine Frage wegen dem Schmitt Trigger: Der CNY70 liefert doch nur analoge Signale, die eigentlich digitalisiert werden muessten, oder? Natuerlich kann man das per Software machen, aber wenns mit nem kleinen IC geht waere mir das wesentlich lieber. Habt ihr da ne Idee? Gruß, Daniel
>Der CNY70 liefert doch >nur analoge Signale, die eigentlich digitalisiert werden muessten, oder? Der wird dir keine TTL Pegel liefern. Meistens kommt da was Sinusartiges beir raus. Um das auf einen vernüftigen Pegel zu bekommen kannst du einen Komparator ala LM339/LM393 dazwischen schalten.
>Ich habe >natuerlich eine Odometriescheibe mit 60Segmenten und ich wollte von >dieser Odometriescheibe jeweils eine Viertel Drehung nehmen. Ich muß jetzt gar bitterlich weinen. Das erinnert mich so unglaublich an die Kunden die so gar nicht mit Infos rüberkommen. Da baut man etwas was funktioniert (nach Kundenvorgabe), und mit einmal schaut man nur noch blöd aus der Wäsche weil IRGENDEIN VOLLTROTTEL WICHTIGE INFORMATIONEN unterschlagen hat. Wer hat dich eigentlich zum Hardwareentwickler gemacht?
Hi >Das erinnert mich so unglaublich an die Kunden >die so gar nicht mit Infos rüberkommen. >Da baut man etwas was funktioniert (nach Kundenvorgabe), >und mit einmal schaut man nur noch blöd aus der Wäsche weil >IRGENDEIN VOLLTROTTEL WICHTIGE INFORMATIONEN unterschlagen hat. Und ich dachte das geht nur mir so. MfG Spess
@spess
>Und ich dachte das geht nur mir so.
Du bist nicht allein :(
Ich kann auch mitjammern. (Die 10 KM/H max. sollen auch Obergrenze sein und eigentlich sind es 5 KM/H. Hat ihnen das keiner gesagt? Also nicht zählen wenn zu schnell.). avr
ich sag, der is student... hoffentlich googlet dein betreuer fleißig. die transistoren im cny70 sind verqeuer angeschlossen. viel spaß
>die transistoren im cny70 sind verqeuer angeschlossen.
Und der Snubber bringt auch nichts mit 15k Widerstand.
Hi
>die transistoren im cny70 sind verqeuer angeschlossen.
Vorsicht, darauf bin ich auch schon einmal hereingefallen. Es gibt
verschiedene Datenblätter von dem Teil, die sich genau darin
unterscheiden.
Wenn er schon Tests gemacht hat wird die Belegung schon stimmen.
MfG Spess
interessant. danke spess! vielleicht sind deswegen 2 optokoppler übereinander gezeichnet ^^
Hi
>vielleicht sind deswegen 2 optokoppler übereinander gezeichnet ^^
Wie kommst du darauf?
MfG Spess
Ich trau mich ja fast schon garnichtmehr irgendwas zu schreiben, da man hier ja sofort öffentlich gesteinigt wird, wenn man MAL EINEN FEHLER MACHT. Außerdem hab ich irgendwie das Gefühl, dass manche User in diesem Forum es als Sport ansehen, die Leute, die vielleicht noch nicht soviel Erfahrung haben verbal zu kreuzigen. Ob sie dann soviel besser sind, wie sie vorgeben sei dann auch mal dahingestellt. Das ist schließlich ein öffentliches Forum und ihr habt sogar eingestellt, dass JEDER hier posten darf, ohne sich anzumelden... also worueber regt ihr euch hier eigentlich so kuenstlich auf? Wenn ihr doch eh schon im Beruf mit solchen Deppen wie mir zu schaffen habt, dann kapier ich nich, wieso ihr meine Beitraege lest und dann auch noch so kommentiert ;) Ich habe mich ja auch fuer die nicht gepostete Odometriescheibe entschuldigt. So das musste raus, weil ich schon etliche solcher Posts gelesen hab. Nun zum Thema: @Helmut: Ist das mit dem Komperator nicht dasselbe wie ein Schmitt Trigger, nur das ein Schmitt Trigger ein Komperator mit Hysterese ist? Ich lasse mich da gerne korrigieren. Ich habe eigentlich sehr zuverlaessige Signale, da ich das mal mit nem Papierstreifen getestet habe: Immer wenn der von weiß auf Schwarz wechselt hat die LED geschaltet. Also brauch ich solche Dinge nun, oder kann ich das auch erstmal ohne probieren? Das mit der variablen sollte doch gehen, wenn man die global als volatile bezeichnet, oder? Dann sollte der Wert ja auch von anderen Funktionen übernommen werden können.
> also worueber regt ihr euch hier >eigentlich so kuenstlich auf? Hast du dir schon mal überlegt das es evtl. etwas Zeit der Leser benötigt dein Problem zu lösen? Wenn du ungenügende Informationen gibst dann verschwendest du unsere Zeit. Wenn dir der Ton hier nicht gefällt dann geh doch woanders hin.
Bernd wrote: > Nun zum Thema: > @Helmut: Ist das mit dem Komperator nicht dasselbe wie ein Schmitt ich bin zwar nicht angesprochen, aber ichbinsofrei =) > Trigger, nur das ein Schmitt Trigger ein Komperator mit Hysterese ist? naja, die wikipage hast du schon mal gelesen. ad rem... > Ich lasse mich da gerne korrigieren. Ich habe eigentlich sehr > zuverlaessige Signale, da ich das mal mit nem Papierstreifen getestet > habe: Immer wenn der von weiß auf Schwarz wechselt hat die LED und du kannst der led mit 100Hz zuschaun? schau dir lieber auf einem oszi an, wie die signale ausschaun. prellen wirst du nicht haben, aber einflüsse von der umwelt. schalt doch mal eine neonröhre in der nähe an und schau am oszi, was sich tut. evtl brauchst du ja einen variablen schaltpunkt oder hysterese... das siehst du dann. > geschaltet. Also brauch ich solche Dinge nun, oder kann ich das auch > erstmal ohne probieren? zum testen tuts auch die led. wenn das ganze ne ordentliche arbeit sein soll, nimm nen integrierten schmitttrigger oder nen komparator. diese lösung herauszufinden ist deine sache, weil du das system vor dir hast. > Das mit der variablen sollte doch gehen, wenn man die global als > volatile bezeichnet, oder? Dann sollte der Wert ja auch von anderen > Funktionen übernommen werden können. richtig. zu deinen vorigen fragen: der interrupt-pin ist genau der richtige. es würde genau genommen einer langen. dazu einfach alle leitungen von den komparatoren an ein ODER gatter und dessen ausgang an eine interrup-leitung deiner wahl. zusätzliche jeden komparator-ausgang auch an einen portpin. im interrupt kannst dann den portpin abfragen und feststellen, von welchem komparator der int ausgelöst wurde. was aber noch immer nichts daran ändert, dass du die transistoren vermutlich falsch angeschlossen hast. oder ist die schaltung gar nicht nach dem schaltplan aufgebaut? 15k find ich übrigens auch zu klein. sind immerhin potis... spess wrote: >>vielleicht sind deswegen 2 optokoppler übereinander gezeichnet ^^ > Wie kommst du darauf? sollte ein scherz gewesen sein. aber es sind tatsächlich 2 übereinander gelegt. erkennt man an den überlappenden namen und den junctions an jedem bein.
aber dir sollte ernsthaft bewusst werden, dass 1. google hier verdammt oft reinschaut, 2. du vermutlich mit deinem echten, mittlerweile unter studenten wohl seltenen vornamen, postest und 3. du deine themenbeschreibung der arbeit hier schön aufgeführt hast. zu meiner studienzeit ging die selbstständigkeit mit in die note ein...
Hi, @ichbinsofrei: Erstmal recht herzlichen Dank fuer die ausfuehrliche Erklaerung. Ich kann natuerlich nachvollziehen, dass es euch auf den Piss geht, wenn ein Gruenschnabel wichtige Infos vergisst zu schreiben. Aber ich konnte eben nicht nachvollziehen, wieso mehrere Leute dann direkt so erbost reagieren. Zu den Transistoren: Ich hab die nicht falsch angeschlossen, glaube ich jedenfalls. Es gibt 2 Arten von den CNY70, die aeußerlich genau gleich aussehen, sich aber eben in der Beschaltung unterscheiden. Um es genau zu sagen: Es gibt 2 Firmen, die diesen kleinen Sensor herstellen. Temi Semiconductors und Vishay. Beide unterscheiden sich in der Beschaltung des Phototransistors. Wieso es da nicht sowas wie eine DIN Norm gibt, oder die wenigstens sagen, dass einer CNY70 und der andere CNY71 heist weis ich auch nicht. Zu den ODER-Gattern: Hab ich das jetzt richtig verstanden, dass ich die CNY70 Sensoren jeweils an einen Schmitt-Trigger anschliesse und jeden Schmitt-Trigger der jeweiligen Sensoren dann an das ODER-Gatter und den Ausgang des ODER-Gatters dann z.b an INT0 ? Wenn das so ginge waere das ja eine sehr pfiffige Methode um Pinne zu sparen. Noch eine kleine Frage: Ich habe von unterschiedlichen Leuten gehoert, dass INT2 eine gewisse Sonderstellung bei den externen Interrupts hat. Allerdings hab ich dazu nix im AVR-GCC Tutorial gefunden, oder es einfach uebersehen. Im Datenblatt des ATMEGA32 kann ich auch keine großen Unterschiede erkennen. Habt ihr vielleicht eine Antwort dadrauf?
Hi >Ich habe von unterschiedlichen Leuten gehoert, >dass INT2 eine gewisse Sonderstellung bei den externen Interrupts hat. >Allerdings hab ich dazu nix im AVR-GCC Tutorial gefunden, oder es INT2 beim ATmega32 kann im Gegensatz zu INT0/1 nur auf Flanken reagieren. Ist in der Funktionalität also etwas eingeschränkt. >Zu den ODER-Gattern: Hab ich das jetzt richtig verstanden, dass ich die >CNY70 Sensoren jeweils an einen Schmitt-Trigger anschliesse und jeden >Schmitt-Trigger der jeweiligen Sensoren dann an das ODER-Gatter und den... Kannst du dir sparen. Taste einfach die Eingänge in einem Timerinterrupt ab und vergleiche das Ergebnis mit dem vorherigen Zustand (Ex-Oder). MfG Spess
Hi, also durch die Beschaltung an den externen Interrupts wollt ich mir eigentlich die Timer freihalten. Allerdings weis ich jetzt auch nicht so genau, was ich glauben soll, denn jemand dem ich eigentlich sehr vertraue in diesen Dingen hat den CNY70 mit Schmitt Trigger an den Microcontroller angeschlossen. Allerdings sagen einige ja, dass der Atmega32 sowas schon intus hat. Wenn ich es so machen wuerde, wie ich oben beschrieben habe ginge es doch auch, oder nich?
Hi Mit zusätzlichen Schmitt-Triggern machst du nichts verkehrt. Relativ entscheidend ist auch die Wahl deines Scheibenmaterials. Ich empfinde die Teile eigentlich (nach einigen Tests) als grottenschlecht. Die besten Ergebnisse hatte ich mit einer CD. MfG Spess
>@Helmut: Ist das mit dem Komperator nicht dasselbe wie ein Schmitt >Trigger, nur das ein Schmitt Trigger ein Komperator mit Hysterese ist? In etwa schon, aber bei einem Komparator kannst du Hysterese und Triggerpunkt besser einstellen. Bei den Schmitttrigern (4093,74HC14) ist Umschaltpunkt und Hysterese fest vom Hersteller vorgegeben. Somit hast du mit einem Komparator (LM393) etwas mehr Einstellmöglichkeiten zur Anpassung an deine Koppler. >Es gibt 2 Firmen, die diesen kleinen Sensor >herstellen. Temi Semiconductors und Vishay. Temic ist von Vishay aufgekauft worden.
Bernd schrieb: > also durch die Beschaltung an den externen Interrupts wollt ich mir > eigentlich die Timer freihalten. Wozu? Einen Timer brauchst du sowieso. Denn irgendwo musst du ja eine Uhr realisieren, damit du feststellen kannst, wieviel Zeit zwischen 2 Flanken vergangen ist. Da du den Timer sowieso als Uhr brauchst, kannst du auch gleich in der Timer ISR die Eingänge pollen.
Hi, also ich bin zunehmend verunsichert. Ich dachte jetzt, dass das Anschließen an die externen Interrupts (INT0,INT1,INT2) erstmal geht, auch um die Zeit zwischen 2 Flanken zu messen. Dann wurde ja gesagt, dass ich die Sensoren direkt an einen 74HC ODER Gatter hängen kann, damit man nur einen externen Interrupt Pin benoetigt. Jetzt schaut es so aus, alsob ich doch die externen Timer Pinne brauche. Ich wuerd gerne wissen, ob das in diesem Setup mit Zeitmessung zwischen den Flanken funzen wuerde. Ich hab halt leider noch nicht die Erfahrung, dass ich jetzt sagen kann, dass es so auf jeden Fall laufen wird, sorry. Zum Schmitt-Trigger: Alle Schaltungen, die ich bis jetzt dazu gesehn hab, haben einen Schmitt-Trigger verwendet. Ist es denn noetig, den Komperator zu nehmen, denn es waere ja einfacher (wenn auch nicht so elegant) wenn ich als Anfänger erstmal das nachbaue, was wirklich schon getestet ist. Also die Beschaltung muss eigentlich stimmen, dann ich hab das Programm, was oben im Anhang ist schon zum laufen gekriegt.
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.