Hallo, ich habe ein externes Signal das ich auf einen Digital Input des AVRs legen möchte. Und zwar ist ein Impuls 66% High, 33% Low. Bei jedem Impuls soll ein anderer Ausgang des AVRs geschaltet werden. Also beim ersten Impuls Q1, beim zweiten Q2,..... Der neunte Impuls dient als Synchronisierung. Der AVR soll erkennen, dass nun Pause ist und somit seinen Counter zurück auf 0 setzen. Die Frequenz der Pulse ist "noch" nicht definiert. Aber die Maximale Frequenz wird so ca. bei 60Hz liegen. Als Sicherheit kann man noch auf 30Hz-10Hz runtergehen. Der AVR müsste als zuerst auf die postive Edge einen Interrupt auslösen. Dann die Zeit bis zur fallenden Flanke messen. Das ergibt 66% der Periodendauer und der AVR weis, dass in Periodendauer/33% die nächste steigende Flanke kommen müsste. Kommt diese nicht soll der Zähler zurückgesetzt werden (Sync Bit). Das ganze soll ein Multiplexer mit nur einem Bit werden. Über die Ausgänge des AVRs werden dann Optokoppler angesteuert. Kann mir jemand eine Starthilfe geben wie man das "einfach" im AVR umsetzt. Arbeiten werde ich mit z.B. einen Atmega8, AVR Studio mit WinAVR. Danke!
Schau dir an wie ein IR-Fernbedienungsempfänger auf dem AVR implementiert wird. Oder wie eine Soft-UART implementiert wird. Das Abtasten der Signale ist ähnlich. Beispiele gibt es in der Codesammlung. Außer mit der Flankenerkennung plus Messung der Halbperiode kannst du auch mit einer Abstastmethode arbeiten, wenn die Taktrate des Signals bekannt ist. Dazu so regelmäßig den Logikpegel am Eingangspin ermitteln, dass du pro kurzer Halbperiode (Low) 3-4 Abtastpunkte hast.
Hugo Portisch schrieb: > Hallo, > > ich habe ein externes Signal das ich auf einen Digital Input des AVRs > legen möchte. > > Und zwar ist ein Impuls 66% High, 33% Low. > Bei jedem Impuls soll ein anderer Ausgang des AVRs geschaltet werden. > Also beim ersten Impuls Q1, beim zweiten Q2,..... > > Der neunte Impuls dient als Synchronisierung. Der AVR soll erkennen, > dass nun Pause ist und somit seinen Counter zurück auf 0 setzen. Aha. So etwas würde ich mit einem 4017 machen. Aber vielleicht hat der Avr ja ausserdem noch was anderes zu tun... Gruss Harald
Bei der niedrigen Frequenz würd ich mit Polling arbeiten. Ohne Interrupt. Alles in einer Software, übersichtlich, für jeden Anfänger geeignet. Eingangssignal an einen IO-Pin. Die Software schaut, ob er high oder low ist. Die Software kann sich auch die Pulsweite rausmessen, um die Pause sicher zu erfassen.
Auf den 4017'er bin ich auch schon gekommen. Dieser scheint aber laut Datenblatt die Ausgänge "überschneidend" ein/auszuschalten. Die verschiedenen Analoge Signale möchte ich aber ungern kurzschließen ;). Daher die 2/3;1/3 Teilung. Auch möchte ich mir z.B. die Möglichkeit einer PTC Auswertung nicht verbauen. Werde mir das mit dem Polling mal ansehen.
mach das ganze mit dem ICP vom timer..ist das einfachste. außerdem kann der controller so noch vieles nebenbei erledigen ;) p.s. spendiere dem ICP eingang aber nen schmitt-trigger ..
Hugo Portisch schrieb: > Und zwar ist ein Impuls 66% High, 33% Low. Und was ist der Impuls während der restlichen 1% ? SCNR
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.