Umstieg auf PIC18f2550

OP #2202469
Lesenswert?

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
Gast #2202481
Lesenswert?

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.
OP #2202491
Lesenswert?

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
Gast #2202539
Lesenswert?

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
#2202549
Lesenswert?

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.
OP #2205099
Lesenswert?

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
Gast #2205137
Lesenswert?

..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
OP #2205159
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren