Hallo,
die Sub Datei_erstellen habe ich nun weggelassen. Die Datei wird erstellt, aber der µC kann nicht reinschreiben.
beim 1ten schreiben schein alles in Ordnung doch beim 2ten Schreibefehl (Print #1 , Zu_schreiben) bleibt das Programm stehen. (hab zum testen alles über RS232 an den PC gesendet)
Erst wenn ich ein Zeichen mit dem PC in die Datei schreibe und speicher kann auch der µC mit:
Open "LOG.txt" For append As #1
dazu schreiben.
Wie kann ich den Fehler besser suchen?
ps ich habe das Programm nun gekürzt und alle Messungen / Rechnungen weggelassen
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 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 Pulsbreite1 As Word 'Knüppelstellung Knüppel 1
Dim Pulsbreite2 As Word 'Knüppelstellung Knüppel 2
'-------------------------------------------------------------------------------
Enable Interrupts
Waitms 500 'ALT: 2 Sekunden
'_______________________________________________________________________________
'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
Print "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
Print "LED"
If Led = 0 Then
Toggle Portd.7 'Grüne LED aus für ADC einlesen
End If
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
Print "gehe zu SD schreiben"
Gosub Sd_schreiben
Rec = 0 'Variable von Timer zurücksetzen
End If
Print "loop"
Loop
'_______________________________________________________________________________
'_______________________________________________________________________________
'Daten auf SD - Card schreiben:
Sd_schreiben:
Print "SD OPEN"
Open "LOG.txt" For Append As #1
Print Zu_schreiben 'Variable auf COM / PC anzeigen
Print #1 , Zu_schreiben 'Variable auf SD schreiben
Print "SD CLOSE"
Close #1
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
Lesezeichen