Hallo Gemeinde,
ich weiß langsam nicht mehr weiter.
Ich habe an einem Eingang des PICF2550er ein PullDown,
(+)---10kOhm----(PIC)
Der Pin wird dann gegen Masse gezogen von einem Relais
(12V)----(Relais)----(GND)
(GND)----(Relais_Schließer)---(PIC)
funktioniert soweit auch. (INCL. FREILAUFDIODEN AN ALLEN RELAIS!)
NUR (!) jetzt habe ich 2 Ausgänge, die 12V benötigen, d.h. mit über
Transistor werden 5V Relais gesteuert. Funktioniert auch.
Wenn ich nun den Eingang (s. oben, REED-Kontakt für Festozylinder)
nutzen will, funktioniert das 1X
Zum verständnis Pseudocode:
warte bis Reed schaltet
schalte Relais 1 an
warte Zeit x
schalte Relais 1 aus
warte Zeit y
von vorne
Dann bleibt der Pulldown GESETZT, d.h. ich kriege keinerlei Rückmeldung,
das Programm arbeit einfach weiter obwohl der Reedkontakt nicht
rückmeldet.
Kommentiere ich "schalte Relais 1 an/aus" aus, dann wartet er aber.
Nun ist die Frage ... WIESO ?
Mit einem Messgerät an dem PIN sehe ich, dass er nach dem PullDown auch
auf GND bleibt, obwohl das Relais definitiv abfällt.
Ich hatte das Problem auch schon vorher mit Relais 2, konnte es dort mit
einem monoflop aber beheben (warum auch immer ...), nur hier ist das
Problem weiterhin vorhanden.
Irgend eine Idee woran das liegen kann ???
MFG Stefan
Quellcode:
1 | ONOFF=1;
|
2 | RUNENABL=0;
|
3 | DelayH();
|
4 |
|
5 | while(1){
|
6 | CHECK=2;
|
7 | if(i==u){
|
8 | } // NO REPRINT
|
9 | else{
|
10 | XLCDClear();
|
11 | //sprintf(buffer, "ZER0_Wait_Zyli.!");
|
12 | sprintf(buffer, "~~ZERO > OPENEND");
|
13 | while(XLCDIsBusy());
|
14 | XLCDPutRamString(buffer);
|
15 | sprintf(buffer, "%ld", i); // WRITE i INTO *BUFFER
|
16 | while(XLCDIsBusy());
|
17 | XLCDL2home();
|
18 | while(XLCDIsBusy());
|
19 | XLCDPutRamString(buffer);
|
20 | LEDWAIT=0;
|
21 | WaitBack(W2);
|
22 | ZylinderVor=1; // Ausfahren
|
23 | }
|
24 |
|
25 |
|
26 |
|
27 |
|
28 | u=i; // NO REPRINT!
|
29 |
|
30 | DelayL();
|
31 |
|
32 | while(ZylinderVorne==1){
|
33 | DelayL(); // Warte bis der Zylinder vorne ist
|
34 | if(NOTAUS==1 || NOTSTOP==0){
|
35 | goto stop;
|
36 | }
|
37 | }
|
38 |
|
39 |
|
40 |
|
41 | //if(ZylinderVorne==0){ //Zylinder ist vorne
|
42 | LEDWAIT=0;
|
43 |
|
44 | i++; //+1
|
45 | /**
|
46 | XLCDClear(); // CLEAR LCD
|
47 | sprintf(buffer, "~Einwirken ....~");
|
48 | while(XLCDIsBusy());
|
49 | XLCDPutRamString(buffer);
|
50 | sprintf(buffer, "%ld", i); // WRITE i INTO *BUFFERÜ
|
51 | while(XLCDIsBusy());
|
52 | XLCDL2home();
|
53 | while(XLCDIsBusy());
|
54 | XLCDPutRamString(buffer);
|
55 | **/
|
56 | if(ONOFF==1){
|
57 | RUNENABL=1;
|
58 | WaitFront(W1);
|
59 | RUNENABL=0;
|
60 | DelayH();
|
61 | ZylinderVorne=0;
|
62 | }
|
63 | else{
|
64 |
|
65 | WaitFront(W1);// Einwirkzeit
|
66 | }
|
67 |
|
68 | ZylinderVor=0; // Zylinder zurück
|
69 |
|
70 |
|
71 |
|
72 | u=i+1; // Reprint!
|
73 |
|
74 | }
|