www.mikrocontroller.net

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


Autor: Thomas S. (spom)
Datum:

Bewertung
0 lesenswert
nicht 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.
output_high(PIN_C5);
delay_us(50);

while(!input(PIN_C5))
   {
   //warten auf PIN_C5 high
   };

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.

Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die SPI Schnittstelle aktiviert ist steuert nur diese die 
zugehörigen Pins.

Der Befehl output_high bleibt dann ohne Wirkung.

Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Achja... noch eine anmerkung
output_high(PIN_C5);
....
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

Autor: Thomas S. (spom)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.