Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 12.07.2005, 13:15 Titel: |
|
|
Hallo didi
Ich habe hier mal was zusammengebastelt. Ist zwar nicht sehr schön, sollte aber funktionieren. Ich habe alles was ich im Originalprogramm verändert habe mit ********* eingerahmt.
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 -
'****************************************************************************
KEY(1) ON 'Ueberwachung der F1-Taste einschalten
ON KEY(1) GOSUB notaus 'Wird sie gerdr.,nach notaus springen
Tpumpe = 300 'Laufzeit der Pumpe in Sekunden
Tpause = 600 'Wartezeit bis zum Scharfschalten
pHmax = 3 'Schaltspannung
URef = 5 '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
'INIT -> I/O CLOCK auf low = Bit2 (Wert 4) auf 0:
OUT SteuR%, INP(SteuR%) AND 255 - 4
DO 'Start Hauptschleife
'****************************************************************************
DO 'Start Warteschleife
'****************************************************************************
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
'****************************************************************************
Tdauer = TIMER - Tstart 'Laufzeit der Schleife ermitteln
IF Tdauer < 0 THEN Tdauer = Tdauer + 86400 'Gegen Ueberlauf um Mitternacht
LOOP UNTIL (Volt >= pHmax) AND Tdauer > Tpause 'Pumpe aus bis beides wahr ist
OUT BA%, 12 'Pumpe an
Tstart = TIMER 'Zeitpunkt merken
DO
Tdauer = TIMER - Tstart 'Laufzeit der Schleife ermitteln
IF Tdauer < 0 THEN Tdauer = Tdauer + 86400 'Gegen Ueberlauf um Mitternacht
LOOP WHILE Tdauer < Tpumpe 'Ist die Pumpzeit vorbei?
OUT BA%, 8 'Pumpe aus
Tstart = TIMER 'Zeitpunkt merken
LOOP 'Ende der Hauptschleife
notaus: 'Hier wird mit der F1 hingesprungen
OUT BA%, 0 'Stromversorgung ausschalten
END
'****************************************************************************
|
Den Min/Maxwert habe ich rausgenommen. Beendet wird mit der F1-Taste statt mit jeder beliebigen. Interessant wäre es sicher noch, die Messwerte über einen Tag oder einen Monat hinweg (dann z.B. jede Stunde) aufzuzeichnen, abzuspeichern und sich als Kurve auf dem Bildschirm anzeigen zu lassen. So könntest du auch schön sehen, wie das Aquarium auf die Zufuhr der Säure reagiert. Eine richtige Regelung ist das Programm nämlich noch lange nicht. Durch die grosse Dämpfung (= Verzögerung) im Regelkreis würde die aber auch etwas schwierig.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 12.07.2005, 18:24 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo Skilltronic!
Hab das Prog. mal kurz probiert und es hat funktioniert.
Werde bis zum Wochenende mal testen. Müsste aber klappen da es vorher schon mäßig ging. Werde mich dann mal kurz melden.
Ohne Hilfe hätte ich die Laufzeit der Pumpe über einen Zeitschalter begrenzen müssen. So ist es jetzt eine Super Sache.
Nochmals besten Dank!
didi |
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 24.07.2005, 19:28 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo,
ich habe die kleine Regelung mal ca. eine Woche getestet.
- bin sehr zufrieden. -
Ein kleines Problem gibt es noch beim Starten.
Da spinnt mein Relais an Pin 4 LPT 1 total.
Habe mal einen Schalter eingebaut, so daß ich beim Starten
ausschalten kann. Ist nicht tragisch aber vielleicht hat jemand eine bessere Idee?
Gruß didi |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 24.07.2005, 20:54 Titel: |
|
|
Hallo
Das passiert, wenn das Betriebssystem beim Booten prüft, ob ein Drucker o.ä. angeschlossen ist. Man müsste mal sehen, ob dabei nicht nur Pin 4 sondern immer alle Datenleitungen gleichzeitig eingeschaltet werden. Dann könnte man durch Nachschalten z.B. eines XOR-Gatters verhindern, das ein Signal an die Pumpe gesendet wird, wenn ausser Pin 4 noch eine andere Leitung auf high ist.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 24.07.2005, 23:40 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo,
Pin 2 3 4 5 führen beim Hochfahren + 5 Volt
Pin 6 u. 7 nicht.
Gruß didi |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 24.07.2005, 23:58 Titel: |
|
|
Hallo
Dann benutze doch zum Steuern der Pumpe Pin 6 oder 7.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 25.07.2005, 19:24 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo,
ich habe nicht richtig gemessen.
Beim Einschalten kommt doch kurz Spannung
auf Pin 6 u. 7.
Werde mir was anderes einfallen lassen.
Gruß Dieter |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 25.07.2005, 22:28 Titel: |
|
|
Hallo
Dann geht vielleicht doch das mit dem XOR-Gatter. Der IC 7486 enthält vier solche Gatter mit je zwei Eingängen und einem Ausgang. XOR steht für Exklusiv-oder, d.h. der Ausgang ist nur auf +5V, wenn genau einer der Eingänge auf +5V ist und der andere auf Masse. Sind beide an oder beide aus, ist der Ausgang auf 0, also Masse. Werden wie beim Booten alle Datenleitungen gleichzeitig eingeschaltet, sollte der Ausgang zum Relais also inaktiv bleiben.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
didi
Anmeldungsdatum: 01.07.2005 Beiträge: 22
|
Verfasst am: 27.07.2005, 21:14 Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten |
|
|
Hallo,
ich werde es mal mit dem IC 7486 probieren.
Gruß didi |
|
Nach oben |
|
 |
|