Forum: Mikrocontroller und Digitale Elektronik Umstieg auf PIC18f2550


von Klaus m. .. (magic-moe)


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

von Marcus (Gast)


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.

von Klaus m. .. (magic-moe)


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

von Marcus (Gast)


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

von Tobi D. (fanti)


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.

von Klaus m. .. (magic-moe)


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

von Marcus (Gast)


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

von Anja (Gast)


Lesenswert?

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

von Klaus m. .. (magic-moe)


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

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.