Forum: Mikrocontroller und Digitale Elektronik SPI - SS Pin


von Loomit (Gast)


Lesenswert?

Hallo zusammen,

ich arbeite mit dem ATMega128 und möchte den SS Pin des Controllers 
nicht als CS für den Slave nutzen.

Jetzt habe ich den SS Pin (PB0) als Ausgang definiert, wie es im 
Datenblatt geschrieben steht. Da steht auch, dass diese Einstellung 
keinen weiteren Einfluss hat.

Allerdings kann ich dann die anderen Pins von PORTB, die ich als 
Ausgänge konfiguriert habe, nicht mehr setzen.

Ist das normal??

MfG

Loomit

von Gerhard G. (g_g)


Lesenswert?

Hallo,

in dieser Form sollten doch die anderen Ports auch funktionieren.

DDRB=(1 << LCD_RST) | (1 << LCD_A0) | (1 << SPI_MOSI) | (1 << SPI_SCK) | 
(1 << LCD_CS);

zum Beispiel:

PORTB &=~(1<<SPI_MISO); //low

PORTB = (1<<SPI_MISO); // high

oder

PORTB &=~(1<< 0); //low

PORTB = (1<< 0); // high

von J.-u. G. (juwe)


Lesenswert?

Loomit schrieb:
> Allerdings kann ich dann die anderen Pins von PORTB, die ich als
> Ausgänge konfiguriert habe, nicht mehr setzen.
>
> Ist das normal??

Nein, das ist nicht normal. Da wird wohl ein Fehler in Deiner Software 
vorliegen.

G. G. schrieb:
> PORTB = (1<<SPI_MISO); // high

> PORTB = (1<< 0); // high

Nein, so geht das eben nicht. Auf diese Weise wird zwar PB0 auf "High", 
aber alle anderen auf "Low" gesetzt und genau das will man im 
Allgemeinen nicht. Deshalb:
1
PORTB |= ( 1<<PB0 )

von Gerhard G. (g_g)


Lesenswert?

Hallo,

du hast recht, das Selbe wollte ich auch bezwecken, mit mehrmaligen 
kopieren ist mir das Missgeschick  dann doch gelungen.



Gruß G.G.

von J.-u. G. (juwe)


Lesenswert?

G. G. schrieb:
> as Selbe wollte ich auch bezwecken, mit mehrmaligen
> kopieren ist mir das Missgeschick  dann doch gelungen.

Hab ich mir schon gedacht, denn die Anweisungen zum Low-setzen waren ja 
richtig. :)

von Loomit (Gast)


Lesenswert?

Das hatte ich mir schon gedacht, dass das nicht normal ist.
Aber ich habe die Pins für die SPI-Schnittstelle folgendermaßen 
konfiguriert:
1
DDRB |= (1<<DD_MOSI) | (1<<DD_SCK) | (1<<DD_SS); // DD_SS = 0

Dann habe ich die Pins 4-7 noch als Ausgänge konfiguriert, da ich diese 
noch benötige.
1
DDRB |= (1<<DD4) | (1<<DD5) | (1<<DD6) | (1<<DD7);

Mit dieser Konfiguration kann ich diese Pins nicht setzen, sobald ich 
aber den Teil (1<<DD_SS) wo ich PB0 als Ausgang deklariere entferne, 
funktioniert es.

Ich kann mir das nicht erklären warum.

von Thomas E. (thomase)


Lesenswert?

Loomit schrieb:
> Ich kann mir das nicht erklären warum.
103-Fuse?

mfg.

von Loomit (Gast)


Lesenswert?

>103-Fuse?

Negativ, hatte ich auch schon vermutet.

von spess53 (Gast)


Lesenswert?

Hi

>> Ich kann mir das nicht erklären warum.
>103-Fuse?

Hat keinen Einfluss auf PortB.

MfG Spess

von J.-u. G. (juwe)


Lesenswert?

Loomit schrieb:
> Ich kann mir das nicht erklären warum.

Wie bereits oben angemerkt: Da wird wohl ein Fehler in Deiner Software
vorliegen.

Ohne mehr von Deinem Code zu sehen, können wir Dir nicht weiterhelfen.

von Loomit (Gast)


Lesenswert?

Vielen Dank für die Hilfe Leute, habe das Problem gelöst...war natürlich 
ein Software Fehler!

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.