Forum: Mikrocontroller und Digitale Elektronik PIC24F128Gb110 - SPI1 Buffer Problemm


von Roman F. (Firma: DHBW Ravensburg) (chevellino)


Lesenswert?

Servus Leute!!

Vielleicht kann einer von euch uns bei unserem Dilemma weiterhelfen.

Und zwar haben wir einen ADC am SPI1 hängen und einen temp. Sensor am 
SPI2.

Als wir uns mit dem SPI2 beschäftigten, haben wir alles einwandfrei 
umgesetzt. Alle Pegel mit einem Logic Analyser überprüft usw.

Nun haben wir heute die ganze Zeit versucht den ADC aus zu lesen. Das 
Kuriose dabei ist, dass wir genau so logisch und hand in hand mit den 
Datenblättern vorangegangen sind, aber es funktioniert nicht.

Nun beschreibe ich dsa mal genauer.

Der ADC hat 2 Kanäle, die er uns wandeln soll. Wir teilen ihm mit, 
welchen er uns wandeln soll, und beim nächsten Wandeln, übernimmt er die 
Einstellung und macht es.

SO, nun haben wir alle Pegel mit dem logic Analyser geprüft und unsere 
Nachricht kommt beim AD Wandler an. Der reagiert auch folgerichtig auf 
unseren Code und sendet auch die Spannungswerte korrekt gewandelt 
(abweichung ab der 4. Kommastele). Dies haben wir anhand der 
Takt-Flanken und der D-Out-Nachricht vom Wandler selbst entschlüsselt, 
bzw. nach gerechnet, was er da eigentlich sendet.

ABER, obwohl die Daten beim PIN 26, RP6 also, anliegen, steht im SPI1BUF 
nur 0x0000 drin. OBWOHL das Flag, welches besagt, dass die Daten 
empfangen wurden, auch gesetzt wird. Sonst würden wir ja die While 
Schleife nie verlassen können.

Was kann das sein??? Sind heute schier verzweifelt.

Nochmal: Die DAten liegen am PIN 26 an (sehen wir am LA), Die Daten 
werden auch empfangen, sind aber alle gleich 0x0000.

Viele Grüße,
Roman

von holger (Gast)


Lesenswert?

>Nochmal: Die DAten liegen am PIN 26 an (sehen wir am LA), Die Daten
>werden auch empfangen, sind aber alle gleich 0x0000.

Dann werden sie nicht korrekt empfangen. So einfach ist das.
Check deinen Code. Da ist ein Fehler drin. Richtiger SPI
Mode gewählt?

von Michael H. (morph1)


Lesenswert?

2 grundlegende Probleme: a) bei SPI kann der Slave nicht aktiv senden, 
er kann nur Antworten
b) egal ob der PIC nun richtig konfiguriert ist oder nicht, es gilt 
Punkt a) und damit ist 0x0000 gültig.

d.h.: Erstmal die PPS Konfiguration überprüfen, die TRIS Register 
nachprüfen (Pins die per PPS konfiguriert werden sollen müssen auf 1 
stehen), die Analog-Register nachprüfen (der Pin muss auf Digital 
stehen!).

Rein gefühlsmäßig würde ich auf die Analog-Konfiguration tippen, der Pin 
ist nämlich analogfähig :)

Viel Erfolg.

von Roman F. (Firma: DHBW Ravensburg) (chevellino)


Lesenswert?

Hallo Holger,

so dämlich können wir doch unmöglich sein... :-(

Wir warten bis die Daten empfangen wurden in der while schleife, dann 
lesen wir den aus und da stehen nur nullen drin.

Was genau meinst du mit dem SPI Mode? Wir verwenden den 16 Bit Mode, der 
AD-Wandler schickt uns 12 Bits zu.

Meinst du den Pegel bei LOW und Pegel bei HIGH? Denke schon, dass es 
richtig ist. Aus dem ADC Datenblatt sieht man die idle pegel, 
entsprechend haben wir es konfiguriert.

Kann es irgendwie mit den PORT-Einstellungen des PICs selbst nicht 
passen vielleicht? Das er den PIN immer auf low hällt? Wir können wir 
das ändern?

Bin grad voll müde und total schlapp.

Vielen dank,
Roman

von usuru (Gast)


Lesenswert?

sind die Pins richtig gemappt?

von Roman (Gast)


Lesenswert?

Hi,

jupp, denn es wird auch ins BUFFER was geschrieben, und dann der 
entsprechende Flag gesetzt.

Was hat es mit dem Analogen Pin auf sich und wo schalte ich das um? 
Finds irgendwie nicht :-(

Wir hatten auch dann RB36 gemappt, und das selbe REsultat. Ist der auch 
analog?

Grüße,
Roman

von usuru (Gast)


Lesenswert?

Register ANSEL und ANSELH

von usuru (Gast)


Lesenswert?

> Register ANSEL und ANSELH

Pardon, war im falschen Datenblatt (habe gerade 3 Stück geöffnet)
-> AD1PCFGl und AD1PCFGH

von Roman (Gast)


Lesenswert?

JeA!!

ALso AD1PCFGbits.PCFG6=1; war die lösung. --> Den Pin auf Digital 
umschalten.

Danke sehr,
Roman

von Roman (Gast)


Lesenswert?

Hallo Leute!!

Also nach dem fast perfektem Feinschliff können wir endlich unsere Daten 
am bildschirm ausgeben, aber das nächste Problem lies nicht lange auf 
sich warten.

Kann uns einer sagen, wie wir ohne "POW" und "SQRT" aus der math.h 
solche Aufgaben wie: hoch 2/7 usw. rechnen können???

pow rundet abartigst.

Hat da einer einen Rat?

Grüße,
Roman

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.