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...
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.
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?
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!
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 ;-)
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.