- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 10

Thema: Sd Karte in Bascom an Mega 32

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    26

    Sd Karte in Bascom an Mega 32

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen
    Habe mich in den letzten Tagen mit der Anbindung einer SD Karte an einen mega32 beschäftigt. Sd Karte wird erkannt. Jedoch scheitere ich beim auslesen von Sektoren respektive beim initfilesystem bekomme ich diesen Error : Init File System ... Error: 229 at Init file system
    Irgendetwas mit der Karte scheint noch nicht ganz zu stimmen ...
    Ideen ?
    mfg

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    ich habe mal eine rouine geschrieben für den m32 mit code aus diesem forum.
    diese routinen sind zu fuss erstellt, damit man mal sieht bzw erkennt wie eine sd/mmc funktioniert.
    schau dir mal die anschlüsse an und verändere die mal für deinen mmc-anschluss.

    ich habe eine gute zeichnung über das timinig und daten der mmc in pdf-format, danach habe ich mein programm erstellt und viel dazu gelernt. kann ich dir mailen.


    funktioniert super.

    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 64
    $crystal = 8000000
    $baud = 19200
    
    Declare Sub Mc_init()
    Declare Sub Mc_write()
    Declare Sub Mc_read()
    
    Dim Dout As Byte
    Dim Din As Byte
    Dim A As Word
    Dim Cmd(6) As Byte
    Dim Buffer(515) As Byte
    Dim Tmp As Long
    Dim Sector As Long
    
    Mcs Alias Portb.0
    Mosi Alias Portb.1
    Miso Alias Pinb.2
    Sck Alias Portb.3
    
    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Config Pinb.2 = Input
    Config Pinb.3 = Output
    
    
    Waitms 255
    Sector = 0
    
    Buffer(1) = &HFE
    Buffer(514) = &HFF
    Buffer(515) = &HFF
    
    For A = 2 To 513
       Buffer(a) = 76
    Next
    
    Call Mc_init()
    Call Mc_write()
    
    Waitms 500
    For A = 1 To 515
       Buffer(a) = 0
    Next
    
    Call Mc_init()
    Call Mc_read()
    
    For A = 2 To 513
       Print "wert: " ; Buffer(a)
       Waitms 255
    Next
    
    End
    
    Sub Mc_init()
    
       Set Mcs
    
       Dout = &HFF
       For A = 0 To 10
          Shiftout Mosi , Sck , Dout , 1 , 8 , 16
       Next
    
    Anfang:
       Reset Mcs
    
       Cmd(1) = &H40
       Cmd(2) = 0
       Cmd(3) = 0
       Cmd(4) = 0
       Cmd(5) = 0
       Cmd(6) = &H95
       For A = 1 To 6
          Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 16
       Next
    
       For A = 1 To 8
          Reset Sck
          Waitus 10
          Set Sck
          Waitus 10
       Next
    
       Shiftin Miso , Sck , Din , 1 , 8 , 16
       If Din <> 1 Then
          Goto Anfang
       End If
       Print Din
    
    Anfang1:
       Reset Mcs
    
       Cmd(1) = &H41
       Cmd(2) = 0
       Cmd(3) = 0
       Cmd(4) = 0
       Cmd(5) = 0
       Cmd(6) = &HFF
       For A = 1 To 6
          Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 16
       Next
    
       For A = 1 To 8
          Reset Sck
          Waitus 10
          Set Sck
          Waitus 10
       Next
    
       Shiftin Miso , Sck , Din , 1 , 8 , 16
       If Din <> 0 Then
          Goto Anfang1
       End If
       Print Din
    
       Set Mcs
    
    End Sub
    
    Sub Mc_read()
       Set Mcs
    
       Cmd(1) = &H51
       Cmd(2) = 0
       Cmd(3) = 0
       Cmd(4) = 0
       Cmd(5) = 0
       Cmd(6) = &HFF
    
       Shift Sector , Left , 9
    
       Tmp = Sector And &HFF000000
       Shift Tmp , Right , 24
       Cmd(2) = Tmp
    
       Tmp = Sector And &H00FF0000
       Shift Tmp , Right , 16
       Cmd(3) = Tmp
    
       Tmp = Sector And &H0000FF00
       Shift Tmp , Right , 8
       Cmd(4) = Tmp
    
    Anfang3:
       Reset Mcs
    
       For A = 1 To 6
          Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 16
       Next
    
       For A = 1 To 8
          Reset Sck
          Waitus 10
          Set Sck
          Waitus 10
       Next
    
       Shiftin Miso , Sck , Din , 1 , 8 , 16
       If Din <> 0 Then
          Goto Anfang3
       End If
       Print Din
    
       For A = 1 To 16
          Reset Sck
          Waitus 10
          Set Sck
          Waitus 10
       Next
    
       Shiftin Miso , Sck , Din , 1 , 8 , 16
       If Din <> &HFE Then
          Goto Ende
       End If
    
       For A = 2 To 515
          Shiftin Miso , Sck , Din , 1 , 8 , 16
          Buffer(a) = Din
       Next
    
    Ende:
       Waitms 5
    
       Set Mcs
    
    End Sub
    
    Sub Mc_write()
    
       Set Mcs
    
       Cmd(1) = &H58
       Cmd(2) = 0
       Cmd(3) = 0
       Cmd(4) = 0
       Cmd(5) = 0
       Cmd(6) = &HFF
    
       Shift Sector , Left , 9
    
       Tmp = Sector And &HFF000000
       Shift Tmp , Right , 24
       Cmd(2) = Tmp
    
       Tmp = Sector And &H00FF0000
       Shift Tmp , Right , 16
       Cmd(3) = Tmp
    
       Tmp = Sector And &H0000FF00
       Shift Tmp , Right , 8
       Cmd(4) = Tmp
    
    Anfang2:
       Reset Mcs
    
       For A = 1 To 6
          Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 16
       Next
    
       For A = 1 To 8
          Reset Sck
          Waitus 10
          Set Sck
          Waitus 10
       Next
    
       Shiftin Miso , Sck , Din , 1 , 8 , 16
       If Din <> 0 Then
          Goto Anfang2
       End If
       Print Din
    
       For A = 1 To 8
          Reset Sck
          Waitus 10
          Set Sck
          Waitus 10
       Next
    
       For A = 1 To 515
          Dout = Buffer(a)
          Shiftout Mosi , Sck , Dout , 1 , 8 , 16
          Waitus 10
       Next
    
       Waitus 10
       Shiftin Miso , Sck , Din , 1 , 8 , 16
       Print Din
    
       For A = 1 To 8
          Reset Sck
          Waitus 10
          Set Sck
          Waitus 10
       Next
    
       Set Mcs
    
    End Sub

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    26
    Neue Erkenntnisse :
    Heute habe ich es soweit gebracht
    das ist die Ausgabe mit deinem Code sollte es so aussehen??
    1
    0
    0
    224
    1
    0
    0
    wert: 0
    wert: 0
    wert: 0
    wert: 0
    wert: 0
    wert: 0
    wert: 0
    wert: 0

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    hallo fast richtig :

    1
    0
    0
    229
    1
    0
    0
    wert: den du als ascii geladen hast (65 für das a zb usw)

    224 ist eine fehlermeldung.
    schau den code noch einmal durch.
    formatier deine mmc/sd-karte mal neu.
    steck die karte mal bei laufenden betrieb raus und rein , ob sich die zahlenwerte ändern.

    gib mir deine mail dann sende ich dir mal eine grafische zeitendarstellung für eine karte, danach kann man auch sauber programmieren und der erfolg ist da.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    schau nach, ob deine karte genauso amgeklemmt ist, achte auf input und output :

    Mcs Alias Portb.0
    Mosi Alias Portb.1
    Miso Alias Pinb.2
    Sck Alias Portb.3

    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Config Pinb.2 = Input
    Config Pinb.3 = Output

    oder ändere das nach deinem anschluss!!!!!!

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    26
    so hat gestern geklappt nach austausch der vorgeschsalteten dioden als Spannungsversorgung durch einem festspannungsregler..
    Habe im Forum noch das umgeschreibene AVR - DOS gefunden .. Läuft gut.. Nur wird bei mir zwar die angegebene Datei erstellt jedoch steht nichts darin .. ist das normal ?
    mfg

    $regfile = "m32def.dat"
    $crystal = 16000000

    ' Adjust HW Stack, Soft-Stack and Frame size to 128 minimum each!!!

    $baud = 9600

    'Open "Com1:" As Binary As #1 ' use #1 for fs_interpreter
    Config Clock = Soft
    Enable Interrupts
    Config Date = Mdy , Separator = .
    Dim Btemp1 As Byte

    Print "Wait for Drive"

    $include "Config_MMC6.bas"
    ' Include here you driver for Compactflash/HardDisk or other
    '$include "Config_CompactFlash_M128.bas" ' Does drive init too
    '$Include "Config_HardDisk_M128.bas"

    If Gbdriveerror = 0 Then

    ' Include AVR-DOS Configuration and library
    $include "Config_AVR-DOS.BAS"

    Print "Init File System ... ";
    Btemp1 = Initfilesystem(1) ' Partition 1
    ' use 0 for drive without Master boot record
    If Btemp1 <> 0 Then
    Print "Error: " ; Btemp1 ; " at Init file system"
    Else
    Print " OK"
    Print "Filesystem: " ; Gbfilesystem
    Print "FAT Start Sector: " ; Glfatfirstsector
    Print "Root Start Sector: " ; Glrootfirstsector
    Print "Data First Sector: " ; Gldatafirstsector
    Print "Max. Cluster Nummber: " ; Glmaxclusternumber
    Print "Sectors per Cluster: " ; Gbsectorspercluster
    Print "Root Entries: " ; Gwrootentries
    Print "Sectors per FAT: " ; Glsectorsperfat
    Print "Number of FATs: " ; Gbnumberoffats
    Print "Disksize : " ; Disksize() ' show disk size in bytes
    'Print "Disk free: " ; Diskfree()
    Print "File Len: " ; Filelen( "TEST2.TXT") ' show free space too
    End If
    Else
    Print "Error during Drive Init: " ; Gbdriveerror
    End If


    'File erstellen und etwas reinschreiben

    'dim some test variables
    Dim S As String * 60 , Fl As String * 12 , Ff As Byte
    Dim X As Byte
    Dim I As Word
    Dim Sdatetime As String * 18
    Fl = "test.txt"
    S = "test this"

    'Now we are getting to it
    'We can specify a file handle with #1 or #2 etc. or we can ask for a free
    ' file handle with the FreeFile function. It will return a free handle if there is one.

    Ff = Freefile() ' get a file handle

    'With this file handle we refer to a file
    Open Fl For Output As #ff ' open fikle for output
    ' we need to open a file before we can use the file commands
    ' we open it for OUTPUT, INPUT , APPEND or BINARY
    ' In this case we open it for OUTPUT because we want to write to the file.
    ' If the file existed, the file would be overwritten.
    Print #ff , S ' print some data
    Print #ff , S
    Print #ff , S
    Print #ff , "A constant" ; S
    'Testsb Ff
    Close #ff

    Print "fertig"
    End

    ' If you want to test with File-System Interpreter uncomment next line
    '$include "FS_Interpreter.bas"

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    vergess die umgeschriebene avr-dos auf einem atmega32, kauf dir einen atmega644, ist pinkompatibel zum 32ziger, alten raus neuen rein.
    und probier dann das original-dos von Bascom aus, funktioniert tadellos.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    24.01.2006
    Ort
    Kirchdorf a. Inn
    Alter
    53
    Beiträge
    81
    Wenn du AVR-DOS mit dem 32er nutzen willst, gibt's dazu alte Threads zu MMC. Einfach anschauen, probieren ... und wenn's nicht klappt einfach melden.

    gruss,
    wassermann

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    26
    Du wirst wohl den Thread meinen oder?
    https://www.roboternetz.de/phpBB2/ze...t=dos&start=44
    von dort habe ich ja den Source Code aus meinem letzten Post.
    Das Problem ist das zwar die Beispieldokument erstellt wird aber die Variabeln nicht hereingeschrieben werden. Das Dokument bleibt leer.

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    24.01.2006
    Ort
    Kirchdorf a. Inn
    Alter
    53
    Beiträge
    81
    Hi Pascalu,

    das einfache print sollte hier ausreichen. Vielleicht scheitert es auch am ordnungsgemäßen Öffnen und Schliessen.
    Hier gibts auch noch ein paar Info's. Weiss jetzt nicht, ob der Link ("Datenlogger mit MMC Karte") klappt ... mach sowas zum ersten mal.
    https://www.roboternetz.de/phpBB2/ze...ermann&start=0

    Wenn's nicht hilft, einfach nochmal fragen.
    Kleiner Tip:
    Du hast ganz viele includes, die du nicht alle benötigst.
    Beim Initialisieren: benötigst du wirklich alle print?
    Ist es dein ganzes Programm? Nur ein Durchlauf?
    Wenn doch ein Loop ... nicht immer Öffnen und Schliessen!

    gruss,
    wassermann

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress