Hallo,
Ich bin ein wenig am verzweifeln mit der Ansteuerung eines ULN2803 am
Port 2 vom AT89C51CC03.
Der ULN hängt direkt ohne Widerstand am Port 2.7 und schaltet ein Relais
auf diesem Board (4mA Schaltleistung werden benötigt):
http://www.amazon.de/Kanal-Relay-Relais-Module-Arduino/dp/B00AEIDWXK/ref=sr_1_1?ie=UTF8&qid=1447058086&sr=8-1&keywords=relaisboard
Man ließt ja schon einiges an Problemen zu dem Thema, dennoch habe ich
keine Lösung parat.
Grundsätzlich funktioniert die Ansteuerung ertmal, aber nicht
zuverlässig.
D.h. manchmal klappt es, dann wieder nicht.
Was micht echt stutzig macht ist folgendes:
Wenn ich mit dem Logiktester direkt an den Port P2.7 messe, bekomme ich
zwar je nach Zustand eine echte "0" aber kein
echtes High, sondern es scheint irgendwie zu schweben. Die Ausgangsstufe
des 8051 hat ja Pullup´s, also werde ich warscheinlich nicht genügend
Strom aus diesen Port bereitgestellt bekommen um das High auf dem
Logiktester angezeigt zu bekommen.
Trotzdem schaltet sich genau in diesem Moment das Relais ein, obwohl das
definitiv nicht das Programm macht!
Ebenso scheint sich dieser Ausgang dann auch zu halten.
Wieso kann ich von aussen mit Messungen an diesem Port ihn zu schalten
bringen?
Im Datenblatt des 8051 steht m.M.n. das nur bei Adresszugriff auf Port 2
hier der Pullup wirkt, ist das mein Fehler?
Alles komisch irgendwie.
Im Programm wird das hier gemacht (Auszug):
//Deklaration
unsigned char bit WarmwasserZirkulationspumpe @ 0xA6; // P2.6
// in der MAIN werden dann anfangs erst alle Ausgänge einmal mit "0"
beschrieben und einfach anhand einer temporären Variable geschaltet.
RelaisReserve1 = 0; // Alles erstmal definiert auf "0" setzen
RelaisReserve2 = 0;
RelaisReserve3 = 0;
RelaisReserve4 = 0;
WarmwasserZirkulationspumpe = 0;
.
.
.
.
.
.
if (WarmwasserZirkulationspumpeTmp == 1)
{
WarmwasserZirkulationspumpe = 1; // Pumpe ein
Zur_Visu[43] = 0;
Zur_Visu[44] |=0x01; // 16bit 30021 Bit 0..7
}
else
{
WarmwasserZirkulationspumpe = 0; // Pumpe aus
Zur_Visu[43] = 0;
Zur_Visu[44] &=0x0FE; // 16bit 30021 Bit 0..7
}
Was mache ich falsch bzw. was kann ich noch machen?
Invertieren in Software und dann mit 7404? Muss das sein?
Pullup / pulldown?
Gruß CL