PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Übertragung großer Datenmenge über lange Entfernung



mikro-VIIV
29.06.2008, 14:57
Hallo alle zusammen.

Mein Problem ist das ich 16kByte über eine Distanz von 50m übertragen muss.
Außerdem sollte das ganze noch ziemlich schnell gehen. (nicht länger als 1s für die 16kByte)

Kann mir jemand einen Tipp geben, wie ich das am besten mache!

RS 232 ist zu langsam, da benötige ich bei 9600baud 85s. Das ist definitiv zu langsam. Schneller als 9600 geht es auch bei 50 leider nicht.

Wie sieht es zum beispiel mit I²C aus? Würde das für die Entfernung gehen. Ich kenne mich leider nicht mit I²C. bei ner Übertragungsfrequenz von 400kBit/s sollte das doch gehen oder? Aber auch auf die Entfernung?

Bin für jede Hilfe dankbar.

Richard
29.06.2008, 15:20
Hallo alle zusammen.

Mein Problem ist das ich 16kByte über eine Distanz von 50m übertragen muss.
Außerdem sollte das ganze noch ziemlich schnell gehen. (nicht länger als 1s für die 16kByte)

Kann mir jemand einen Tipp geben, wie ich das am besten mache!

RS 232 ist zu langsam, da benötige ich bei 9600baud 85s. Das ist definitiv zu langsam. Schneller als 9600 geht es auch bei 50 leider nicht.

Wie sieht es zum beispiel mit I²C aus? Würde das für die Entfernung gehen. Ich kenne mich leider nicht mit I²C. bei ner Übertragungsfrequenz von 400kBit/s sollte das doch gehen oder? Aber auch auf die Entfernung?

Bin für jede Hilfe dankbar.

Mit RS485 klappt es bis 1200 m über LAN geht auch bis ca 150m,
I²C ist nur für sehr kurze Entfernungen geeignet weil die Treiber
nur geringe Leitungskapatitäten vertragen.

RS485 ist eine Differenzsiegnal übertragung braucht also 2 Leitungsdräte
(Telefonkabel 4*2*0,6) die Datenleitung mußan beiden Enden mit
einen 120 Ohm Widerstand abgeschlossen werden.

Gruß Richard

fhs
29.06.2008, 15:20
Hallo,

bei der Entfernung liegst Du mit RS485 am besten. 50m könntest Du mit Glück auch mit RS232 errreichen, obwohl hier meist 15m als Obergrenze angegeben werden (z.B. http://www.lammertbies.nl/comm/info/RS-485.html ).


...RS 232 ist zu langsam, da benötige ich bei 9600baud 85s.
Deine Rechnung verstehe ich nicht. Wenn ich von 10Bits=8Bits+1Startbit+1Stoppbit ausgehe, werden mit 9600kb/s pro Sekunde 960 Daten-Bytes übertragen. 16384/960~17; also 17 s für 16k! Bei 115200Bd also <1,5 s für Deine 16kB.


Schneller als 9600 geht es auch bei 50 leider nicht.
Den Satz verstehe ich nicht.

I2C: max. ein paar Meter für hohe Datenraten; 100m oder so gehen auch, aber dann nur mit ganz kleinen Geschwindigkeiten (z.B. <1kHz).
Noch mehr Infos: http://www.esacademy.com/faq/i2c/q_and_a/i2cqena.htm .

Gruß

Fred

mikro-VIIV
29.06.2008, 20:12
Danke erst einmal für eure Hilfe.


bei der Entfernung liegst Du mit RS485 am besten

OK, dann werde ich mich diesbezüglich mal belesen.



Deine Rechnung verstehe ich nicht. Wenn ich von 10Bits=8Bits+1Startbit+1Stoppbit ausgehe, werden mit 9600kb/s pro Sekunde 960 Daten-Bytes übertragen. 16384/960~17; also 17 s für 16k! Bei 115200Bd also <1,5 s für Deine 16kB.

Wenn ich von 8+1+1 Bits ausgehe, dann kann ich doch 960 Byte pro s übertragen. Bei 16kByte sind das dann ~17s.
Stimmt

allerdings habe ich 16384 einzelne Bytes. Es sind 16384 Integerwerte. Wenn ich die jeweils einzeln übertrage, dann benötige ich für einen Integer ja schon 5Byte.
Es wird ja dann z.B. 1 5 2 \r \n übertragen. (hab das mal mit Bascom und Print und dem Terminalprogramm HTerm probiert) (nur so nebenbei HTerm ist echt zu empfehlen)

Wie müsste ich es denn machen, um die 16384 Integerwerte schneller zu übertragen?

Um nun nochmal zur Rechnung zu kommen.
Es waren also 960Byte/s. Ich habe 16384 Integers, Dann sind das 5*16384Byte. Demnach 81920/960=85,33s.
Desswegen geht das so langsam.
Für 11520Baud, was bei 50m leider nicht mehr möglich ist währen es dann immer noch 7.11s. Also immer noch zu viel.


OK, dann bedanke ich mich nochmals und schau mir wie gesagt RS485 mal an.
Falls weitere Fragen auftreten sollten, melde ich mich.

Bin natürlich auch weiterhin dankbar für eure Hilfe.

fhs
29.06.2008, 20:19
Hallo,


...allerdings habe ich 16384 einzelne Bytes. Es sind 16384 Integerwerte. Wenn ich die jeweils einzeln übertrage, dann benötige ich für einen Integer ja schon 5Byte.
Es wird ja dann z.B. 1 5 2 \r \n übertragen. ....
Wie müsste ich es denn machen, um die 16384 Integerwerte schneller zu übertragen?

OK, Du willst also tatsächlich 5*16kB übertragen, da Du Deine 16kB 8-Bit Ganzzahlen als ASCII-BCD mit Zeilenvorschüben usw. überträgst.
5x effektiver wäre es, Du übertrügest einfach die rohen Bytes! Nicht alle Terminal-Programme können so etwas korrekt empfangen -- wenn Du aber das empfangende PC-Programm entsprechend ausrichtest, lässt Du es einfach die Rohdaten (und nicht BCD-Code) erwarten! Wenn das für Deine Anwendung nicht passt, musst Du tatsächlich 80kB übertragen.

Gruß

Fred

mikro-VIIV
29.06.2008, 20:25
Danke für die schnelle Antwort Fred.

Wie mach ich das denn dann in Bascom, dass ich nur die Rohdaten übertrage. Ich hätte das wahrscheinlich auch schon so gemacht (geht ja 5* schneller), wenn ich wüsste wie.

fhs
29.06.2008, 20:28
Hi,

tut mir leid, da überlasse ich den Experten das Feld. Ich kann kein Bascom; benutze nur Assembler und C.

Gruß

Fred

veit
29.06.2008, 23:25
wenn ich mich richtig entsinne mit writebyte aber da bin ich jetzt mal gaaaaaaanz vorsichtig...

aber zu rs485 kann ich dir wirklich raten, das ist ein prima bus für höhere distanzen!

einfach einen rs485 chip hinter rx-tx von deinem controller, findest im netz dazu sicherlich schaltpläne

Bluesmash
29.06.2008, 23:38
hiermit kanst du eine word variable als 2 byte "rohdaten" senden:

dim x as word
printbin x


auszug aus der bascom hilfe:

Syntax

PRINTBIN var [ ; varn]
PRINTBIN #channel, var [; varn]

Remarks

PRINTBIN is equivalent to PRINT CHR(var);
When you use a Long for example, 4 bytes are printed.

Multiple variables may be sent. They must be separated by the ; sign.

The number of bytes to send can be specified by an additional numeric parameter. This is convenient when sending the content of an array.

Printbin ar(1) ; 3 ' will send 3 bytes from array ar().
Printbin ar(1) ; 2 ; ar(2) ; 4 ' will send 2 bytes from array ar() starting at index 1, then 4 bytes from array ar() starting at index 4.

When you use Printbin ar(1) , the whole array will be printed.
When you need to print the content of a big array(array with more then 255 elements) you need to use the CONFIG PRINTBIN option.


gruss bluesmash

Babbage
30.06.2008, 10:56
Hast Du mal die Möglichkeit überlegt die Daten zu packen?
klarer Nachteil:du bräuchtest dann ein eigenes Auswertungsprogramm und weitere Resourcenbedarf im Sender.

Vitis
30.06.2008, 18:06
485 geht mit Bascom supereasy mittlerweile.
Man gehe hin und definiere den R/W-Pin des
485-Busbausteins über Config Print
und sende einfach per Print den ganzen Mist, den man übertragen möchte.
Printbin ist Käse, braucht man nicht, Bascom baut nur
bei Zeichenketten am Ende den CR/LF dahinter, den man mit
Semikolon hinter der Printanweisung auch ausschalten kann.
Dann gehe man hin und benutze Overlayvariablen um den
Int in Bytes zu zerlegen (1 Int = 2 Byte)
und sende per print chr(variable);
und fertig ist die Geschicht.

Ok, Printbin geht auch, wenn ichs mir recht überleg sogar
noch ne ecke einfacher, Ihr habt Recht.

mikro-VIIV
03.07.2008, 21:09
Vielen vielen dank für eure großartige Unterstützung.

Das scheint ja wirklich genau das richtige für meine Zwecke zu sein und ist außerdem noch recht einfach dazu.

Eine letzte Frage hätte ich allerdings noch:
Wie kann ich über RS485 mit dem Computer kommunizieren? (so wie bei RS232?) Geht das und wenn ja wie bitte?

gummi_ente
03.07.2008, 22:04
Hallo,

es gibt Wandler von RS485 auf USB, sowie auf RS232. Bei USB wird dann ein virtueller COM-Port emuliert.
Das ganze arbeitet dan wie bei RS232.

Wandler gibt's von ADAM, Spectra usw.

Grüße

mikro-VIIV
04.07.2008, 09:09
Kann ich dann auch die maximale Übertragungsgeschwindigkeit von 4MBit/s verwenden mit so einem Wandler?

Vitis
04.07.2008, 13:19
wenns die Gegenseite kann vermutlich schon,
aber n ATMega wird das nicht hinbekommen
und auch die Leitungslänge nimmt bei
so hohen Übertragungsraten mächtig ab.

Richard
04.07.2008, 18:56
Vielen vielen dank für eure großartige Unterstützung.

Das scheint ja wirklich genau das richtige für meine Zwecke zu sein und ist außerdem noch recht einfach dazu.

Eine letzte Frage hätte ich allerdings noch:
Wie kann ich über RS485 mit dem Computer kommunizieren? (so wie bei RS232?) Geht das und wenn ja wie bitte?

Der RS485 Treiber hat Rx, Tx und 2 Pins um auf/Lesen Senden umzuschalten,
Auf der Anderen Seite dann +5V, GND, A , B. A und B sind der Bus. Wenn
wie bei RS232 Bidirektional, also gleichzeitig gesendet/Empfangen werden
soll braucht man 4 Leitungen und auch 4 RS485 Wandler.

Wenn es reicht abwechselnd zu Senden oder Epfangen reichen zwei
Bausteine und 2 Leitungen. Dann muß der Prozessor dafür sorgen das
im richtigem Moment (beide) Chips von lesen/senden und umgekehrt
umgeschaltet werden.

Gruß Richard

Bluesmash
04.07.2008, 19:03
meistens ist einer der lesen/schreiben pins invertiert somit kann man beide pins verbinden und es genügt ein port den man high oder low schaltet... hab ich so auch schon gemacht.

gruss bluesmash

mikro-VIIV
04.07.2008, 19:20
wenns die Gegenseite kann vermutlich schon,
aber n ATMega wird das nicht hinbekommen
und auch die Leitungslänge nimmt bei
so hohen Übertragungsraten mächtig ab.

Was ist denn so die maximale Übertragungsgeschwindigkeit, die ich mit nem ATMEGA 16 mit 16MHz über 50m erreichen kann? Währen damit wenigstens 400'000kHz machbar?

repi64
04.07.2008, 20:54
400000kHz = 400MHz sind sicher unmöglich.
Über RS485 oder RS422 (4 Draht bidirektional ohne RX/TX umschalterei)
bist du mit einer Baudrate von 115200 gut bedient.
Das doppelte sollte auch noch machbar sein.
Dann wird es langsam eng für den Controller.
Die RS422 / 485 Wandler sind bei 50m und der Baudrate noch lange nicht am Limit.

wkrug
04.07.2008, 21:55
Also 250kBit/s gehen bei einem ATMEGA8 schon mit 8MHz.
Mit 16MHz sollte deshalb das doppelte drin sein.

Ein Problem könntest Du mit der PC Schnittstelle kriegen - wie schnell geht die denn maximal ?

mikro-VIIV
04.07.2008, 22:28
Ein Problem könntest Du mit der PC Schnittstelle kriegen - wie schnell geht die denn maximal ?

wkrug
05.07.2008, 18:31
Ein Problem könntest Du mit der PC Schnittstelle kriegen - wie schnell geht die denn maximal ?
Ich meinte damit natürlich die serielle COM Schnittstelle.
Die lässt sich bei den meisten PC's maximal auf 115200Bit/sek einstellen und das wäre ja dann zu wenig.
Je höher die Datenübertragungsrate deines Controllers um so kürzer müssen die Ausarbeitungsroutinen und die Datenversorgungsroutinen für die serielle Schnittstelle werden.
Wenn alle Möglichkeiten ausgereitzt sind bleibt noch diese Routinen in Assembler zu schreiben, oder den Code anderweitig zu optimieren.

mikro-VIIV
05.07.2008, 18:36
Ich meinte damit natürlich die serielle COM Schnittstelle.
Die lässt sich bei den meisten PC's maximal auf 115200Bit/sek einstellen und das wäre ja dann zu wenig.

das ist leider zu wenig für meine Bedürfnisse :( ,schade

gibt's da eventuell noch ne andere Möglichkeit?

wkrug
05.07.2008, 18:54
Deine Lösung könnte unter Umständen FT232RL heissen.

Im Datenblatt dieses IC steht:

The FT232R supports all standard baud rates and non-standard baud rates from 300 Baud up to 3 Megabaud. Achievable non-standard baud rates are calculated as follows -
Baud Rate = 3000000 / (n + x)

Und das sollte mehr als ausreichend sein.
Auf welche Geschwindigkeiten sich die beiden verfügbaren Treiber einstellen lassen ist wiederum ein anderes Thema.

Der Treiber arbeitet dann auf einen RS485 Transceiverbaustein ( z.B. SN75176 ), der sein Gegenstück beim Microcontroller findet.
Ich würde aber fast eine Vierdrahtverbindung zwischen Controller und PC machen, weil die RS232 ja auch full Duplex fähig ist.

PicNick
05.07.2008, 18:55
Was für Daten sind denn das ? Nicht wegen der Neugierde, sondern weil es schon verschieden Komprimierungsmöglichkeiten gibt, wo du dir einiges ersparen kannst.

mikro-VIIV
05.07.2008, 19:29
zu wkrug:
das ganze klingt ja nicht schlecht, aber kann ich damit auch mit den 3 Megabaud mit dem PC kommunizieren?



Was für Daten sind denn das ? Nicht wegen der Neugierde, sondern weil es schon verschieden Komprimierungsmöglichkeiten gibt, wo du dir einiges ersparen kannst.

Es sind wie gesagt Integers im Bereich von 0 bis 255. Ich werde das ganze aber in der Auflösung zurüchschrauben. Das heißt von 0 bis 127, oder sogar nur bis 63, obwohl das schon ziemlich ungenau wird.
Ich könnte also die Übertragung schon beschleunigen, indem ich statt 8 Datenbit nur 7 ober 6 sende.

Wie ich das noch komprimieren kann weiß ich leider nicht.

PicNick
06.07.2008, 11:09
Eine Möglichkeit, die man auch einem µC zutrauen kann, ist ein verwursteltes Huffmannverfahren. z.B, ganz primitiv:
Ist das nächste Bit ein 0, dann sind die nächsten 6 Bit eine Zahl (0-63)
ist es 1, dann kommen 8 Bit (0-255)

das kann man erweitern, indem man z.B. nur die Differenz zum vorherigen Byte überträgt.

Gibt noch mehr, aber es kommt eben auf die Statistik an.

wkrug
06.07.2008, 14:17
das ganze klingt ja nicht schlecht, aber kann ich damit auch mit den 3 Megabaud mit dem PC kommunizieren?
Das kann ich Dir leider auch nicht beantworten, das ist eine Frage der Treiber und des PC's. Die Bausteine auf jeden Fall können diese Geschwindigkeiten.

mikro-VIIV
06.07.2008, 18:09
Alles in allem kann ich also meine 16kByte ohne Probleme mit Hilfe von RS485 übertragen.

Nur wenn ich das ganze auch noch mit dem Computer verbinden will, siht das schon wieder schlecht aus. :(


Was Währe denn, wenn ich die Daten nicht direkt zum PC sende, sondern zu einem weiteren µC.
Ist es möglich von dem µC aus dann die Daten z.B. über die parallele Schnittstelle zum PC zu senden? Ist die Parallele Schnittstelle dafür schnell genug? Und was fast noch wichtiger ist: Kann ich die parallele Schnittstelle mit Delphi genauso einfach auslesen, wie RS232?

wkrug
07.07.2008, 16:19
Es gibt von FTDI eine Application Note zu dem Thema Geschwindigkeit.
http://www.ftdichip.com/Documents/AppNotes/AN232B-05_BaudRates.pdf

Lesen kannst Du ja selber...

mikro-VIIV
07.07.2008, 19:44
OK, das der Chip selber für hohe Baudraten ausgelegt ist weiß ich jetzt.
Mein aktuelles Problem ist jetzt, das mein derzeitiges Delphi-Prog zu langsam zu sein scheint, was das Auslesen des Com-Ports angeht. Ich kann damit leider nicht mit 115200 baud arbeiten, da die Werde so schnell hintereinander kommen, das es Delphi nicht schafft diese in so kurzer Zeit alle auszulesen. Am Ende läut dann irgenwie der interne Puffer des COM-Ports über und mir fehlen Am Ende etliche Bytes. Die aktuell größtmögliche Baudrate ist 38400.
Ich verwende zur Zeit Delphi 7 und die ComPortLib. Weiß zufällig jemand, ob und wie ich Delphi beschleunigen könnte, damit das auch mit höheren Baudraten funktioniert? (Mir ist klar, das das hier kein Delphi-Forum ist, aber vielleicht kennt sich der eine oder andere ja trotzdem damit aus.)

Allerdings währen selbst 115200 baud rein rechnerisch noch zu langsam, deshalb meine Idee, die Daten parallel zu übertragen. Ich hab mal irgendwo gelesen, das mit der parallelen Schnittstelle bis zu 3MB/s möglich sind. Stimmt das? Wenn ja, dann währe das ja für meine Belange schnell genug. (In der Hoffnung, das Delphi das mitmacht.)

wkrug
07.07.2008, 23:21
Wie schaut es bei DELPHI mit Ethernet aus ?
In meinem Buch " Programmieren der AVR RISC Microcontroller mit Bascom-AVR " ist ziemlich hinten ein Abschnitt über den Baustein IIM7000A mit dem man an so einen Microcontroller eine Ethernetschnittstelle anpflanzen kann. Ethernet hätte eine Reichweite von ca. 100m.

Ich selber hab aber mit diesem Baustein und der Anbindung mit BASCOM und dem Controller keine Erfahrung ( max. Datendurchsatz, Treiber usw. ) .

Im Buch ist die Adresse http://www.wiznet.co.kr/en/ als Quelle angegeben.

mikro-VIIV
08.07.2008, 16:51
Wie schaut es bei DELPHI mit Ethernet aus ?
In meinem Buch " Programmieren der AVR RISC Microcontroller mit Bascom-AVR " ist ziemlich hinten ein Abschnitt über den Baustein IIM7000A mit dem man an so einen Microcontroller eine Ethernetschnittstelle anpflanzen kann. Ethernet hätte eine Reichweite von ca. 100m.

Genau das Buch Habe ich auch.

Ethernet währe also auch noch eine Möglichkeit. Von der Geschwindigkeit her dürfte es da kaum Probleme geben glaube ich.

Ich weiß nur nicht wie und ob ich das ganze mit Delphi ansteuern kann. Werde mich dazu also erst mal informieren.
Wo würde man denn kostengünstig so ein Ethernetmodul für den AVR herbekommen?

wkrug
09.07.2008, 18:18
Wo würde man denn kostengünstig so ein Ethernetmodul für den AVR herbekommen?

Verfolg mal den Link von mir und bemühe dann mal Google, was so ein Teil kostet und wer liefern kann - Ein bischen Sucharbeit musst Du schon selber leisten.

Richard
10.07.2008, 19:27
Wo würde man denn kostengünstig so ein Ethernetmodul für den AVR herbekommen?

Verfolg mal den Link von mir und bemühe dann mal Google, was so ein Teil kostet und wer liefern kann - Ein bischen Sucharbeit musst Du schon selber leisten.

Das Teil scheint ja ganz nett zu sein und son Boot über Wlan anzubinden
ist auch ganz interessant. Google liefert allerdings nicht sehr viel, da muß
man wohl besser den Hersteller diereckt ansprechen.

Aber diese Schaltung braucht einiges an I/O Pins vom Kontroller, son
LS75176 TTL rs485 Treiber ist da echt genügsamer und sicherlich auch
Preisgünstiger.

Ich habe da mal mit nen PIC und I²C I/O Bausteinen Platinen gebastelt
wo pro Platine ein PIC ein LS75176 und 64 I/O I²C Ports drauf waren.
Das ganze dann an einen 1000 m Ring 2x2x0,6 Kabel und in den Kabelring
ne Neonröhre + alte wild "feuerne" Bohrmaschine gestekt.

Das ganze habe ich dann mit verschiedenen Baudraten einige Nächte
laufenlassen, immer gesendetes Byte mit dem Empfangenen verglichen
und die Fehler gezählt.....es gab keine Übertragungsfehler. :-)

Das ist allerdings schon ein wenig her und die Daten habe ich nicht mehr.
Es ist allerdings möglich das in irgendeiner "Grabbelkisten" noch
unbestückte Platinen herum liegen....

163840 bit/s = 16kB/s bei 1 start und 1 Stopp Bit schafft mein Windows
Rechner allerdings nicht da ist bei 128000 kb/s ENDE.

Mit einen MC sollten bei selbstgeschriebenen Treiber auch weit höhere
Baudraten möglich sein wenn der Quarz passt.

Gruß Richard

wkrug
10.07.2008, 23:57
Aber diese Schaltung braucht einiges an I/O Pins vom Kontroller, son
LS75176 TTL rs485 Treiber ist da echt genügsamer und sicherlich auch
Preisgünstiger.
Da hast Du sicher recht, noch dazu kann man den USART des ATMEGA direkt benutzen.
Allerdings kommt der Windows Rechner mit diesen Baudraten nicht mehr zurecht und unter DELPHI scheint es keine Anbindung an RS485 zu geben und RS232 ist zu langsam.
Das scheint hier auch das Problem zu sein.

Richard
11.07.2008, 07:53
Aber diese Schaltung braucht einiges an I/O Pins vom Kontroller, son
LS75176 TTL rs485 Treiber ist da echt genügsamer und sicherlich auch
Preisgünstiger.
Da hast Du sicher recht, noch dazu kann man den USART des ATMEGA direkt benutzen.
Allerdings kommt der Windows Rechner mit diesen Baudraten nicht mehr zurecht und unter DELPHI scheint es keine Anbindung an RS485 zu geben und RS232 ist zu langsam.
Das scheint hier auch das Problem zu sein.

Scheint so zu sein, man könnte noch den LPT Port "vergewaltigen", ob der
schnell genug ist? Eine Alternative währe z.B. ne CF Karte am MC und dann
die Daten halt laaaaangsam auf den PC schaufeln.

Gruß Richard

mikro-VIIV
11.07.2008, 10:54
Wie schnell (oder langsam) ist denn die parallele Schnittstelle nun?
Ich habe dazu leider keine konkreten Werte gefunden.

Mitch64
12.07.2008, 12:09
Hi,

Du willst 16000 Byte übertragen. Wenn ich recht verstehe, sind alles Integer-Werte.

Also müßtest du 8000 Word-Werte übertragen

der Bascom-Befehl heißt hierzu PrintBin WordWert;

Zur Übertragung würde ich RS485 verwenden. Z.B. MAX487. Der macht max 250kBit/s.

Wenn du mit 115kBit überträgst, sind alle Daten nach ca 1,4 Sekunden durch. Es gibt auch schnellere RS485-treiber, da gehts noch flotter.

Aber du solltest ein Protokoll verwenden, dass übertragungsfehler verhindert.

Mitch

mikro-VIIV
02.08.2008, 18:58
RS485 ist eine Differenzsiegnal übertragung braucht also 2 Leitungsdräte
(Telefonkabel 4*2*0,6) die Datenleitung mussan beiden Enden mit
einen 120 Ohm Widerstand abgeschlossen werden.


Heißt das, dass ich einfaches Telefonkabel verwenden kann? Funktioniert das denn bei 50m ohne Störungen? Is ja komplett ohne Abschirmung.

Würde dann sowas hier (http://www.pollin.de/shop/tabelle.php?ts=0&pg=OA==&a=MDg5OTA5OTk=&w=ODk2OTU5#) gehen?

repi64
02.08.2008, 21:39
ja, kannst ein solches Kabel nehmen.
Kannst auch ein mehradriges NF Kabel nehmen, was dann auch abgeschirmt ist.
Da RS422 / 485 Symmetrisch übertragen wird, ist eine Abschirmung (bei 50m) nicht notwendig.

wkrug
02.08.2008, 23:47
Telefonkabel - ...ja, kannst ein solches Kabel nehmen.
Kannst auch ein mehradriges NF Kabel nehmen, was dann auch abgeschirmt ist.
Das würde ich so nicht behaupten.
Der Wellenwiderstand von Telefonkabel ist - soweit ich weiß ca. 600 Ohm.
Der Wellenwiderstand von RS485 sollte aber 120Ohm betragen.
Bei hohen Datenübertragungsraten wird es zunehmend kritischer.
Über eine Strecke von 50m wird auch das Telefonkabel funktionieren.
Mein Vorschlag wäre aber CAT5 Verlegekabel, da es vom Wellenwiderstand und Frequenzbereich her einigermassen passt und doch noch relativ preisgünstig ist.

Richard
03.08.2008, 08:09
Telefonkabel - ...ja, kannst ein solches Kabel nehmen.
Kannst auch ein mehradriges NF Kabel nehmen, was dann auch abgeschirmt ist.
Das würde ich so nicht behaupten.
Der Wellenwiderstand von Telefonkabel ist - soweit ich weiß ca. 600 Ohm.
Der Wellenwiderstand von RS485 sollte aber 120Ohm betragen.
Bei hohen Datenübertragungsraten wird es zunehmend kritischer.
Über eine Strecke von 50m wird auch das Telefonkabel funktionieren.
Mein Vorschlag wäre aber CAT5 Verlegekabel, da es vom Wellenwiderstand und Frequenzbereich her einigermassen passt und doch noch relativ preisgünstig ist.

Moin moin,

Da muß ich mal widersprechen, ich arbeite beruflich mit Telefonkabel
und die haben alle eine Abschirmung wenn man diese denn auch
anschließt. Auißerdem arbeiten wier auch mit RS 485 Übertragung.

Ich selber habe zu Testzwecken mehrere Kabelrollen in Reihe bis
zu 1200 m geschaltet und in den Rollen ne kaputte stark Feuernde
Bohrmaschiene sowie ne Neonröhre plaziert! Dann habe ich 24 h
Daten gesendet, empfangen und verglichen, Es konnte "kein" Fehler
gemessen werden.

Klar muß die Leitung an beiden Enden mit einen 120 Ohm R
abgeschlossen werden. Auch kann/muss bei Spannungsverlußten
die Leitung mit etwa 2,7 k Ohm pull Up/Down versorgt werden.

Bei einer etwas längeren, etwa 3 km Leitung habe ich den Abschluß
Widerstand mit nen Ozzi auf ein sauberes Rechteck Signal mittels
Poti ermittelt. Dort war dann etwa 270 Ohm die richtige Wahl.

50 m ist absolut kein Problem für RS 485 und 2*2*0,6 Telefonkabel.

Gruß Richard

mikro-VIIV
03.08.2008, 10:27
Vielen Dank für die wirklich ausführliche Auskunft.

Ich werde mir also demnächst mal so ein Telefonkabel besorgen und es einfach mal ausprobieren.

Bei Pollin wollte ich aber eigentlich nicht schon wieder bestellen, nur wegen dem Kabel. Wo bekommt man denn sowas denn sonst noch preisgünstig her?
Gibt's so was bei OBI?
Bei Reichelt hab ich leider nichts gefunden in der Länge.

Richard
03.08.2008, 10:57
Vielen Dank für die wirklich ausführliche Auskunft.

Ich werde mir also demnächst mal so ein Telefonkabel besorgen und es einfach mal ausprobieren.

Bei Pollin wollte ich aber eigentlich nicht schon wieder bestellen, nur wegen dem Kabel. Wo bekommt man denn sowas denn sonst noch preisgünstig her?
Gibt's so was bei OBI?
Bei Reichelt hab ich leider nichts gefunden in der Länge.

Sollte jeder Elecktriker haben, oder Firmen welche z.B. Alarmanlagen
einbauen.

Gruß Richard

Besserwessi
03.08.2008, 11:36
Telefonkabel sollte es auch im baumarkt geben, aber die Preise sind sehr unterschiedlich. Die Alternative, wären Netzwerkkabel, da muss es nicht mal CAT5 sein.
Mehr als etwa 380 Ohm Wennelwiederstand sind ohne Magnetisches Material nicht möglich. Telefonkabel sollten eher um die 100-150 Ohm Wellenwiderstand haben.

repi64
03.08.2008, 11:45
Bei Obi kommst du sichber nicht günstig davon.
Dann werde ich dir mal suchen helfen:
http://www.reichelt.de/?;ACTION=3;LA=4;GROUP=C67;GROUPID=3331;ARTICLE=127 25;START=0;SORT=preis;OFFSET=16;SID=28vXALUn8AAAIA AAfVkEs04f0ad4fbf17ac26de35c37976dc353f

Modularkabel, 4-polig, schwarz, 50m-Ring
Artikel-Nr.: MPFK 4S-50
3,45 €

mikro-VIIV
03.08.2008, 12:34
Modularkabel, 4-polig, schwarz, 50m-Ring
Artikel-Nr.: MPFK 4S-50
3,45 €

Vielen DANK!

Richard
04.08.2008, 19:17
Modularkabel, 4-polig, schwarz, 50m-Ring
Artikel-Nr.: MPFK 4S-50
3,45 €

Vielen DANK!

Hmm, sagt m,ir jetzt nicht so viel, fragt sich was dieses Kabel für
einen Wellenwiderstand hat? JY(ST)Y 2x2x0,6 sollte so 100...150
Ohm haben und damit gut zum RS 485 Treiber sowie nötigen 120 Ohm
Abschlußwiderstände passen. Unsere 4ma nimmt pro Meter MIT
verlegen rund 80 Cent, was son Kabel im Einkauf kostet? Wir kaufen
allerdings auch etliche 1000 m im Monat, da wird es halt günstiger. :-)

Den Bustreiber welchen ich verwendet habe kannst Du als Datenblatt
.pdf Datei hier:

http://pdf1.alldatasheet.com/datasheet-pdf/view/28608/TI/SN75176.html

Ansehen, die Dinger gibt es beim großen C......zu erwerben. Meine
damalige Testschaltung habe ich mal "aufgemalt", ich hatte mal EWB
damit konnte man ganz gut Schaltungen erstellen und auch testen.
Leider hat man mir neben Conrad im Parkhaus die Seitenscheibe
geknackt und den Laptopp geklaut und die Backup cd habe ich
dummerweise selber "geschreddert"

Gruß Richard

mikro-VIIV
05.08.2008, 18:45
Danke Richard.

Ich hab auch einen schönen Schaltplan für nen Adapter von RS232 auf RS485 gefunden.
http://www.netzmafia.de/skripten/hardware/rp1/rs232_rs485.gif

Frage kann ich den MAX 485 im Schaltplan einfach durch den SN75176 ersetzen? Beide Bauteile erfüllen doch genau den selben Zweck. Nur der SN75176 ist billiger (Reichelt: 0,30€ für den SN75176 statt 1,60€ für den MAX 485 CPA).

Währe nett, wenn das jemand bestätigen könnte, bevor ich mir die Bauteile bestelle.

Besserwessi
05.08.2008, 19:08
Der SN75176 und max485 sollten weitgehend austauschbar sein. Alternativ gibt es noch den LTC485, aber da ist auch kaum wenig Unterschied. Die SN75176 Version sollte etwas mehr Strom verbrauchen. Da die alle für RS422 / RS485 sind, sollte es da höchstens unterschiede be sehr hohen Geschwindigktein geben, aber die gibt die RS232 Seite nicht her.

wkrug
05.08.2008, 19:10
Frage kann ich den MAX 485 im Schaltplan einfach durch den SN75176 ersetzen?
Wenn das Pinout passt sollte das gehen.
Ich hab für meine DMX Sachen immer den 75176 benutzt.

Ich hab da noch ein Verständnisproblem, die serielle Schnittstelle mit 115200 war Dir doch immer zu langsam ??

Wenn Du den MAX 232 gegen einen FT232R austauscht hättest Du USB, könntest Die Schaltung gleich daraus speisen und die Datenrate sollte auch höher sein - Aber so weit waren wir ja schon mal.

mikro-VIIV
05.08.2008, 19:25
Frage kann ich den MAX 485 im Schaltplan einfach durch den SN75176 ersetzen?

Wenn das Pinout passt sollte das gehen.
Die Pinbelegung ist identisch.


Wenn Du den MAX 232 gegen einen FT232R austauscht hättest Du USB, könntest Die Schaltung gleich daraus speisen und die Datenrate sollte auch höher sein

USB is auch ne gute Idee um die Daten dann in den PC reinzukriegen. Das dürfte von der Geschwindigkeit dann reichen.
Muss mal schauen ob und wie ich mit Delphi auf USB zugreifen kann.

wkrug
05.08.2008, 19:55
USB is auch ne gute Idee um die Daten dann in den PC reinzukriegen. Das dürfte von der Geschwindigkeit dann reichen.
Muss mal schauen ob und wie ich mit Delphi auf USB zugreifen kann.
Ich denke das sollte nicht allzu schwierig sein, bei www.ftdichip.com gibt es sogenannte VCP Treiber, die einen virtuellen COM Port erzeugen, auf die auch ein Zugriff durch DELPHI möglich sein sollte.

Bei manchen Programmen ist ein Zugriff auf virtuelle COM Ports leider nicht möglich, das solltest Du für DELPHI noch abklären.

Richard
05.08.2008, 20:01
Danke Richard.

Ich hab auch einen schönen Schaltplan für nen Adapter von RS232 auf RS485 gefunden.
http://www.netzmafia.de/skripten/hardware/rp1/rs232_rs485.gif

Frage kann ich den MAX 485 im Schaltplan einfach durch den SN75176 ersetzen? Beide Bauteile erfüllen doch genau den selben Zweck. Nur der SN75176 ist billiger (Reichelt: 0,30€ für den SN75176 statt 1,60€ für den MAX 485 CPA).

Währe nett, wenn das jemand bestätigen könnte, bevor ich mir die Bauteile bestelle.

Ja, das klappt.

Zum Testen brauchst Du Keinen Pegelconverter, ein R 15K und ne 1n4148
reichen. Ich habe hier noch 2. rund 20 Jahre alte Elecktor Eurokarten
liegen, eigentlich mit Schaltplan, aber der hat sich versteckt?

Habe mir eben mal die Verdratung angeschaut, ich habe so immer meine
PIC MC`s mit dem PC verbunden. :-)

Kleine Erkährung zur rs232, die arbeitet laut DIN mit +/- 15V, der Bereich
zwischen +3 V und-3 V gild aus "verboten". Damit sollten wohl klare
Regeln geschaffen werden. Achtung, eine 1 = High ist bei rs232 -15 V
eine 0 =Low +15 V was aber für die Datenübertragung selber Togalegal
ist. Ich hänge mal wieder ne Zeichnung an, Die Erklährung jetzt hier.

PC-TX geht über R 15k und einer 1n4148 auf DX des 485 Treibers.
wenn der PC eine 1 = -15V sendet leitet die Diode und am Eingang des
485 Treibers liegt die 0,6V der Durchlasspannung an und das hält der aus.
sendet der PC 0=+12v, schützt der 15K R.

RX-PC ist normal Hochomig, wird der vom 485 Treiber auf 0V gezogen
ist das zwar im verbotenen Bereich aber ich kenne keine PC 232 die nicht
trotzdem den Pegel richtig verwertet.

Einfach BILLIG (billig) und ich habe damit werder PIC`s noch 485
Treiber zerschossen. Wenn es dann doch schiefgeht..30 Cent....

Gruß Richard

Richard
05.08.2008, 20:14
Frage kann ich den MAX 485 im Schaltplan einfach durch den SN75176 ersetzen?
Wenn das Pinout passt sollte das gehen.
Ich hab für meine DMX Sachen immer den 75176 benutzt.

Ich hab da noch ein Verständnisproblem, die serielle Schnittstelle mit 115200 war Dir doch immer zu langsam ??

Wenn Du den MAX 232 gegen einen FT232R austauscht hättest Du USB, könntest Die Schaltung gleich daraus speisen und die Datenrate sollte auch höher sein - Aber so weit waren wir ja schon mal.

Ich hätte eher Verständnisprobleme bei USB. Mit Hyperterm oder früher
mit QB die 232 Ansteurern ja, wenn QB zu langsam war habe ich halt
mit Debugg (oder wie das unter Dos sich noch einmal nannte) ne
Assemblerroutine geschrieben und als .com gespeichert. So konnte
man dann auch bei ner Eagle-Demo das Datei Beenden "abfangen"
eagle Prozeß "Killen" und die von Eagle gespeichete Temp Datei
umbenennen....Jaaaaaajaaa früher war halt alles besser. :-)))

Gruß Richard

mikro-VIIV
05.08.2008, 20:27
Ein virtueller COM-Port würde mir glaube ich nicht viel bringen, weil ich dann auch nicht schneller übertragen kann als mit RS232.
Wenn USB, dann richtig.
Ist halt nur die Frage, ob ich das mit Delphi hin bekomme.

Meine Idee war ja, die Daten vom 1. AVR über die 50m via RS485 zu einem 2. AVR zu senden. Dieser speist die Daten dann an der parallelen Schnittstelle in den PC ein.
Ich weiß nur noch nicht, wie schnell die parallele Schnittstelle ist.
Das werde ich morgen mal testen. Einfach mal einen AVR an die parallele Schnittstelle hängen und mal sehen, ob der PC (Delphi) da mitkommt.

wkrug
06.08.2008, 22:25
Auf der FTDI Seite hab ich auch Codebeispiele für DELPHI gefunden.
Ich kann damit leider nichts anfangen, aber Du mit Sicherheit.

Hab gerade mal mit Hyper Terminal die Einstellmöglichkeiten mit dem VCP Treiber und der seriellen Schnittstelle angeschaut.

Die geht da bis 921600 Bit / sek, also fast 1MBit, das sollte doch genügen !?

mikro-VIIV
07.08.2008, 09:00
Auf der FTDI Seite hab ich auch Codebeispiele für DELPHI gefunden.
Ich kann damit leider nichts anfangen, aber Du mit Sicherheit.

Hab gerade mal mit Hyper Terminal die Einstellmöglichkeiten mit dem VCP Treiber und der seriellen Schnittstelle angeschaut.

Die geht da bis 921600 Bit / sek, also fast 1MBit, das sollte doch genügen !?

Danke für den Hinweis. Die Codebeispiele habe ich gefunden. Sind für mich leider doch nicht ganz so leicht zu verstehen. Ich hab bis jetzt auch nur grob überflogen.
Bevor ich mir den Code zu Gemüte führe und da wohl ne ganze Weile davor sitzen werde, warum/wieso dieses oder jenes so gemacht wird, probier ich es erst einmal mit der parallelen Schnittstelle aus. Leider hatte ich gestern keine Zeit mehr dazu.

Und bevor ich meinen Druckerport möglicherweise frage ich hier lieber noch einmal nach:
Ist es richtig, dass die Dateneingänge HIGH-aktiv sind und die Eingänge wie STROBE, ACK, BUSY, ... LOW-aktiv sind?

mikro-VIIV
09.08.2008, 13:37
Also, soweit bin ich jetzt:

- Datenleitungen (D0 - D7) kann ich mit Delphi setzen
- Statusleitungen (ACK, BUSY, PAPEROUT, SELECT, ERROR) kann ich mit Delphi auslesen
- Kontrollleitungen (STROBE, AUTOFEED, INIT, SELECTIN) kann ich mit Delphi setzen
- die Statusleitungen haben einen internen PULL-UP, müssen also über Widerstand auf GND gezogen werden für logisch 1
- invertierte Leitungen sind mir bekannt

Was nicht geht:
- Datenleitungen oder Kontrollleitungen als Eingänge verwenden. Ich bin deswegen schon fast verzweifelt und hab es nun vorerst aufgegeben.

Deshalb werde ich meine Daten im Nibble-Mode übertragen. Ich hoffe, dass das dennoch schnell genug geht.

Ich habe mir zu diesem Zweck mal einen Schaltplan für einen Adapter gezeichnet, mit dem ich mit dem AVR auf die Ein- und Ausgänge des Parallelports zugreifen kann. Ich habe das ganze in Anlehnung an den Parallel-Programmieradapter erstellt.

Könnt ihr mir bitte mal sagen, ob das so geht, ober ob ich da noch was verändern sollte.
Ich bin mir nicht ganz sicher, aber sollte man vielleicht zwischen den Eingangspins des LPT-Ports und dem 74HCT244 noch einen Widerstand schalten oder nicht?
Ich habe nämlich wirklich keine Lust, mir meinen Parallelport zu zerschießen deswegen.

Richard
09.08.2008, 19:41
Ich habe nämlich wirklich keine Lust, mir meinen Parallelport zu zerschießen deswegen.

Kauf Dir auf den Flohmarkt oder im Fachhandel für 2...5 Euro ne
Parallelport Steckkarte, dann bist Du auf der sicheren Seite. :-)
Die Eingänge haben einen Pull UP Widerstand und können (müssen)
ohne einen Widerstand diereckt auf 0V gezogen werden.

Laplionk und andere Datenübertragungsprogramme haben früher
auch die Parallelschnittstelle zur schnellen Datenübertragung in
BEIDEN Richtungen genutzt. Die haben einfach die Steuereingänge
als Dateneingänge benutzt. Wenn Du daein Datenbyte anlegst kann
das auch gelesen werden weil eine 1 halt über die Pull UP R`s ne 1 bleibt,
eine 0 aber den Eingang halt auf null zieht.

Ob das allerdings mit Delpi b.z.w. unter Win heute noch klappt?
Um ein Byte einzuleden müßte das interne Register der Schnittstelle
als Byte gelesen werden. Früher kein Problem, heute will win das nicht
und verhindert diereckte Hardware Zugriffe?

Da Du nur 5 Eingänge hast müstes Du ein Schieberegister nehmen
und erst 5 bit, dann schieben und die restlichen 3 Bit lesen...

Gruß Richard

Thoralf
11.08.2008, 13:23
für Visual Basic ermöglichte die inpout32.dll den problemlosen Portzugriff (WinXp). Wie das mit Delphi geht, weiß ich nicht. Mußt einfach mal nach der DLL goggeln. Da sollten sich massenweise Hinweise finden.
Falls du die inpout32.dll benutzen kannst, einfach in den Ordner ...\windows\system verschieben.

mikro-VIIV
11.08.2008, 13:58
Die inpout.dll habe ich schon probiert. Es funktioniert soweit auch ganz gut, nur kann ich damit leider auch nicht die Datenleitungen als Eingänge verwenden, weil ich aus welchem Grund auch immer das Bit 5 des Kontrollregisters nicht auf 1 setzen kann. (im BIOS ist EPP & ECP eingestellt).

Ist mein Schaltplan denn nun so OK?

Thoralf
12.08.2008, 11:18
googel mal nach VBDumpPhys32 o.ä.
Das ist ein kleines Hilfsprogramm, das den POrtzugriff ermöglicht. Man kann einzelne Bits setzen oder lesen, also zum Test der Hardware ideal