www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Signal erstellen


Autor: Rene Pratsch (rene1989)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas Klima (rlyeh_drifter) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bit setzen, warten, bit löschen, warten ...

Autor: mm (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rene Pratsch (rene1989)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rene Pratsch (rene1989)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie genau muß denn das ganze sein.

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


Peter

Autor: Dampfmaschin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rene Pratsch (rene1989)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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   ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.