Zeitmessung der Flanke am Eingang mit C

#2429652
Lesenswert?

Bastian Brink schrieb:
> ich möchte die Länge der Zeit messen, die eine Flanke an einem Eingang
> meines PICs verweilt.

Eine Flanke hat idealer Weise die Dauer 0.
Praktisch wird sie kürzer als ein CPU-Takt sein, also mit dem MC nicht 
meßbar.

Man muß also erstmal technisch richtig beschreiben, was man messen will.
Und dann sollten die benötigten Meßparamter (Bereich, Auflösung, 
Genauigkeit) angegeben sein.


Peter
OP #2429710
Lesenswert?

Hi!

Danke erstmal.

Mein Ziel ist es, eine serielle Datenübertragung auf zu bauen.

Ich möchte einfach ein paar Bits von einem µC zu einem Anderen mit nur 
einer Leitung übertragen.

Hierzu ist mein Ansatz die Länge des Startbits zu messen um beide µC zu 
synchronisieren.

Ich vermute aber, dass es nicht ganz sinnig ist wie ich bisher 
vorgegangen bin, aber hier ein Teil des Sender-Programms:
1
  //Ausgabe des Arrays
2
  //Startbit
3
  OUT1=1;
4
  Delay10KTCYx(cyclus);
5
  OUT1=0;
6
  Delay10KTCYx(cyclus);
7
  for (j=1; j<=7; j++)
8
  {
9
    if (ein[j]==1)
10
          {
11
                OUT1=1;
12
                pari=pari+1;
13
                Delay10KTCYx(cyclus);
14
          }
15
    else
16
    {
17
      OUT1=0;
18
      Delay10KTCYx(cyclus);
19
    }
20
  }
21
  //Parity    
22
  pari=pari%2;
23
  OUT1=pari;
24
  Delay10KTCYx(cyclus);
25
  //Stoppbit
26
  OUT1=1;
27
  Delay10KTCYx(cyclus);
28
  OUT1=0;

Jetzt gerade lese ich mich in das TIMER0 Module ein. Ist es sinnvoll in 
die Richtung zu gehen um die Bits zu empfangen?

Vielen Dank,

Basti
Moderator (Firma: Titel) Persönliche Seite #2429724
Lesenswert?

Bastian Brink schrieb:
> ich möchte die Länge der Zeit messen, die eine Flanke an einem Eingang
> meines PICs verweilt.

Bastian Brink schrieb:
> Mein Ziel ist es, eine serielle Datenübertragung auf zu bauen.
> Ich möchte einfach ein paar Bits von einem µC zu einem Anderen mit nur
> einer Leitung übertragen.
Immer diese Salamitaktik... Zum Ko/4§~...

Warum schreibst du nicht gleich, was du willst und DANN wie du dir das 
vorstellen könntest...
So bleiben immer noch Fragen:
Willst du auf der 1 Leitung in BEIDE Richtungen übertragen oder nur von 
einem uC ZUM Anderen? Warum nimmst du nicht eine "übliche" serielle 
Schnittstelle? Und vor allem: warum brauchst du 2 uCs?

Bastian Brink schrieb:
> Hierzu ist mein Ansatz die Länge des Startbits zu messen um beide µC zu
> synchronisieren.
Und weiter?
OP #2429867
Lesenswert?

Hey!

Ich fang nochmal von vorne an.

Ich möchte einen binären Code
- 7 Bit
- eine Leitung
- Einweg
übertragen.

Die Programmiersprache ist C.

Mein Ansatz ist:

Sender: Startbit - Pause (Startbitlänge) - 7 Bit - Paritybit - Stoppbit

Empfänger: Messung der Länge des Startbits - Pause - 7 Bits speichern - 
Paritybitvergleich - Stoppbit abwarten - ok

Die Übertragung läuft über einen gewöhnliche I/O der µC (muss aber 
nicht)

Kann man das grundsätzlich so machen oder gibt es da vielleicht einen 
besseren Ansatz.

Vielen Dank

p.s. Ihr habt's vielleicht gemerkt, aber ich bin totaler Anfänger.
#2429898
Lesenswert?

Du erzeugst dir doch hier senderseitig einen Puls

  //Ausgabe des Arrays
  //Startbit
  OUT1=1;
  Delay10KTCYx(cyclus);
  OUT1=0;
  Delay10KTCYx(cyclus);

wo liegt das Problem?

Der Empfänger wartet bis die Leitung von 0 auf 1 wechselt.
Danach startet er eine Uhr
und wenn die Leitung wieder von 1 auf 0 wechselt, wird die Uhr gestoppt.

Damit weißt du, wie lange das Startbit in Einheiten des Empfängers 
gedauert hat.

Inwieweit dir da jetzt die PIC Hardware unter die Arme greifen kann, 
kann ich nicht sagen. Dazu versteh och zuwenig von PICs. Aber Timer 
klingt ja erst mal nicht so schlecht.

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