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
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
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.
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.
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
@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
@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.
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
@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