Forum: Mikrocontroller und Digitale Elektronik warum funktioniert bei SPI output_high nicht richtig?


von Thomas S. (spom)


Lesenswert?

Hallo,
ich verwende bei meinem PIC 18F2480 SPI und einen AD7790. Laut 
Datenblatt des AD7790 soll DIN während des Lesens auf high sein. Daher 
setze ich den entsprechenden PIN am PIC vorher auf high.
1
output_high(PIN_C5);
2
delay_us(50);
3
4
while(!input(PIN_C5))
5
   {
6
   //warten auf PIN_C5 high
7
   };
8
9
data_in = spi_read(0);

Leider lässt sich dieser PIN nicht auf high setzen. Auch am Oszi merkt 
man nichts.

Woran liegt das?

Danke.

von Dieter Werner (Gast)


Lesenswert?

Wenn die SPI Schnittstelle aktiviert ist steuert nur diese die 
zugehörigen Pins.

Der Befehl output_high bleibt dann ohne Wirkung.

von Schoasch (Gast)


Lesenswert?

Hi

Wieso schreibst du nicht einfach 0xFF hinaus?! Denn dass ist immerhin 
Dauer-High ;-)

Achja... noch eine anmerkung
1
output_high(PIN_C5);
2
....
3
input(PIN_C5);

Durch "input(PIN_C5)" wird RC5 als eingang konfiguriert und ist nicht 
mehr als Ausgang eingestellt. dh er geht dann in den Tristate zustand 
über, was du ja nicht wolltest.

Lösungen:
Entweder du benutzt #use FAST_IO und musst deine Tristate-Register immer 
selbst setzen.
Oder du lässt die Spezialfunktionen links liegen und schreibst direkt in 
die jeweiligen Register(dazu musst du dir zuvor noch eine Header 
schreiben.. ist aber nicht kompliziert), was ich dir für weitere 
programme nur ans herzen legen kann.

mfg Schoasch

von Thomas S. (spom)


Lesenswert?

Vielen Dank für diese tollen Ratschläge.

Da ich aber leider nicht so geübt in diesen Dingen bin (man merkt es
auch an meinen Fragen), muss ich leider nochmals nachhaken.
Schoasch, du meintest, ich solle mir eine Header schreiben. Könntest du
mir dazu ein Beispiel geben?
Und wieso 0xFF? Es soll ja nur dieser PIN RC5 high sein. Könntest du das
noch näher erläutern?

Und noch etwas: wie kann ich kontrollieren, ob der Ausgang auf high 
gegangen ist, wenn nicht mit input?

Danke!

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.