Hallo, ich habe ein Programm für einen PIC16f876A geschrieben (CC5X Compiler). Nun wollte ich für die gleiche Schaltung den zufällig Pin gleichen PIC 18f2550 benutzen (C18 Compiler). Doch leider funktioniert die Schaltung nichtmehr, obwohl ich den neuen µC meiner Meinung nach genauso konfiguriert habe wie den alten. Hat vllt. jemand einen Tipp für mich, woran es liegen könnte, ich meine damit z.B. Unterschiede in der PIN Ansteuerung..., die ich nach Stundenlanger Datenblattsuche vllt. doch übersehen haben könnte... Danke im Vorraus MFG
Hallo Klaus, beschreib mal genauer, wie Du Deine Portierung auf den 18F2550 vorgenommen hast. Die 16er und 18er unterscheiden sich im Core und sind aufgrund der komplexeren Hardware bei weitem nicht mehr so simpel in Betrieb zu nehmen. Soviel vorab: CC5x kann keinen Binärcode für 18er generieren, du kommst um einen Port auf z.B. C18 nicht herum.
Hallo Marcus, ich möchte alle PINs digital benutzen: ADCON1 = 0x0F; // Port A auf Digital umstellen LATA = 0x00; // Port A rücksetzen LATB = 0xFF; // Port B rücksetzen LATC = 0x00; // Port C rücksetzen TRISA = 0x00; // Port A alles Ausgänge TRISB = 0xFF; // Port B alles Eingänge TRISC = 0x00; // Port C alles Ausgänge Es kann eigentlich nur ein Software (wahrscheinlich Konfigurations-bedingtes) Problem sein. Denn dass die Platine einwandfrei funktioniert beweißt ja der PIC 16. MFG
Hallo Klaus, hier ein paar Stichworte: C18 Compiler zur Erstellung des Binärcodes für die neue Zielplattform verwendet ? Unterschied PORT/LAT verstanden und umgesetzt ? Interupt-Prioritäten verstanden und umgesetzt ? Wie stellst Du fest daß die Schaltung nicht funktioniert ? ( Nein, "geht nicht" ist keine gute Diagnose ) Oszillator richtig konfiguriert ( Achtung Falle: OSCON muss in Software gesetzt werden ! ) Mein Tipp: Testprogramm schreiben, und auf der neuen Plattform zum laufen bekommen, erst DANN an die Portierung gehen. Viele Grüsse, viel Erfolg, Marcus
Läuft der PIC denn? ich hatte auch ein ähnliches Problem beim Umstieg von 16f auf 18f, bei mir war die Problemlösung die Fuses richtig einzustellen, da sie doch etwas unterschiedlich sind. Desweiteren was mir aufgefallen ist: Bin mir nicht sicher aber musst du nicht auch noch die Komperatoren abschalten bevor du die Pins verwenden kannst? (CMCON) ist zumindest im Datenblatt so aufgeführt.
Hallo, @ Marcus: - Ja ich benutze den C18 Compiler - Der Unterschied zwischen PORT & LAT ist mir bekannt - Ja die Interupt-Prioritäten sind mir bekannt und funktionieren auch wie gewollt - Das die Schaltung nicht wie gewollt funktioniert macht sich durch die Anzeigebilder der LEDs bemerkbar > Oszillator richtig konfiguriert ( Achtung Falle: OSCON muss in Software > gesetzt werden ! ) Was du damit meinst verstehe ich jedoch nicht, was müsste ich ändern? @ Tobi: CMCON ist (laut meinem Datenblatt) von anfang an auf "Digital" parametriet. So: Wie ist die Schreibweise um einem Byte einen Binären Wert zuzuweißen? Bisher dachte ich so, aber das scheint nicht zu stimmen: BYTE = 0000.0000; MFG
..schau Dir mal das Datenblatt Seite 25ff. an, je nach gewünschter Oszillator-Konfiguration musst Du das OSCCON-Register setzen. Dieses Register ist nicht auf die Konfigurationsbits 'rausgeführt. Deswegen musst und darfst Du dieses Register zur Laufzeit einstellen. Es scheint so zu sein, daß der Controller zwar arbeitet, aber nicht das tut was Du erwartest ? Verwendest Du Eingangsseitig ein asynchrones Protokoll, das auf einen ordentlich eingestellten Takt angewiesen ist ? USART ? Gehen einzelne Ports nicht ? Welche ? Die Hardwarekonfiguration ist bei den 18ern etwas komplexer als bei den 16ern, es schau Dir, wenn konkrete Ausgänge nicht das tun was sie sollen nochmal ganz gezielt die jeweiligen Reigistersätze an.. Die Darstellung von Bitfeldern ist 0bxxxxxxxxx Du darfst Punkte nach belieben zu Gliederung verwenden. CMCON ist nach einem Resets standardmässig 0x07. Ich habe mal in meinen Quellen geschaut, ich setze dieses Register gundseätzlich explizit auf 0x07. Frag' mich nicht, ob's sein muss, es schadet auf jeden Fall nicht. Viel Erfolg, Marcus
Klaus m. ... schrieb: > ich habe ein Programm für einen PIC16f876A geschrieben (CC5X Compiler). > Nun wollte ich für die gleiche Schaltung den zufällig Pin gleichen PIC > 18f2550 benutzen Also ganz gleich sind die ja nicht. Mindestens Pin14 (VUSB) unterscheidet sich. Dem PIC16f876A am nächsten kommt (laut Microchip-Hotline) der PIC18F2520. Gruß Anja
Guten Abend, Es funktioniert freu. Es lag tatsächlich an den Bytezuweisungen: Es scheint (und Register-View um Debug-Modus bestätigt dies) einen Unterschied zu machen ob man "BYTE = 0000.0000;" oder "BYTE = 0b00000000;" schreibt. Es werden dann nämlich andere Werte in die Register geschrieben. Vielen Dankt für eure Hilfe !!! MFG
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.