Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Über Druckerp. bei einer best. Spannung ein Relais schalten
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 12.07.2005, 13:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
didi



Anmeldungsdatum: 01.07.2005
Beiträge: 22

BeitragVerfasst am: 12.07.2005, 18:24    Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
didi



Anmeldungsdatum: 01.07.2005
Beiträge: 22

BeitragVerfasst am: 24.07.2005, 19:28    Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 24.07.2005, 20:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
didi



Anmeldungsdatum: 01.07.2005
Beiträge: 22

BeitragVerfasst am: 24.07.2005, 23:40    Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten Antworten mit Zitat

Hallo,
Pin 2 3 4 5 führen beim Hochfahren + 5 Volt
Pin 6 u. 7 nicht.

Gruß didi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 24.07.2005, 23:58    Titel: Antworten mit Zitat

Hallo

Dann benutze doch zum Steuern der Pumpe Pin 6 oder 7.

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
didi



Anmeldungsdatum: 01.07.2005
Beiträge: 22

BeitragVerfasst am: 25.07.2005, 19:24    Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 25.07.2005, 22:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
didi



Anmeldungsdatum: 01.07.2005
Beiträge: 22

BeitragVerfasst am: 27.07.2005, 21:14    Titel: Über Druckerp. bei einer best. Spannung ein Relais schalten Antworten mit Zitat

Hallo,
ich werde es mal mit dem IC 7486 probieren.

Gruß didi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz