Was mir gerade noch aufgefallen ist... Ich habe dasin der config_mmc.bas bei mir auskommentiert - weiß aber nicht mehr, warum...Code:Spsr = 1 ' Double speed on ATMega128
Der Kondensator hängt zwischen (VSS1 + VSS2 = Masse) und VDD = 3,3V.
Achja, was noch sehr interessant wäre - wie betreibst du die SD-Karte? Direkte Anschaltung an den AVR, der mit 3,3V betrieben wird oder Adapterschaltung (Widerstände oder Baustein) von 5V auf 3.3V....
Mit Widerständen für die Pegeladaptierung habe ich keine gute Erfahrung gemacht - betreibe den AVR auf 3,3V nur mit kleiner Anpassung an DO der SD-Karte (2x1k Widerstände + 3,3V Z-Diode) für die Programmierung des AVR über SPI.
Dass sich dein Programm nach gewisser Zeit aufhängt ist denke ich irgendein Überlauf einer Variable...
der DS1337 hat einen Sekundentakt (einstellbar) der die die Arbeit mit den Timern dann abnimmt.
Was mir gerade noch aufgefallen ist... Ich habe dasin der config_mmc.bas bei mir auskommentiert - weiß aber nicht mehr, warum...Code:Spsr = 1 ' Double speed on ATMega128
Mein Testaufbau läuft mit 5V und ein Paar Widerständen und Dioden...
später soll alles mit 3,3V Laufen und die SD-Karte soll dann ohne Widerstände direkt an den µC(sollte wohl gehen oder?).
config_mmc.bas hab ich geändert
eine Variable die Überläuft? Also da hab ich ja nur diese beiden die in Frage kommen:
Dim Anzahl As Long
Dim Zu_schreiben As String * 80
Ich werde wohl nächste Woche einen Testaufbau mit 3,3V Spannungsregler machen.
So,
nun hab ich endlich die 3,3V Festspannungsregler Version aufgebaut...
hast du zwischen dem µC und der Karten noch widerstände(als Datenleitung)?
Ja, aber nur am DOAlle anderen Leitungen sind direkt.DO der SD-Karte (2x1k Widerstände + 3,3V Z-Diode) für die Programmierung des AVR über SPI.
Die 2 1k-Widerstände sind in Reihe am DO der Karte zum AVR. Die Z-Diode sitzt zwischen GND und dem Mittenabgriff der zwei Widerstände.
Das Schützt die Karte vor zu hohen Spannungen beim Programmieren am SPI.
Hallo,
auch bei der 3,3V Festspannungsregler Version kann ich keine Dateien erstellen - es ist der selbe Fehler wie zuvor:
wenn die SD Karte leer ist wird die Datei geöffnet, und beim Schreibbefehl ist ende - die Datei wird nicht geschlossen.
Im PC kann ich die erstellte Datei sehen aber sie ist leer.Code:Sd_schreiben: Print "SD OPEN" Open "LOG.txt" For Append As #1 Print Zu_schreiben ''BIS HIER LÄUFT DER CODE'' Print #1 , Zu_schreiben 'Variable auf SD schreiben Print "SD CLOSE" Close #1 Return
Wenn ich die Datei mit dem PC erstelle UND ein Zeichen schreibe kann der µC die Datei öffnen und beschreiben - der Code läuft sauber durch.
Wie kann ich den Fehler weiter eingrenzen?Code:$regfile = "M644def.dat" $crystal = 14745600 '$crystal = 8000000 $baud = 19200 '------------------------------------------------------------------------------- '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 $include "config_mmc.bas" $include "config_avr-dos.bas" '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- '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 * 80 Dim Rec As Bit 'wird von Timer 1 gesetzt Dim Led As Word 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 End If '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'Hauptprogramm Do...Loop '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- Do Incr Led 'led hochzählen If Led > 60000 Then Toggle Portd.6 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 If Led = 0 Then Toggle Portd.7 'Grüne LED aus für ADC einlesen End If If Pind.5 = 1 Then Rec = 1 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 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
Was mir gerade noch spontan einfällt.... Ich hatte damals Probleme (welche weiß ich nicht mehr) als ich die Karte mit FAT16 formatiert hatte. Mit FAT32 hatte ich noch keine Probleme.
weder FAT noch FAT32 funktionieren bei mir...
dann muss ich mich wohl damit zufrieden geben, dass ich erst die Datei mit dem PC erstellen muss, ein Zeichen speichern und dann kann der µC damit arbeiten.
Kann doch nicht sein!
Was ich als letztes noch ausprobieren würde... Einen festgelegten string schreiben -> Print #1, "Test" (Fehler in der Stringzusammenstellung ausschließen) oder vielleicht auch mal einen "geraden" Quarz probieren. Hab hier am M644p mit SD-Karte einen 16000000 Quarz hängen.
Ansonsten... sorry weiß ich auch nicht mehr weiter.
...leider keine Besserung...
ich wiederhole mich:
-ohne Datei auf der Karte -> Absturz nach erstem schreiben
-mit Datei -> alles bestens....
Das Programm hab ich nun gekürzt - kürzer gehts wohl nicht:
Code:'kurzform zum testen $regfile = "M644def.dat" $crystal = 16000000 '$crystal = 14745600 '$crystal = 8000000 '$baud = 19200 '------------------------------------------------------------------------------- '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 $include "config_mmc.bas" $include "config_avr-dos.bas" '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'Variablen: Dim Tmpbyte As Byte 'zum initialisieren Dim Btemp1 As Byte 'zum initialisieren Dim Zu_schreiben As String * 10 '------------------------------------------------------------------------------- Zu_schreiben = "Inhalt" Waitms 500 'ALT: 2 Sekunden '_______________________________________________________________________________ 'Init MMC/SD Card Tmpbyte = Driveinit() Btemp1 = Initfilesystem(1) ' Partition 1 If Btemp1 <> 0 Then 'Wenn Fehler Waitms 500 Goto Fehler End If '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'Hauptprogramm Do...Loop '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- Do Portd.6 = 1 Open "LOG.txt" For Append As #1 Print #1 , Zu_schreiben 'Variable auf SD schreiben Close #1 Portd.6 = 0 Wait 2 Loop '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
Lesezeichen