Autor |
Glühbirne über RS 232 an den PC anschließen |
|
|
|
|
BID = 360523
Dombrowski Stammposter
Beiträge: 450
|
Moin.
Nee, mit deiner Schaltung wird das nix. Der Stromkreis von der Spannungsquelle her muss über Glühlampe und Schalttransistor geschlossen sein. Mach es eher so wie in dieser Schaltung.
Ein Transistor BC337 reicht bis 400..450 mA für eine Glühlampe. 500 mA ist absolutes Maximum.
Der 100µF-Elko soll die Betriebsspannung im Moment des Ein- oder Ausschaltens puffern und stabil halten - z.B. bei längeren Zuleitungen von der Spannungsquelle. Wenn keine Gefahr droht, dass "empfindliche" Elektronik gestört wird, kann er auch wegfallen.
D.
|
BID = 360528
mex82 Neu hier
Beiträge: 24 Wohnort: Calw
|
|
Kann mir einer sagen wie die Hardwareschaltung aussehen muss?
Und das mit wenig Fachbegriffen?!
Eine kleine Skizze wäre nicht schlecht!
Merci |
|
BID = 360544
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Oben hat Dombrowsky dir eine gemacht. Du musst dazu allerdings auf den Link klicken .
Tx ist nunmal ein Eingang, da kommt nichts raus. Daher eine Steuerleitung, die als Ausgang fungiert. Anscheined hast du die richtige Steckerbelegung ja schon rausgefunden .
Der Emitter des Transistors muss auf GND und nicht auf Rx .
_________________
|
BID = 360914
mex82 Neu hier
Beiträge: 24 Wohnort: Calw
|
Dank euerer Hilfe habe ich mir nun für nur eine Glühbirne eine Schaltung aufgebaut!
Würde dies funktionieren, wenn ich es in den nächsten Tagen über RS 232 steuern kann?
(siehe Anhang/ Bild)
[ Diese Nachricht wurde geändert von: mex82 am 17 Aug 2006 16:25 ]
|
BID = 360933
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Ja, sollte gehen.
Bedenke, dass die Lampe angeht, wenn man eine logische "0" in das Register schreibt. Wenn eine "1" geschrieben wird, leitet die Diode.
_________________
|
BID = 360946
clembra Inventar
Beiträge: 5404 Wohnort: Weeze / Niederrhein
|
Zitat :
| Tx ist nunmal ein Eingang, da kommt nichts raus. Daher eine Steuerleitung, die als Ausgang fungiert. Anscheined hast du die richtige Steckerbelegung ja schon rausgefunden.
|
Nee, Tx steht für Transmit (oder ähnlich), was Senden bedeutet. Und Senden über einen Eingang ist schwer.
Rx ist der Eingang.
Aber Rts (Ready to send) stimmt, das ist (aus PC-Sicht) ein Ausgang
_________________
Reboot oder be root, das ist hier die Frage.
|
BID = 360979
Dombrowski Stammposter
Beiträge: 450
|
Moin.
TXD ist aus PC-Sicht auch ein Ausgang. TXD, DTR und RTS sind die drei Leitungen, die Signale vom PC zur Peripherie übertragen. So eine Zusatzschaltung betrachtet man als DCE (Data Communication Equipment), also genau wie ein Modem. Schon deshalb, damit man ein normales 1:1-Kabel benutzen kann und nicht auf ein Crossover-Kabel angewiesen ist. Ein DCE empfängt ein Signal über den TXD-Pin. (Der Pin des RS232-Steckverbinders ist gemeint!)
TXD kann sehr wohl ein statisches Signal liefern, nämlich indem man eine BREAK-Condition setzt, Bit 6 im Line Control Register. Dass man das Sende-Register (THR) in Ruhe lässt, während eine solche Anwendung läuft, versteht sich ja von selbst.
Und es ist auch in allen drei Fällen keine "0", die man zur Aktivierung ins Registerbit schreiben muss, sondern eine "1"! Bei logisch "0" im Register liegt -12 V (-3..-15 V) am Pin des Kabels; bei logisch "1" entsprechend +12 V (+3..+15 V). Es stimmt natürlich, dass die RS232-Treiber (MAX232, MC1488) invertieren; aus TTL-High machen sie -12 V, usw. Aber die Anschlüsse an den UARTs/SIOs sind bereits Low-aktiv: "1" im Register ergibt TTL-Low am Ausgang; bei Eingängen analog. Und minus mal minus ergibt plus.
Nunja, eine "richtige" Anwendung der seriellen Schnittstelle überträgt echte serielle Daten (die im PC über das THR losgeschickt wurden) und nimmt in der Peripherie einen µC o.ä. zur Auswertung.
D.
[ Diese Nachricht wurde geändert von: Dombrowski am 17 Aug 2006 19:27 ]
|
BID = 361103
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Mist, zu müde...
Hast natürlich Recht, dass TxD ein Ausgang ist...
_________________
|
BID = 361156
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
Zitat :
|
TXD kann sehr wohl ein statisches Signal liefern, nämlich indem man eine BREAK-Condition setzt, Bit 6 im Line Control Register. Dass man das Sende-Register (THR) in Ruhe lässt, während eine solche Anwendung läuft, versteht sich ja von selbst.
[ Diese Nachricht wurde geändert von: Dombrowski am 17 Aug 2006 19:27 ]
|
wie lange darf so eine BREAK Condition anliegen?
und wie wird sie "abgeschaltet" = anderer logischer Pegel?
|
BID = 361159
mex82 Neu hier
Beiträge: 24 Wohnort: Calw
|
Hallo!
Nun möchte ich mich ein Wenig schlau über die Steuerung übers PC machen.
Wie krieg ich die Glühbirne zum Leuchten übers PC?
Ich weiß nur, dass ich mit der Programmiersprache C und einen Compiler
"Cygwin" die Sache machen kann!
Doch wie wir das genau Ablaufen?
Etwa:
1.) Im Editor einen Programm auf C schreiben
2.) Über Cygwin mit dem Befehl gcc compilieren!
Genügt das um die Glühbirne an zu kriegen?
|
BID = 361359
Dombrowski Stammposter
Beiträge: 450
|
Moin.
Wie lange BREAK? Beliebig lange, denke ich. Ich habe im 16450-Datenblatt nichts Gegenteiliges gesehen. Zurücknehmen einfach durch "0"-setzen des Bits. Mein Google findet auf die Schnelle nichts Passendes, aber die BREAK-Bedingung durch Wechsel von Mark auf Space für mehr als eine Zeichendauer muss schon eine lange Tradition in der Fernschreibtechnik haben.
Die Basisroutinen zum Ein- und Ausschalten können z.B. wie folgt aussehen. Hier für die erste Glühlampe L1, die an DTR hängt.
Code : |
#include <stdint.h>
#include <asm/io.h>
/* serial port base address */
#define io_SER 0x03f8
/* line control register */
#define io_LCR (io_SER+3)
#define bit_BRK 6
/* modem control register */
#define io_MCR (io_SER+4)
#define bit_RTS 1
#define bit_DTR 0
/* convenience macro: bit number to bit mask conversion */
#define B2M(b) (1<<b)
void l1_on (void)
{
uint8_t r;
r = inb_p (io_MCR);
r |= B2M(bit_DTR);
outb_p (r, io_MCR);
}
void l1_off (void)
{
uint8_t r;
r = inb_p (io_MCR);
r &= ~B2M(bit_DTR);
outb_p (r, io_MCR);
}
/* .... */ |
|
Dies kompiliert unter Linux mit gcc einwandfrei. inb_p() und outb_p() sind die eigentlichen I/O-Routinen; je nach BS und Compiler können sie anders heißen. Das "_p" sorgt für einen zusätzlichen Dummy-I/O-Zugriff, um das Zugriffs-Timing zu entspannen. Ist i.a. ratsam.
Wenn man ein Komplettprogramm drum herum schreibt, muss man unter Linux noch mehr machen - u.a. iopl() ausführen, um den Zugriff auf die IO-Ports freizugeben. Das wiederum geht nur mit root-Rechten. Es ist allerdings unanständig, von einem Userspace-Programm aus direkt auf den IO-Ports mit root-Rechten rumzuholzen. Die richtige Methode wäre ein Kernelspace-Treiber. Ich selber mache solche Experimente unter Good-ol-MSDOS. Mit Windows habe ich nichts am Hut.
D.
|
BID = 361472
Dombrowski Stammposter
Beiträge: 450
|
Moin.
Ich habe spasseshalber mal eine GUI-Anwendung rund um die genannten Funktionen gemacht. Bild. Laufen tut es. (Pegel mit MM am RS232-Stecker gemessen.) Aber wie gesagt, mit einem Direkt-I/O-Zugriff vom Usermode aus werden alle Multitasking-Bemühungen und Sicherheitsmaßnahmen ad absurdum geführt.
D.
|
BID = 361944
mex82 Neu hier
Beiträge: 24 Wohnort: Calw
|
Erst mal vielen Dank!
Ich habe das Programm compilieren lassen!
Ich habe es unter Windows laufen lassen!
Folgende Fehlermeldung wird angezeigt:
asm/io.h: no such file or directory
Kannst du mir Literaturtipps geben um die Glühbirne über RS 232 zu steuern?
In Büchern wie "Programmieren in C", "Lehrbuch der Softwaretechnik." oder "Messen Steuern Regeln über RS 233"
gibt es kaum was, dass auch deinem Beispiel ähnlich ist!
|
BID = 361960
Lui Gelegenheitsposter
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 96
|
Die io.h gehört zur io.dll und wird unter nt/Xp für direkten Hardwarezugriff benötigt.
Für die serielle Schnittstelle tun es die 'regulären' Windowsfunktionen aber auch:
int comport=CreateFile('com1',GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
...
EscapeCommFunction(comport, xxxyyy);
//xxx = SET für setzten CLR für löschen
//yyy = DTR/RTS/BREAK für die Leitung (für Tx also BREAK)
...
CloseHandle(comport);// Ordnung muss sein
|
BID = 361987
mex82 Neu hier
Beiträge: 24 Wohnort: Calw
|
Hallo!
kann ich RS 232 mit folgendem Programm (im Editor geschrieben und im Cygwin mit dem Befehl gcc compelieren) steuern:
#include <stdint.h>
#include <windows.h>
int comport=CreateFile('com1',GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
EscapeCommFunction(comport, SETRTS);
CloseHandle(comport);
|