PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Speicher erweitern



Daniel
06.03.2006, 20:42
Hallo ihr,

ich suche für einen MEGA 168 eine geeignete Möglichkeit den Speicher zu erweitern. Der Speicher sollte mindestens 32k Speichervolumen haben und er sollte länger halten, also nicht nur 1000 Zyklen. Dei Daten müssen nicht unbedingt gespeichert bleiben, wenn der Strom weg ist. Die Geschwindigkeit muss auch nicht so hoch sein, mindestens aber 15µs betragen.
Was ist dafür am besten geeignet?

Vielen Dank schonmal im Voraus, Daniel.

Mehto
06.03.2006, 21:31
wie wäre es mit einem Externen SRam mit bis zu 64KB?
Ich kenn den Atmega168 grad nicht aus dem Kopf, kann sein das der ein externes Sram unterstützt, dann brauchst du nur noch einen Portlatch :-)


Für was brauchst du dennn den speicher?

Gruß,
Mehto

Hellmut
06.03.2006, 21:37
@ Mehto

nimmt ein SRAM wegen der Notwendigkeit den refresh zu machen nicht zu viel I/O des Controllers in Anspruch?

Mehto
06.03.2006, 21:50
Hallo Hellmut,

ein Sram (statisches Ram, oft als cachespeicher auf alten mainboards) brauch im gegesatz eines Drams (dynamischen Ram, z.b.: Speicherriegel im pc) nicht refresht werden :-)

Es kann ganz normal wie der Interne Ram benutzt werden.
Die genauen Infos stehen im Datenblatt, ich hab hier auch schnell einen Schaltplan erstellt.
Für 64KB einfach noch die andere Adressleitung mit anschließen.

Wenn es nicht verdammt schnell gehen muss (unter 60ns) würd ich nicht die Highspeed Srams nehmen, die brauchen einfach zu viel Strom.

Im ganzen wären das 2 Ports vom µC.
Eine alternative wäre eine Sd Karte (die aber natürlich einiges langsamer wäre, dafür geht der Speicher nicht verloren), da hättest du mehrere MB, must aber mit einem Fatsystem ungehen können :-(

Allerdings kannst du den Speicherinhalt im Sram auch behalten in dem du es einfach auf Standby schaltest, dadurch verbraucht es kaum Strom und behält seinen Dateninhalt.
So wird das z.B. beim Psion (PDA) gemacht, zumindest bei den älteren.
Die haben dann einen Akku und eine zusätzliche Sicherungsbattery, wenn beide versagen sind die Daten auf dem internen Laufwerk weg und das Betribssystem muss erst wieder aus dem Rom in den Ram geladen werden...

Gruß,
Mehto

Daniel
06.03.2006, 22:02
Ich brauch den speicher um Bilddaten zu zwischen zu speichern, um sie dann weiter zu verarbeiten und an den Computer zu schicken.

Ich glaub nicht, dass des 168er einen sram so externen sram so unterstützt, ich hab bis jetzt zumindestens noch nichts im Datenblatt dazu gefunden, aber ich hatte auch noch keine Zeit alle 360 Seiten durchzulesen O:)

Viele Grüße, Daniel.

Mehto
06.03.2006, 22:03
ok, ich seh grad, der Atmega168 hat ja gar nicht genügend I/O's für einen Sram...

Wenn du ein Sram benutzen wilst must du wohl den Atmega8515 oder den Atmega162 (mit AD wandlern) benutzen.
(oder natürlich den Atmega128, der ist aber für die meisten Projekte etwas zu überdimensioniert...

/Edit:
ok, um Daten zwischen zu speichern kommt wohl nur einSram in Frage....
Ja, hab ganz vergessen das der Atmega168 ja kaum I/O's hat....

kann sein das auch noch mher AVR'S einen externen Sram unterstützen, muste mal schauen, der Atmega162 ist aber aufjdenfall nicht verkehrt.
Wenn du keinen AD Wandler brauchst kanst du auch den Atmega8151 benutzen, der ist etwas günstiger...

Daniel
06.03.2006, 22:12
Das ist ja genau mein Problem, ich brauch einen und die SChaltung sollte auch nicht so groß werden. Aber wie lange halten denn langlebige eeproms?

Viele Grüße, Daniel.

Mehto
06.03.2006, 22:16
also vom eeprom würd ich dir auf jedenfall abraten, viel zu langsam...

Außerdem ist der Eprom nur ca 512Byte groß, der interne Sram 1Kbyte.

Versuch die Daten so am laufenden Band zu verarbeiten das du nur mit dem internen Ram auskommst.
Wie groß ist denn ein Bild, wie schnell kommen sie von der AKmera ud wie schnell kanst du sie zum PC übertragen?

Daniel
06.03.2006, 23:52
aber ich brauch ja irgendwo einen zwischenspeicher, wenn ich das Bild im Chip auswerte. Die kamera ist die Gameboy Kamera. Die hat 16384 Pixel, die ich mit einer Genauigkeit von 8- bit auslese, und dass in 1/4 Sekunde. Also 65536 Bytes pro sekunde oder 524288 bits pro Sekunde. Mit der Übertragung auf den Pc weiß ich noch nicht. Über rs232 auf jeden Fall, aber ich weiß nicht welche baudrate ich da schaffe, einige hatten Probleme mit sehr hohen. Vorerst vielleicht nur 38400. Also es soll erstmal so aussehen, dass ich die Daten nur auf den Computer übertrage, sodass ich ein vernünftiges Programm für den 168er schreiben kann. Der 168er soll nur als CoController dienen, weil der nen schnelleren AD Wandler hat und auch sonst schneller ist, aber nicht genug ein und Asugänge hat.
Also im Endeffekt soll das dann später so funktionieren: Die Kamera macht ein Foto, der 168er berechent es und schickt die Ergebnisse dann (wahrsacheinlich über I²C) an den Hauptcontroller (ein Atmega32), der dann entscheidet was zu tun ist.


Ich hoffe du kannst was mit den Daten anfangen

Viele Grüße, Daniel

Ratber
07.03.2006, 01:51
Ein 64K EEProm (24C512 I2C. ca. 3.50€) würde mit seinen 100'000 Zyklen schon in greifbare nähe rücken.

Ein Flash ist auf den ersten Blick mit seinen 10'000 Zyklen nicht sehr Attraktiv aber wenn man ein 1 Mb-Flash nimmt und man alle Bereiche (1024K/64K=16 Bereiche) Rundum nutzt dann kommt man damit schon auf 160'000 Zyklen.

Die Angegebenen Maximalzyklen sind natürlich absolutes Minimum und vom Hersteller Garantiert.
In der Praxis kann man meist mit mind. 50% mehr rechnen.
Also bei EEProms mit 150'000 und bei Flash mit 15'000 bzw. 225'000 Zyklen.

Aber wenn es auf dauer sein soll dann wirst du um RAM nicht herumkommen wenn du nicht Zyklisch den Speicher wechseln willst.

Die Frage ist also wie oft du Bilder machst und wie lange so ein EEProm bzw. Flash reicht.

Mußte mal den Taschenrechner zücken und Überschlagen.

Bei 1 Bild die Sekunde reicht ein 1 MB Flash bei Angenommenen 225'000 Zyklen für rund 2.6 Tage Nonstopbetrieb.

Alle 10 Sekunden schon 26 Tage.

usw.

Ich würde mir überlegen D- oder Sram zu nutzen.
Wenn die Bildfolgen nicht so irrsinnig hoch sind dann spricht nix dagegen wenn du dir ein eigenes Interface bastelst.
zb. 8Bit Daten Parallel und die 16 Bit Adresse auf ein Schieberegister.
Da bist du mit 3 Mhz Takt schon in rund 25 µs fertig mit dem Bild im Speicher.
Wenn du beides auf ein Schieberegister legst (Adresse und Daten) dann dauerts pi mal Daumen maximal das Doppelte und du hast ne Menge Leitungen gespart weil du am Ende nur 3 Für das Schieberegister und noch ein oder Zeri für das Ram brauchst.

Is ne Überlegung wert wie ich finde.

Daniel
07.03.2006, 12:54
Hey, die kleineren eeproms haben ja sogar ne garantierte Lebensdauer von 1.000.000 Zyklen. Also die bis 256k. Ich weiß zwar nicht, wie lange ich damit "spielen" werde, aber da bin ich lieber etwas vorsichtiger mit der Haltbarkeit. Hm ich hab keine Ahnung, wie lange die Bildauswertung dauert, aber bei 10 MHz und bei kleineren Programmen vielleicht ne sekunde, ich hab da echt null Ahnung.

Bei einem Bild (16k) pro Sekunde 256k Speicher und einer Lebensdauer von 1.000.000 Zyklen komme ich, wenn ich mich nicht verechnet habe auf 185,2 Tage Dauerbetrieb. Das wäre zumindestens erstmal mehr als genug.

Aber natürlich ist ein RAM sehr viel besser, mit der Geschwindigkeit: Der muss ja pro byte nur 15µs pro byte schaffen, also 15.000 ns pro byte oder beziehen sich die angegebenen zeiten auf ein bit? Dann wären es aber immer noch 1900 ns, also für einen Speicher immer noch sehr viel Zeit. Aber das mit dem Interface selber basteln klingt ja nicht unkompliziert, gibt es dazu irgendwo ein Tutorial oder so? Also ich hab nur 4 I/O pins frei, wenn ich mich nicht verechnet habe, ziemlich wenig. Dann müsste ich wohl , wahrscheinlich nen anderen Controller nehmen oder reichen etwa vier Leitungen aus? Aber interessieren würde es mich, wie ich da ein externes RAM rankriege mit einem Chip ohne entsprechender anauslegugng dafür.
Ein SRAM ist doch besser als ein DRAM, weil man die ja nicht refreshen braucht, also wenn dann auf jeden Fall ein SRAM, die par Cent mehr kann ich dann auch noch investieren.

Vielen Dank schonmal für die Antworten, Daniel.

Hellmut
07.03.2006, 19:23
Hab mich ja mit dem refresh beim SRAM gründlich blamiert! wage es aber trotzdem nochmal hier beizutragen.

Die Nutzung von externen Speicher, egal welcher Technologie, hat im Adressraum des avr mega64 z.B. nur ein kleines Fenster, knapp 64kBytes, da die Register, I/O-Adressen und das interne SRAM davon abzuziehen sind. Bitte schaut euch das im Datenblatt an. Es muß daher unter Softwarekontrolle und der Verwendung eines oder mehr Ports des Controllers mit "Speicherbanken" gearbeitet werden. Bei Verwendung eines externen 256kByte SRAM müßte man 2 Ports als zusätzliche "Adressleitungen" verwenden um jeweils eine von 4 möglichen Speicherbänken zu adressieren. Zu beachten ist auch bei der Adressierung das man nicht über diese "Segmentgrenzen" hinweg kommt und das in jeder "Speicherbank" die intern verwendeten Adressbereiche ausgeblendet werden müssen.

Mehto
07.03.2006, 19:58
Hallo Hellmut,

keine Angst, blamieren tut sich hier keiner, bei den ganzen Abkürzungen und Bezeichnungen vertut sich jeder mal ;-)

Deine Tips und Hilfsbereitschaft hier im Forum weiß ich übrigens sehr zu schätzen, respekt.

Du bist einer von denen die ich wirklich achte, umso mehr freut es mich dir auch mal was erklären zu können.
(aber hoffentlich kahm es nicht zu besserwisserisch rüber :-( )

Gruß,
Mehto

stochri
07.03.2006, 22:54
Kennt Ihr dieses Projekt:

http://elm-chan.org/works/vp/report.html

sehr klein, sehr viel Speicher, sehr schön.

Gruss,
stochri

Admiral
21.03.2006, 10:07
Hallo,

ich bin zwar neu hier im Forum, mache nun aber schon ne weile was mit
Controllern und speziell den Avrs. Ich habe meinen atmega8535 mit 32kB
externem SRam "getunt". Den habe ich, wie Mehto, auch von einem alten
Mainboard. Ich benutze 1 Port fast alles:
1 Byte für Adresse High
1 Byte für Adresse Low
1 Byte für Daten
und momentan noch 5 Steuerleitungen, welche an einem zweiten Port
hängen. Die Adresse wird in 2 74hct273 gepuffert.
Einziger Nachteil: Beim Lesezugriff wird der Port erst als ausgang benutzt,
um die Adressen auszugeben, dann als Eingang benutzt um die Daten aus
dem SRam zu lesen. Das benötigt etwas mehr Takte.
Das ganze ist wird aber jeweils one Probleme in 30 Takten erledigt.
Bei 15µs und 10 Mhz hast du ja 150 Takte zur Verfügung.

Gruß. Admiral

ogni42
21.03.2006, 10:29
Es ginge auch einen 8Bit für Daten über IO-Port und über TWI und einen I2C Portbaustein die Adressen anlegen. Der Code wird dann allerdings unhandlich.

Besser wäre es, direkt auf einen Mega162 zu gehen und den SRAM über das XMEM Interface anzuschliessen. Ist unterm Strich billiger (da ein HCT273 preiswerter ist als ein 16bit I2C Port-Baustein), leichter zu programmieren (da man den externen Speicher direkt ansprechen kann) und erheblich schneller (da keine Operationen für adresse schreiben, etc. von Hand programmiert werden müssen, das mach das XMEM Interface ja schon).