Gast
#1544572
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