Forum: Mikrocontroller und Digitale Elektronik PIC24FJ256DA206 Ausgang auf Oszilloskop


von Jana L. (emy_l)


Lesenswert?

Hallo Experten,

im Rahmen meiner Masterarbeit bin ich gezwungen (darf) meinen ersten 
Microcontroller programmieren. Ich nutze den PIC24FJ256DA206, ausgesucht 
nach MCC-Kompatibilität. Nachdem ich MPLAB X IDE und den XC16 Compiler 
heruntergeladen habe, ist das Ziel, den Controller einfach nur 
anzusprechen und an einem Pin auf einem Oszilloskop Nullen und Einsen 
anzeigen zu lassen.


Durch die MCC Software ist der jeweilige Pin als Output gesetzt worden. 
Durch das Eintragen von "RE4=1; RE4=0;" in der while-Schleife kamen 
haufenweise ERRORS. Nach ein bisschen herumsuchen bin ich auf "_RE4=1; 
_RE4=0;" gestoßen, hier werden keine Fehler angezeigt und das Programm 
läuft so durch. Der Controller und der Pickit 3 sind beide erkannt.

Nun meine Frage, warum zeigt das Oszilloskop nichts an? Im Grunde ist 
das ja das einfachste was man machen kann, aber daran scheitere ich 
bereits...

von Teo D. (teoderix)


Lesenswert?

Zeig doch einfach mal was du da gemacht hast. Was mich betrifft, gern 
auch den kompletten Projekt-Ordner. Damit will aber sicher nicht jeder 
was zu tun haben wollen. Die Source-Fils eventuell noch als Zip 
reinstellen.

Statt direkt den Port zu beschreiben (REx=x) wäre es ratsam, das über 
das Latch Register zu machen (read modify write Problem).
Schau mal in das MCC-File, da gibts Macros zu den Ports.
"#define IO_RE4_SetHigh()  _LATE4 = 1"
Low u. Toggel etc. gibts natürlich auch.

von Jana L. (emy_l)


Lesenswert?

Komischerweise habe ich es tatsächlich hinbekommen, allerdings mit 
direktem Ansprechen des Pins.

Aus welchem Grund wäre es ratsam, das über das Latch Register zu machen?

von Teo D. (teoderix)


Lesenswert?

Jana L. schrieb:
> Aus welchem Grund wäre es ratsam, das über das Latch Register zu machen?

Weil immer der gesamte Port eingelesen, geändert und dann 
zurückgeschrieben wird. Wenn es durch die äußere Beschaltung, an einem 
Ausgangs-Pin, die Spannung unter die Low-Schwelle fällt, liest und 
schreibst du da eine null zurück. Schaltest also den Ausgang ungewollt 
auf Low. Daher das Latch lesen, mod. und dieses dann ins Portregister 
schreiben. Das macht aber alles die HW.
Bei Pic's  gibts noch einige "Fallen". Gug mal bei Sprut.de vorbei!

von soso... (Gast)


Angehängte Dateien:

Lesenswert?

Jana L. schrieb:
> Durch die MCC Software ist der jeweilige Pin als Output gesetzt worden.
> Durch das Eintragen von "RE4=1; RE4=0;" in der while-Schleife kamen
> haufenweise ERRORS. Nach ein bisschen herumsuchen bin ich auf "_RE4=1;
> _RE4=0;" gestoßen, hier werden keine Fehler angezeigt und das Programm
> läuft so durch. Der Controller und der Pickit 3 sind beide erkannt.

Zunächst einmal heißen deine Pins RF0, RF1 und so weiter, und du 
sprichst sie über das Register LATF an. In LATF sind ALLE RFx-Pins drin.

Hab dir mal ein Bild angehängt, wie so ein Port aussieht. Im Bild (aus 
dem Datenblatt...) ein Port ohne Analogfunktion.

Das ist aber noch nicht alles. Zunächst musst du sicherstellen, dass die 
Pins digital konfiguriert sind. Dazu gibt es ANSELF (vermutlich).
Also für den Pin PF0:
ANSELFbits.ANSELF0 = 0;
FALLS, ja und nur FALLS der Pin F0 auch analog kann. Bin zu faul um 
Nachzukucken. Der Einfachheit halber:
ANSELF = 0;

Dann musst du den Ausgangstreiber für den digitalen IO auch noch 
einschalten, das machst du mit TRISF.
Für den Pin F0 heißt das:
TRISFbits.TRISF0 = 0;

Dann kannst du den Ausgang schalten mit:
LATFbits.LATF0 = 0;
LATFbits.LATF0 = 1;
Und lesen mit:
VAR = PORTFbits.PORTF0;

Aber das auch nur dann, wenn der Pin keine weiteren Funktionen 
konfiguriert hat. Bei PORT F3 könnte da was mit USB sein, fall dein Chip 
USB hat.

Sei dankbar, dass du einen PIC24 hast. Das ist eine der Sachen, die beim 
PIC24 ausnehmend einfach sind, verglichen mit den üblichen ARMs ;-)

von Teo D. (teoderix)


Lesenswert?

soso... schrieb:
> Aber das auch nur dann, wenn der Pin keine weiteren Funktionen
> konfiguriert hat. Bei PORT F3 könnte da was mit USB sein, fall dein Chip
> USB hat.

Er nutzt doch den Code-Configurator. Da sollte man sowas, eigentlich 
nicht übersehen können. Der Rest klärt sich eigentlich, bei einem 
Blich in die recht gut dokumentierten HeaderFiles.

von soso... (Gast)


Lesenswert?

Teo D. schrieb:
> Er nutzt doch den Code-Configurator.

Aha. Ich muss gestehen, dass ich ihn noch nie benutzt habe. Bei zig 
PIC24 und PIC32-Projekten. Ich hab immer die Datenblätter abgetippt, 
womit ich eigenlich gut gefahren bin. Außer bei USB natürlich.

Weil ich Microchip kenne, würde ich dem generiertem Code sowieso nur 
sehr ...bedingt trauen.

Denn in den USB-Stack für PIC32MX (Peripheral Lib) habe ich die Fehler 
selber herauspfriemeln müssen. Das stärkt das Vertrauen natürlich nicht.

Taugt der Configurator denn was?

von Teo D. (teoderix)


Lesenswert?

soso... schrieb:
> Taugt der Configurator denn was?

War kurz weg...

Ob er was taugt, musst du wissen. Was der generiert, ist halt nicht 
Jedermanns Sache.
Ich hab ihn bisher auch nur bei 18F25Kxx genutzt und da natürlich auch 
nicht alle Module und Varianten. Blödsinniges hat er noch nicht 
generiert, nur mal komplett die Weiterarbeit verweigert.


Ubs. War garnicht abgeschickt. Nu is der alte Text wech... War eh nich 
so wichtig.

: Bearbeitet durch User
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.