Forum: Mikrocontroller und Digitale Elektronik Signal erstellen


von Rene P. (rene1989)


Angehängte Dateien:

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

von Karl H. (kbuchegg)


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?

von Thomas K. (rlyeh_drifter) Benutzerseite


Lesenswert?

bit setzen, warten, bit löschen, warten ...

von mm (Gast)


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?

von Rene P. (rene1989)


Lesenswert?

Der µC horcht zusätzlich über die RS232. Hier bekommt er die Daten wie 
er das Signal erzeugen muss.

zB eine 1
-> Signal 11000100

zB eine 5
-> Signal 11010100

Die HIGH Flanke beträgt   1ms
die LOW  Flanke beträgt 300µs

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Die HIGH Flanke beträgt   1ms
> die LOW  Flanke beträgt 300µs
Flanken sind theoretisch zeitlos  :-/
In der Realität haben sie eine gewisse Steilheit. Aber das ist hier 
irrelevant. Du meinst wohl eher sowas:
Eine '1' ist 1ms high, dann 300us low.
Eine '0' ist 300us high, dann 1ms low.

von Rene P. (rene1989)


Lesenswert?

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

danke

von Karl H. (kbuchegg)


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.

von Peter D. (peda)


Lesenswert?

Wie genau muß denn das ganze sein.

Einfacher wäre 1ms/333µs oder 900µs/300µs.


Peter

von Dampfmaschin (Gast)


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.

von Rene P. (rene1989)


Lesenswert?

Peter Dannegger schrieb:
> Wie genau muß denn das ganze sein.
>

Es sollte sehr genau dem entsprechen:

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

also ein Takt hat 1428us

von der mechatroniker (Gast)


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)

von Hc Z. (mizch)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> muss sowohl die steigende als auch die fallende Flanke einen
> gewisse Dauer aufweisen.
Wie schon erwähnt: Flankensteilheit.
Die wird idR. gemessen von 10% bis 90% des Maximalpegels.

> (bitte meinen Beitrag nicht zu ernst zu nehmen)
Kam mir nicht in den Sinn   ;-)

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.