JAAAA,
es waren die Werte für $HWStack, $SWStack und $FrameSize! Ich werde sie nun immer in das Programm schreiben!!! Bei meinen bisherigen Programmen war es immer unproblematisch...
$hwstack = 200
$swstack = 200
$framesize = 400
Framesize 400 - dann hab ich Platz: Der String zum schreiben soll ca 80 Zeichen haben - noch ein bisschen Reserve für den Rest... Oder liege ich da voll daneben?
Der erste Test war erfolgreich!!! =D>
keine Datei auf der Karte, Datei mit µC erstellt und Daten rein geschrieben!!! - hat funktioniert!
JUHUUUUU!!!
Jetzt lasse ich den µC mal über Nacht im Sekundentakt schreiben! Wenn er nicht abstürzt wie die letzten Male, mache ich einen Luftsprung vor Freude! \/
Vielen Dank für die unermüdliche Unterstützung!!!
Mein Datenlogger bis jetzt:
Code:'Funktion: 'SD Schreiben, Strings zusammensetzen 'VERSUCH: 8 analog kanäle zu loggen mit Temp umgerechnet 4x pro sekunde 'led grün dauerleuchten - FEHLER -> neu starten 'led grün blitzen: bereit (kurz an) 'led blinken: aufzeichnen (lange an) 'ADC0 = Volt - Akku (mal 6) 'ADC1 = Volt - RC-Empfänger (mal 6) 'ADC2 = Motor TEMP 'ADC3 = Ampere - Akku 'ADC4 = frei 'ADC5 = frei 'ADC6 = frei 'ADC7 = frei 'PC 7 = Sollwert von Empfänger 'PC 6 = von Empfänger für LOGGING $regfile = "M644def.dat" $crystal = 14745600 $hwstack = 200 $swstack = 200 $framesize = 400 $baud = 19200 $include "config_mmc.bas" $include "config_avr-dos.bas" '------------------------------------------------------------------------------- 'Ein- Ausgänge: Ddra = &B00000000 '1 Ausgang, 0 Eingang = Pin PA7-0 'Ddrb = &B00000000 '1 Ausgang, 0 Eingang = Pin PB7-0 Ddrc = &B00000000 '1 Ausgang, 0 Eingang = Pin PC7-0 Ddrd = &B11000000 '1 Ausgang, 0 Eingang = Pin PD7-0 Config Pinb.4 = Output 'CS Config Pinb.6 = Input 'MISO / DO '------------------------------------------------------------------------------- 'Timer1 = 16 Bit Config Timer1 = Timer , Prescale = 256 'Teiler 1/8/64/256/1024 On Timer1 Ontimer1overflow 'Unteprogramm aufrufen Const Timer1vorgabe = 7936 Timer1 = Timer1vorgabe Enable Timer1 'timer einschalten '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'Analogmessung: Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Start Adc 'Starte analog Messung '------------------------------------------------------------------------------- 'Variablen: Dim Tmpbyte As Byte 'zum initialisieren Dim Btemp1 As Byte 'zum initialisieren Dim K0 As Word 'Spannung Akku Dim K00 As Single Dim K000 As String * 4 Dim K1 As Word 'Spannung Empfänger Dim K11 As Single Dim K111 As String * 4 Dim K2 As Integer 'MotorTemp Dim K22 As String * 3 Dim K3 As Word 'Strom Akku Dim K33 As Single Dim K333 As String * 4 Dim K4 As Integer Dim K44 As String * 5 Dim K5 As Integer Dim K55 As String * 5 Dim K6 As Integer Dim K66 As String * 5 Dim K7 As Integer Dim K77 As String * 5 'TEMP NTC: Dim Ohm As Single Dim Temp1 As Single 'wegen den negativen Zahlen!!! Dim Temp2 As Single Dim Temp3 As Single Dim Temp As Single 'Dim Volt As Single Dim Anzahl As Long 'Zähler für schreiben Dim Anzahl_str As String * 6 Dim Zu_schreiben As String * 60 Dim Rec As Byte 'wird von Timer 1 hochgezählt Dim Led As Byte 'Dim Ltemp As Long 'Pointerposition Dim Pulsbreite1 As Word 'Knüppelstellung Knüppel 1 Dim Pulsbreite2 As Word 'Knüppelstellung Knüppel 2 '------------------------------------------------------------------------------- Enable Interrupts Waitms 500 Print "START..." '_______________________________________________________________________________ 'Init MMC/SD Card Tmpbyte = Driveinit() Print "Init: " ; Str(tmpbyte) Print "Trying to read File system..." Btemp1 = Initfilesystem(1) ' Partition 1 Print "Btemp1: " ; Btemp1 If Btemp1 <> 0 Then 'Wenn Fehler Print "Error: " ; Btemp1 ; " beim Initialisieren des Dateisystems" Waitms 500 Print "SD - FEHLER" Goto Fehler Else Print "SD OK" End If 'Wait 1 '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'Hauptprogramm Do...Loop '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- Do Incr Led 'led hochzählen If Led > 10 Then If Pind.5 = 1 Then Portd.7 = 1 'Grüne LED an für ADC einlesen Else Portd.7 = 0 End If Led = 0 'Zähler End If 'Empfänger einlesen Pulsein Pulsbreite1 , Pinc , 7 , 1 'Pulsbreite auslesen (1=High Impuls) 'Knüppel OBEN ' If Pulsbreite1 > 146 And Kanal1o = 0 Then 'wenn Knüppel oben und Kanal1oben=0 dann ' Toggle Ausgang1 'Pin 1 mal schalten (entweder auf Hi oder Low je nach vorherigem zustand) ' Kanal1o = 1 'Variable Kanal1o setzen damit nicht neu getoggled werden kann ' End If 'Analogkanäle einlesen K0 = Getadc(0) 'Wert aus Analogeingang laden K1 = Getadc(1) 'Wert aus Analogeingang laden K2 = Getadc(2) 'Wert aus Analogeingang laden K3 = Getadc(3) 'Wert aus Analogeingang laden K4 = Getadc(4) 'Wert aus Analogeingang laden K5 = Getadc(5) 'Wert aus Analogeingang laden K6 = Getadc(6) 'Wert aus Analogeingang laden K7 = Getadc(7) 'Wert aus Analogeingang laden If Led = 0 Then Toggle Portd.7 'Grüne LED aus für ADC einlesen End If 'Analog umrechnen: 'VOLT K00 = K0 'Gesamtspannung 3,3*6=19,8V -> 19,8V/1024Stufen= 0,0193... K00 = K00 * 0.0193359375 K000 = Fusing(k00 , "##.#") 'VOLT K11 = K1 'Gesamtspannung 3,3*6=19,8V -> 19,8V/1024Stufen= 0,0193... K11 = K11 * 0.0193359375 K111 = Fusing(k11 , "##.#") 'TEMP MESSUNG Ohm = 1.9 * K2 'Analogeingang bei 1020 Ohm = 504 -> 1020/504=2,0238095(24,5°C) (Wert kleiner=Temp größer) 'Temp = 3730 / (Log(1,9*NTC) + 5.59017600439636) - 273 Temp = Log(ohm) 'RECHNEN Temp = Temp + 5.59017600439636 'RECHNEN Temp = 3730 / Temp 'RECHNEN Temp = Temp - 273 'RECHNEN Kelvin in Celsius K22 = Fusing(temp , "##.#") 'STROM K33 = K3 'Gesamtspannung 3,3*6=19,8V -> 19,8V/1024Stufen= 0,0193... K33 = K33 * 0.0193359375 'Analogkanäle formatieren K333 = Fusing(k33 , "##.#") K44 = Str(k4) K44 = Format(k44 , "0000") K55 = Str(k5) K55 = Format(k55 , "0000") K66 = Str(k6) K66 = Format(k66 , "0000") K77 = Str(k7) K77 = Format(k77 , "0000") If Pind.5 = 0 And Rec => 1 Then Incr Anzahl Anzahl_str = Str(anzahl) Anzahl_str = Format(anzahl_str , "000000") 'Alles in einen String fassen Zu_schreiben = Anzahl_str + ";" + K000 + "V;" + K111 + "V;" + K22 + "C;" + K333 + "A;" + K44 + ";" + K55 + ";" + K66 + ";" + K77 Gosub Sd_schreiben Rec = 0 'Variable von Timer zurücksetzen End If Loop '_______________________________________________________________________________ '_______________________________________________________________________________ 'Daten auf SD - Card schreiben: Sd_schreiben: 'Datei öffnen / erstellen wenn nicht vorhanden! Open "LOG.txt" For Append As #1 Print #1 , Zu_schreiben 'Variable auf SD schreiben Print Zu_schreiben 'Variable auf COM / PC anzeigen Close #1 Return 'bei SD Fehler Do Fehler: Print "Fehler!!!" Portd.7 = 1 'Grüne LED blinken für FEHLER Wait 1 Portd.7 = 0 'Grüne LED blinken für FEHLER Wait 1 Loop Ontimer1overflow: Timer1 = Timer1vorgabe Incr Rec If Pind.5 = 1 Then Anzahl = 0 End If Toggle Portd.6 'rote LED Return







Zitieren

Lesezeichen