PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mega32,alternative zu AVR-DOS, Daten auf mmc Karte speichern



dombatec
27.01.2006, 09:20
Hallo zusammen,
ich suche nach eine weiteren Möglichkeit Daten auf einer MMC-Karte zu speichern. Hierbei handelt es sich um diverse Messwerte.

Nach langen suchem habe ich zu AVR-DOS gelesen das man da nen uC > mega32 benötigt. Verbraucht ganz schön SRAM.
Ich hab mal ein bisschen an den Einstellungen rumgedreht und es fast hinbekommen in den m32 zu biegen.
Hat aber letztendlich doch nicht geklappt.
Eine Idee wäre noch sich sozusagen ein "neues" AVR-DOS zusammenzuschreiben,kopieren mit nur den wirklich benötigten Teilen.
Da weiß ich aber nicht obs dann auch läuft

Die MMC-Karte ist über Software SPI an den mega32 angeschlossen (nach dem Schaltungsaufbau bei http://www.ulrichradig.de bzw wie im AVR-DOS beschrieben). Ich habe mir auch mal den C-Code angeschaut, aber meine Kenntnisse in C sind äußerst bescheiden, eher gegen null.

Hat jemand ne Idee wie ich Daten per software SPI auf die MMC Karte bekomme?
Oder wie ich AVR-DOS in meinem mega32 zum laufen bekomme?


Gruß

Flite
27.01.2006, 09:27
Hallo!

Solange du die Daten nur einfach auf Speicherstellen in der Karte schreiben möchtest, geht das eigentlich relativ einfach. Schwieriger wirds, wenn du die Dateien am PC lesen möchtest (dann musst du ein Dateisystem zusammenschreiben - auch gut möglich, braucht aber viel SRAM und schon ein paar Programmierkenntnisse). Eine Mittellösung wäre hier, die Textdatei, in die geschrieben werden soll am PC zu erzeugen und mit dem Mega32 dann nur noch zu die Textdatei zu ändern.

Für das byteweise Speichern von Daten reicht ein Datenblatt einer MMC Karte aus - darin ist das ganze eigentlich recht gut beschrieben. Fertige Funktionen kann ich dir leider nicht nennen, erst recht keine in Bascom, da ich mich damit nicht auskenne.

Viele Grüße
Flite

dombatec
27.01.2006, 09:43
Hallo Flite,
also vo Grundaufbau her sieht das ganze so aus.
Die Speicherkarte ist FAT32 formatiert. Darauf eine txt oder sonstwas für ne Endung Datei.
Diese möchte ich als typisierte Datei aufbauen. D.h. das die Daten in Strukturierter Reihenfolge gespeichtert werden. Die Daten werden dann später mit Delphi aus der Datei ausgelesen.

Bsp.:
Temp1, Temp2 , Temp3 Druck as single
a,b,c as Byte
h,m,s as Integer

Aufbau in der Datei:
Temp1,Temp2,Temp3,a,b,c,h,m,s;Temp1,Temp2,Temp3,a, b,c,h,m,s;Temp1,Temp2,Temp3,a,b,c,h,m,s


Werde mir mal das Datenblatt zur mmc näher anschauen

Gruß

oe9vfj
30.01.2006, 10:48
AVR-DOS benötigt in der Minimalkonfiguration 1142 Bytes SRAM.
Minimalkonfiguration bedeutet 1 Filehandle sowie dass FAT und Directory in einem Buffer verwaltet werden. Massenspeicher wie Hard-Disk, CF- sowie SD/MMC-Karten sind sektor-orientiert. Während bei HD und CF lesen und schreiben nur mit einem 512Byte-Transferpaket (Sektor) möglich ist, kann bei MMC/SD Karten auch in kleineren Portionen gelesen werden. Schreiben ist auch bei diesen Karten nach den mir vorliegenden Datenblättern nur mit 512Byte-Paketen möglich.
Auf dieses Erfordernis von 512Bytes-Buffer ist AVR-DOS ausgelegt.
In der Minimalkonfiguration ( je ein Sektor von 512Bytes für 1 File bzw FAT/Directory) und einigen weiteren Systemvariablen ergibt sich dieser Speicherbedarf von 1142 Bytes.
Sofern der weitere SRAM-Bedarf der Applikation nicht mehr als etwa 500~600 Bytes beträgt, müsste AVR-DOS auch auf einem Mega32 betreibbar sein.

Eine mögliche Alternative wäre folgendes:
- Formatieren einer Karte damit mit Sicherheit keine anderen Daten gespeichert sind
- Speichern einer ausreichend großen Datei (z.B. nur Blanks) am PC auf die Karte (diese wird dann in fortlaufende Sektoren geschrieben)
- Suchen des 1. Sektors dieser Datei mit einem Disk-Editor. Wenn die Datei mit einer Text-Kennung beginnt, dürfte das Auffinden kein Problem sein.
- Beginnend mit diesem Sektor können dann die im Mikrokontroller erstellten Daten auf die Karte gespeichert werden. Um eine Buffergröße von 512 Bytes kommt man auch hier nicht umhin. Zum Abspeichern von Sektoren auf die Karte stellt BASCOM-AVR entsprechende Befehle zur Verfügung ( Siehe Drive.....). Der entsprechende Kartentreiber muss natürlich auch eingebunden werden.
- Am PC sind dann die Daten in der erstellten 'Platzhalter-Datei' sichtbar.

dombatec
04.02.2006, 16:54
Hallo Josef,
also ich habe jetzt ziemlich viel(tagelang) rumprobiert aber ich bekomme es nicht mal mit der Minimalkonfiguration zum laufen. Hierzu habe ich die "Test_Dos_Drive.bas" von deiner HP verwendet. Alle benötigten Datein sind natürlich in den entsprechenden Ordnern vorhanden.Habe anstatt die "CF_config" die angepasste "config_mmc.bas" eingebungen.
Wenn ich nun folgende letzte Zeile auskommentiere $include "FS_Interpreter.bas" bricht Bascom schon beim compilieren ab und ich erhalte folgende Meldungen:


Error : 61 Line : 35 Label not found [_WORDX2B ] , in File : C:\ELEKTRO\BASCOM\PROJEKTE\AVRDOSTEST\TEST_DOS_DRI VE.BAS
Error : 61 Line : 35 Label not found [_WORDX2B_L ] , in File : C:\ELEKTRO\BASCOM\PROJEKTE\AVRDOSTEST\TEST_DOS_DRI VE.BAS
Error : 61 Line : 35 Label not found [_WORDX2B ] , in File : C:\ELEKTRO\BASCOM\PROJEKTE\AVRDOSTEST\TEST_DOS_DRI VE.BAS
Error : 61 Line : 35 Label not found [_SECTOR2CLUSTER ] , in File : C:\ELEKTRO\BASCOM\PROJEKTE\AVRDOSTEST\TEST_DOS_DRI VE.BAS
Error : 61 Line : 35 Label not found [_CLUSTER2SECTOR ] , in File : C:\ELEKTRO\BASCOM\PROJEKTE\AVRDOSTEST\TEST_DOS_DRI VE.BAS


Hier mal der Quelltext auf Basis der "Test_DOS_Drive.bas":




$regfile = "M128def.dat"
'$regfile = "M32def.dat"
$crystal = 16000000
$hwstack = 128
$swstack = 128
$framesize = 128
$baud1 = 9600

Open "Com1:" As Binary As #1 ' use #1 for fs_interpreter

Config Serialin = Buffered , Size = 20
Config Clock = Soft
Enable Interrupts
Config Date = Dmy , Separator = .

Dim Btemp1 As Byte

Print #1 , "Wait for Drive"
$Include "Config_MMC.bas"
If Gbdriveerror = 0 Then
$Include "Config_AVR-DOS.BAS"
Print #1 , "Init File System ... ";
Btemp1 = Initfilesystem(0) ' Partition 1 use 0 for drive without Master boot record
If Btemp1 <> 0 Then
Print #1 , "Error: " ; Btemp1 ; " at Init file system"
Else
Print #1 , " OK"
End If
Else
Print #1 , "Error during Drive Init: "
End If


' If you want to test with File-System Interpreter uncomment next line
'$Include "FS_Interpreter.bas"


Wenn ich die "FS_Interpreter.bas" wieder mit einbinde compiliert er es.
Mit der Datei lässt es sich für den m32 nicht compilieren(out of sram).

Ich komm einfach nicht weiter. Was mache ich denn falsch?
Wie bekomme ich das ganze zum laufen ohne die "FS_Interpreter.bas"?

Gruß