Hallo, ich bin neu im Forum, habe aber nach Antworten zu meinem Problem gesucht und nichts passendes gefunden. Expertenmeinungen sehr willkommen! Ich habe folgendes Anliegen: Ich muss Daten sammeln, diese Daten werden momentan auf einem Array von 8 der oben genannten EEPROM gespeichert. Zum Auslesen wird der PIC Microcontroller (16f819) verwendet, um die Daten über die serielle Schnittstelle in den PC zu bekommen. Mein Problem ist nun, dass der Ausleseprozess sehr langsam geht - mit 9600 Baud - und ich wirklich sehr viele Daten brauche. Wie ich das System verstehe, wird momentan ein Byte aus dem EEPROM ausgelesen und dann gesendet. Da ich nur Basis-Wissen über Microcontroller habe, kann ich nicht sagen, ob man diesen Prozess beschleunigen kann. Meine zwei Ideen dazu sind (immer ohne sie Hardware ändern zu müssen): - Datenrate erhöhen - geht das oder ist 9600 Baud sowieso die Grenze, die das System kann? Wenn es geht, gibt es einen gutes Beispiel wie man den Microcontroller programmieren müsste, und wo? - Würde man den internen Speicher des Pic nutzen, und quasi erst eine gewisse Anzahl Bytes lesen (32?) und dann senden, würde das schneller gehen? Wenn ja, gibt es hierfür ein Beispiel für die Programmierung? Um es noch konkreter zu machen: Pro Minute werden etwa 18kByte ausgelesen, was mir sehr langsam erscheint. Wenn man dies - Ihrer Meinung nach - beschleunigen kann, würde es sich für mich lohnen, Zeit zu investieren um das System schneller zu bekommen. Wenn nicht, lasse ich das gleich sein. Vielen Dank, Bjoern
Aha, die Hauptaufgabe des PICs ist die serielle Datenübertragung. Warum nimmt man dann nicht einen PIC mit Hardware-UART ? Den könnte man ja auch mit 115200 Baud betreiben... 16F628A ? Das Auslesen des EPROMs (parallel, lokal) kann gar nicht so langsam sein, wie die serielle Übertragung... Suche da mal weiter !
Parallel sind doch die 28... EEPROMs. 24xx256 dürften i2c sein.
@BigWumpus: Ich weiss leider nicht, warum hier nicht eine bessere Lösung gewählt wurde. Ich kann mir das nur so erklären, dass der Ersteller des Systems (der leider nicht mehr hier ist) auch nicht den "vollen" Durchblick hatte. Die Hauptaufgabe dieses PIC ist in der Tat die serielle Übertragung, die Datenaufnahme geschieht durch einen anderen Prozess, der auch hier keine Rolle spielt. Meine Frage ist ja deswegen auch nur auf diesen "Downloading" Prozess ausgerichtet - ist also 9600 Baud das MAximum, was dieser Controller kann? Und haben diese PIC's denn alle den selben Aufbau, so dass man sie einfach austauschen könnte (Also den alten gegen den von Ihnen erwähnten)? @Dieter: Die (! es sind 8 in einem Array !) EEPROM werden tatsächlich an einer I2C Schnittstelle betrieben. Ich schicke die Datenblätter mit, das hätte ich ohnehin gleich tun sollen.
OK, ich gehe davon aus, daß die Platine schon fertig ist... Mit welcher Taktfrequenz wird der PIC betrieben ? Bei mehr als 4 MHz sollte auch eine höhere Geschwindigkeit machbar sein!
Ja, die Platine ist fertig, und wird schon seit langem verwendet. Die Taktfrequenz ist 4MHz - kann man trotzdem etwas an der Übertragungsrate machen? Muss diese eigentlich nur PC seitig eingestellt werden, oder muss der Microcontroller ebenfalls umgestellt werden? Die Sourcen des ursprünglichen Programms sind nämlich nicht mehr aufzufinden. Ist so etwas schwierig zu programmieren? Wenn nein, kann man die Taktfrequenz des Controllers doch softwareseitig regeln, oder liege ich da falsch? Fragen über Fragen... Aller Anfang ist schwer, also vielen, vielen Dank für alle Antworten! Bjoern
was normalerweise geht, ohne am Programm rumzufummeln: doppelte Taktfrequenz, doppelte Baudrate. Also in deinem Fall mit 8MHz betreiben und das Terminal dann mit 19200 Baud, vorausgesetzt, der Chip kann die 8MHz. Immerhin halbierst du damit deine Übertragungszeit. Ich weiss ja nicht, was dein MC sonst so macht. Falls er jetzt z.B. jede Sekunde einen Messwert speichert, tut er es dann jede halbe Sekunde, was dann sicherlich nicht im Sinne des Erfinders wäre. Evtl. sogar eine Umschaltung der Taktfrequenzen, Normalbetrieb 4 MHz, Kommunikation 8MHz. Aber wenn die Originalsourcen nicht mehr da sind, würde ich es sowieso neu machen. Sinnvoll ist auf jeden Fall ein Chip mit Hardware-Uart, ob es allerdings einen sonst pinkompatiblen Typ gibt und zufälligerweise die UART-Pins an der richtigen STelle hat...? Kenne mich mit PICs aber überhaupt nicht aus.
Der Takt kann extern bis 20MHz erhöht werden. Ist dort ein externer Schwinger oder Quarz angeschlossen ?
Unglücklicherweise erhöht sich mit der Taktfrequenz natürlich auch die Geschwindigkeit der I2C (Hardware?) Schnittstelle. Die Speicherbausteine müssen damit klarkommen sonst läuft nichts mehr.
Ich weiß ja nicht wieviele der Platinen betroffen sind aber wenn es nur wenige sind, könnte man doch einen Adapter löten von dem "alten" Footprint auf das des neuen Chips, eine Software die nur I2C und UART regelt ist denk ich nicht so schwer zu realisieren, wenn man einen Chip benuzt der beides in Hardware kann. Ein Mega8 hat z.B. beides, allerdings würde ich bei der gelgeheit den Quarz durch einen Baudratentauglichen ersetzen, sonst wird das nix mit der Übertragung.
Soooo, ich habe mir die vorhandenen Infos nochmal näher betrachtet und dabei herausgefunden, dass der verwendete 16F819 sowohl UART als auch I2C in Software abwickeln muss, da nur ein Hardware I2C slave im Controller vorhanden ist. Es gibt auch keine vernünftige Alternative, da alle 18Pin PICs keinen I2C Master haben. Der 16F87 hat aber zumindest eine Hardware UART. Wenn was neues entworfen werden sollte dann gleich einen 18F nehmen, die haben die dusselige Speichersegmentierung nicht mehr. Vorschlag wäre 18F2420, ein 28Pinner mit Hardware UART und I2C Master. Bei 115200 Baud lassen sich dann rund 500kByte pro Minute übertragen.
Hallo, Antworten immer etwas spät, wer richtig schlussfolgert weiss ich bin in den Staaten ;) deswegen auch die limitierten Ressourcen und die Hilfe nötig... @crazyhorse: das System wird NUR für den Download betrieben, also muss ich mich nur darum kümmern. Kann also die Taktrate erhöhen. @Dummie: Nein, kein Quartz angeschlossen. Kann man den einfach anschliessen, oder müsste ich dann die Programmierung ändern? @Dieter: Ich werde später mal herausmessen, wie der Clock-Takt momentan ist. Anscheinend können die EEPROM ja 400kHz ab. Werde dann berichten. @Läubi: Nicht viele Platinen betroffen, aber ich habe halt sehr wenig Zeit, und noch tonnenweise andere Arbeit mit der Datenanalyse. Die Lösung... @Dieter: ...gefällt mir eigentlich gut, aber ich habe keine Zeit für komplette NEuentwicklung, leider. Der momentan verwendete PIC hat übrigens 20 (!) Pins... Ich werde mal versuchen, ob ich den Schaltplan auftreiben kann. Gibt es denn einen 20Pin pinkompatible Version, mit der ich schneller werden kann, und wie schnell wäre das? Die 115200 Baud wären einfach perfekt träum Vielen Dank, mal wieder - bjoern
@Bjoern Eskofier: Naja eine Software die nur das EEPROM ausliest und per UART verschikt... sollte man in weniger als einer Stunde fertig haben wenn man C + Codebeispielen verwendet (selbst in ASM ist das nicht sooooo die Welt da gibts auch Beispiele). Und wenn du mal überlegst wieviele Stunden du jezt schon "verschwendet" hast mit der alten Version irgendwas hinzukriegen... Könnte sich schon lohnen denk ich.
Wie sind jetzt wirklich die Fuses gesetzt? Laut deiner aussage sollte der PIC ja mit 4MHz(intern) laufen... dann wäre es kein Problem, die fuses auf 8MHz(intern) zu setzen. mfg Schoasch
Hallo Bjoern Ein Schaltplan wäre natürlich optimal. Ohne Quarz kann ich mir eigentlich nicht vorstellen, vielleicht ein Keramikresonator. 18 Pin bezog sich auf DIP Gehäuse, SSOP hat 20 Pins. Wenn der Controller in 20 Pin DIP ist kann es kein 16F819 sein. Übrigens lassen sich sehr viele PIC mit gleicher Pinzahl innerhalb der Baureihen gegeneinander austauschen. Ich sehe leider keine Möglichkeit vor Ort schnell was auf die Beine zu stellen. Dieter
@Läubi - eine Stunde? Auch für einen relativen Laien? Also ich hab ja schon mal an einem MC programmiert, aber das ist lange her... @Schoasch - was sind denn die Fuses? Sind die Herdware - oder Softwareseitig gesteuert? Mir wurde, wie erwähnt, gesagt dass die interne Taktfrequenz des PIC bei 4MHz liegt... @Dieter - Schaltplan kommt morgen. Ist fast sicher ohne Quarz betrieben. Das Gehäuse ist SSOP, der PIC ist sicher ein 16F819. Wenigstens das weiss ich... Vielleicht lässt sich ja doch was auf die Beine stellen; ich klemme ja dahinter, und mit so viel kompetenter Hilfe habe ich da schon Zuversicht. Ich werde mal eruieren, wie schnell ich an den 16F87 kommen könnte, um den auf der Platine auszutauschen. Wenn der drauf ist, mit der entsprechenden Programmierung - würde der dann die 115200 Baud schaffen?
Naja.... also etwas mehr wirds schon dauern denk ich, aber wenn du schonmal programmiert hast sollte das kein Problem sein! in C: - Hier z.B. ein Codebeispiel wie man ein I²C EEProm ausliest: http://www.mikrocontroller.net/forum/read-4-81256.html - Hier das Tutorials zum UART: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Der_UART Ich bevorzuge Assembler, ist am Anfang etwas verwirrend, aber man kommt meist genausogut ans Ziel gerade bei solchen Anwendungen: - I²C Zugriff: http://www.mikrocontroller.net/forum/read-4-246060.html - UART: http://www.mikrocontroller.net/tutorial/uart Bei Problemen wird dir bestimmt hier im Forum geholfen. Bei Assembler kann ich dir auch ggf. nen Tip geben, aber C kenn ich mich nicht aus ;) Wenn man das ganze in SMD ausführt, könnte es ggf sogar möglich sein das ganze auf das Footprint des alten umzustricken, das du halt anstelle des PIC ne kleine Platine reinstecken kannst.
Der 16F87 ist pinkompatibel und hat einen Hardware UART, da sollte 115200 Baud machbar sein. Wenn die Schaltung keinen Quarz oder Keramikresonator enthält ist es aber schon eher Zufall dass die Baudrate genau genug ist. Der Schwinger müsste zwischen Pins 17 und 18 angeschlossen sein. Vielleicht wird auch ein externer Takt verwendet. Welche Möglichkeiten der Programmierung stehen denn zur Verfügung bzw. ist ein ICSP-Interface auf der Platine ?
Fuses sind Einstellungen mit denen du die gewisse Hardware-Spezifische Funktionen aktivieren oder auch deaktiviere kannst. Die musst du mit der Software oder mit dem Brennprogramm einstellen und danach werden sie auf den PIC geschreiben. Hier ist eine Seite die dir dann sicher auch helfen kann: http://www.sprut.de/ Und hier gleich etwas zu den Fuses: http://www.sprut.de/electronic/pic/config/config.htm#config Sprut bezieht sich da auf seinen Brenner.. aber im Grunde gilt das für alle Programmiergeräte. mfg Schoasch
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.