PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Täglich eine neue Datei in der SD Karte kreieren



sato
04.07.2009, 00:37
Hallo

Will hoffen das mir jemand dabei helfen kann
Möchte eine Logdatei in eine SD karte täglich automatisch kreieren
die aus eine 4 stellige Nummer plus das Datum, bestehen soll
Das Datum kann ich von den Uhr Baustein DS1307 lesen und mit der
4 stellige nummer die Dateiname machen
Beispiel: 00021211.09

Habe diesen code geschrieben, aber es klappt nicht
weiss nur nicht was da falsch ist. Hat jemand eine
Idee wie das gemacht werden kann

[Code:]
board$ = "0002"
Month$ = Str(_month)
Day$ = Str(_day)
Year$ = Str(_year)
If Len(Year$) = 1 Then
Year$ = "0" + Year$
End If
'
Logfile$ = board$ + Day$ + Month$ + "." + Year$
'''Beispiel der Dateiname 00021211.09
Print #1 , "Logfile = " ; Logfile$ 'Zweck debug
'
'Fals die Datei noch nicht existiert, eine neue kreieren
If Logfile$ <> Last_logfile$ Then
Open Logfile$ For Output As #9 'Eine leere Datei kreieren
Print #9 , "---Start---" 'Etwas in die Datei schreiben
Flush #9
Close #9
Else
'
Datastr$ = "Hello World"

Open Logfile$ For Append As #9 'Zur Datei anhängen
Print #9 , Datastr$
Flush #9
Close #9
Last_logfile$ = Logfile$ 'Am nächsten Tag eine neue Datei kreieren, dar das Datum sich geändert hat
End If
[/Code:]

Bedanke mich für jede mögliche Hilfe

Mfg
Sato

kolisson
04.07.2009, 03:03
wenn du avr-dos nimmst, solltest du bedenken, das unter dos die dateinamen immer maximal 8zeichen + 3zeichen der extension sein können.
ist halt kein windows

gruss klaus

Jaecko
04.07.2009, 16:05
Zum Dateinamen verkürzen könnte man z.B. statt der 2-Stelligen Monatszahl einen Buchstaben verwenden. Gleiches beim Tag (26 Buchstaben + Rest Zahlen) und schon sind 2 Zeichen gespart.

sato
04.07.2009, 16:42
Hallo

Das lesen von der SD karte funktioniert, das schreiben aber nicht
dis datename habe ich schon getestet. 00021211.009 und 00021211.txt
aber leider ohne Erfolg. Laut debug erkennt das programm das die Datei nicht existiert und



If Logfile$ <> Last_logfile$ Then
Print #1 , "Last_logfile = " ; Last_logfile$

Sfile = Dir(logfile$) 'existiet die Datei?
If Len(sfile) = 0 Then
Open Logfile$ For Output As #9 'Nein, dann eine neue kreieren
Print #9 , "---Start---" 'etwas in die Datei schreieben
Call Blinken (8 , 500) 'fuer debug
Wait 1
Close #9
Call Blinken (4 , 500) 'fuer debug
Wait 1


Nach dem einschalten, blinkt es 8 mal und danach nochmal 4 mal, also
wird erkannt das die Datei nicht existiert und es wird Open logfile$ For Output As #9 ausgefuerht, doch die Datei wird nicht kreiert.
Kann sein weil die Dateiname mit Nummern anfängt? Glaube nicht, aber werde es trotzdem testen.

Fals jemand noch eine idee hat bin ich dankbar

Auf meine Platine
----------Sd Card-------------- Max3392------- Atmega2561
-----5--CLK/SCLK <--------- 2|--------13|----- PortB.1 Sck
-----2--CMD/DI <-------------3|-------12|----- PortB.2 Mosi
-----1--CD/DAT3(CS) <----- 4|-------11|----- PortE.2
-----7--DAT0 --------------> 5|-------10|----- PortB.3 Miso

und in AVRDOS



Const Cmmc_soft = 0
#if Cmmc_soft = 0
' --------- Start of Section for HW-SPI ----------------------------------------
' define Chip-Select Pin
Config Pine.2 = Output ' define here Pin for CS of MMC/SD Card
Mmc_cs Alias Porte.2
Set Mmc_cs

' Define here SS Pin of HW-SPI of the CPU (f.e. Pinb.0 on M128)
' If an other Pin than SS is used for MMC_SS, SS must be set to OUTPUT and high for proper work of SPI
' otherwise AVR starts SPI-SLAVE if SS-Pin is INPUT and goes to LOW
Config Pinb.0 = Output ' define here Pin of SPI SS
Spi_ss Alias Portb.0
Set Spi_ss ' Set SPI-SS to Output and High por Proper work of
' SPI as Master

' HW-SPI is configured to highest Speed
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
' Spsr = 1 ' Double speed on ATMega128
Spiinit ' Init SPI



Gruss
Sato

sato
04.07.2009, 20:36
Hallo

Es hat sich erledigt, ich habe es vergessen in der hauptschleife die SD karte wieder einzuschalten durch den Max3392

Gruss
Sato

kolisson
05.07.2009, 01:07
.. ja und .. SATO ..

lag es nun an den zu langen dateinamen oder an was anderem ?

gruss klaus

sato
05.07.2009, 10:32
Hallo kolisson

Nein an den Dateiname lag es nicht, der ist maximal 12 Zeichen lang
Dar ich als Level Conerter einen Max3392 benutze, der hat ein Pin um es im Tristate modus zu schalten, also die SD karte von den Microcontroller zu trennen. Nach den lesen der konfigurationsdatei hatte ich diesen Pin wieder auf low gesetzt und vergessen später in der Hauptschleife wieder zu aktivieren wenn die Datei kreiert oder mit Daten beschrieben wird.
Das wars

Gruss
Sato

kolisson
05.07.2009, 13:56
danke für die erklärung.

im endeffekt war es ja dann wieder so ein kleiner fehler, den man sich selbst einbrockt.

gruss klaus