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
Michael Mokricky schrieb: > 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? Nein. Was hindert dich daran den Spi abzuschalten, einmal am Clockpin zu wackeln und dann wieder auf Spi zu schalten? Und nein, das ist nicht kompliziert. mfg.
Michael Mokricky schrieb: > Kann man den Hardware SPI irgendwie überzeugen nur einen Impuls zu > senden, oder komm ich um eine Softwarelösung nicht rum? Einen einzelnen Impuls per Software zu erzeugen, kann doch nicht so schwer sein. Spezielle Anforderungen erfordern manchmal spezielle Lösungen.
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
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.
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.
:
Bearbeitet durch User
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.