Nur 1 Bit mit SPI

OP #3433267
Lesenswert?

Hallo,
bin gerade am entwerfen einer Schaltung mit dem ADS1232 
(DMS-Brückenverstärker). Zum auslesen muss ich 24 Bits also ganz einfach 
3 Bytes lesen, was mit dem Hardware SPI ja keine Kunst ist. Nur muss ich 
noch einen 25 Impuls auf SCKL bringen, damit die Datenleitung vom IC zum 
uC auf High gezogen wird und ich zum abholen neuer Daten nur abzufragen 
brauch ob die Leitung low ist. Ein 26 Impuls leitet aber einen 
Kalibrievorgang ein, womit ich nicht einfach noch ein Byte einlesen 
kann.

Somit zu meiner Frage:
Kann man den Hardware SPI irgendwie überzeugen nur einen Impuls zu 
senden, oder komm ich um eine Softwarelösung nicht rum?

mfg. skyscater
OP #3433358
Lesenswert?

Danke für die schnellen Antworten!

Ups, ganz vergessen. Das ganze geht über einen ATMEGA8.

Das hab ich auch schon überlegt, dachte mir nur dass es villeicht eine 
schönere Lösung gibt, als die SPI jedesmal aus und wieder einzuschalten. 
Nebenbei wisst ihr wieviel Zeit das Einschalten der SPI bis zur 
Betriebsbereitheit in Anspruch nimmt? (Darüber hab ich im Datenblatt nix 
gefunden)
Bzw. bin ich mir nicht ganz sicher ob ich nicht einfach den SCKL-PIN 
während eingeschaltetem SPI ansteuern kann. (ausprobieren kann ichs 
gerade leider nicht).

mfg. skyscater
#3433385
Lesenswert?

Michael Mokricky schrieb:
> Danke für die schnellen Antworten!
>
> Ups, ganz vergessen. Das ganze geht über einen ATMEGA8.
>
> Das hab ich auch schon überlegt, dachte mir nur dass es villeicht eine
> schönere Lösung gibt, als die SPI jedesmal aus und wieder einzuschalten.
> Nebenbei wisst ihr wieviel Zeit das Einschalten der SPI bis zur
> Betriebsbereitheit in Anspruch nimmt? (Darüber hab ich im Datenblatt nix
> gefunden)
Was soll da lange dauern? Enable und los gehts.

> Bzw. bin ich mir nicht ganz sicher ob ich nicht einfach den SCKL-PIN
> während eingeschaltetem SPI ansteuern kann. (ausprobieren kann ichs
> gerade leider nicht).
Solltest du nicht machen.

mfg.
#3433401
Lesenswert?

Im Datenblatt steht:
SCK: Master Clock output, Slave Clock input pin for SPI channel. When 
the SPI is enabled as a
Slave, this pin is configured as an input regardless of the setting of 
DDB5. When the SPI is
enabled as a Master, the data direction of this pin is controlled by 
DDB5. When the pin is forced
by the SPI to be an input, the pull-up can still be controlled by the 
PORTB5 bit.

So könnte es also ohne Abschaltung der SPI gehen:

Ich nehme mal an, das SCK im Ruhezustand low ist:
- PortB Bit 5 setzen // Pull Up setzen
- DDRB Bit 5 rücksetzen  // damit wird der PullUp an SCK sichtbar
- warte deine benötigte Impulslänge ab
- DDRB Bit 5 setzen  // Signal der SPI ist nun am SCK sichtbar

oder das SCK im Ruhezustand high:
- PortB Bit 5 rücksetzen // PullUp abschalten
- DDRB Bit 5 rücksetzen  // damit wird der PullUp an SCK sichtbar
- warte deine benötigte Impulslänge ab
- DDRB Bit 5 setzen  // Signal der SPI ist nun am SCK sichtbar

So funktioniert das natürlich nur, wenn keine zusätzlichen externen 
PullUp oder PullDown Widerstände an SCK angeschlossen sind.
#3433416
Lesenswert?

1
SPCR &= ~(1 << SPE);
2
PORTB ^= (1 << 2);
3
PORTB ^= (1 << 2);
4
SPCR |= (1 << SPE);

Da das Ein- und Ausschalten des Spi sowohl dem Controller als auch dem 
Programmierer alles abverlangt, ist allerdings nachfolgende Lösung 
vorzuziehen:

Detlef Kunz schrieb:
> Im Datenblatt steht:
> SCK: Master Clock output, Slave Clock input pin for SPI channel. When
> the SPI is enabled as a
> Slave, this pin is configured as an input regardless of the setting of
> DDB5. When the SPI is
> enabled as a Master, the data direction of this pin is controlled by
> DDB5. When the pin is forced
> by the SPI to be an input, the pull-up can still be controlled by the
> PORTB5 bit.
>
> So könnte es also ohne Abschaltung der SPI gehen:
>
> Ich nehme mal an, das SCK im Ruhezustand low ist:
> - PortB Bit 5 setzen // Pull Up setzen
> - DDRB Bit 5 rücksetzen  // damit wird der PullUp an SCK sichtbar
> - warte deine benötigte Impulslänge ab
> - DDRB Bit 5 setzen  // Signal der SPI ist nun am SCK sichtbar
>
> oder das SCK im Ruhezustand high:
> - PortB Bit 5 rücksetzen // PullUp abschalten
> - DDRB Bit 5 rücksetzen  // damit wird der PullUp an SCK sichtbar
> - warte deine benötigte Impulslänge ab
> - DDRB Bit 5 setzen  // Signal der SPI ist nun am SCK sichtbar
>
> So funktioniert das natürlich nur, wenn keine zusätzlichen externen
> PullUp oder PullDown Widerstände an SCK angeschlossen sind.

mfg.
Gast #3433438
Lesenswert?

Michael Mokricky schrieb:
> Nebenbei wisst ihr wieviel Zeit das Einschalten der SPI bis zur
> Betriebsbereitheit in Anspruch nimmt?

Ich weiß es zwar nicht, hätte aber geschätzt, daß es einen Taktzyklus 
dauert. Soviel, wie's halt braucht, das Register zu beschreiben. Was 
sollte denn deiner Meinung da irgendwelche Zeit verbrauchen?

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