PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ein Aus Schaltung



franzl
21.06.2005, 19:42
Ich habe zwei Schalter und möchte mit einem meine
Aktion Starten und mit dem anderen Stoppen.
das ist mein Programm:

$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600

Config Portc = Output
Config Portd = Input
Dim A As Bit


Do

If Pind.3 = 0 Then Set A
If A = 1 Then
Portc.6 = 1
Portc.7 = 1
End If
If Pind.4 = 0 Then Reset A

loop


End

Einschalten funktioniert, Ausschalten dagegen nicht.
Könntet ihr mir vielleicht sagen wo der Fehler liegt?
Danke

roboter
21.06.2005, 19:48
Du Schaltest ja auch nichts aus O:)

Probiers mal so:
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600

Config Portc = Output
Config Portd = Input
Dim A As Bit


Do

If Pind.3 = 0 Then Set A
If Pind.4 = 0 Then Reset A

If A = 1 Then
Portc.6 = 1
Portc.7 = 1
else
Portc.6 = 0
Portc.7 = 0
end if

loop


End

recycle
21.06.2005, 20:10
Einschalten funktioniert, Ausschalten dagegen nicht.


Was willst du denn ausschalten? Portc.6 und Portc.7? Wenn ja, dann solltest du das auch irgendwo in deinem Programm veranlassen.

Die Anweisungen Portc.6 = 0 und Portc.7 = 0 irgendwie geschickt in den Code eingebauten könnten dein Problem lösen.

Klaus_0168
21.06.2005, 20:15
Hi all,

es geht noch kürzer


$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600

Config Portc = Output
Config Portd = Input
Dim A As Bit

Do

If Pind.3 = 0 Then Set A
If Pind.4 = 0 Then Reset A

Portc.6 = A
Portc.7 = A

loop

End

Dann spart man sich den If-Then-Else Teil.

Gruß Klaus

recycle
21.06.2005, 21:18
es geht noch kürzer

Stimmt. Aber ein bischen blöde an der Geschichte ist, dass bei zwei Schaltern auch beide gleichzeitig ein und beide gleichzeitig aus sein können.
Wenn man dagegen Taster verwendet, was wohl üblicher ist, muss man die Taster gedrückt halten - auch nicht besondes praktisch.

Da würde ich das Programm dann zu Gunsten einer etwas praktischeren Bedienbarkeit doch lieber etwas länger machen ;-)

Klaus_0168
21.06.2005, 21:31
Hi recycle,

Die Aufgabenstellung von franzl ist ein RS - Flipflop. FF's werden allgemein mit Impulsen angestoßen und speichern den Setz - bzw. Rücksetz - Befehl.

Die hier vorgestellte Version ist eine mit vorrangigem Rücksetzen, was aus dem Blickwinkel der Sicherheit vorteilhaft ist.

In SPS'en werden solche Schaltungen millionenfach verwendet. Der Witz an der ganzen Sache ist ja gerade die Speicherung des Impulses.

Gruß Klaus

recycle
21.06.2005, 21:57
Hallo Klaus_0168


Die Aufgabenstellung von franzl ist ein RS - Flipflop.

Und woher soll ich das wissen? Geschrieben hat er davon jedenfalls nichts.



Der Witz an der ganzen Sache ist ja gerade die Speicherung des Impulses.

Und wo wird in deinem Beispiel der Impuls gespeichert?
Wenn ich keinen Taster drücke, bzw. den sobald ich den gedrückten Taster wieder loslasse, flattert A die ganze Zeit hin- und her.
Wo wird denn da dann ein Impuls gespeichert?

Nach meinem Verständnis sind bei deinem Beispiel die beiden Ports nur solange an, wie ich den 2. Taster gedrückt halte. Das kann man eigentlich auch einfacher haben.

Wenn statt Tastern tatsächlich Schalter gemeint sind, macht das Ganze noch weniger Sinn, denn ein Schalter speichert seine Stellung doch sowieso.

Oder habe ich mal wieder ein Brett vorm Kopf?

Klaus_0168
22.06.2005, 09:22
Hi recycle,

die RS - Funktionalität erkennt man an den Befehlen 'Set' und Reset'.

Soweit ich franzl verstanden habe möchte er die Schaltung mit Tastern verwenden.

Was die ganze Sache etwas undurchsichtig macht ist, das die Eingänge Low - Aktiv sind. Ich hoffe, das die Hardware so aufgebaut ist, das bei unbetätigtem Taster Spannung am Digitaleingang ansteht. Wenn nicht müssen die If - Abfragen auf '1' getestet werden.

@franzl : Sollen die Eingänge d.3 und d.4 Lowaktiv sein ??
Ich habe es einfach mal vorausgesetzt, weil das Einschalten in Deiner Urversion funktioniert hat.

Gruß Klaus

franzl
22.06.2005, 16:11
Danke für eure hilfe das Programm funktioniert jetzt.

jagdfalke
26.06.2005, 22:47
Frage:
Wenn ich jetzt Abfrage ob der Taster ein oder aus ist, wie kann ich verhindern, dass die Schleife schneller ist als ich wieder loslassen kann? Am besten ohne wait-befehl, da man ja auch noch andere Sachen machen will als warten.

recycle
26.06.2005, 22:55
Wenn ich jetzt Abfrage ob der Taster ein oder aus ist, wie kann ich verhindern, dass die Schleife schneller ist als ich wieder loslassen kann? Am besten ohne wait-befehl, da man ja auch noch andere Sachen machen will als warten.

Du kannst den Taster anstatt auf Ein und aus Auf auf steigende oder fallende Flanke abfragen. Wenn der Taster entprellt ist, tritt die Flanke nur einmal auf und zwar genau in dem Moment in dem du den Taster drückst, bzw. ihn loslässt.
Für die Flankenerkennung bietet sich ein Interrupt an.

jagdfalke
26.06.2005, 23:11
Kann man das in wenigen Sätzen erklären wie das mit der Interruptprogrammierung funktioniert? (Grundprinzip von Interrupts kenn ich, allerdings nicht die Programmierung in Bascom) Oder gibts nen Link wo das gut für Anfänger erklärt ist?

mfg
jagdfalke

recycle
26.06.2005, 23:44
Kann man das in wenigen Sätzen erklären wie das mit der Interruptprogrammierung funktioniert? (Grundprinzip von Interrupts kenn ich, allerdings nicht die Programmierung in Bascom)

Derjenige der die Bascom Online Hilfe geschrieben hat, kann das recht gut in wenigen Sätzen erklären.


Oder gibts nen Link wo das gut für Anfänger erklärt ist?
Ja, sogar zwei. Einen oben in Bascom im Menü mit dem Fragezeichen und einen im Startmenü in der Bascom Programmgruppe.

Praktischerweise kannst du von da sogar gleich den Beispielcode per Copy&Paste in dein Programm übertragen und damit herumexperimentieren.

jagdfalke
27.06.2005, 08:17
die wahrhaftige fülle an links mit profunden erklärungen haut mich um ;)