Hallo
Ich hab ein Problem mit dem SPI von meinem Mega128. Ich hab am SPI Port einen VNC2 USB-Host Controller und eine SD-Karte. Wenn ich den PinE.6 vom Mega128 auf GND lege welcher der Chipselectpin für den VNC ist funktioniert das Programm einwandfrei und der Controller schreibt alle 10 Sekunden den Wert des LM75 auf die SD-Karte.
Wenn ich aber den PinE.6 auf High lege wird im TeraTerm folgender Fehler ausgegeben:
Init: 225
Trying to read File system...
Btemp1: 227
Error: 227 beim Initialisieren des Dateisystems
SD - FEHLER
Ich hab bereits verifiziert das es am VNC2 liegt, weil der mit den Kommandos nichts anfangen kann und deswegen Mist auf den Bus legt.
Das Problem ist folgendes. Leg ich diesen PinE.6 wieder auf 0 schreibt der Controller trotzdem:
nit: 225
Trying to read File system...
Btemp1: 227
Error: 227 beim Initialisieren des Dateisystems
SD - FEHLER
Erst wenn ich den Controller komplett resete indem ich die Spannung wegnehme läuft das Programm wieder normal ab.
Kann mir einer bei dem Problem helfen?
Hier ist übrigends der Code:
Danke für die Hilfe.Code:'Controller $regfile = "M128def.dat" $crystal = 8000000 $baud = 19200 'Stacks $hwstack = 200 $swstack = 200 $framesize = 400 'TWI konfigurieren Config Sda = Portd.1 Config Scl = Portd.0 Config Twi = 100000 'TWI Frequenz 'Variablen 'RTC Dim _sec As Byte Dim _min As Byte Dim _hour As Byte Dim _weekday As Byte Dim _day As Byte Dim _month As Byte Dim _year As Integer Dim Ds1307w As Byte Dim Ds1307r As Byte 'LM75 Dim Lm75r As Byte Dim Lm75high As Byte Dim Lm75low As Byte Dim Temperatur As Byte 'SD-Karte Dim Zu_schreiben As Byte Dim Tmpbyte As Byte ' Dim Btemp1 As Byte 'Ports Config Pina.3 = Input 'WP Config Pina.2 = Input 'CDI Config Porte.6 = Output 'Chipselect vom USB-Host Pind.0 = 1 'Pull-up Widerstände aktivieren Pina.3 = 1 Pina.2 = 1 Porte.6 = 0 'Adresse der DS1307 Ds1307w = &HD0 'Schreibadresse der RTC Ds1307r = &HD1 'Leseadresse der RTC 'Adresse des LM75 Lm75r = &H9F 'Leseadresse des Temperatursensors 'AVR-DOS einbinden $include "config_mmc.bas" $include "config_avr-dos.bas" 'Unterprogramme Declare Sub Speichern Declare Sub Init Declare Sub Uhrzeit Declare Sub Temperatur 'Voreinstellen der RTC 'Print "Geben sie die korrekten Daten ein:" 'Input "Jahr: " , _year , "Monat: " , _month , "Tag: " , _day 'Print "Geben sie die Uhrzeit ein:" 'Input "Stunde: " , _hour , "Minute: " , _min , "Sekunde: " , _sec 'Einstellen der Zeit '_sec = Makebcd(_sec) '_min = Makebcd(_min) '_hour = Makebcd(_hour) 'I2cstart 'I2cwbyte Ds1307w 'I2cwbyte 0 'I2cwbyte _sec 'I2cwbyte _min 'I2cwbyte _hour 'I2cstop 'Einstellen der Tage '_day = Makebcd(_day) '_month = Makebcd(_month) '_year = Makebcd(_year) 'I2cstart 'I2cwbyte Ds1307w 'I2cwbyte 3 'I2cwbyte _weekday 'I2cwbyte _day 'I2cwbyte _month 'I2cwbyte _year 'I2cstop 'Hauptprogramm Do Call Uhrzeit Call Temperatur Call Init Call Speichern Wait 10 Loop '****************************************************************** 'DS1307 auslesen Sub Uhrzeit I2cstart 'TWI Start I2cwbyte Ds1307w 'Übergabe der Slaveadresse I2cwbyte 0 'Registerzähler wird auf null gesetzt I2cstart 'Zweite Startkondition I2cwbyte Ds1307r 'Übergabe der Leseadresse I2crbyte _sec , Ack 'Auslesen des Sekundenregisters I2crbyte _min , Ack 'Auslesen des Minutenregisters I2crbyte _hour , Ack 'Auslesen des Stundenregisters I2crbyte _weekday , Ack I2crbyte _day , Ack 'Auslesen des Tagesregisters I2crbyte _month , Ack 'Auslesen des Monatsregisters I2crbyte _year , Nack 'Auslesen des Jahresregisters I2cstop 'TWI Stoppkondition _sec = Makedec(_sec) 'Umwandlung des BCD-Codes _min = Makedec(_min) 'in eine Dezimalzahl _hour = Makedec(_hour) _year = Makedec(_year) _month = Makedec(_month) _weekday = Makedec(_weekday) _day = Makedec(_day) End Sub 'LM75 auslesen Sub Temperatur I2cinit I2cstart 'TWI Startkondition I2cwbyte Lm75r 'Übergabe der Leseadresse I2crbyte Lm75high , Ack 'Auslesen des Registers für die Temperatur I2crbyte Lm75low , Nack 'Auslesen des Registers für die Nachkommastelle I2cstop 'TWI Stopkondition If Lm75high > 127 Then Temperatur = Lm75high And 127 Temperatur = Not Temperatur Incr Temperatur Else Temperatur = Lm75high End Sub End If 'SD Karte initialisieren Sub Init Tmpbyte = Driveinit() Print "Init: " ; Str(tmpbyte) Print "Trying to read File system..." Btemp1 = Initfilesystem(1) Print "Btemp1: " ; Btemp1 'Fehlerausgabe If Btemp1 <> 0 Then Print "Error: " ; Btemp1 ; " beim Initialisieren des Dateisystems" Waitms 500 Print "SD - FEHLER" Else Print "SD OK" End If End Sub 'SD Karte beschreiben Sub Speichern Open "LOG.txt" For Append As #1 'Erstellen oder öffnen der Log.txt Datei Print #1 , _day ; "/" ; _month ; "/" ; "20" ; _year ; " " ; _hour ; ":" ; _min ; ":" ; _sec ; " " ; "Temperatur:" ; Temperatur ; "°C" Close #1 Return End Sub
Lesezeichen