mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Selfmade-Debugger für SD-Initialisierung Problem


Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

Ich habe auf meiner Platine eine LED und mittels folgender Funktion 
lasse ich mir die 8bit-Antwort der SD-Karte durch Blinken ausgeben:
void LED_EVENT(unsigned int Speed){

  
    LED_PORT &=~ (1<<LED);     
    _delay_ms (Speed);
    LED_PORT |= (1<<LED);
    _delay_ms (Speed);

}

void LED_EVENT2(unsigned char Data, unsigned int Speed){
  
  LED_EVENT(Speed*10);
  LED_EVENT(Speed*10);
  _delay_ms (1000);

  for (int Cnt=7;Cnt>=0;Cnt--){
  
    if(Data & 0x01)
      LED_EVENT(Speed*50);
    else 
      LED_EVENT(Speed*150);

    Data = (Data>>1);
    _delay_ms (500);
  }
}

Die Antwort einer SD-Karte nach dem Senden von Command 0 sollte, so wie 
ich es verstanden habe, 00000001 sein.

Meine LED blinkt aber nun so, dass 11111110 rauskommt.

Also kurz Blinken ist ne 1 und lang Blinken eine 0.

Was mach ich falsch?

Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei einer anderen SD-Karte erhalte ich: 11111000

Was steckt da dahinter?

Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnt ihr mir mal ganz kurz aufschlüsseln, was folgende Funktion macht, 
wenn Data= 0b00000001 ist?
Ich will wissen, ob ich nen Denkfehler hab.
danke
  for (unsigned int Cnt=8;Cnt>0;Cnt--){
  
    if(Data & 8)
      LED_EVENT(Speed*70);
    else 
      LED_EVENT(Speed*180);

    Data = (Data<<1);
    _delay_ms (500);
  }

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich will wissen, ob ich nen Denkfehler hab.
>danke

Ja, hast du.

    if(Data & 0x80)

Und wieso zählst du rückwärts?

  for (unsigned char Cnt=0;Cnt<8;Cnt++){

Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem 0x80 hatte ich ja vorher auch, dann habe ich aber im Forum 
gelesen, dass man mit Data & 8 direkt prüfen kann, ob Bit 8 gesetzt ist.

Die Zählrichtung ist ja prinzipiell egal nur hab ich das so gemacht, 
weil ich ja mit Bit 8 anfange.

Autor: Henne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ein byte geht von bit0 bis bit7. Du meinst deshalb wohl (1<<7)

VG,
Hendrik

Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
;-) das mit de 7 und der 8 passiert mir echt ständig...

aber mit (1<<7) wird ja eine 1 um 7 Stellen verschoben.
Als Abfrage kenn ich das nicht, aber klär mich doch auf.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.