Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Mini-Station mechanischer Schalter? Anfänger... Kategorie: Programmierung Basic (von Michi - 5.01.2011 17:15)
Als Antwort auf Re: Mini-Station mechanischer Schalter? Anfänger... von Schweiger - 5.01.2011 10:08
Ich nutze:
C-Control Pro Mega32, CC-Pro 32 Application Board
> > > > Hallo liebe Gemeinde,
> > > >
> > > > ich bin noch blutiger Anfänger (ich kann ein bisschen Programmieren, aber nicht mehr ;-) )
> > > > und ich habe eine, vermutlich für Euch dumme, Frage:
> > > >
> > > > Wie kann ich einen einfachen Schalter bzw. Taster an die Mini-Station dranhängen und abfragen,
> > > > ob dieser gedrückt ist?  
> > > >
> > > > Im Moment nutze ich die +5V der unteren Klemmleiste und baue dann einen Stromkreis zu
> > > > der ADC0 auf. Das ganze frage ich im Moment wie folgt ab:
> > > >
> > > > If ADC0() > 1000 Then 'grö�er als 1000, da maximal der Wert 1023 zurückgegeben wird (10bit)
> > > >     ... ' Anweisungen
> > > > End If
> > > >
> > > > Das funktioniert auch, wenn ich die zwei Kabel miteinander verbinde (das ist im Moment
> > > > mein "Testschalter"), doch da die Spannung sehr sensibel gemessen wird, reicht
> > > > es aus das Kabel, welches an ADC0 angeschlossen ist, mit einem Finger zu
> > > > breühren um das Event auszulösen. Ich kann auch keine längeren Kablel verwenden, da
> > > > diese auch dieses Event schon auslösen (sind vielleicht noch Elektronen im Kabel?), obwohl
> > > > der Stromkreis noch gar nicht geschlossen ist.
> > > >
> > > > Gibt es also keine einfachere Methode über einen digitalen Eingang den Schalter anzuschlie�en?
> > > >
> > > >
> > > > Wäre sehr dankbar für eine einfache Antwort und freundliche Grü�e,
> > > > Schweiger
> > > >
> > > > PS: Das Kabel von der Station zu dem Schalter soll im Endeffekt ca. 15m lang sein...
> > >
> > >
> > > Hallo,
> > >
> > > einfach den Schalter digital Abfragen:
> > >
> > >  Port_DataDirBit(Port_Nr,0);     // Port Bit Input
> > >  Port_WriteBit(Port_Nr,1);        // Set PULLAB
> > > .
> > > .
> > > .
> > >  wert = Port_ReadBit(Port_Nr);
> > >
> > > Wegen der gro�en Entfernung und zur Entprellung würde ich den Taster 3 mal in einem Abstand
> > > von ca.20ms auslesen. Nur wenn alle Werte gleich sind, würde ich eine Aktion ausführen.
> > >
> > > Grü�e Joerg
> > >
> > >
> > >
> > >
> > Joerg hat recht.
> >
> > für deine Anforderung ist der ADC definitiv falsch und du solltest einen Digitalport abfragen.
> > In Joergs Beispiel wier der Eingang per internen Pullup degen plus gezogen und der Schalter muss
> > somit gegen Gnd schalten.
> >
> >
> >
> >
> >
> >
>
> Vielen Dank für Eure Antworten!
>
> Ich frage jetzt den ersten digitalen Input ab und dies klappt auch total gut.
> Vorausgesetzt das Programmierkabel ist mit der Platine verbunden. Ich gehe davon aus,
> dass wenn ich das Programmierkabel abziehe, keine Masse mehr vorhanden ist (GND).
> D. h. wenn das Kabel abgezogen ist und ich berühre das Kabel de Inputs alleine mit dem Finger,
> wird sofort geschaltet. Dieses Phänomen tritt nicht auf, wenn ich das Programmierkabel in der
> Platine stecken habe - dann schaltet das System so wie es soll; nur bei Berührung des anderen Kabels.
> Also muss ich irgendwie die Masse der unteren Klemmleiste abführen. Kann ich die nicht an den Minuspol
> des Trafos dranhängen, sodass ein möglichst gro�er Spannungstoleranzbereich entsteht?
>
> Mein Code zum Abfragen sieht so aus:
>
>
> If INPUT_1(0) = 1 Then
>  'Anweisungen
> End If
>
>  'wobei INPUT folgendermaÃ?en aussieht:
>
> Sub INPUT_1(Pullup As Byte) As Byte
>     Dim Bit As Byte
>     Port_WriteBit(PD3,Pullup)
>     Bit = Port_ReadBit(PD3)
>     Return Bit
> End Sub
>

>
> Beste Grü�e und vielen Dank,
> Schweiger

Ich kenn den Aufbeu der Mini Station nicht aber ich gehe davon aus das der GND genau auf dem
Level ist wo er hinsoll, wenn der GND nicht gleich dem des Netzteils ist besteht die Gefahr das
Teil zu töten.

Wenn ein Eingang mit dem internen Pullup auf High liegt kann er nicht mit dem Finger auf Low gehen.

Wenn die Mini Station das gleiche Basic wie die Pro32/128 haben dann müsste:

Sub main()

Port_DataDirBit(16,PORT_IN)  '16=portC0
Port_WriteBit(16,1)  'Pullup


Do While True  'in der Schleife läuft das Progamm.......

   If Port_ReadBit(16) = 0 Then  'Knopf gedrückt desshalb ist der Eingang auf 0

      'was auch immer jetzt passieren soll.....inkl. der 3 abfragen des Tasters zur sicherheit

   End If

End While

End Sub

Funktioniern und nicht auf Finger reagieren.
Pullup nachmessen ob der Eingang eh auf plus liegt wenn der Finger immer noch reagiert.
Notfalls mit einem xternen Wiederstand den Pullup niederohmiger machen.





    Antwort schreiben


Antworten: