Hi,
ich denke im Moment über einen Datanlogger nach. Das Gerät soll
verschiedene Informationen über die Ports (Analog wie digital) ermitteln
und in Sekunden- oder 5 Sekunden-Intervallen in einem Speicher ablegen.
Später möchte ich dann über die serielle Schnittstelle die Daten auf
meinen PC speichern.
Rhetorische Frage: Welchen Chip brauche ich ? Er muß UART, ADC und
mindestens 3 Ports haben -> Ein Mega8 sollte ausreichen.
Jetzt zu meiner Frage:
Ich kenne mich mit auf dem Markt verfügbaren Speichern überhaupt nicht
aus. Gehört habe ich von RAMs, seriellen RAMs usw.
Was ist den der für dieses Projekt geeignete Speicher ?
Anforderungen: Möglichst wenig Anschlüsse, Mit möglichst wenig externen
Bauteilen (idealerweise keine) und natürlich möglichst viel Speicher ...
Wer kann helfen ?
Gruß
UBoot-Stocki
Hallo,
zuerst mußt du einmal ermitteln wie groß Dein Speicher sein soll und ob
die Daten gegen Spannungsausfall usw. gesichert werden müssen. Ein FRAM
z.B. mit 256KBit ist im SOP8 verfügbar und benötigt keinerlei
Erhaltungsaufwand. Die extrem kurzen WR\ Pulse sind daher auch
Störsicher und WR\ Algoritmen wie bei einem EEProm (wenns nicht in
Hardware implementiert ist) erhöhen den Programmspeicheraufwand und
setzen die Schleifenzeit herrunter.
Ich selbst setze nur noch auf serielle ADW (außer wenige
Spazialanwendungen) da die heute sehr genau, schnell und extrem wenig
Platz beanspruchen. µP interne ADW benutze ich nur noch für einfache
Anwendungen. Das serielle ADW- Speicher- System hat den Vorteil, daß
variable Bytelängen und Speicherkapazitäten möglich sind. Ein fertiger
funktionierender Datalogger kann also durch Auswechseln eines ADW oder
Speicher von der Auflösung her auf die neue Anwendung zugeschnitten
werden. Mit nur einer Platine und dem veränderten Treiberprogramme (z.B.
Parameter 8=Bit auf 12=12BIT) kann man fast alle Aufgaben lösen.
Im Anhang mal ein aktuelles Projekt (Schaltung und Platine) eines
Dataloggers für akkustische Gesangsaktivitäten von Heuschrecken im Feld
und die dazugehörige Aufzeichnung der jeweiligen Temperaturen.
Ich benutze dazu den PIC16F84. Der hat nur 18 Pins und ist im DIL
Gehäuse untergebracht (diesen Type verwende ich in vielen
Applikationen). Ich lese über den PC- P- Port ein aber es gibt den PIC
selbstverständlich auch mit RS232.
Da es hier im Forum häufig zu lesen war was der PIC alles nicht können
soll nun mal eine Klarstellung. Selbstverständlich kann ich mit dem PIC
indirekt adressieren um z. B. Tabellen zu bearbeiten oder Datenblöcke zu
verschieben senden usw ( fsr Register, indf).
Für einen Datalogger ist natürlich die Abtastzeit wichtig! Aus diesem
Grund wird allzu schnell eine Echtzeituhr benutzt was den
Speicheraufwand in die Höhe treiben kann. Der PIC macht das sebst und
stellt die Startzeit fest. Danach nur noch Inkremente in der
entsprechenden Abtastzeit (z.B. SEK, MIN usw). Damit wird kein Speicher
verschwendet. Je nach Anwendung können auch nur die Unterschiede opder
Abstände gespeichert werden. Klartext (nach dem Auslesen) kann dann der
PC draus machen, der kann das wesentlich effizienter. Die digitalen
Informationen liest der PIC direkt ein (paralell oder seriell). Wichtig
ist die Organisation der einzelnen Byt's im seriellen Speicher. Durch
geschickte Wahl kann viel Platz gespart werden. Da am Start des Loggers
die Zeitinkremente klein sind kommt man mit nur einem Byte aus gegen
Ende lassen sich 2 oder mehr Byt's unterbringen (festgelegt in einem
Config Byte und dem 1. neuen veränderten Block vorrangerstellt).
Desgleichen kann man auch mit anderen Daten verfahren.
MfG Manfred Glahe
Hi,
mir schweb auch so ein ähnliches Projekt im Hinterkopf rum. Allerdings
möchte ich MMC Speicherkarten verwenden. Belegen relativ wenig Ports,
ist Spannungsausfallsicher und in den aller meisten Fällen schnell
genug.
Wenn man die Daten dann noch gleich als .txt Datei ablegt kann man die
Karte sogar einfach in den PC stecken und auslesen
Und mit bis zu 128MB sicher genug Reserve.
Für den AVRco wird es bald eine Bibliothek zu Ansteuerung von MMC Karten
und eine für das FAT16 Filesystem geben. Damit wird das Auslesen von MMC
zum Kinderspiel
Gruß
Markus
Hi,
da Du Dich ja nun auch mit AVRs beschäftigst, kannst Du ja auch bei
Tante Atmel bleiben.
http://www.atmel.com/products/DataFlash/
Aber ansonsten würd ich auch die MMC/SD-Variante vorziehen.
Die laufen an einer 3V-SPI-Schnitte und du kannst sie entnehmen. Das
Protokoll ist ein wenig tricky, aber läuft wenn man den Bogen raus hat
sehr sicher. Kannst Du bestimmt bei einem der vielen MP3-Playern
ergattern.
MooseC
Wie schon gesagt wurde, es hängt alles von der Datenmenge ab.
Sehr gute Erfahrungen habe ich mit seriellen EEPROMs gemacht, die sind
auch sehr preiswert. Ich habe den AT24C512 (64kB) verwendet. Man kann
davon bis zu 8 Stück parallel schalten (=512kB).
Dadurch, daß sie ein serielles Protokoll benötigen, sind sie auch sehr
störsicher.
Die seriellen EEPROMs unterstützen auch Blockschreiben, d.h. Du kannst
Datenpakete von 64Bytes in einem Rutsch innerhalb von nur 10ms
reinschreiben.
Beispielroutinen findest Du hier:
http://www.specs.de/users/danni/appl/hard/i2c/index.htmhttp://www.specs.de/users/danni/appl/soft/c51/eeprom/index.htm
Batteriegestützte SRAMs sind dagegen sehr empfindlich. Da reichen
manchmal schon 10ns kurze Störnadeln auf der /WE-Leitung, um aus Deinen
Daten Hackfleisch zu machen.
Ich hatte damit auch schon mal schlechte Erfahrungen gemacht.
Insbesondere die Einschalt- und Ausschaltphase ist da sehr kritisch. Man
benötigt daher einen Supervisor-IC, der in dieser Zeit den SRAM
zuverlässig disabled und so gegen eine bei Unterspannung verrückt
spielende CPU schützt.
Peter
@ Peter: stimmt, serielle EEPROMS sind auch noch eine Möglichkeit. Von
den 24C512 lassen sich jedoch nur 4 adressieren da sie nur 2
herausgeführte Adressbits haben. Die 24C1024 haben nur noch 1 Adressbit.
Soweit ich weiß ist der maximale Adressraum 256kByte
@Markus,
stimmt, man kann nur 4 Stück parallel schalten.
Aber da man ja nur 2 Leitungen benötigt, kann man leicht mit einer
3.Leitung 2 * 4 EEPROMS ansprechen.
Die Pagesize des AT24C512 ist nicht 64Byte sondern 128Byte (bzw. 256Byte
beim AT24C1024).
Peter
Hi,
da hier immer wieder die Frage nach der Speicherkapazität gefragt wurde
folgende Annahmen/Überlegungen:
Ich nehme mal an, daß ich pro Messintervall 10-20 Byte speichern möchte.
Bei einer Sekundengenauen Auflösung wären das 20*3600 = 7,1 KB. Mit
einem 64 kB-Speicher könnte ich (bei Messung alle 100ms !!!) ca. 54
Minuten Speichern
Das ist mehr als genug !!! Daher 64KB sollten reichen ...
Eine weiter Anforderung habe ich aber noch: Der Speicher sollte ein
DIL-Gehäuse haben. Mit SMD habe ich so meine Probleme ...
Gruß und schonmal Danke für die schnellen Infos bisher !
UBoot-Stocki
Na dann wärst du mit einem AT24C512 als DIP bestens bedient. Allerdings
wüsste ich im Mom nicht wo man die in einzelstückzahlen bekommen könnte.
Reichelt hat glaub ich nix
Hi,
ich habe mir mal das Datenblatt der Atmels reingesaugt. Die scheinen
genau das zu sein, was ich suche !!!
Hat mit denen schon jemand was gemacht ? Wie sind die Erfahrungen? Gibts
vielleicht sogar einen Beispielcode ?
Gruß
Uboot-Stocki