Forum: Mikrocontroller und Digitale Elektronik PIC18F8720 mit SRAM Programmspeicher


von Purzel (Gast)


Lesenswert?

Hallo!

Ich habe kürzlich den PIC18F8720 und den 18F8722 entdeckt. Beide
verfügen über ein externes Memoryinterface und ermöglichen somit eine
Programmspeicherkapazität im Megabyte-Bereich.
Mein Vorhaben ist nun, einen PIC18F8720 mit zwei standard 8-bit SRAMs
(128kB jeweils) entsprechend der Schematics im Datasheet zu
verdrahten.
Der PIC würde dann einen Bootloader erhalten, welcher nach einem Reset
erstmal eine Art "Betriebssystem" aus einem I2C-EEPROM liest, in den
SRAM ablegt und dort ausführt.
Das Betriebssystem soll dann in der Lage sein, Programme von einer
SD-Speicherkarte zu laden.

Nun meine Frage, hat schon jemand Erfahrungen mit dem PIC18F8720 oder
PIC18F8722 gesammelt? Vorallem mit dem externen Memoryinterface!?
Leider gelten die Vorschläge im Datasheet nur für 8-bit-EEPROMs und
nicht für SRAM speicher, deswegen weiss ich auch nicht, ob das
Memoryinterface anstandslos die SRAMs als Programmspeicher anerkennt.
Weiterhin schweigt der Datasheet auch darüber, ob z.B. teile des
externen Speichers als RAM konfiguriert werden können.

Einen Eagle-Schaltplan habe ich bereits erstellt und lade den bei
interesse auch gerne hoch. Da ich die Platine allerdings fertigen
lassen müsste und es sich dabei für einen Studenten um eine nicht
gerade unerhebliche Investition handelt, wäre es gut zu wissen, ob die
sache auch so funktioniert wie geplant. :)

gruß,
daniel

von Steffen (Gast)


Lesenswert?

Wenn die SRams schnell genug sind (Timing mit Datenblatt vergleichen)
sollte es keine Probleme geben.

Als RAM kannst Du externen Speicher schon wegen der Architektur nicht
verwenden.

von Purzel (Gast)


Lesenswert?

Das mit dem Timing liesse sich ja zur not über einen langsameren Quarz
angleichen, ausserdem hat man bei dem externen Memoryinterfache die
Möglichkeit waitstates einzustellen, soweit ich das kapiert habe...
Abgesehen davon haben die standard SRAMs von Reichelt für 90 cents eine
Zugriffszeit von 70ns, parallele EEPROMs 150ns. Das sollte dann wohl
klappen.

laut der Ap-Note von microchip:
http://ww1.microchip.com/downloads/en/AppNotes/00869b.pdf
Seite 12 ist die verwendung von externem RAM auf jeden fall möglich, es
wird dann der gleiche daten/adress-bus benutzt, allerdings müssen andere
Steuerleitungen angeschlossen werden....fällt mir gerade so auf :)
ich müsste also noch einmal 2 seperate SRAMs für den externen RAM
vorsehen... aber übertreiben wollen wir ja nicht direkt.
Viel wichtiger wäre, dass der externe Programmspeicher mit SRAMs zu
verwirklichen wäre...

von Steffen (Gast)


Lesenswert?

"Viel wichtiger wäre, dass der externe Programmspeicher mit SRAMs zu
verwirklichen wäre..."????

Das externe RAM liegt wie gesagt generell im Programmspeicher und nicht
im Datenbereich.

von Purzel (Gast)


Lesenswert?

Ah.
Tja, selbst nach stundenlangen duchblättern der AN869 von Microchip
finde ich leider keine Gegenargumente mehr... :)
Aber ist ja auch wurscht, mir gehts ja um den Programmspeicher. Dachte
nur, ich könnte 2 Fliegen mit einer klappe erschlagen und dem PIC
direkt eine RAM-erweierung spendieren.
Wenn ich da aber so drüber nachdenke kann ich den Programmspeicher ja
trotzdem als RAM benutzen, da ich den Programmspeicher bei
Programmablauf beschreiben und lesen kann.

So, habe nun ein kleines Testboard geEagled. Wer interesse hat schaut
hier:
www.base32.de.vu/exmemboard.zip
Jegliches Feedback ist willkommen.

dankeschön!

gruß,
Daniel

von Peter D. (peda)


Lesenswert?

"...Programmspeicherkapazität im Megabyte-Bereich."

Bei solchen Postings frage ich mich immer wieder, was soll das ?


Ich hatte mir mal den DS80C400 angesehen, ein lustiger Chip. Man kann
bis zu 8MB RAM anschließen und er holt sich dann beim Einschalten den
Code über das Ethernet in den RAM.
Aber ich fand keine Anwendung, wo ich sowas brauchen könnte.


Peter

von Purzel (Gast)


Lesenswert?

Es geht mir nicht um die Menge!!!
Es geht darum, dass ich den Speicherplatz dynamisch nutzen kann.
In meiner Anwendung kommen sowieso nur 2x 128kB SRAMs zum Einsatz, die
ich womöglich mit schlichtem Programmcode eh nicht vollkriegen werde.
Als Datenspeicher, um z.B. die Grafiken für ein 320x240 LCD zu
speichern kann mehr speicher aber schon sinnvoll sein, oder???


Daniel

von Rooney (Gast)


Lesenswert?

Ich find's eine recht coole Sache, die du da machst. Ich war nämlich
auch gerade dabei mir so ein Board zu machen, aber da bist du mir wohl
zuvor gekommen...
Hast du es schon fertigen lassen? Gibts bei dir die Möglichkeit einer
Gemeinschaftsbestellung, dann wäre es für den einzelnen nicht so teuer,
bin auch nur Student... www.thepcbshop.com macht recht gute Preise für
gute Platinen.

Also viel RAM zu haben ist wohl immer wünschenswert, entweder wie
bereits erwähnt als Datenspeicher für Grafikdisplays oder in meinem
Fall zum Speichern von Datenblöcken einer HDD (MP3 Player).

lg
Tom

von Purzel (Gast)


Lesenswert?

Hallo!

@Rooney
nein, habe das board noch nicht fertigen lassen, da ich mit dem design
noch nicht völlig zufrieden bin. Wollte eigentlich den SD-Kartenleser
mit aufs Board packen. Allerdings soll das Board nicht größer als
75x100 werden, deswegen wird das wohl nix :( War schon so nicht einfach
das Ding zu routen...Ausserdem kann der 18F8720 nur SPI  ODER  I2C
benutzen. Würde ich also die SD-Karte über Hardware-SPI ansprechen,
müssste das I2C EEPROM weichen, allerdings bin ich noch unschlüssig, ob
ich das EEPROM überhaupt brauche...

Die Preise für eine Kleinserie bei thepcbshop sind ja klasse! Wenn die
Qualität und Lieferzeit stimmt sollte man die Boards wohl dort fertigen
lassen. Allerdings frage ich mich, warum 10 und 15 Tage Lieferzeit das
gleiche kosten...
Würde dann auch eins für dich mit machen lassen, das ist kein Problem.


Das mit dem Programmspeicher als RAM zu nutzen ist allerdings scheinbar
nicht so einfach. Da braucht es wohl abgefahrene Softwaretricks.

Gruß,
Daniel

von Purzel (Gast)


Lesenswert?

Update:
Das Board liess sich so nur mit 10mil Leiterbahnstärke routen...d.h.
man müsste das EC-Verified-Angebot wählen.
Dann lägen 2 Platinen bei 66 EUR.

von Rooney (Gast)


Lesenswert?

Also ich hab bei www.thepcbshop.de meine MP3 Player Platinen fertigen
lassen und bin sehr zufrieden damit. Hab dort ein LQFP48 drauf und da
ist der Pin-Abstand glaub ich gleich wie beim PIC18F8720, hat aber
tadellos mit dem billigeren Plot & Go Service funktioniert. Bei
www.thepcbshop.de ist wird es eben immer billiger, je mehr Platinen man
fertigen läßt. Wenn ich was fertigen lasse, dann meistens 3 oder mehr
Boards, weil wenn ichs selbst net brauchen sollte, dann verkauf ich es
eben... Bin leider kein Eagle Router, verwende Mentor Graphics, was
sind 10mil in mm?
Ich hab mir gestern dein Board runtergeladen, werd es heute mal in
Eagle anschauen, ob es für mich überhaupt relevant ist.
Übrigens, schon mal überlegt den PIC18F8722 zu verwenden? Ich hab mich
da noch nicht so genau informiert, weil es mir ziemlich an der Zeit
mangelt, aber sofern ich gehört habe, ist dort die Architektur etwas
anders als beim 18F8720 und da soll es anscheinend kein Porblem sein
den externen Speicher auch als RAM zu benutzen. Aber wie gehabt, hab
ich nur gehört...
Programmierst in Assembler oder C?

von Purzel (Gast)


Lesenswert?

Hallo.
Ja, habs vercheckt :-/
10mil sind 0,254mm, also passt das schon. Wer lesen kann is klar im
vorteil...
Am Bord hab ich heut Nacht noch gefrickelt. Der 74HC04 ist
rausgeflogen, der war mehr als überflüssig...
Jo, habe mir schon überlegt den 8722 zu nehmen. Beim Vergleich der
Datasheets konnte ich aber keinen großen Unterschied der Memory
interfaces feststellen, außer dass der auch ein 8-Bit-Modus hat,
allerdings bin ich die Datasheets unter dem Aspekts der RAM-Nutzung
noch nicht so eingehend durchgegangen...
programmiere in C.

gruß,
daniel

von Rooney (Gast)


Lesenswert?

Nur mal kurz zur Information...

Die Antwort meines Service Requests an Microchip bezüglich Memory
Interface von PIC18F8720 und PIC18F8722:

>Problem Resolution:
>The EMI on the 8722 should be no different from the EMI of the 8720.
>Yes the EMI can be used to access external RAM memory.  If you are
>interested, AN869 is a good application note that discusses the use of
>the EMI.

von Purzel (Gast)


Lesenswert?

Hi,

naja, ob es möglich ist stand ja eigentlich nicht zur debatte, ich
sagte nur, es ist nich ganz einfach :)
Aber zum Glück sind wir nicht die ersten, die sich mit diesem Problem
rumschlagen:

http://forum.microchip.com/tm.asp?m=30030&mpage=1

und

http://forum.microchip.com/tm.asp?m=51953&mpage=1


Gruß,
daniel

von Rooney (Gast)


Lesenswert?

Welchen Compiler verwendest du eigentlich? C18, CCS oder Hi-Tech?
Also ich verwende jetzt schon seit Jahren den CCS Compiler, weil er
einfach zu bedienen ist und meiner Meinung nach mit Programm- und
Datenspeicher effektiver umgeht als der C18, aber vielleicht trügt der
Schein auch...
Aber egal... Der Comiler besitz jedoch bereits fertige Libraries um den
externen Speicher als RAM zu nutzen. Das einzige was man machen muss,
damit der Datenspeicher net vom Programmcode überschrieben wird, ist
es, Platz zu reservieren und sich merken, wo die Variablen abgelegt
sind (Adressen). Ich habs aber noch nicht ausprobiert, weil mir noch
das Board fehlt...

von Purzel (Gast)


Angehängte Dateien:

Lesenswert?

Hey klasse, ich benutze auch den CCS Compiler :)
Wie siehts denn aus mit dem Board, willst du auch eins?
Würde kommende Woche nämlich gern mal bestellen...

Als Anhang gibts die neue Version des Boards (74HC04 entfernt)
Ich bleibe allerdings vorerst beim 18F8720


gruß,

daniel

von Thorsten (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

habe mir gerade das Layout angesehen. Im Anhang ein Ausschnitt aus
daraus, die Leiterbahn die da innerhalb der gelben Markierung so quer
über alle anderen geht, soll das so sein?

Gruß
Thorsten

von Purzel (Gast)


Angehängte Dateien:

Lesenswert?

Ja, das gehört so!

Nene :)
danke für den hinweis!
da hab ich wohl grobmotorisch wie ich heut morgen noch bin die
leiterbahn verschoben.
Pardon!

neue Files angehängt.

von Purzel (Gast)


Lesenswert?

Hallo!

Monate später gibts dann doch endlich mal was neues!
Das Board, so wie hier bereits vorgestellt, scheint prima zu
funktionieren.
Bislang fehlt noch ein "Betriebssystem" um den SRAM-Programmspeicher
sinnvoll nutzen zu können, die Komponenten arbeiten jedoch alle wie
geplant und die ersten Ergebnisse sind recht zufriedenstellend.

Mehr Infos dazu + aktuelle Version von Board + Schematics zum
herunterladen gibts hier:

http://www.base32.de.vu/EMI

Gruß,
Daniel

von Rooney (Gast)


Lesenswert?

Sieht gut aus!!! Ich hoffe du haltest uns am laufenden wie es nun so
weiter geht...
Ein Rätsel bleibt aber noch immer, wie du den PIC so perfekt auf die
Platine löten konntest, sieht ja höchst professionell aus ;-)


mfg Tom

von Purzel (Gast)


Lesenswert?

dankedanke.
Soo schwer war das Löten eigentlich garnicht. Ich habe so einen
Flussmitteldispenserstift, damit einmal über alle Pins einer Seite
fahren, Lötzinn mit dem Lötkolben aufnehmen und in ca. 10 Sekunden über
alle Pins drüberbruzzeln. Das Flussmittel sorgt ganz gut dafür, das das
Zinn nur dort landet, wo es auch hin soll. Dann unter dem Mikroskop
alle  Lötstellen prüfen und bei Bedarf überschüssiges Lot mit der
Entlötlitze entfernen. :)

Vor kurzem habe ich einen SRAM-Bootloader fertiggestellt. Damit kann
ich nun schonmal Programme per Hyperterminal in den SRAM übertragen und
dort  ausführen. Einem kompletten Betriebssystem steht somit nicht mehr
viel im Weg...

gruß,
Daniel

von Thorsten (Gast)


Lesenswert?

SRAM-Bootloader klingt interessant, wärst du evtl. bereit, den zu
veröffentlichen?

von Purzel (Gast)


Lesenswert?

Klaro, werde den demnächst hier anpreisen :)
Ein problem habe ich allerdings noch nicht gelöst:
Das Verschieben der Interrupt-Routinen in den SRAM klappt bislang noch
nicht.

von Purzel (Gast)


Lesenswert?

Hallo!

es ist soweit :)
Der SRAM loader ist einigermaßen präsentabel und auf der Seite
http://www.base32.de.vu/EMI
herunterzuladen.
Allerdings muss man bislang noch auf Interrupts verzichten. Das
Übertragen von Programmen mit Hilfe eines Terminalprogramms
funktioniert jedoch zuverlässig.
Die Problematik, welche die Interruptnutzung verhindert wird auf der
Seite ebenfalls geschildert. Vielleicht hat ja einer von euch ne
Idee!?!?!?

Gruß,
Daniel

von Rooney (Gast)


Lesenswert?

Hi Daniel!!

Lad dir mal das neue Compiler Manual von CCS runter und schau auf Seite
33.

#build(reset=0x200,interrupt=0x208)
//Assigns start location of
//reset and interrupt vectors


Würde das dein Problem lösen?

von Purzel (Gast)


Lesenswert?

Hallo!

Naja, genau darin steckt das Problem!
Die Adressen bei #build(...) müssen < 0xFFFF sein :-/
deswegen klappt das ganze nicht.
(Stimmt, hab vergessen dazuzuschreiben, dass es am #build liegt...)

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.