Software SPI - Register lesen

OP #5354045
Lesenswert?

Moin Moin,

irgendwie stehe Ich gerade auf dem Schlauch.
Möchte anstatt einer "if" Abfrage die Bits so einsammeln..
1
uint8_t spiSoftRead( uint8_t byte )
2
{
3
  uint8_t n = 0;
4
  uint8_t ret = 0;
5

6
  /*
7
  *  Adresse zum lesen senden
8
  */
9
  spiSoftWrite( byte );
10

11
  /*
12
  *  Bits einsammeln..
13
  */
14
  for( n = 0 ; n < 8 ; n++ )
15
  {  
16
    ret |= ( ( SPI_MISO_PIN & SPI_MISO_BP ) >> SPI_MISO_BP );
17
    ret<<=1;          
18
  }
19
  
20
  return ret;
21
}
Aber das möchte nicht klappen. Was mache Ich falsch?
Gast #5354098
Lesenswert?

Jan H. schrieb:
> SPI_MISO_BP = (1<<4);
>
> Es geht erstmal nur um die Abfrage was Ich gerade nicht so ganz blicke.

Wie matzetronics schon sagte musst du mit jedem Bit das du
liest auch einmal den Clock toggeln.

Um die If-Abfrage wirst du kaum herumkommen (was auch nicht
sinnvoll ist) da dein Datenbit im Port nicht auf Position
Null steht.

Also dann lieber so:
1
  
2
for( n = 0 ; n < 8 ; n++ )
3
{ 
4
  if  ( ( SPI_MISO_PIN & SPI_MISO_BP ) != 0) ret |= 1;
5
  ret<<=1;
6
  // hier noch den Clock betätigen
7
  // oder vorher, je nach Datenlage ....
8
}
OP #5354145
Lesenswert?

Jan H. schrieb:
> ( ( SPI_MISO_PIN & SPI_MISO_BP ) >> SPI_MISO_BP );
Damit wollte Ich bezwecken, dass das Bit (SPI_MISO_BP) mit dem Port 
(SPI_MISO_PIN) verUNDET wird. Wenn das Bit auf "high" liegt dann soll es 
ganz nach "rechts" geschoben werden, so dass das erste Bit gesetzt ist.
Dann wird weiter geschoben (das ganze 8x) sollte doch so klappen oder?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren