Forum: Mikrocontroller und Digitale Elektronik Pulsweitenmessung


von Dennis (Gast)


Lesenswert?

Hallo,
ich versuche gerade hinzubekommen das mir mein mC die Länge eines an 
einem Port ankommenden Impulses ausgibt.

Hab dazu mal folgendes Programmiert :



$prog , 255 , &B11011001 ,                                  'Quarz an / 
Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82                                               '80
$framesize = 68                                             '64
$swstack = 68                                               '44
$crystal = 16000000 
'Quarzfrequenz

Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , 
Databits = 8 , Clockpol = 0
Open "com4:" For Binary As #4                               'USB Buchse

Dim I As Integer

Config Portd.0 = Input                                      '

Do
   I = 0
   While Portd.0 = 1
      Waitms 1
      I = I + 1
   Wend
   Print #4 , I
   I = 0
   Wait 2
Loop
End




Leider Bekomme ich immer nur 0 ausgegeben.

Zu dem angeschlossenen Port habe ich folgendes aus dem Datenblatt meines 
mC :
Pin 40 PD0 / SCL /INT0 (I2C-Bus)

Bei meinem mC handelt es sich um einen rnmega2560.

Ich hoffe ihr könnt mir da weiter helfen ?
Oder wenn jemand eine bessere Methode kennt um so etwas umzusetzen.

von Hc Z. (mizch)


Lesenswert?

Lass mich raten:  Du hast einen Taster angeschlossen und misst das 
Prellen aus?

(Zum Basic-Programm kann ich nichts sagen - mein letztes ist 30 Jahre 
her und ich dachte, diese "Sprache" sei längst gegessen.)

von Karl H. (kbuchegg)


Lesenswert?

> Do
>    I = 0
>    While Portd.0 = 1
>      Waitms 1
>       I = I + 1
>    Wend


Wie wäre es, wenn du zunächst mal abwarten würdest, bis der Puls 
überhaupt anfängt?


> Oder wenn jemand eine bessere Methode kennt um so etwas umzusetzen.
Timer mit Input Capture

von Dennis (Gast)


Lesenswert?

@Hazeh Zimmerer
Nein es handelt sich um ein Echolot das einen Init-Impuls von 5ms länge 
sendet.

@Karl heinz Buchegger

> Do
>    If Portd.0 = 1 Then
>      I = 0
>      While Portd.0 = 1
>        Waitms 1
>        I = I + 1
>      Wend
>    EndIf

meinst du das so ?

von Karl H. (kbuchegg)


Lesenswert?

Dennis schrieb:

> meinst du das so ?

Nein.

Abwarten bis der Puls beginnt.
Solange der Pind.0 auf 0 ist hat der Puls nicht begonnen.
Irgendwann wird er 1. Das ist für dich das Zeichen, dass der Puls 
anfängt. Ab diesem Zeitpunk überwachst du dein Eingang und solange der 1 
ist, zählst du dein I hoch.

von Dennis (Gast)


Lesenswert?

Ok so gehts

Do
   If Pind.0 = 1 Then
      I = 0
      While Pind.0 = 1
         Waitms 1
         I = I + 1
      Wend
      Print #4 , I
      I = 0
      Waitms 1
    End If
Loop
End

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.