Forum: Mikrocontroller und Digitale Elektronik EEPROM auslesen (24xx256) mit Pic16f819, an PC über RS232


von Bjoern Eskofier (Gast)


Lesenswert?

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

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

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 !

von Dieter Werner (Gast)


Lesenswert?

Parallel sind doch die 28... EEPROMs.
24xx256 dürften i2c sein.

von Bjoern Eskofier (Gast)


Angehängte Dateien:

Lesenswert?

@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.

von Bjoern Eskofier (Gast)


Lesenswert?

HIer das Datenblatt des PIC. EEPROM siehe oben!

Vielen Dank!

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

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!

von Bjoern Eskofier (Gast)


Lesenswert?

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

von crazy horse (Gast)


Lesenswert?

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.

von Dummie (Gast)


Lesenswert?

Der Takt kann extern bis 20MHz erhöht werden. Ist dort ein externer
Schwinger oder Quarz angeschlossen ?

von Dieter Werner (Gast)


Lesenswert?

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.

von Läubi (Gast)


Lesenswert?

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.

von Dieter Werner (Gast)


Lesenswert?

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.

von Bjoern Eskofier (Gast)


Lesenswert?

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

von Läubi (Gast)


Lesenswert?

@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.

von Schoasch (Gast)


Lesenswert?

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

von Dieter Werner (Gast)


Lesenswert?

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

von Bjoern Eskofier (Gast)


Lesenswert?

@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?

von Läubi (Gast)


Lesenswert?

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.

von Dieter Werner (Gast)


Lesenswert?

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 ?

von Schoasch (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.