Forum: Mikrocontroller und Digitale Elektronik Dip-Schalter


von PiCus (Gast)


Lesenswert?

Hallo,
nachdem ich mich schon mit meiner Frage im falschen Forum gemeldet
habe, dann hier nochmal meine Frage:

ich habe mit einem 8515 eine Relaisschaltung aufgebaut mit der ich 8
Tasten an Portd abfrage und den entsprechenden Pin an Portd setze und
mit der selben Taste rücksetze. Soweit so gut und läuft.

Nun möchte ich aber die Relais auch mit einer Funkfernsteuerung
ein/ausschlten und wollte ein Programm schreiben dass im Prinzip das
gleiche macht, Tastefunk - Relais x und das Ganze im gleichen Professor
mit einem DIP-Schalter. Also DIP-Schalter an Porta und Binär einstellen
damit ich praktisch 15 Unterprogramme anspringen könnte. Nur kann ich
den DIP-Schalter nicht einlesen. Wenn ich jeden einezeln einstelle 0001
oder 0010 oder 0100 oder 1000 geht's, nur wenn's dann 0011 sein soll
geht's immer in die falsche Richtung.

Also wie muss das Programm aussehen damit dass geht.

Ich hab BASCOM AVR 1.1.7.7 undalles andere läutf mit meinen
Basicprogrammen.

Gruss PiCus

von Dirk (Gast)


Lesenswert?

Hi,

frag nicht einzeln die Eingange ab, sondern les den Port ein und
maskier die anderen Bits aus.

Danach eine switch case Abfrage und fertig.

Mfg

Dirk

von Rufus T. Firefly (Gast)


Lesenswert?

Dann poste doch mal Deinen Code - zumindest den Teil, in dem Du den
Dip-Schalter versuchst einzulesen.

von PiCus (Gast)


Lesenswert?

Hier ein Teil des Codes

'-----------------------------------------
'----- Menu Auswahl
'-----------------------------------------
'Upperline
Lcd "Auswahl:"
Locate 2 , 6
Lcd "Menue"
Wait 1 :
Menue:
Do
    Debounce Pina.0 , 0 , Menue
    Debounce Pina.1 , 0 , Rast_menue
    Debounce Pina.2 , 0 , Tast_menue
    'Debounce Pina.3 , 0 , Rast_u_Tast
Loop
'Goto Menue

ich sollte noch hinzu fügen, ich möchte einen HT624 Decoder anschiessen
der auch seine Ausgänge Binär ausgibt, um damit dann 16 "Befehle" o.ä.
auszugeben.

Da Menu sollte praktisch beim Einschalten oder Reset abgearbeitet
werden, um das dazu gehörende Programm zu starten.

Also DIP-Schalter Einstellen, Spannung anlegen und das eingestellte
Programm starten.

von Rufus T. Firefly (Gast)


Lesenswert?

Debounce ist zum Lesen eines DIP-Schalters nicht wirklich nötig - der
wird ja nicht permanent umgeschaltet, sondern liefert feste Pegel.

von PiCus (Gast)


Lesenswert?

Danke, für eure Gedanken aber der Tip von Dirk hat gefruchtet,
guckst du

Do
   Cls
   Switch = Pina
   Select Case Switch
      Case &B11111110 : Lcd "Relais 1"
      Case &B11111101 : Lcd "Relais 2"
      Case &B11111100 : Lcd "Relais 3"
      Case &B11111011 : Lcd "Relais 4"
      Case &B11111010 : Lcd "Relais 5"
      Case &B11111001 : Lcd "Relais 6"
      Case &B11111000 : Lcd "Relais 7"
      Case &B11110111 : Lcd "Relais 8"
   End Select
   Wait 1
Loop

das LCD is nur zum Kontollieren. Manchmal braucht man einen leichten
Schag auf den Hinterkopf.

Bis zum nächsten mal. Ich versuche nun das Projekt mit dem RC5 Code zu
erweitern, kann sein dass ich dann wieder mal hilfe brauch, denn alles
was ich bbis jetzt an Code gefunden und probiert habe hat bei nicht
funktioniert.

Also schönen Feierabend und bis dann
PiCus

PS.: bin immer per emil zu erreichen.

von Dirk (Gast)


Lesenswert?

Hi,

die Bascomfunktion GETRC5 funktioniert sehr simpel (leider ohne
Togglebit). Im Bascom Ordner befindet sich eine Demo.
Hardwarebeschaltung findest du in der Bascomhilfe.

Es liegt zu 99% meistens daran das die FB kein RC5 sendet. Nimm eine
lernbare Fernbedienung.

Die Zuordnungtabelle koenntest du dann auch fuer die RC5 FB nehmen.


Mfg
Dirk

von Stefan Kleinwort (Gast)


Lesenswert?

@PiCUS:

Dein Programm funktioniert nur solange, wie Du die anderen Portbits
nicht anderweitig benutzt / beschaltest. Besser Du maskierst die
DIP-Schalter-Pins aus, wie schon vorgeschlagen.

Stefan

von PiCus (Gast)


Lesenswert?

@Stefan:

Ich brauche momentan den Port nur für den DIP-SChalter. Meinst mit
ausmaskieren Portx = &B00001111 ?

@Dirk:

ich hab schon so manches gelesen über den RC5 Code und habe auch ein
paar beispiele getestet mit dem 90S1200, 90S2313, 90S8515 aber keine
hat gefunzt, könnte an der Sony FB gelegen haben, die soll ein aunderes
Format haben.

Mal noch ne Frage, wie oft kann ich eigendlich einen Professor
programmieren bis er den Geist aufgibt. Auf meinem Testboard habe ich
einen 8515 der nun so ca 500 programmierungen hinter sich hat. Wie
macht das sich bemerkbar wenn er nicht mehr will ??

ok dann bis nachdem Wochenende, denn dass gehört meiner Familie.

von Rufus T. Firefly (Gast)


Lesenswert?

Ausmaskieren ist nicht die Zuweisung eines Wertes, sondern die logische
verANDung eines Wertes.

In Deinem Beispiel also

   Switch = Pina AND &B1111

   Select Case Switch
      Case &B1110 : Lcd "Relais 1"
      Case &B1101 : Lcd "Relais 2"
   ... etc

von Stefan Kleinwort (Gast)


Lesenswert?

@Picus:

>Ich brauche momentan den Port nur für den DIP-SChalter. Meinst mit
>ausmaskieren Portx = &B00001111 ?

Das mag momentan ok sein. Auf lange Sicht kann daraus aber ein
versteckter Bug werden, wenn Du irgendwann die restlichen Pins noch
verwendest, bei der Erweiterung in einem Jahr oder auch beim nächsten
Projekt. Dann wird die Fehlersuche umso komplizierter: wer sucht schon
in einem Sourcecode, der jahrelang problemlos funktioniert hat?

So wie es Rufus beschrieben hat, kannst Du den Code dagegen problemlos
wiederverwenden. Und nebenbei ist er auch besser lesbar, weil in der
case-Anweisung nur die Bits stehen, die auch "echte" DIL-Schalter
sind.

Viele Grüße, Stefan

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.