Forum: Mikrocontroller und Digitale Elektronik CCS PICC Probleme mit MPLAB 8.43


von Michael K. (Gast)


Lesenswert?

Hallo zusammen,

ist für viele vieleicht ein alter Hut, aber mir hats grad viel Arbeit 
gemacht.

Ich benutze noch einen alten CCS PICC aus 2006, reicht völlig, da ich 
für die großen den MPLAB C32 benutze.
Ging immer alles super, na ja, sofern beim Arbeiten mit PICs denn etwas 
super und deterministisch funktioniert.

Nach Update auf MPLAB 8.43 dann Compiler Fehler im Header File.
Nach Austausch des Header Files des 10F204 mit dem 
\Microchip\ThirdParty\PICC\Devices\10f204 war wieder compilieren ohne 
Fehlermeldung möglich.

Funktion nach Quellcode = Fehlanzeige.
Ursache:
Falsch gesetzte Fuses, nicht korrekt arbeitende Setup_comparator() 
Funktion etc.
Also die ganz normalen Probleme beim Arbeiten mit PICs.
Was allerdings der tiefere Sinn dabei ist in Header Files prinzipiel die 
SFRs nicht den Klarnamen zuzuweisen um einfach und unkompliziert mit dem 
Datenblatt in der Hand die Register zu setzen hat sich mir nie 
erschlossen.

[auskotz_on]
Nein, dafür gibt es ja einen *rsch voll Funktionen die mit: setup_nix 
(ich_moechte_bitte_den_comparator_invertieren_wenn_es_nicht_zu_viel_umst 
aende_macht  || 
und_ausserdem_soll_ein_wechsel_an_cout1_den_controller_wecken)
wo ein CMCON0 = 0xFA; reicht
In vielen Fällen ist das dann so derart bescheiden und losgelöst vom 
Datenblatt dokumentiert das erst der Blick ins Disassembly zeigt was 
dieser Schmutz den nun wirklich macht.
[auskotz_off]

Na, zumindest die Fuses werden wieder richtig gesetzt wenn man auch den 
ganzen Rest aus dem \Microchip\ThirdParty\PICC in das \programme\picc 
Verzeichniss rüberbügelt.
Da als Folge der nun bunt gemischen Dateien unterschiedlichster 
Versionen wahrscheinlich in absehbarer Zeit der nächste Kram 
auseinanderfliegt empfiehlt sich natürlich wie immer ein Backup.

Da ich ständig unterschiedliche PICs am Wickel habe und es eigentlich 
bei jedem zweiten PIC Projekt irgenwo kracht und scheppert kann ich nur 
folgendes empfehlen:

Fuses immer in MPLAB setzen
Register möglichst direkt setzen (kleineres HEX File gibts als Bonus)
#byte CMCON0 = 0x07  // Comparator SFR dem Klarnamen zuweisen
#bit C1OUT 0x07.7    // Ausgang des Comparators C1OUT zuweisen
.
.
CMCON0 = 'WERT';

Funktioniert etwas nicht wie es nach Datenblatt sollte und ein Fehler 
ist nicht auszumachen:
Herzlichen willkommen in der wunderbaren Welt der PICs.
Es lohnt sich alle Register der alternativen Port-Pin Funktionen zu 
durchforsten auch wenn Ihr nichts davon benutzt.
Z.B. AD Pins explizit auf digital in stellen weil sonst einige der 
betroffenen Pins funktionieren, andere nicht, oder irgendwas dazwischen.
Gehts immer noch nicht und Ihr habt auch brav alle Errata Sheets 
gelesen, dann habt Ihr wohl einfach was neues gefunden. Ist ziemlich 
normal.
Der Microchip Support ist da auch keine Hilfe, das Forum schon eher.
(Ups, wird doch glatt die VREF im Sleep abgeschaltet. Doof nur das der 
Comparator den PIC wecken soll ... )

Und nein, auch in gezippten 112MB MPLAB neuestem Datums ist es nicht 
vorgesehen Euch beim programmieren einer bekanntermaßen fehlerbehafteten 
chip rev. darauf hinzuweisen es eine dumme Idee ist das zu tun was Ihr 
gerade vorhabt.

Der CCS PICC ist nett und macht auf 100Byte Code schon tolle Sachen ohne 
sich mit diesem grausigen Assembler Dialekt der PICs auseinandersetzen 
zu müssen. Auch die PICs mag ich wegen dieser unglaublichen 
Typenvielfalt zu kleinsten Preisen, aber das man ständig am Quirl dreht 
mit Problemen die unseren GCC Atmel und ARM Bitschubsern hier völlig 
fremd sind ist ... suboptimal.

So, das wars. Genug gemeckert.
Wer PICs programmiert ist halt auch Beta Tester, aber versucht mal einen 
Atmel im SOT23 für <60Cent in C zu programmieren oder 6 Hardware PWMs 
mit 2 high speed Uarts und frei der Hardware zuweisbaren Pins im 28Pin 
QFN für 3€ (PIC24FJ64GA002) zu ergattern.
Das muß man auch mal leiden können ...

Herje, was war ich froh das Microchip Atmel dann doch nicht gekauft hat 
...

Grüße

von Maik W. (werner01)


Lesenswert?

hallo,


ja das kommt mir bekannt vor. bei pic 18f z.B. gibt es eine 
auto-acquisition tmie funktion was ja für mich bedeutet, das ad-konv. 
starte
und der rest geht AUTOMATISCH. im datenblatt steht konverter anmachen, 
???
acquisition tmie abwarten???? und erst dann Konversation starten.???
ja wie jetzt ist das nun automatsch oder nicht!
beim assembler muß ich dir aber wiedersprechen, logischer gehts 
garnicht.
Aber beim Configurieren der Peripherie, bis es dann endlich mal geht, ja
da braucht man manchmal viel Geduld.
ich würde nur noch mit pic18f was machen, denn die gehen halbwegs oder 
wenn ich Power Brauche, dann nehm ich pic24hj. die haben 16bit durchweg 
und gehen bis 40 mips zu nem guten preis.


pic16f gehören abgeschafft finde ich.

von Michael K. (Gast)


Lesenswert?

Hm, Du meinst also ich sollte mich mal mehr mit dem Assembler 
beschäftigen ?

Demnächst gehts wieder mit einem 30F los und dieses Mal brauche ich die 
DSP Hardware. Wenn mich mein Gedächtniss nicht trügt verwendet der C32 
die ja nicht freiwillig so das man eh zum asm greifen muß.

Ich komme bezüglich Assembler aus der 6502  8085  8031 Ecke (15 Jahre 
her) und störe mich vieleicht ein wenig zu sehr daran, das der Accu 
jetzt das Working Register und ein JMP ein Goto ist.

Ja, manchmal bekommt man wirklich den Eindruck das man die Probleme 
TROTZ Toolchain und Datenblatt lösen kann und nicht deswegen.
Spätestens nach dem 8ten mal Lesen der gleichen Seite frage ich mich 
dann auch ob ich jetzt zu blöd bin oder ein Kandidat bei 'Verstehen Sie 
Spaß'
Schon mal den IIS vom 30F4013 benutzt ?
Welches Register für welchen Timeslot mit welcher Flanke wann, warum und 
überhaupt. Sooo ein Spaß...


Maik Werner schrieb:
> ja wie jetzt ist das nun automatsch oder nicht!

Schau Dir mal Bild 17-4 / 17-5 (PIC18F45J10 datasheet) an.
Die automatic acq time ist die Zeit die Du unter ADCON5-3 einstellst.
Wenn also ACQT auf warten eingestellt ist interpretiere ich das als 
'fire and forget' Anders macht das keinen Sinn.
Warum sollte man einen Hardwarezähler einstellen, wenn der dann nichts 
macht ?
Es gibt ja auch die Möglichkeit über einen externen Trigger-event die 
Wandlung zu starten. Ohne automatischen Ablauf müsste Du ja erst auf den 
externen Event reagieren, Tacq warten, AD starten, warten, AD lesen.
So wäre ja kein Automatismus möglich.

Einstellen, starten, auf irq reagieren oder auf GO/DONE warten.
Klar das in irgendeiner Form gewartet wird aber m.E. mußt Du das nicht 
aktiv tun. Kann man natürlich aktiv machen ohne ACTQ einzustellen.

Der Text ist wie üblich schwammig formuliert und mißverständlich.
Die Family Reference ist da auch nur unwesentlich genauer.
Explizit warten soll die Firmware wohl nur min. 10ms wenn Du erst kurz 
vor der Wandlung die Vref aktiviert hast um Strom zu sparen.

Sag mal bescheid ob ich recht hatte.
Brauche demnächst einen schnellen AD beim 30F und wenn der genauso 
aussieht ...
Hm, wirst Du aber höchstens durch ungenaue, bzw. zu kleine 
Wandlerergebnisse sehen, weil der Hold Kondensator noch nicht voll ist 
während Du schon wandelst.

Gruß
Michael

von Michael H. (morph1)


Lesenswert?

nur als kurzer einwurf:

der C32 wird mit den dsPIC nicht viel anfangen können, die brauchen den 
C30 :)

von Michael K. (Gast)


Lesenswert?

Ok, gewonnen.
Liegt beides bei mir rum, da hab ich nicht differenziert.

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.