Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 02.07.2005, 16:02 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo, ich bin hier neu und hab so gut wie keine Ahnung!
Ich möchte bei erreichen einer bestimmten Volt-Zahl ein Relais
schalten. Habe mir einen einfachen AD-Wandler gebastelt und ein Programm von
Frank Steinberg gefunden das mir die Volt-Zahl anzeigt die der AD Wandler mißt.
Bringe es aber nicht ferig zb. pin 4 von meinem Druckerport zu schalten.
Vielleicht kann mir jemand helfen.
Gruß didi |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 02.07.2005, 19:42 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo,
Danke Sebastian, für Deinen T ipp,
Ich werde dies berücksichtigen.
Jetzt fehlt mir aber noch die Erweiterung zum Prog. also irgendwie:
wenn die Spannung zB. 3.00 Volt ist setze Pin 4.
Bin leider Anfänger. Vielleicht kann mir jemand helfen
nochmals Danke didi |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 02.07.2005, 20:28 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo,
das Programm von Frank Steinberg liest die Voltzahl aus und zeigt sie an.
Mein Problem ist aber wie ich bei erreichen der Voltzahl einen Pin schalten kann.
Code: | '-- tlc549.bas ------------------------------------------------- >>fst'01<< -
' - liest den 8-Bit AD Wandler TLC549 ueber den Parallelport aus
' - Verbindungen: (Bauanleitung im Internet; s.u.)
' -- TLC549 ----- -- LPT ----------- -- Zweck ------------------------
' Pin1 (REF+) <- Pin 5 (DATA3) = Versorgungs- & Referenzspannung
' Pin2 (ANALOG IN) - = Plus Messleitung
' Pin3 (REF-) - Pin18-19 (GND) = Masse & Minus Referenzspannug
' Pin4 (GND) - Pin18-19 (GND) = Masse & Minus Referenzspannug
' Pin5 (CS) <- Pin14 (AUTO FEED) = Chip-Select
' Pin6 (DATA OUT) -> Pin15 (ERROR) = Wandlerdaten
' Pin7 (I/O CLOCK) <- Pin16 (INIT/RESET) = Taktleitung
' Pin8 (VCC) <- Pin 5 (DATA3) = Versorgungs- & Referenzspannung
'-- V 20041128 ------------------------------- http://www.FrankSteinberg.de -
URef = 2.75 'Referenzspannung (messen & anpassen)
Port$ = "1" 'Nummer LPT-Port vorbelegen
DEF SEG = 0 'Segment setzen
BA1% = PEEK(&H408) + PEEK(&H409) * 256 'LPT1-Basisadresse auslesen
BA2% = PEEK(&H40A) + PEEK(&H40B) * 256 'LPT2-Basisadresse auslesen
IF BA2% THEN 'Abfrage, falls LPT2 vorhanden
CLS : PRINT
PRINT "Welchen LPT-Port benutzen? [1] oder [2] druecken."
DO: Port$ = INKEY$
LOOP UNTIL Port$ = "1" OR Port$ = "2"
END IF
IF Port$ = "2" THEN BA% = BA2% ELSE BA% = BA1% 'Basisadresse setzen
CLS
LOCATE 2, 1
PRINT "Auslesen des TLC549 8-Bit AD - Wandlers >>fst'01<<"
PRINT "ueber LPT "; Port$; " I/O-Adresse ="; BA%; "/ "; HEX$(BA%); "hex"; ""
PRINT
PRINT "Referenzspannung ="; URef; "Volt"
StatR% = BA% + 1 'Statusregister ist bei Offset 1
SteuR% = BA% + 2 'Steuerregister ist bei Offset 2
OUT BA%, 8 'Stromversorgung ueber Datenausgang 3 ein
TStart = TIMER 'Startzeit festhalten
WMin% = 999 'Minimalwert vorbelegen, wird sofort unter-
'schritten und erster Wert wird Minimalwert
'INIT -> I/O CLOCK auf low = Bit2 (Wert 4) auf 0:
OUT SteuR%, INP(SteuR%) AND 255 - 4
DO 'Start Hauptschleife
LOCATE 8, 1 'Cursor setzen
WDat% = 0 'alten Wandlerwert loeschen
'AUTO FEED -> CS auf high = Bit1 (Wert 2) auf 0:
OUT SteuR%, INP(SteuR%) AND 255 - 2
'AUTO FEED -> CS auf low = Bit1 (Wert 2) auf 1,
OUT SteuR%, INP(SteuR%) OR 2
FOR i% = 7 TO 0 STEP -1 'Bits7-0 des TLC 549 nacheinander auslesen
IF (INP(StatR%) AND 8) THEN 'Bit3 (Wert 8) DATA OUT->ERROR gesetzt?
M% = 1 'wenn ja, Multiplikator auf 1
ELSE M% = 0 'wenn nein, Multiplikator auf 0
END IF
'INIT -> I/O CLOCK auf high = Bit2 (Wert 4) auf 1:
OUT SteuR%, INP(SteuR%) OR 4
'INIT -> I/O CLOCK auf low = Bit2 (Wert 4) auf 0:
OUT SteuR%, INP(SteuR%) AND 255 - 4
'aktuelles Bit anzeigen:
PRINT USING "Bit#: ### * # = ###"; i%; 2 ^ i%; M%; 2 ^ i% * M%
WDat% = WDat% + M% * 2 ^ i% 'Wert des Bits aufsummieren
NEXT 'naechstes Bit holen
'hier ist eine Pause von min. 17 Mikrosek. erforderlich
Volt = URef / 256 * WDat% 'Ein Digit stellt den 256'sten Teil (8 Bit)
'der Referenzspannung dar
PRINT "============================"
PRINT USING "Summe ### Digits"; WDat%
PRINT USING "entspricht ##.## Volt"; Volt
PRINT
'Maximal- und Minmalwert ermitteln; jedoch nicht in der ersten Zehntel-
'Sekunde (da kann der Wert noch schwanken, insbes. mit Stuetzkondensator).
IF (TIMER - TStart) > .1 THEN
IF WDat% < WMin% THEN WMin% = WDat%
IF WDat% > WMax% THEN WMax% = WDat%
PRINT USING "Minimalwert ### Digits"; WMin%
PRINT USING "Maximalwert ### Digits"; WMax%
END IF
LOOP WHILE INKEY$ = "" 'Ende mit Tastendruck
OUT BA%, 0 'Stromversorgung ausschalten |
Mit freundlichem Gruß didi |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 02.07.2005, 20:37 Titel: |
|
|
Aber wenn der LPT doch schon von einem AD-Wandler belegt ist, wie willst du dann
einen Pin schalten?
Naja, hier ein kleiner Code, mit dem man den n. Pin einschalten kann.
Code: |
SUB SchalteAn (PinNr%)
OUT 888, 2 ^ PinNr%
END SUB
|
Unter XP dürfte es nicht klappen, daher mal die Forensuche benutzen; es wurde hier schon mal besprochen
jb |
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 02.07.2005, 21:41 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo jb
geht leider nicht.
trotzdem Danke
didi |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 02.07.2005, 22:50 Titel: |
|
|
Hallo @didi,
wie ich deine Beiträgen entnehme versuchst du unter win95 , 98 oder ME in QBasic einmal den AD-Wandler und ein Relais am LPT-Port zu betreiben?
Was meinst du mit "an pin 4", Pin 4 an der SubD - Buchse müsste Bit 2 des LPTPorts sein. sich also mit 2^2=4 (out 888,4) schalten lassen.
Aber Bit 4 würde 2^4=16 (out 888,16) sein?
Gruß
Volta
EDIT/
ich sehe gerade im AD-Prog:
Code: | IF WDat% < WMin% THEN WMin% = WDat%
IF WDat% > WMax% THEN WMax% = WDat%
PRINT USING "Minimalwert ### Digits"; WMin%
PRINT USING "Maximalwert ### Digits"; WMax%
END IF
'Hier die 2 Zeilen einbauen
if Volt > 3.0 then OUT BA%, INP(BA%) OR 4
if Volt < 3.0 then OUT BA%, INP(BA%) AND 255 - 4
LOOP WHILE INKEY$ = "" 'Ende mit Tastendruck
OUT BA%, 0 'Stromversorgung ausschalten |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 03.07.2005, 12:27 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo volta
Dein Vorschlag funktioniert perfekt.
Habs mit einem regelbaren Netzteil grad probiert.
Vielen Dank. SUPER! |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 03.07.2005, 12:32 Titel: |
|
|
Hallo
Das AD-Wandlerprogramm läuft also und zeigt dir die Spannung an. Gleich vorweg: wenn du 2,75 als Wert für URef benutzt, werden 3 Volt natürlich nie erreicht. Am einfachsten wäre es, du lässt bei der Schaltung den ganzen Referenzspannungsteil weg und legst den Pin 1 des TLC549 auf die Versorgungsspannung. Die Datenleitungen sind haben 5Volt TTL-Pegel. Denn liegt der Messbereich zwischen 0 und 5 Volt. vielleicht reicht das für deine Zwecke. Ein kleinerer Messbereich erhöht zwar die Genauigkeit, die Frage ist, ob dir 5V/256 = 19.5mV nicht schon genügen.
Nun zum Programm. Die Steurbits für die Ein- und Ausgänge des Druckerports sind auf drei Register verteilt.
Code: | StatR% = BA% + 1 'Statusregister ist bei Offset 1
SteuR% = BA% + 2 'Steuerregister ist bei Offset 2
OUT BA%, 8 'Stromversorgung ueber Datenausgang 3 ein |
auf der Basisadresse BA% liegt das Datenregister für die Leitungen D0-D7, das Status- und Steuerregister auf den beiden folgenden Adressen BA%+1 bzw. BA%+2. Die Steuerung und das Lesen des TLC549 (Data, Clock, Strobe) geschieht ausschliesslich über die Steuer- und Statusregister. Da muss also nichts geändert werden.
Wenn man nun über eine der Datenleitungen etwas schalten möchte, muss man darauf achten, dass der Pin 5 (also D3) , über den der IC seine Versorgungs- und Referenzspannung erhält, eingeschaltet bleibt. D3 wird mit 2^3 = 8 (das vierte Bit des Registers) geschaltet (deshalb oben OUT BA%, 8). Soll nun D2 (Pin 4 am LPT, das dritte Bit des Registers) zusätzlich eingeschaltet werden, muss man den Stellenwert dieses dritten Bits, also 2^2 = 4 zu der 8 dazuzählen, die sowieso schon im Datenregister steht. beim Ausschalten wird wieder eine 8 ins Datenregister geschrieben und damit alle Datenleitungen ausser der für die Versorgungs- und Referenzspannung auf Null gesetzt.
Code: | PRINT USING "Minimalwert ### Digits"; WMin%
PRINT USING "Maximalwert ### Digits"; WMax%
'ich wuerde diese beiden Zeilen einbauen
IF Volt > 3 THEN OUT BA%, 12 '8+4 -> D2 und D3 anschalten
IF Volt < 2.8 THEN OUT BA%, 8 'wieder nur D3 an, D2 ist aus
END IF
LOOP WHILE INKEY$ = "" 'Ende mit Tastendruck
OUT BA%, 0 'Stromversorgung ausschalten |
Vorrausgesetzt, URef ist grösser als 3 Volt. Ich würde erst bei einer etwas niedrigeren Spannung ausschalten, als eingeschaltet wird. So eine Art Hysterese. Damit wird verhindert, dass beim Erreichen der Schaltschwelle, wenn der Messwert etwas schwankt das Relais "flackert" und ständig hin- und herschaltet, bis die Schaltschwelle eindeutig überschritten ist. Je nach Anwendung könnte man noch eine zeitliche Absicherung einbauen, also dass die Spannung z.B. für eine Sekunde über- bzw. unterschritten werden muss, bevor geschaltet wird. Bei einer Füllstandsmessung könnte so ein Schwappen der Flüssigkeit kompensiert werden.
Übrigens sind praktisch alle Digitaleingänge - also auch die der PC-Ports - Schmitt-Trigger-Eingänge, die im Prinzip an sich genau die Eigenschaft besitzen, ab einer bestimmten Spannung durchzuschalten und bei einer etwas niedrigeren wieder auf Null zu springen. Vielleicht ist es also möglich, dein Problem auch ganz ohne AD-Wandler zu lösen, ein einfaches Poti reicht vielleicht schon, um die Signalspannung entsprechend anzupassen. Kannst du nochmal etwas genauer beschreiben, was du vorhast bzw. etwas genauere Angaben zur Elektrik machen?
Ach ja - uind natürlich Sebastians Hinweis nicht vergessen und auf gar keinen Fall das Relais direkt an den Port hängen!
Gruss
Skilltronic
EDIT: sehe gerade, ich war 5min. zu spät - es läuft ja schon. Aber vielleicht hilft's trotzdem... _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 03.07.2005, 17:09 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo Skilltronic
Ich habe Deinen Vorschlag auch getestet. Funktioniert auch Super .
Hätte nie geglaubt , daß einem hier so professionell geholfen wird.
Ich möchte über ein ph Messgerät den PH-Wert regeln.
Ohne Messgerät liefert die Ph Sonde bei
PH 9 2 x -59 mV= -118 mV
PH 8 - 59 mV
PH 7 0 V
PH 6 59 mV
PH 5 2 x 59 mV=118mV
Auf diese Art hätte die Regelung vielleicht nicht geklappt und noch
besser: Wäre mir sowiso zu hoch gewesen. Bin wie schon gesagt
! Anfänger !
nochmals vielen Dank
didi |
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 09.07.2005, 17:33 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo,
beim Programm ist folgendes Problem aufgetreten:
Wenn die Voltzahl erreicht ist schalte ich mit pin 4 von Lpt 1
mein Relais das die Dosierpumpe einschaltet. Nun bekomme ich eine Überdosierung weil ich keine Zeitbegrenzung über die Laufzeit drin habe.
Also das Progg. sollte weiter laufen, dia Pumpe aber nur eine begrenzte Zeit.
Hat jemand eine Idee?
Würde mich freuen
Gruß didi |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 09.07.2005, 20:51 Titel: |
|
|
Wenn er die Pumpe aktiviert, schreibe das hier
In den Programmcode (d.h. in die Schleife) kommt das:
Code: |
IF TIMER > StartZeit! + Dauer! THEN ???
|
Für das ??? musste du einen Code reinsetzen, der Pin 4 aussschaltet, und
Dauer! ist die Zeit, die die Punpe anbleiben soll,
in Sekunden.
WICHTIG: Obiger Code ist nich rollover-tauglich!
jb |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 09.07.2005, 20:57 Titel: |
|
|
Hallo,
da der gesamte Kreis eine Regelung darstellt, sollte das nicht vorkommen.
Die Frage ist jetzt:
ist die Reaktionszeit des Dosiermittels was zur Lösung gegeben wird so langsam
oder ist die Entfernung von Ph-Sonde zum Einspeisepunkt der Pumpe zu groß?
Ist es überhaupt richtig, das die Spannung des Ph-Messgerätes nach der Einspeisung des Mittels geringer wird?
Gruß
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 09.07.2005, 21:01 Titel: |
|
|
Ich dachte, die Pumpe wird ab einer bestimmten Spannung getoggelt; er
sagte ja, sie ginge nicht mehr aus
jb |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 09.07.2005, 21:09 Titel: |
|
|
Hallo,
möglich ist aber ein anderer Fehler.
z.B. Aquarium mit ext. Filter:
Messung des Ph-Wertes im Aquarium und Einspeisung eines Ph-Neutralisierungsmittels im Filter!
Bevor das Mittel sich im Aquarium bemerkbar macht, ist schon zuviel in den Filter gepumt worden.
Typischer Fehler einer Regelung, zu späte Reaktion des Regelkreises!
Gruß
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 09.07.2005, 21:19 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo jb, hallo volta,
es liegt nicht an der Entfernung. Das Dosiermittel PH-Minus (Säüre)
kann ich nicht so stark konzentrieren. Es braucht deshalb ca. 1 Stunde
bis sich das ganze so vermischt hat damit eine korrekte Messung
zustande kommt.
Werde mal kurz den Vorschlag von jb testen.
Danke mal solange
didi |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 09.07.2005, 22:15 Titel: |
|
|
Hallo
Wenn das mit der Verteilung eine Stunde dauert, ist das Problem beim Vorschlag von jb, dass wenn sich die Pumpe z.B. nach einer Minute abschaltet, der pH-Wert wahrscheinlich immer noch zu hoch ist und sie u.U. gleich wieder angeht. Mann könnte es vielleicht so machen, dass das Programm nach frühestens nach 1-2 Stunden wieder "scharfgeschaltet" wird.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 10.07.2005, 00:46 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo Skilltronic,
Ich glaube Dein Vorschlag wäre für mich die beste Lösung.
Ist aber für mich zu hoch.
Bräuchte da Eure Hilfe.
Nochmals besten Dank an Alle
didi |
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 11.07.2005, 19:42 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo,
versuche mich noch immer mit der kleinen Steuerung.
Habe immer noch das Problem mit der Überdosierung.
Frage: Wäre es möglich ein Paar Zeilen einzubauen, die mir
die Laufzeit meiner Dosierpumpe auf eine bestimmte Zeit (ca 300 Sekunden begrenzt und nach ca 600 wieder aktiviert?
PRINT USING "Minimalwert ### Digits"; WMin%
PRINT USING "Maximalwert ### Digits"; WMax%
IF Volt > 3 THEN OUT BA%, 12 '8+4 -> D2 und D3 anschalten
IF Volt < 2.8 THEN OUT BA%, 8 'wieder nur D3 an, D2 ist aus
END IF
LOOP WHILE INKEY$ = "" 'Ende mit Tastendruck
OUT BA%, 0 'Stromversorgung ausschalten
[/b]Würdet mir wirklich sehr helfen.
Gruß didi |
|
Nach oben |
|
 |
|