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.
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
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
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
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.