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
C. L. schrieb: > Im Datenblatt des 8051 steht m.M.n. das nur bei Adresszugriff auf Port 2 > hier der Pullup wirkt, ist das mein Fehler? Wenn Du die Antwort schon gelesen hast, wieso lötest Du nicht probehalber mal kurz einen Pullup dorthin? Das wäre bestimmt schneller gegangen als diesen langen Text zu schreiben.
C. L. schrieb: > Ich bin ein wenig am verzweifeln mit der Ansteuerung eines ULN2803 am > Port 2 vom AT89C51CC03. Hau einfach den ULN2803 raus. Das Relaisboard kann direkt vom 8051 angesteuert werden (low aktiv).
Der Pullup am Port2 ist immer wirksam, allerdings ist er relativ schwach, IIRC sind es so 50kOhm. Im Moment das Zugriffs wird kurzzeitig ein niederohmiger Pullup für einen Takt parallel geschaltet. Der ULN2803 hat etwa 3kOhm + 2 Diodenstrecken Eingangswiderstand. Du kannst dir also ausrechnen, was da an Spannung zu messen ist. Allerdings reichen die 100uA Strom aus dem Port aus, um dein Minirelais via ULN2803 anzusteuern. Da Dein Relais eigene Treiber hat, geht es - wie Peda schrieb - auch ohne ULN2803.
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.