PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit meiner C-Control2 Station



Bandit18
03.12.2004, 23:17
Hallo, ich habe gerade erst vor ein paar Tagen die C-Control 2 Station erworben. Dies sind meine ersten Programmiererfahrungen mit einem Microcontroller.
Nun zu meinem Problem:
Nach dem ich nun die eingebauten LEDs, Taster, LCD und Relais ansteuern kann, wollte ich die externen Ports der C-Control verwenden, um mit Hilfe der Digitalports Schaltzustände zu erfassen und darauf zu reagieren.

Ich denke das ein offener Digitalport nach einem Reset den Pegel HIGH (-1) führt (habe ich irgendwo gelesen). Meiner Meinung nach wäre der einfachste Schaltvorgang einen Taster an einen dieser Digitalport zu hängen und dann mit seiner Hilfe den Port auf GND zu ziehen. D.h. drücke ich den Taster sollte der Pegel von HIGH (-1) auf LOW (0) wechseln.

Soweit so gut, ich habe einen Taster genommen und Ihn mit dem einen Kabelende an die Klemme 46 (P0 intern Port 8 ) und mit dem anderen Kabelende auf GND (Klemme 40) geklemmt.

Dann habe ich folgendes Programm auf die C-Control geladen:



thread main
{
int port, a;
station_io.init();
station_lcd.init();

sleep 2000;
a=1;
while a != 0
{
ports.deact(8);
port =ports.get(8);
if (port == -1){
station_lcd.clear();
station_lcd.print(" Port -1");
station_lcd.line2();
sleep 100;
}
if (port == 0){
station_lcd.clear();
station_lcd.print(" Port 0");
station_lcd.line2();
sleep 100;
}
}

Ok, es ist nicht besonders hübsch aber es sollte mir den Zustand des Ports anzeigen.

Wenn ich nun die C-Control starte passiert nicht das erhoffte. Ist der Taster gedrückt habe ich immer die Anzeige "Port 0", lasse ich den Schalter los springt er wahrlos zwischen -1 und 0 hin und her. Drückt man den Taster eine Zeit lang nicht steht die Anzeige auch auf 0.

Woran kann das liegen, ich dachte man könne auf diese einfach Art und weise Beschaltungen an der C-Control vor nehmen. Aber um zum Beispiel Steuerungen oder gar Alarmanlagen zu erstellen, wären schon eher eindeutige Pegelzustände wünschenswert.

Vielleicht könnt Ihr mir ja auch sofort sagen was ich falsch gemacht habe, wie gesagt ich bin eher ein Frischling auf diesem Gebiet.

Vielen Dank!
Bandit18

nestler
03.12.2004, 23:41
Erstens denke ich, dass das ports.deact( 8 ) in diesem Fall überflüssig
sein dürfte, da der Port zuvor ja nicht als Ausgang betrieben wurde.

Desweiteren wäre interessant zu Wissen, wie sich das Programm unter
Verwendung von Port 9 verhält. (P1H.1) - und unter Verwendung von
Port 1 (P1L.1) (wobei bei Port 1 der Schalter natürlich mit +5V verbun-
den werden muss)

Bandit18
04.12.2004, 00:07
Erstens denke ich, dass das ports.deact( 8 ) in diesem Fall überflüssig
sein dürfte, da der Port zuvor ja nicht als Ausgang betrieben wurde.

Desweiteren wäre interessant zu Wissen, wie sich das Programm unter
Verwendung von Port 9 verhält. (P1H.1) - und unter Verwendung von
Port 1 (P1L.1) (wobei bei Port 1 der Schalter natürlich mit +5V verbun-
den werden muss)

Das ports.deact habe ich eingefügt nachdem ich die Probleme hatte. Habe es jetzt beim Test mit Port 9 entfernt und ht nicht geholfen.

Welcher Port ist den Port 1 P1L.1? und warum muß ich den mit + 5v verbinden?

Seit bitte nachsichtig mit mir.

Gruß Bandit18

nestler
04.12.2004, 10:07
Hm - keine Ahnung an welcher Klemme du Port 1 findest. Schau doch
einfach mal im Handbuch nach.

Meines Wissens verfügen nur Port 8, 9, 10, 11 über Pullup-Widerstände.
Das heisst, sie sind standartmäßig auf high. Alle anderen sind jedoch
auf low. Daher würdest du nicht viel bemerken, wenn du mit dem
Schalter den Port auf Masse ziehst....

Bandit18
04.12.2004, 11:01
Hallo,

es sieht so aus als wenn alle meine Digitalports egal ob auf Masse gezogen oder offen den Pegel LOW 0 haben.

Muß man die Pullabwiderstände irgendwie einschalten?

Ich schalte meine Station an bzw. resete sie und mit diesem Programm leuhten alle 3 LEDs der Station:



thread main
{
string s;
int port1, port2, port3, a;
station_io.init();
station_lcd.init();

sleep 2000;
a=1;
while a != 0
{
port1 =ports.get(8);
port2 =ports.get(9);
port3 =ports.get(10);
if (port1 == 0){station_io.LEDon(1);} else {station_io.LEDoff(1);}
if (port2 == 0){station_io.LEDon(2);} else {station_io.LEDoff(2);}
if (port3 == 0){station_io.LEDon(3);} else {station_io.LEDoff(3);}
}
}


Drücke ich nun meinen Taster an Port 9 der den Port an Masse schaltet, leuchtet die dazugehörige LED2 immer noch konstant. Lasse ich den Taster wieder los, sieht man das die Led leicht flackert. Das der Port also wie im ersten Versuch ständig zwischen dem Pegel HIGH und LOW hinundherschaltet (unregelmäßig).

Ist meine C-Control 2 Station defekt?
Hat jemand die gleiche Station und versucht den doch eher simplen Aufbau mal nachzuvollziehen. Wenn das dann bei Euch mit der selben Konstellation anders ist, könnte ich meine C-Control 2 Station noch zurückgeben.

Oder hat noch jemand eine Idee warum meine Digitalports unbeschaltet alle den Pegel LOW haben?

Gruß Bandit18

nestler
04.12.2004, 11:33
Dann ist die Station wohl vermutlich überhaupt nicht mit Pullup-
Widerständen bestückt. Bei der Unit ist es wie gesagt so, dass
4 Ports mit Pullup-Widerständen bestückt sind...

Nochmal nachgebort: Steht in deinem Handbuch etwas von Pullups?
Wenn nein, dann gibt es vermutlich beid der Station keine.

Wenn es um das einfach Beispiel mit dem Schalter geht, dann verbinde
den Schalter wie gesagt mit +5V.

Gruss,
Simon

nestler
04.12.2004, 11:35
Nochwas: Die Möglichkeit, dass die Station defekt ist, würde ich als
allerletztes in Erwägung ziehen. - Ich hab auch schon öfter gedacht,
meine Unit sei kaputt, und dann lag es nur an einem Fehler meiner-
seits...

Bandit18
04.12.2004, 12:39
Du könntest Recht haben mit den Pullup-Widerständen. Wenn ich die Ports mit einem 10kOhm Widerstand gegen +5V schalte führen sie alle HIGH-Pegel, drücke ich nun den Taster so geht auch nur der eine Port auf LOW. Lasse ich ihn wieder los so bekommt er HIGH-Pegel. Also so wie es sein sollte. ;-)

In meiner Beschreibung steht nichts von Pullup-Widerständen an den Digitalports, nur bei dem DCF/FRQ0 -Port ist ein Pullup geschaltet. Aber auch im Handbuch der Unit steht nichts von den Pullups am Digitalport, oder?

nestler
04.12.2004, 18:10
Im Unit-Manual sind die Ports 8, 9, 10, 11 als "Interrupt"-Ports
bezeichnet...

Wenn du also die Ports wie in deinem obigen Programm nutzen willst,
dann musst du die Pullups wohl noch selber einbauen. 10 kOhm ist
da ein ganz brauchbarer Wert.

Gruss,
Simon