PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega32 TXD RXD eeprom auslesen



MOsfetgrille
16.10.2009, 19:25
Abend Zusammen,
ICh möchte eine Messreihe von Temperatur in einem atmega speichern.
so alle minute oder mehr temperatur messen und abspeichern
nur wie mache ich das in Bascom?
und was ist besser?
Flash oder eeprom?
Habe die Suche und so schon benutzt allerdings ist mir das alles noch ein wenig unverständlich, va wie ich eine MESSREIHE anlege und diese dann am Pc auswerten kann
würde mich über konkrete programmierbeispiele sehr freuen
MFG
MOsfetgrille

Vitis
16.10.2009, 20:16
öhm ... wie lang soll die Messreihe sein, welche Auflösung, wieviele
Bytes insgesamt ...
Mit Flash meinst Du dann ins Programmflash oder externes Flash?
Selbiges beim EEPROM ... intern oder extern?
Nur die Messwerte oder auch n Zeitstempel?

MOsfetgrille
16.10.2009, 20:51
Hi,
Danke für die schnelle Antwort,
alles intern fürs erste
auflösung : string temperatur z.b. -4,2 °C
mit zeitstempel wäre perfekt allerdings glaube ich das das dann wiederum massig speicher verschwendet oder?
ja also 100 messerwerte solltens schon sein!!
Was ich auch gelesen ahb ist das ma das auch auf sd karte speichern kann!
das soll dann aber erst später sein ich will mich erst einmal einarbeiten bzw sehen wie sich das dann alles ergibt
also ich will meserwerte vom TSic also digitaler temperatursensor einspeichern!
MFG
MOsfetgrille

Besserwessi
16.10.2009, 21:52
Die Werte sollte man binär Speicher, so wie man sie vom Sensor bekommt. Das wird dann vermutlich ein 16 Bit wert (Word oder Integer) sein. Für einen Zeitstempel wäre das dann wohl nochmal 16 Bits.

Damit sollten die 1024 Byte EEPROM im Mega32 für 512 Werte reichen, abzüglich eventuell ein Paar Bytes die man für was anderes (z.B. Schrittweite, Sensor Nr,...) braucht.

Die Umwandlung in eine Zeichenkette sollte man erst vor der Überragung zum PC machen. Das Spart einiges an Speicher.

Es geht mit einer externen SD karte, aber nicht ganz einfach. Die nächst größeren Speicher wären erst mal ein externes EEPROM (1- ca. 64 Kbytes) oder Dataflasch (256 kBytes - ca. 2 MByte). Die sind einfacher anzusteuern als eine SD-karte. Bei der SD Karte könnte man die Daten dann aber auch über die Karte zum PC bringen.

MOsfetgrille
17.10.2009, 08:00
Morgen;
Ja dann werde ich das erst mal mit eeprom versuchen,
Nur wie mach ich das Bascomtechnisch am besten das er mir ned immer den alten string überschreibt?
MFG
MOsfetgrille

Vitis
17.10.2009, 09:57
nee, strings schreibt man nicht ins eeprom ... das ist platzverschwendung.
du gehst einfach hin und nimmst den messwert mal zehn und addierst ein Offset dazu, z.B.

(-4,2 + 20) * 10

Dann geht Dein Messbereich eben bis -20°, die Zehn brauchste für die
Dezimalstelle, dann hast Du nen positiven Wert, den du bequem in 2 Bytes
schreiben kannst. (durch zerlegen der Zwei Ergebnisbytes in highbyte und
Lowbyte). Bei der Übertragung an den PC rechneste die ausgelesenen
Werte einfach wieder rückwärts ( (x/10)-20 ) und schon passts wieder.

Das geht dann am Einfachsten per Writeeeprom und fertig ist die Laube.
Ach so, einen Pointer musste natürlich auch mitzählen lassen wo die neuen
Daten hin sollen.

Ins Programmflash Daten schreiben geht zwar prinzipiell über den Umweg
Bootloader, aber ich glaub Du bist dafür noch nicht weit genug fortgeschritten.

MOsfetgrille
17.10.2009, 10:15
Ja genau so stell ich mir das vor ja eeprom reichts fürs erste völlig aus und das mit der umformung hört sich sehr gut an,
nur bin ich mir der Umsetzung nicht richtig bewusst mit ein paar codeschnipsel wäre mir sehr geholfen!
Nja werd jetz erstmal wieder die Suchmaschinen quälen XD
MFG

021aet04
17.10.2009, 11:11
Den "Codeschnipsel" für die Umwandlung hat Vitis schon geschrieben

Du hast den Wert vom Sensor => Variable x
Wenn der Temp. Bereich vom Sensor z.B. bis -20°C geht und der Sensor 1 Nachkommastelle hat rechnest du

(x+20)*10

Dann hättest du bei z.B. -4,2°C

(-4,2+20)*10=158 => diesen Wert speicherst du

Wenn du den Wert wieder zurückrechnen willst musst du den gespeicherten Wert durch 10 dividieren und die 20 wieder wegrechnen.

Vom obigen Beispiel 158

(158/10)-20=-4,2 => diesen Wert zeigst du z.B. am Display an

MOsfetgrille
17.10.2009, 13:38
japp jetzt läufts!
nur stellt sich mir jetzt die frage wie ich den "datenmüll" am pc auswerte!?
wenn ich mir eXtreme Burner die daten aus dem eeprom auslese is das ja ein .hex file
ich will aber die das messergebnis so wie ich es im atmega gespaichert habe also z.b. (x+20)*10 z.b. 280 für 8 °C
am besten wäre irgend ein programm in dem man gleich einen graphen zeichnen kann!
geht das so?
oder muss ich das mitm nen ft232 über rxd und txd auslesen?
MFG
MOsfetgrille

021aet04
17.10.2009, 14:01
Ich würde am PC en Programm schreiben (Visual Basic, Visual C, LabView,...) indem du einen Befehl an den µC sendest und der µC dir die Daten zurücksendet. In den 3 Programmen ist die RS232 Schnittstelle schon integriert, du brauchst nur mehr die Befehle,... verwenden.

Jaecko
17.10.2009, 14:06
Zum Timestamp ne Idee, wie ichs am Anfang gemacht hab: Ich hab ganz am Anfang nur den Anfangszeitpunkt sowie das Intervall gespeichert; alle anderen Werte hatten dann keine Zeitinformation.
Man konnte die dann einfach ausrechnen durch Startzeit + Intervall * Nummer des Wertes.

Geht halt nur, wenn die Werte immer im gleichen zeitlichen Abstand aufgenommen werden.

Speicher war dort ein externer I2C-EEPROM.

MOsfetgrille
17.10.2009, 14:23
@jaecko, feine idee werd ich dann wahrscheilich auch so machen.
ja aber wie übertrage ich denn ejtzt die daten?
über RXd und txd?
Am einfachsten wird wohl sein, wenn ich mir sie von atemga schicken lasse oder?
@021aet04 das mit visual basic werde ich mal versuchen!
ja ich programmiere über einen usb programmer also ich habe mir den von fischl nachgebaut! dürfte aber kein prob sein oder?

Ach ja und wie mache ich das mit high und low byte am besten?
die direkten daten des Temperatursensors sind in einem Word gespeicher!
Speichertechnisch nicht gut oder?
MFG MOsfetgrille

Vitis
17.10.2009, 15:53
die Zerlegung geht auf verschiedene Weise,

zum Einen softwaretechnisch entweder direkt,

highbyte=high(wordvariable)
lowbyte = low(wordvariable)
oder
highbyte = wordvariable
shift wordvariable,right,8
lowbyte = wordvariable

oder per Variablendeklaration

dim lowbyte as byte at &ha0
dim highbyte as byte at &ha1
dim wordvariable as word at lowbyte overlay

MOsfetgrille
17.10.2009, 16:35
ok, vielen Dank
so und jetzt noch zum Auslesen:
ich habe einen ft232RL, ist das der einfachste weg den eeprom vom atmega und später auch sd karten auszulesen?
MFG

Edit:
HAbe mir gestern noch schnell ne platine für den ft232Rl geätzt,
wird auch wunderbar vom pc erkannt alles suppi, habe den über txd und rxd an den atmega32 angeschlossen aber was nu?
am besten wäre da ein testprogramm oder so weil in in visual basic sogut wie noch garnix gemacht habe
MFG
MOsfetgrille