Hallo und vielen Dank,
die Datei wird nun vom µC erstellt, aber wenn der µC in die Datei schreiben soll stürzt er ab. Wenn ich die erstellte Datei mit dem PC öffne und speicher, kann der µC die Datei öffnen und Daten rein schreiben.
(zu den Abstürzen: der µC bleibt immer(auch wenn ich die Datei mit dem PC erstelle) nach ca. 2,5 Stunden stehen - nur noch die Timer0 LED blinkt im Takt, die der Do...Loop-Schleife blinkt dann nicht mehr)
Muss ich eventuell die Ein-Ausgänge anders einstellen?
Code:$regfile = "M644def.dat" $crystal = 14745600 $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 Bit 'wird von Timer 1 gesetzt 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 'ALT: 2 Sekunden 'Print "START..." 'Toggle Portd.7 'Grüne LED an für 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 ; " at Init file system" Waitms 500 Print "SD - FEHLER" Goto Fehler Else Gosub Datei_erstellen 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 + " mal;" + K000 + "V;" + K111 + "V;" + K22 + "°C;" + K333 + "A;" + K44 + ";" + K55 + ";" + K66 + ";" + K77 Gosub Sd_schreiben Rec = 0 'Variable von Timer zurücksetzen End If 'Print "Wait250msec" 'Waitms 1000 Loop '_______________________________________________________________________________ '_______________________________________________________________________________ 'Daten auf SD - Card schreiben: Datei_erstellen: Print "Datei erstellen..." 'Datei wird erstellt oder überschrieben!!!! Open "LOG.txt" For Append As #1 'Print #1 , "Datenlogger 1000 SD" 'Variable auf SD schreiben 'Print "LOF: " ; Lof(#1) ; " Zeichen gesamt" 'Print Loc(#1) ; "LOC" 'aktuelle Stelle von wo gelesen / geschrieben wird Close #1 'Datei schließen Print "Datei erstellt und geschlossen" Return Sd_schreiben: ''Portd.7 = 1 'led grün an für schreiben 'Datei öffnen Open "LOG.txt" For Binary As #1 'Print "LOF: " ; Lof(#1) ; " Zeichen insgesamt" Ltemp = Lof(#1) + 1 'Stelle festlegen von wo geschrieben wird Seek #1 , Ltemp 'set the filepointer 'Print Ltemp ; " = Ltemp" Print #1 , Zu_schreiben 'Variable auf SD schreiben Print Zu_schreiben 'Variable auf COM / PC anzeigen Close #1 ''Portd.7 = 0 'led grün aus für schreiben beendet Return 'bei SD Fehler Do 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 Rec = 1 If Pind.5 = 1 Then Anzahl = 0 End If Toggle Portd.6 'rote LED Return






Zitieren

Lesezeichen