-         

Ergebnis 1 bis 8 von 8

Thema: MMC-SD Speicherkarte

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    03.02.2007
    Beiträge
    30

    MMC-SD Speicherkarte

    Anzeige

    Wie kann man mit dem ATMEGA8 entweder die MMC/SD Karte lesen oder schreiben.


    Was muss hier alles beachtet werden.

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    schau mal hier: http://ulrichradig.de/ vielleicht hilft dir das weiter.

    Grüße,
    Hanni
    Grundregeln des Forenpostings:
    1. Nutze niemals die Suchfunktion!
    2. Überprüfe niemals die Topics nach Ähnlichkeiten!
    3. Schreibe alles in hellgelb!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    23.02.2005
    Beiträge
    44
    die antwort ist nicht schlecht, bevor ich diesen thread gefunden habe, hab ich mich auch schon mit der Seite beschäftigt. Ich muss sagen, es hat mir sehr geholfen, bis auf das alles in C geschrieben ist (hier ist das Assembler-Forum). Mich würde es interessieren, wie man das ganze in Assembler schreiben kann, weil ich mir eine höhere effektivität durch das sparen von resourcen (es gibt probleme mit dem RAM im FAT16 system) erhoffe. Ich habe mir deshalb die Ist-Dateien angesehen, bin aber nicht schlau drauß geworden.

    Da ich selber noch Anfänger bin, ist meine Frage, wie kann ich seriell mit nem ATmega8 oder ATmega16 Daten verschicken, bzw. empfangen oder einen Takt an einen Pin legen? Ich hab ne dunkle Ahnung das dass mit nem Timer funktioniert, könnte mir einer vllt einen kleinen Programm Ausschnitt geben, der das macht? (Bitte ausführlich kommentieren) Dann hätt ich den Ansatz um mit der Assembler-Programmierung anzufangen.

    Gruß
    David
    ... was isn hier verkehrt? ... mmh ...

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Wenns bei dem Takt um einen Takt für Schreib und Lese Operationen geht, verwendet man häufig eine kleine Routine die einen Port für kurze Zeit hoch und wieder runter schaltet.

    Also

    Zu übertragendes Bit auf einen Ausgang legen.

    Takt:
    NOP; NOP's für kurze Wartezeit
    NOP
    NOP
    NOP
    SBI PORTB,0; Taktport einschalten
    NOP;Pegel kurz Stehen lassen
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    CBI PORTB,0; Taktport abschalten
    NOP
    NOP
    NOP
    NOP;Nochmal kurz warten
    RET;Rücksrung zum Datenausgabeprogramm

    Nun das nächste Bit auf den Datenport legen und wieder die Taktroutine aufrufen.
    Die Anzahl der NOP's richtet sich nach der möglichen Geschwindigkeit des Ziel Chips und der Taktfrequenz.

    Um einen Dauerhaften gleichbleibenden Takt für Teiler oder ähnliches zu Produzieren würd ich die OC Ausgänge in zusammenarbeit mit den Comparematch Registern eines Timers (Meistens Timer 1) benutzen.

    Wenn der Timer nicht geht kann man auch einen normalen Timer benutzen und eine kleine Soft für einen Pegelwechsel im Timer Overflow Interrupt schreiben.
    Das hat allerdings den Nachteil, das wenn weitere Interupts aktiv sind ein nicht vorhersehbarer Phasenjitter dabei entstehen kann.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    23.02.2005
    Beiträge
    44
    Danke, das war gut verständlich. Nur was meinst du im letzten mit Phasenjitter? Können denn überhaupt andere Interrupts aufgerufen werden, wenn das Timmer-interuppt läuft? Eigentlich doch nicht, oder? Schließlich muss man doch auch "reti" am ende schreiben, damit die anderen Interrupts wieder aufgerufen werden.

    Ist der Befehl NOP, genau ein Takt?
    ... was isn hier verkehrt? ... mmh ...

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Nur was meinst du im letzten mit Phasenjitter? Können denn überhaupt andere Interrupts aufgerufen werden, wenn das Timmer-interupt läuft?
    Richtig!
    Wenn aber gerade ein anderer Interrupt bearbeitet wird wenn ein Overflow Interrupt auftritt ??
    Der Overflow Interrupt muß dann so lange warten, bis der "Fremdinterrupt" komplett abgearbeitet ist.
    Was nichts anderes bedeutet, als dass die Umschaltung des Ports zu früh oder zu spät stattfindet, was sich als Phasenjitter auswirkt.
    Zu viel Code in den Interrupt routinen verschärft das Problem.
    Bei einem Hardwaremäßigen Betrieb wird dieser Effekt nicht auftreten, solange man nicht an den Timerregistern Werte verändert.
    Ich hab auch schon mal bei ganz kritischen Sachen das Interruptflag während eines laufenden Interrupts freigegeben.
    Dabei muss man aber höllisch aufpassen um das Programm nicht zum Absturz zu bringen. Stack Überlauf, sauberes sichern von Registern usw.

    Ich bin mir ziemlich sicher das der Befehl NOP einen Takt braucht.
    Aber schau trotzdem mal im Datenblatt nach.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    23.02.2005
    Beiträge
    44
    Ist es denn schlimm, wenn ein Phasenjitter auftritt? Angenommen ich benutze keine DRAM (der müsste ja nach ~100nS=800Takte aufegefrischt werden MMC-Karte), dann müsste es doch der Schaltung doch egal sein. Sie kann ja nicht denken. Kann man übern Daumen denn Rechnen das eine Zeile ~ ein Takt ist? (keine Subtraktion, und keine Division)

    Gruß
    David

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Bei sowas mach das natürlich nichts aus.

    Es gibt aber Anwendungen die einen Takt mit eine Duty Cycle von genau 50% benötigen. z.B. bestimmte A/D Wandler.
    Und da führt halt Phasenjitter zu Meßfehlern, die man vermeiden könnte.

Berechtigungen

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