Hallo zusammen,
ich habe mal eine Frage und zwar...
Wie kann ich mit dem Atmel etwas auf einer SD Karte speichern.
Bevor wieder irgendwelche blöden Sprüche kommen wie "Die ganze Welt ist ein einziges Google" kann ich schon mal gleich sagen:
JA ich habe bei Google gesucht.
JA ich habe sogar etwas herausgefunden
JA ich habe die Suchfunktion von Roboternetz benutzt
Ja ich weiss in ungefähr, dass man die SD KArte am SPI Bus chließen muss
JA ich habe AVR Dos gefunden und muss sagen das ich dafür kein Geld ausgeben möchte
ABER: Ich komme mit der Programmierung nicht klar. Könntet ihr mir einfach mal ein kleines Beispiel geben?
Vielen Dank,
Hunni
Hallo!Zitat von HansHans
Ja, AVR-Dos ist in der Bascom-Vollversion mit dabei. Man kann es auch direkt von der AVR-Dos-Homepage herunterladen. Und für "Nicht Kommerzielle Nutzung" ist AVR-Dos gratis.
Allerdings braucht man **mindestens** einen ATmega32, besser einen ATmega128, dafür. Und wenn man auf das FAT-Dateisystem verzichten kann und einfach nur Daten, wie bei einem EEPROM, auf die Karte schreiben möchte, dann kann man auf AVR-Dos verzichten und sogar mit einem ATmega8 arbeiten.
- http://www.mcselec.com/index.php?opt...d=20&Itemid=41
- http://members.aon.at/voegel/
- http://www.mcselec.com/index.php?opt...d=87&Itemid=57
- http://www.ulrichradig.de/home/index.php/avr/mmc-sd
- http://staff.ltam.lu/feljc/electroni..._Low_Level.pdf
mfg
Gerold
:-)
Hallo nochmal,
tut mir leid das ich so lange nich geschrieben habe. Ich finde die "free download" version nicht. Da steht zwar oben drüber, dass das Kostenlos ist, aber ich man kann nur die 19,99€ oder 99,99€.
Könnt ihr mir vielleicht ein link geben, wo ich das herbekomme?
Warscheinlich bin ich einfach nur zu dumm dahin zu finden.
Soweit ich das ersehen kann liegt es einer gekauften Version bei.
In der Demo Version ,beschränkt auf 4 K , ist das meiner Meinung nach eh sinnlos.
Gento
ach so!
Nah dann kann ich das ja auch gleich ganz vergessen mit der SD Karte, da ich mit den anderen "No Fat System" nichklar komme.
Hunni
Dann versuch es doch mal mit der einfachen Version, ohne AVR-DOS.
Ich weiß nicht, wieviel dein sonstiger Code ausmacht, aber der hier inklusive Lesen und Schreiben von 1000 Sektoren und Ausgabe auf den UART belegt gerade mal 1492 Byte, also noch viel Platz bis 4K.
Hierbei werden die Sektoren direkt geschrieben. Das reicht für die Ein- und Ausgabe im µC.Code:$regfile = "M128def.dat" $crystal = 16000000 $baud1 = 115200 Open "Com2:" As Binary As #1 Enable Interrupts Dim Mmc_error As Byte Dim In_ptr As Word ' Address-Pointer for read Dim In_sect As Long Dim In_buffer As String * 512 Print #1 , "Wait for Drive" $include "Config_MMC.bas" 'Hier werden als Test die ersten 1000 Sektoren der Karte eingelesen und auf den UART ausgegeben und dann wieder auf die SD geschrieben. In_ptr = Varptr(in_buffer) If Gbdriveerror = 0 Then Mmc_error = Driveinit() If Mmc_error = 0 Then Print #1 , "Driveinit Ok. " For In_sect = 0 To 1000 Mmc_error = Drivereadsector(in_ptr , In_sect) If Mmc_error = 0 Then Print #1 , "ReadSector(" ; In_sect ; ") ok." 'Zum Inhalt drucken, Kommentare entfernen !!!!!!!!!! Print #1 , In_buffer 'Dann wird es aber langsamer, 115200 baud beim übertragen Mmc_error = Drivewritesector(in_ptr , In_sect) Else Print #1 , "Error during ReadSector(" ; In_sect ; ") : " ; Mmc_error End If Next In_sect Else Print #1 , "Error during Driveinit(): " ; Mmc_error End If End If End
Wenn du eine Datei in Windows sehen willst, legst du vorher eine dummy-Datei der benötigten Größe an und schreibst dann deren Sektoren.
Gruß
Rolf
aber ich dachte immer der atmega8 hat nur ein Com, oder liege ich da falsch?
Auch hatte ich gedacht, dass man die SD karte am SPI Bus anscließen muss und nich am Comport.
Ich glaube, ich habe mitleerweile eine andere Lösung gefunden. Ich kann einen USB Stick am Com anschließen und dann mit "Print" befehle auf den USB abspeichern (hoffe ich). Wenn das auch falsch ist, dann lass ich das mit dem Abspeichern, da ich nicht den Quelltext so recht verstehe.
Hunni
Natürlich hat der nur einen COM. Ist halt für meinen Mega128.
Also hier noch mal für deinen Mega8. Ich dachte das könntest du alleine.
Auf die Karte wird nicht über den Com-Port geschrieben, sondern mit der Funktion DriveWriteSector() über SPI. Die Belegung der Anschlüsse ist in der Datei "Config_MMC.bas". Schau es dir mal an. Printen doch nur um das gelesene auch mal zu sehen.Code:$regfile = "M8def.dat" $crystal = 16000000 $baud = 115200 Enable Interrupts Dim Mmc_error As Byte Dim In_ptr As Word ' Address-Pointer for read Dim In_sect As Long Dim In_buffer As String * 512 Print "Wait for Drive" $include "Config_MMC.bas" 'Hier werden als Test die ersten 1000 Sektoren der Karte eingelesen und auf den UART ausgegeben und dann wieder auf die SD geschrieben. In_ptr = Varptr(in_buffer) If Gbdriveerror = 0 Then Mmc_error = Driveinit() If Mmc_error = 0 Then Print "Driveinit Ok. " For In_sect = 0 To 1000 Mmc_error = Drivereadsector(in_ptr , In_sect) If Mmc_error = 0 Then Print "ReadSector(" ; In_sect ; ") ok." 'Zum Inhalt drucken, Kommentare entfernen !!!!!!!!!! Print In_buffer 'Dann wird es aber langsamer, 115200 baud beim übertragen Mmc_error = Drivewritesector(in_ptr , In_sect) Else Print "Error during ReadSector(" ; In_sect ; ") : " ; Mmc_error End If Next In_sect Else Print "Error during Driveinit(): " ; Mmc_error End If End If End
Gruß
Rolf
AHH, ich habe die erleuchtung. jetzt hab ich es verstanden.
Vielen Dank für eure hilfe. Is mir n bissle peinlich wegen atmega 128 und atmega 8. Das hät ich eigentlich auch so sehen können. Jetzt glaub ich weiss ich wie es funktioniert.
Ich hoffe ich kann jetzt auch mal anderen Helfen, da ich noch nich so erfahren bin. Wie gesagt habe ich bisjetzt nur Commodore 64 und QBasic programmiert und wollte jetzt entlich auch mal Atmels proggen.
Vielen Dank noch einmal, die versucht (und auch geschafft) haben mir dies zu erklären.
Hunni
p.s. aber das mit dem USB stick is doch auch garkeine schlechte Idee oder?
Lesezeichen