PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wie funktioniert der PUT-Befehl in diesem Programm?



TobiasBlome
18.01.2009, 13:23
Hallo,
ich baue gerade einen Datenlogger, der die Daten auf einen USB-Stick speichert (FAT / txt Datei). Als USB Host benutze ich den Vinculum-Chip der Firma FTDI.

Leider komme ich mit dem PUT-Befehl nicht klar.
Ich möchte die Messungen hochnummerieren mit der Variable "Messung" als Long.

Wer kann mir also den PUT-Befehl im Zusammenhang mit diesem Programm erklären? Ziel ist es mit dem PUT-Befehl die Variable Messung in die log.txt zu schreiben(mit den anderen Werten zusammen)

vielen Dank, Tobias



'-------------------------------------------------------------------------------
'Konfiguration µC:
$regfile = "m32def.dat" 'AT-Mega32
$crystal = 14745600 'Quarz: 14,7456 MHz
$baud = 9600 'Baudrate definieren

'-------------------------------------------------------------------------------
'Ein- Ausgänge:

Ddra = &B00000000 '1 Ausgang, 0 Eingang = Pin PA7-0
Ddrb = &B11111111 '1 Ausgang, 0 Eingang = Pin PB7-0
Ddrc = &B11111111 '1 Ausgang, 0 Eingang = Pin PC7-0
Ddrd = &B01111111 '1 Ausgang, 0 Eingang = Pin PD7-0

Porta = &B00000000 '1 = Pullup
Portb = &B00000000 '1 = Pullup
Portc = &B11111111 '1 = Pullup
Portd = &B00000000 '1 = Pullup



'-------------------------------------------------------------------------------
'Analogmessung:
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc 'Starte analog Messung

'-------------------------------------------------------------------------------
'Vor Programmstart:

'Enable Interrupts

Start Adc 'Analogmessung starten

'-------------------------------------------------------------------------------
'USB Confi!!!!

Echo Off '///für USB-Stick
Open "com1:" For Binary As #1 '///für USB-Stick

'Dim Samples As Word 'Anzahl der Messungen
Dim Delayms As Long 'Messintervall in ms (Long bis 2.147.483.647)
Dim Channels As Word 'Anzahl der Messkanäle (8Kanäle -> 0-7)
Dim N As Integer
Dim I As Integer
Dim L As Integer
Dim S As String * 20
Dim Ad As Integer
Dim Messung As Long 'anzahl der gemessenen Werte


'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Hauptprogramm Do...Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------


'USB-LOOP
Do
Input S
Loop Until S = "D:\>" 'USB Controller abfragen, bis D:\> gesendet wird

Waitms 1000

Print "rd todo.txt" + Chr(13); 'todo.txt Datei LESEN

Input Delayms 'Wartezeit zwischen den Messungen aus Datei übernehmen
Get #1 , L
Input Channels 'Anzahl der Messkanäle aus Datei übernehmen
Get #1 , L
Input S

Print "OPW Log.txt" + Chr(13); 'Datei Log.txt öffnen
Input S


Do
Toggle Portb.0
Incr Messung
S = ""
For I = 0 To Channels 'Kanäle 0-7 MAX
Ad = Getadc(i)
S = S + Str(ad)
If I < Channels Then S = S + Chr(9)
Next I
S = S + Chr(13) + Chr(10)
L = Len(s) 'gibt die Länge von String "S" wieder
Print "WRF "; 'Befehl um in die geöffnete Datei zu schreiben
Put #1 , 0
Put #1 , 0
Put #1 , 0
Put #1 , L 'L ist die Länge vom String S
Put #1 , 13
Print S ;
Input S
Waitms Delayms 'Wartezeit zwischen den Messungen

Loop Until Pind.7 = 0

Print "CLF log.txt" + Chr(13); 'Datei log.txt schließen
Input S
Portb.0 = 0 'schreib-LED ausschalten
End


'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'ENDE - Hauptprogramm Do...Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------

End

TobiasBlome
18.01.2009, 21:33
andere Frage:

wie groß muss ich den String "S" dimensionieren?
wie zählt man das zusammen?

S = Str(messung) + Chr(9)+ Str(ad)+ Chr(9)+ Str(ad)+ Chr(9)+ Str(ad)+ Chr(9)+ Str(ad)+ Chr(9)+ Str(ad)+ Chr(9)+ Str(ad)+ Chr(9)+ Str(ad)+ Chr(9)+ Str(ad)+ Chr(9)+ Chr(13) + Chr(10)

Messung as Long
ad as Integer

Also zusammengefasst:

1x Messung (Long)
8x ad (Integer)
9x Chr(9)
1x Chr(13)
1x Chr(10)

vielen Dank, Tobias

Andree-HB
18.01.2009, 21:59
...ist ja interessant - ich habe letzte Woche auch den Baustein bekommen, und tue mich generell damit ziemlich schwer....habe aber generell oft Programmierprobleme... ;-)

TobiasBlome
19.01.2009, 16:44
Eigendlich ist der "Baustein" relativ einfach anzusteuern.
Am besten mal an den PC hängen (mit Wandler >zb. max232< dazwischen) und einfach mal die Befehle ausprobieren.

unter http://www.vinculum.com/documents/fwspecs/UM_VinculumFirmware_V205.pdf
gibt es das Datenblatt vom Hersteller mit allen Befehlen.
Die wichtigsten sind eigendlich:
RD <Dateiname.txt> um den ihnhalt einer datei zu lesen
Zum Öffnen, Schreiben und Schließen:
OPW file
WRF dword
CLF file

unterstützt wird das 8.3 Dateinamen-DOSformat

mit DIR kann man den Inhalt desSticks anzeigen lassen.

Einen ausführlichen Artikel gibt es in der ELEKTOR 11/2008 S.42-46

Tobias