- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 29

Thema: Datei auf SD Karte mit AVR Dos erstellen?

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    11.02.2010
    Beiträge
    29
    Anzeige

    Powerstation Test
    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.

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    11.02.2010
    Beiträge
    29
    Was mir gerade noch aufgefallen ist... Ich habe das
    Code:
      Spsr = 1                                                 ' Double speed on ATMega128
    in der config_mmc.bas bei mir auskommentiert - weiß aber nicht mehr, warum...

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    95
    Beiträge
    627
    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.

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    95
    Beiträge
    627
    So,
    nun hab ich endlich die 3,3V Festspannungsregler Version aufgebaut...

    hast du zwischen dem µC und der Karten noch widerstände(als Datenleitung)?

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    11.02.2010
    Beiträge
    29
    Ja, aber nur am DO
    DO der SD-Karte (2x1k Widerstände + 3,3V Z-Diode) für die Programmierung des AVR über SPI.
    Alle anderen Leitungen sind direkt.
    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.

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    95
    Beiträge
    627
    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.

    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
    Im PC kann ich die erstellte Datei sehen aber sie ist leer.

    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.

    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
    Wie kann ich den Fehler weiter eingrenzen?

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    11.02.2010
    Beiträge
    29
    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.

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    95
    Beiträge
    627
    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.

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    11.02.2010
    Beiträge
    29
    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.

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    95
    Beiträge
    627
    ...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

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests