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


von Johannes (menschenskind)


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:
1
void LED_EVENT(unsigned int Speed){
2
3
  
4
    LED_PORT &=~ (1<<LED);     
5
    _delay_ms (Speed);
6
    LED_PORT |= (1<<LED);
7
    _delay_ms (Speed);
8
9
}
10
11
void LED_EVENT2(unsigned char Data, unsigned int Speed){
12
  
13
  LED_EVENT(Speed*10);
14
  LED_EVENT(Speed*10);
15
  _delay_ms (1000);
16
17
  for (int Cnt=7;Cnt>=0;Cnt--){
18
  
19
    if(Data & 0x01)
20
      LED_EVENT(Speed*50);
21
    else 
22
      LED_EVENT(Speed*150);
23
24
    Data = (Data>>1);
25
    _delay_ms (500);
26
  }
27
}

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?

von Johannes (menschenskind)


Lesenswert?

Bei einer anderen SD-Karte erhalte ich: 11111000

Was steckt da dahinter?

von Johannes (menschenskind)


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
1
  for (unsigned int Cnt=8;Cnt>0;Cnt--){
2
  
3
    if(Data & 8)
4
      LED_EVENT(Speed*70);
5
    else 
6
      LED_EVENT(Speed*180);
7
8
    Data = (Data<<1);
9
    _delay_ms (500);
10
  }

von holger (Gast)


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++){

von Johannes (menschenskind)


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.

von Henne (Gast)


Lesenswert?

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

VG,
Hendrik

von Johannes (menschenskind)


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.

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
Noch kein Account? Hier anmelden.