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
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
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
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...
@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
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? ;-)
<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
> 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
@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
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.
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
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
@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
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.