Forum: Mikrocontroller und Digitale Elektronik Probleme bei der Datenübertragung zwischen PC u µC


von Sepp -. (sepp_o)


Angehängte Dateien:

Lesenswert?

Salve

Da ich des öfteren nur mit dem internen Resonator des µC's arbeite
aber trotzdem Daten an den PC senden will, habe ich mir eine Altanative
zur seriellen Komunikation über UART überlegt.

Leider schaffe ich es nur dass zwischen 500 und 1000 bit/s Pro Richtung
einigermaßen fehlerlos übertragen werden.

Die Schaltung die ich verwende, befindet sich im Anhang.
Kann mir jemand sagen ob das Problem an der Hardware liegt?
Als Kabel verwende ich ein geschirmtes Stern vierer Kabel (1x4x1,5).

Erklährung der Softwareseite:
(Ich bin noch dabei dei Fehlererkennung und Kompensation der Fehler zu
Programieren.)

Es handelt sich dabei um eine abgewandelte Form der Komunikationsweise
zwischen Tastatur und PC.
(Welches eine abgewandelte Form des RS232 Protokolls ist.)

Am PC wird der LPT zur Komunikation verwendet.
(Der Ps2 bzw. der Tastaturport wird schon verwendet.)

Mit dieser Komunikationsart werden ungenau laufende Resonatoren
komensiert.

Das PC-Programm dafür habe ich selbst geschrieben und läuft unter
Dos5.0.

Dabei gibt der µC einen Synchrónisationstakt an den PC und sendet dazu
über eine 2. Leitung seriell die Daten.

Der PC kann über eine 3. Leitung durch das Taktsignal vom µC
synchronisiert die Daten senden.

Das Ganze funktioniert so:

Zuerst wird der Datenbit gesetzt falls der µC senden will.
Dann wird mit einer steigenden Flanke signalisiert das ein neues Bit
gesendet wird.
Danach wird gehorcht ob und was der PC sendet.

Ich habe die Vermutung dass ich bei der Planung der Hardware einen Murx
gedreht habe.
Kann mir bitte jemand sagen ob die Hardware so wie ich sie geplant habe
auch für höhere Geschwindigkeiten geeignet ist?

mfg Sepp

von Feadi (Gast)


Lesenswert?

Jetzt hast Du leider schon so viel selber entwickelt, und jetzt sage ich
Dir, das es sowas schon gibt. :(

Schau mal hier:
http://www.elektronik-kompendium.de/public/borchers/i2c/softhard.htm

Gruß, Feadi

von Thorsten (Gast)


Lesenswert?

Sepp,
Guck mal in AVR Freaks design note #18 (von http://www.avrfreaks.net).
Da ist drin beschrieben, wie man den internen Resonator an einem
externen 32kHz Uhrenquarz kalibrieren kann (falls Du sowas benutzt).
Funktioniert tip-topp und hat den Vorteil, dass Du auf der PC-Seite
keine spezielle Software brauchst, sonderen ganz normal die serielle
Schnittstelle beutzen kannst.
Gruss,
Thorsten

von Andreas (Gast)


Lesenswert?

Spaßige Idee, extra Dos5.0 aus der Mülltüte zu holen, um damit eine
Parallelschnittstelle anzusprechen, die auch schon nicht mehr jeder
Rechner hat...

von Sepp -. (sepp_o)


Lesenswert?

@Andreas

Das dos ist sowiso schon vorhanden.
Ich brauche es um damit meine alte SPS zu programieren.
Das Programiersystem läuft nämlich nur bis zum Dos von Win95.
(Ich habe aber leider nur Dos5.0, Win98 und WinXP)

Da ich mir als Nostalgiker der auf den guten, alten Rechnern ohne
Festplatte mit Dos3.0 gelernt habe, verwende ich immer wieder gerne das
gute, alte Dos.

Da hat man zusätzlich den Vorteil dass einem kein anderes Programm
dazwischenfunken und Probleme machen kann.

Außerdem habe ich noch ausreichend alte Rechner mit paralleler
Schnittstelle zum Basteln auf Reserve.

@Thorsten

Leider habe ich keinen Uhrenquarz zur Verfügung.
Da ich des Programierens einigermaßen mächtig bin und eigentlich alles
was ich fabriziere nur für meine eigenen Privatbedürfnisse ist, kann
ich mir auch selbst etwas zusammenfummeln.
Außerdem will man ja auch sagen können dass man etwas selbst gemacht
hat.

@Feadi
Danke für den Hinweis mit der Seite.
Ich hab mir jetzt mal die Schaltung genauer angesehen und hab bemerkt
dass die Optokoppler nicht so schnell sind wie ich gern will.
(Obwohl ich mit fast 20mA Signalstrom arbeite.)
Ich werd mal schaun ob ein Bustreiber den ich rumliegen habe (74F244) 2
bis 3m weit die Signale sauber rüberbringt.

Bis jetzt habe ich mit der bestehenden Schaltung zwar bis zu 1000b/s
geschafft, habe aber die Signale spreizen müssen, welches aber eine
effektive Datenrate von 333,3 b/s bedeutet.

mfg Sepp

von TravelRec. (Gast)


Lesenswert?

Kleiner Hinweis: es gibt keinen internen Resonator - Oszillator heißt
das Ding. Ein Resonator kommt außen dran und ist 1000x genauer als der
interne RC-Oszillator. Ich frage mich sowieso, was es für einen Sinn
macht, auf 40 Cent zu spucken, und eine extra Schaltung für mehrere
Euro und eine aufwändige Software-Implementierung zu basteln. Fazit:
Externen 8Mhz-Resonator (Murata CSTCC, Reichelt, 1 Bauteil, 40 Cent!)
dranbasteln und locker mit 115kBaud an die Serielle klemmen im
FullDuplex; noch Fragen? ;-)

von Roland P. (pram)


Lesenswert?

<besserwisser=on>
Das zeigst mir mal wie du mit einem 8 MHz Resonator 115,2kbaud über die
UART überträgst :-)
</besserwisser>
Nimm wenn dann irgendwas Baudratentaugliches, einen 7,3728MHz Quarz,
sonst ist meist in der Gegend von 9600 Baud schluss weil sich der
UART-Teiler nich ausgeht.

Um nochmal auf dein Problem zurück zu kommen: Der CNY17 ist wie du
schon geschrieben hast zu langsam, des weiteren bezweifle ich dass du
aus dem LPT deine 20 mA Signalstrom heraus bekommst.

Gruß
Roland

von Thorsten (Gast)


Lesenswert?

> Kleiner Hinweis: es gibt keinen internen Resonator - Oszillator heißt
das Ding.

OK, wieder was dazugelernt.

> Ich frage mich sowieso, was es für einen Sinn
macht, auf 40 Cent zu spucken, und eine extra Schaltung für mehrere
Euro und eine aufwändige Software-Implementierung zu basteln.

Nun, zumindest für meine Variante mit dem Uhrenquarz kann ich Dir das
schon sagen: Zum Stromsparen. Wenn Du nämlich mit dem internen
Oszillator schaffst und extern einen 32768Hz Uhrenquarz dranhängst,
kannst Du mit den entsprechenden Sleepmodes einiges an Stromaufnahme
einsparen. Um dann dennoch halbwegs flott mit RS-232 kommunizieren zu
können, bietet sich die Kalibrierung des internen Oszillators am
Uhrenquarz durchaus an. Insbesondere wenn der Uhrenquarz für eine RTC
sowieso dran muss (beim Mega8 schliesst das auch die Verwendung eines
extra Quarzes/Resonators aus, weil der Uhrenquarz dieselben Pins
belegt).

Gruss,
Thorsten

von Sepp -. (sepp_o)


Lesenswert?

@TravelRec.

Wiso ich mit dem internen RC-Oszillator arbeite ist ganz einfach
erklährt.

An manche AVR's kann man keinen externen Taktgenerator anschließen.
Und manchmal ist es so dass einem genau die Pin's abgehen die durch
die Taktquelle besetzt werden.
Da in den meißten Fällen das Ganze ja nicht so extrem genau sein muß,
verzichtet man einfach auf den externen Taktgenerator anstatt den
nächstgrößeren µC zu verbauen.

Normalerweise verwende ich einen externen Resonator und den UART, aber
manchmal geht's halt nicht anders.
Vorallem wenn die Datenleitung nicht dauernd verwendet wird, sondern
zum Sichern von erfassten Daten(Fehlermeldungen,...) oder einspeisen
neuer Sollwerte.

@Roland Praml

Wenn du dir den Schaltplan genauer angeschaut hättest, dann wäre dir
aufgefallen dass der LPT zum Senden der Daten nur 1,5 bis 2mA an den
Datenpins liefern muß.
Da bekomme ich halt schon ab ca. 200b/s Probleme mit der
Datenübertragung.

@Alle
Ich habe jetzt mal Versuche mit einem Bustreiber der bei mir
herumgelegen ist (74F244) und bin jetzt an die Grenzen der Software auf
dem PC gestoßen.

Ich werde das Programm doch etwas optimieren und schauen wie schnell
ich's hinbekomme.
(Ich bin gespannt bis zu welcher Frequenz ich noch saubere Signale über
das Stern-Vierer Kabel (1x4x1,5) rüberbekomme.)

mfg Sepp

von Wolfram (Gast)


Lesenswert?

Ich arbeite auch recht gerne mit dem internen Resonator.
Die Ansteuerung geht trotzdem gut mit der UART wenn man einen FTDI
ft232 dazwischen schaltet. Der kann noch andere Baudraten als eine
normale serielle Schnittstelle.

von Feadi (Gast)


Lesenswert?

Hallo,

mir gefällt überhaupt nicht, das der µC den Takt angibt. Lass das
lieber den PC machen, der ist in dem Fall der langsamere. Dann hast Du
auch keine Probleme mehr mit "verschluckten" Bits. Und wenn Du ein
Parallelport-I2C Adapter baust, kannst Du auf µC Seite die interne
Hardware benutzen, und Du brauchst auch nur 2 Pins (SDA,SCL). Der PC
muss dann der I2C-Master sein.

Vorteilhaft ist daran auch, das Du jederzeit noch mehr Hardware einfach
dazustöpseln kannst. Das ganze stellt dann ja auch nicht einfach nur
eine Punkt zu Punkt Verbindung da, sondern gleich einen ganzen Bus.

Gruß, Feadi

von Christian Rötzer (Gast)


Lesenswert?

Wenn man's auf die Spitze treiben möchte, bitte: Der PC initiert eine
Kommunikation zum AVR und sendet seriell ein Startzeichen, z.B. 0xC0,
was auf der seriellen Schnittstelle nur ein einzelner Rechteckimpuls
ist. Die Dauer wird vom AVR gemessen. Damit ist der Korrekturwert für
die UART bekannt -> Kommunikation möglich. Kein Uhrenquartz, kein
Resonator, nur der interne Oszillator! (Das wird so ähnlich in einer
App.-Note zu einem Bootloader für PIC's gemacht)

Grüße

Christian

von Feadi (Gast)


Lesenswert?

@Christian:

Das ist auch eine sehr gute Methode, damit sind auf jeden fall sehr
viel höhere Datenübertragungsraten drinn, als über den Parallelport.

Gruß, Feadi

von Sepp -. (sepp_o)


Lesenswert?

@Christian

Dass ist wirklich eine sehr gute Idee.

Ich glaub, so werd ich's machen.

Vielen Dank euch allen ihr habt mir sehr geholfen.

mfg Sepp

von Sepp -O- (Sepp_O) (Gast)


Lesenswert?

Tag alle zusammen.

Ein kleiner Zwischenbericht wies bei diesem Projekt aussieht.

Da das Erstellen der Funktion welche die Korrekturwerte ermittelt und
setzt doch etwas aufwändiger ist als ich dachte, bin ich als
Provisorium auf den ISP-Programieradapter ausgewichen.

Dabei habe ich einen 2. Schalter eingebaut mit dem ich die Resetleitung
nach dem Treiberbaustein unterbrechen kann, um zu verhindern dass mir am
Programm des µC's etwas verändert wird.

(Mit dem 1. Schalter setze ich die Enable-Pins des Treiberbausteins auf
high um den Programieradapter zu deaktivieren.)

mfg Sepp, der zu faul war um sich anzumelden

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.