Forum: Mikrocontroller und Digitale Elektronik Messung digitaler Signale...


von Schorschi (Gast)


Lesenswert?

Hi,


ich bin grad dabei Funktsignale auszuwerten.
Dabei bekomme ich das empfangene Signal schon Digitalcodiert.
Jetzt muss ich dieses natürlich wieder in Bits umwandeln.

Dabei wird jedes bit durch ein Signal codiert.

z.B. 300µsec high-> 100µsec low -> 100µsec hig ist ne logische 1 usw.

wie stelle ich sowas am einfachsten an.
ich dachte schon an einen Timer der alle 50µsec einen Port pollt oder
per ext. interrupt den timer neu setzt oder löscht.

Nun weiss ich nicht wie ich das Problem am einfachsten lösen soll ohne
mehrere Messungen machen zu müssen um die entsprechenden Daten zu
bekommen.

Als µC will ich den Tiny26 nehmen.

Hat der eine oder andere ev. nen Vorschlag?

Danke und Gruss,
schorschi.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Ich weiß nicht, ob der Tiny das kann:

Bei den Megas gibt es das ICP-Modul:
Das misst Zeiten zwischen zwei Flanken.
Man stellt also die Flanke auf steigend ein.
In der ISR sichert man die Zeit (Timer-Wert) und schaltet die Flanke
auf fallend um.
Beim nächsten Auftreten des ICP-Interrupt sichert man wieder die Zeit
und schaltet die Flankenrichtung wieder um.
Die Zeitdifferenz vergleicht man dann mit 300µs: ist sie kleiner ist es
eine logische 1.
Zumindest verstehe ich dein "Protokoll" so, dass eine Sequenz von
300µs high und 100µs low eine 0 und eine Periode aus 100µs high und
100µs low eine logische 1 darstellt.

von Schorschi (Gast)


Lesenswert?

hi,

ah ich weiss was du meinst..

das ist diese timerfunktion mitn input capture und output compare.
kenn ich von motorolla controllern. Hab daran garnicht mehr gedacht.

da muss ich nochmal ins datenblatt schauen ob es der µC kann.
aber ich glaube das hater der tiny nicht. ich wollte aber diesen
einsetzen da er günstig und rel. klein von der bauform ist.

gruss,
schorschi.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Hab ich das "Protokoll" richtig erkannt?
Notfalls müsstest du das auch per Pinchange-Interrupt emulieren
können.
Das sollte gehen - hab es noch nicht getestet (hab leider zuviel andere
Sachen um die Ohren).

von Schorschi (Gast)


Lesenswert?

hi,

ja das protokoll sieht so ähnlich aus.
habs grad nicht im kopf und die uterlagen nicht da.

hab mir überlegt mit dem pinchange interrupt auf beide flanken
eingestellt. Einfach mit einem 50µsec timer die zeit zwischen den
interupts messen und dabei noch schauen was am eingang anliegt.

das ist mal das was ich mir überlegt hatte. Aber ev. gibt es da ne
schönere lösung. Das mit input capture ist tatürlich am besten und
einfachsten. aber soweit ich weiss hat es der tiny nicht.

gruss,
schorschi.

von Marko (Gast)


Lesenswert?

Der Tiny26 hat auf Portb.6 den INT0,
der auf falling und rising konfigueriert werden kann.
Dann hater noch 2-mal 8-Bit Timer.
Also Du konfiguerierst Int0 als falling,
in der ISR kofiguerierste auf rising um und startest z.B. Timer0,
beim nächsten Int0 liesst Du den Wert aus Timer aus und schon haste
die Signaldauer ... so würds ich in dem Fall machen.

von Marko (Gast)


Lesenswert?

huch, im Datenblatt gesehen:

Seite 64: Pin Change Interrupt

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
Noch kein Account? Hier anmelden.