Signal erstellen

OP #1494488
Lesenswert?

Hi

Ich möchte mit meinem µC ein Signal wie im Bild (Anhang) erstellen.

Die kurzen Zacken sind LOW und die längern ein HIGH.
Die Zeitabstände sind mir bekannt. Nur wie kann ich so ein Signal selber 
erstellen?

danke
mfg Rene
Angehängte Dateien:
#1494489
Lesenswert?

Rene Pratsch schrieb:

> Die kurzen Zacken sind LOW und die längern ein HIGH.
> Die Zeitabstände sind mir bekannt.

Und die wären?

> Nur wie kann ich so ein Signal selber
> erstellen?

Da es mehrere Techniken gibt, hängt es u.a. auch von den einzuhaltenden 
Zeiten ab, welche Technik man benutzt.
Ein anderes Thema ist zb: was hat der µC sonst noch zu tun?
Gast #1494508
Lesenswert?

Hallo

Man kann ein Timer mit dem Compare-Match Interrupt verwenden. Dann prüft 
man in jeder ISR in welchem Zustand man sich befindet und reagiert 
entsprechend. Zum Schluss schreibt man die Dauer bis zur nächsten Aktion 
in das Output-Compare Register.

Ist das Zufälligerweise Märklin Digital?
#1494665
Lesenswert?

Rene Pratsch schrieb:
>> Eine '1' ist 1ms high, dann 300us low.
>> Eine '0' ist 300us high, dann 1ms low.
>
> ja genau so hab ich das gemeint nur nicht wirklich so hingeschrieben..
>
> und wie ist es nun möglich ein solches signal zu erzeugen? also mit den
> richtigen zeitabständen?

Indem du zb einen Timer so aufsetzt, dass er alle 100µs eine ISR 
aufruft. Der Rest ist dann nur noch abzählen in der ISR und gegebenfalls 
den Pin umschalten.
Gast #1495014
Lesenswert?

Wenn man sich als Anfänger das Interrupt/Timer-Geraffel sparen will kann 
man auch einfach Warteschleifen benutzen. Leider bleibt ist es dann 
nicht/nur sehr schwer möglich auch noch andere Aufgaben zu erledigen.

Aber oft ist das ja garnicht notwendig.

cli()
bit setzen
x us warten _delay_us(x)
bit löschen
x us warten _delay_us(x)
...
usw
..
sei()

das führt schneller zum Erfolg und kann sogar genauer sein.
Gast #1495546
Lesenswert?

> Flanken sind theoretisch zeitlos  :-/

Nicht ganz: hier im Forum liest man immer wieder mal von 
Flankenwechseln. Unter einem Flankenwechsel verstehe ich, wenn 
beispielsweise auf eine steigende Flanke unmittelbar eine fallende 
folgt, also ein kurzer Spike. Damit man hier einen Zeitpunkt angeben 
kann, muss sowohl die steigende als auch die fallende Flanke einen 
gewisse Dauer aufweisen.

(bitte meinen Beitrag nicht zu ernst zu nehmen)
#1495568
Lesenswert?

> '1' ist 1071us high, dann  357us low.
> '0' ist  357us high, dann 1071us low.

1071 ist das 3fache von 357.  Damit wird die Sache recht einfach.  Zähle 
4 Takte à 357µs und schalte nach dem ersten oder dritten.  Eine 
SPI-Lösung wäre auch denkbar: Takte die SPI mit 357µs und schreibe pro 
Byte 2 Datenbits, wobei die Nibbles entweder 0b1000 oder 0b1110 sind. 
Ist die Anzahl der Bits ungerade, musst Du im letzten Byte mit 0b0000 
auffüllen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren