Forum: Compiler & IDEs 2 Byte über SPI empfangen


von DDD85 (Gast)


Lesenswert?

Ich versuche über SPI aus einem MAX1168 2 Byte auszulesen und weiß jetzt 
nicht wie ich das machen soll, da das SPDR ja nur 1 Byte groß ist. Kann 
mir da zufällig jemand weiterhelfen?

von Karl H. (kbuchegg)


Lesenswert?

2 mal hintereinander auslesen und die beiden einzelnen Bytes wieder zum 
16 Bit Wert zusammensetzen.

von DDD85 (Gast)


Lesenswert?

Ih hab es bis jetz so:


void SPI_MasterTransmit()

{

// Start Übertragung

SPDR = CH1;

// Warte bis letztes Bit übertragen wurde

while(!(SPSR & (1<<SPIF)));
CH1_low = SPDR;               // Low-Byte

return 0;
}

Ich weiß jetzt nur nicht wie es nochmal auslesen kann um an das Highbyte 
zu kommen.

von Trolldetektor (Gast)


Lesenswert?

Das ist jetzt nicht dein Ernst, oder?

Schlechtester Trollversuch seit Bestehen des Internets.

von Dimi (Gast)


Lesenswert?

kein Kommentar...
1
void SPI_MasterTransmit()
2
{
3
   SPDR = CH1;
4
   while(!(SPSR & (1<<SPIF)));
5
   CH1_low = SPDR;
6
7
   SPDR = 0xFF;
8
   while(!(SPSR & (1<<SPIF)));
9
   CH1_high = SPDR;
10
11
   return 0;
12
}

von DDD85 (Gast)


Lesenswert?

Dimi schrieb:
> kein Kommentar...
> void SPI_MasterTransmit()
> {
>    SPDR = CH1;
>    while(!(SPSR & (1<<SPIF)));
>    CH1_low = SPDR;
>
>    SPDR = 0xFF;
>    while(!(SPSR & (1<<SPIF)));
>    CH1_high = SPDR;
>
>    return 0;
> }

Danke. Hab nochmal das Datenblatt vom Max1168 durchforstet und gesehen, 
dass man ihn drei mal auslesen muss da das Erste Byte nur 0x00 zurück 
gibt.
Wenn ich ihm dann beim zweiten Byte 0xff sende, dann ändere ich doch die 
Konfiguration des Max1168 oder nicht? Sorry hab von SPI noch nicht 
wirklich den Durchblick.

von Karl H. (kbuchegg)


Lesenswert?

DDD85 schrieb:

> Danke. Hab nochmal das Datenblatt vom Max1168 durchforstet

dann hast du nicht genau genug gelesen.
Das wird mit dem /CS Signal gesteuert.

D.h. für die nachfolgenden Bytes ist es völlig egal was du ihm schickst. 
Du musst nur irgendwas schicken, damit der AVR die Clockpulse generiert, 
die den MAX dazu bringen die weiteren Bytes rauszutakten.

Erst wenn /CS wieder auf High geht, ist das für den MAX das Signal, dass 
da nix mehr kommt. Mit dem nächsten /CS auf Low ziehen, kommt dann das 
nächste Befehlsbyte. Figure 10 im Datenblatt auf Seite 17 und natürlich 
der ganze Text der dort dabeisteht.

von DDD85 (Gast)


Lesenswert?

Danke. Ich hab das Bild echt falsch interpretiert.

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.