Hallo, ich versuche gerade mit einem ATMega16 Daten in eine SC-Card zu schreiben. Dazu wollte ich die Software von Ulrig Radig http://www.ulrichradig.de/home/uploads/File/AVR_MMC_SD/MMC_SD_SourceCode.zip verwenden. Bei Ulrich Radig wird das mit einem ATMega32 gemacht, sollte das auch mit einem ATMega16 funktionieren? Ich habe die mmc.h um die Zeilen: #if defined (_AVR_ATmega16_) #define SPI_DI 6 //Port Pin an dem Data Output der MMC/SD-Karte angeschlossen ist #define SPI_DO 5 //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist #define SPI_Clock 7 //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk) #define MMC_Chip_Select 3 //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist #define SPI_SS 4 //Nicht Benutz muß aber definiert werden #endif erweitert (dachte mir ATMega16 und ATMega32 sind ja Pin-Kompatibel) und einfach einmal ausprobiert. Wenn ich meine Schaltung mit einer SD-Card angesteckt habe, bekomme ich über das UART ausgegeben: Karte gefunden!ŠªÍÑ•µAReady! KarteV–V—‹•¹…ŠªÍÑ•µAReady! Karte gefunden!ŠªÍÑ•µAReady! Karte gefunden!ŠªÍÑ•µAReady! Karte gefunden!ŠªÍÑ•µAReady! KarteV–V—‹•¹…ŠªÍÑ•µAReady! Karte gefunden!ŠªÍÑ•µAReady! KarteV–V—‹•¹…ŠªÍÑ•µAReady! Karte gefunden!ŠªÍÑ•µAReady! Karte gefunden!ŠªÍÑ•µAReady! Karte gefunden!ŠªÍÑ•µAReady! Karte gefunden!ŠªÍÑ•µAReady! KarteV–V—‹•¹…ŠªÍÑ•µAReady! Karte gefunden!ŠªÍÑ•µAReady! Karte gefunden!ŠªÍÑ•µAReady! KarteV–V—‹•¹…ŠªÍÑ•µAReady! Also erstens mit einer Menge Frame Errors auf der seriellen Schnittstelle, da muss noch etwas mit der Takt- bzw. Baudrate faul sein. Ich habe die Taktfrequenz 1000000 eingestellt da ich annehme, der ATMega16 läuft von Hause aus erstmal mit einem internen Takt von 1MHz. Und zweitens scheint das Programm in eine Endlosschleife zu geraten was ich mit nicht erklären kann. Hat jemand von Euch ein paar Tipps für einen blutigen Anfänger? MfG Ralf
>Und zweitens scheint das Programm in eine Endlosschleife zu geraten was >ich mit nicht erklären kann. Der ATMEga32 hat 2kB RAM. Der ATMega16 nur 1kB. Vermutlich schmiert der ab wegen Stacküberlauf.
>da muss noch etwas mit der Takt- bzw. Baudrate faul sein
ja der interne RC Taktgenerator ist so ungenau das eine
Kommunikation über RS232 schwierig bis unmöglich ist!
Verwende einen externen Quarz oder Taktgenerator.
>Der ATMEga32 hat 2kB RAM. Der ATMega16 nur 1kB. Vermutlich >schmiert der ab wegen Stacküberlauf. Ich hab's mit Ulrich Radig's SPI-Routinen und Mikrofat (weiß grad den Link nicht, findst du aber leicht [google, forumsuche]) Is aber ziehmlich voll und funktioniert nur mit wenigen Karten richtig. Besser ist da Holgi's Code. http://www.holger-klabunde.de/avr/avrboard.htm#FullFAT Funktioniert meiner Erfahrung besser. Hab einen Logger mit SD und MEGA16 laufen. Du kannst mit dem MEGA16 nicht den gesammten Funktionsumfang nutzen. MfG J.K.
>Hat jemand von Euch ein paar Tipps für einen blutigen Anfänger?
Ja klar.
Daten auf eine SD Karte zu schreiben benötigt mit
FAT Support immer mindestens 512 Byte RAM.
Ok, es gibt da noch andere Möglichkeiten.
Aber die sind dreckig und umständlich.
Dann kommt noch ein bisschen Verwaltung dazu. Im Endeffekt bleiben
bei einem ATMega16 vieleicht noch 300-400 Byte
für den Rest des Programms übrig. Die bekommt man ganz schnell
mit z.B. langen Textausgaben auf UART oder LCD voll wenn
man Routinen benutzt die Texte aus dem RAM ausgeben.
Bei SD Karte mit FAT schreiben würde ich immer
einen uC mit 2kB RAM nehmen. Da hat man wenigstens
ein bisschen Luft. Es geht auch mit 1kB RAM, aber dann
sollte man schon wissen was man tut.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.