Möchte 16F722 über MPLAB Vers 8.40 und PICKit programmieren. Wer kann mir helfen ????????. Nachfolgend mein Code. Ich möchte alle 3 Ports mit 8 Bit als Ausgänge schalten. Daran habe ich über Treiber LED's angeschlossen. Keine LED leuchtet. Beim MPLAP hab ich als Device 16F722 aktiviert. OSCILLATOR : Externel RC ClockOut Watchdog Timer Off nPWRTE OFF Power Up Timer OFF MCLRE RE3 is digital Input POREN OFF PLLEN 16MHZ VCAPEN ALL VCAP pin funktions disabled list p=16F722 #include <p16F722.inc> __config _CONFIG1, _DEBUG_OFF & _PLL_EN & _INTOSC & _BOR_OFF & _CP_OFF & _MCLR_DIS & _PWRT_DIS & _WDT_OFF & _INTOSC & _VCAP_DIS ;------------------------- BANKSEL PORTA ; CLRF PORTA ;Init PORTA BANKSEL ANSELA ; CLRF ANSELA ;digital I/O BANKSEL TRISA ; movlw b'00000000' MOVWF TRISA ; ;as outputs ;-------------------------- BANKSEL PORTB ; CLRF PORTB ;Init PORTB BANKSEL ANSELB CLRF ANSELB ;Make RB digital BANKSEL TRISB ; movlw b'00000000' MOVWF TRISB ; ;----------------------------------- BANKSEL PORTC ; CLRF PORTC ;Init PORTC BANKSEL TRISC ; movlw b'00000000' MOVWF TRISC ;and set RC<7:4,1:0> ;as outputs ;alle Ausgänge auf High movlw b'11111111' movwf PORTA movwf PORTB movwf PORTC ;Endlosschleife org 40H HP01 nop goto HP01 end
Seh ich das recht, dass du die Bank nicht auf den Port zurück schaltest? Versuch mal ein BANKSEL PORTA bevor die an PORTA z.B. 0b11111111 schickst.
Das ist richtig. Hab alles aus dem Datashet von Microchip übernommen. Wer ich mal probieren. Vielen Dank
das klappt leider nicht movlw b'00000000' MOVWF TRISC ; ; bsf STATUS,RP0 ; zurück zu Bank 0 movlw b'11111111' movwf PORTA movwf PORTB movwf PORTC Beim Laden ins PicKit erscheint die Meldung: Warnung: Some configurations words not in hex file. Ensure default values above right are acceptable. Diese Meldung hab ich sonst nicht. Mein Englisch ist bescheiden. Was hweisst das umgangssprchlich. Ich weiss da im Moment nicht.
Hm, das heist eigentlich nur, dass nicht alle Configurationswörter des PICs im Hexfile gesetzt werden...inwieweit sich das auswirkt vermag ich nicht zu sagen da ich die Konfiguration immer MPLAB machen lassen und sie nicht in den Sourcecode schreibe (wodurch bei mir natürlich immer alle Konfigurationen richtig gesetzt sind). Ich sehe bei dir z.B. zweimal _INTOSC im Konfigurationswort...ist das richtig? Und weiter oben steht was von External RC. Was mir jetzt aber noch so kommt. Wie ist denn der Aufbau deines PIC16F722? Er tut ja gar nichts, oder? Hast du auch während des Betriebs MCLR (PIN 1 des PICs) auf HIGH? War zu meinem Beginn mit PICs ein beliebter Fehler.
Hallo Michael, _INTOSC war 2X, hab ich übersehen und geändert. MLCR ist High. Richtig bemerkt,es bleibt die config als Fehler übrig. Hab die Zeile Config im Quell-Code eleminiert. Dann kam beim Laden ins PICkit die Meldung 'kein Konfigurationswort im Code'(sinngemäss). Obwohl ich über 'Configure' ... 'Configurations Bits sets in Code' das Häkchen gemacht habe, hat MPLAB die eingestellte Konfigurationseinstellung überhaupt nicht übernommen. Da scheint der Fehler zu liegen. Wie machst Du Deine Einstellungen ? Probleme hatte ich schon mit config1 und config2 um es in den Quellcode zu bekommen. Da war mir die Schreibweise mit 2 Configs nicht geläufig. Sonst habe ich __Config( ......) benutzt, weil es nur ein Konfigurationswort gab. lief reibngslos. Erstmal vielen Dank für Deine wertvollen Gedanken. Es leuchtet eine LED PORTB6, alle anderen dunkel.
Hallo Michael, so lautet die exakte Fehlermeldung von PICkit wenn ich die über Configure ... gesetzten Einstellungen in den Hex-Code des MPLAB angeblich übernommen habe und die Config im Quellcode eliminiert ist. Warning: No configuration in hex file In MPLAB use File-Export to save hex with config Hast Du eine Vorstellung wie ich das Problem beseitigen kann ?
Der Code scheint mir ok zu sein. Schalte mal den Power-on-Timer ein im CONFIG1 mit _PWRT_EN. Noch etwas: sehr häufig wird vergessen, einen Abblock-Kondensator 100nF zwischen VDD und VSS in UNMITTELBARER NÄHE zum PIC zu schalten, da läuft der PIC oft gar nicht hoch. Apropos Oszillator: wo hast Du den konfiguriert und wie? Nur im CONFIG oder auch im INTOSC-Register?
Schreibfehler, muss natürlich heissen: Nur im CONFIG1 oder auch im OSCCON-Register? Wenn im CONFIG _INTOSC konfiguriert ist, darfst Du natürlich nicht auch noch "external RC" im MPLAB IDE konfigurieren, das widerspricht sich. Bei external RC muss ein RC-Glied am PIC hängen.
Hallo Stephan, _PWRT_EN erledigt, 100nF erledigt. gleiches Ergebnis, bis auf PORTB Bit6 alles dunkel. Den Oszillator habe ich nur über Config konfiguriert, wollte die Standardfrequenz zuerst benutzen, um den Lieben erstmal zum Leben zu erwecken. Grundsätzlich möchte ich mit intern 2MHz fahren. Er hat dann die banale Aufgabe 4 BCD-Schalter einzulesen, binär zu wandeln und dann auf ein Port auszugeben. Das wollte ich dann später erledigen. Alle LED' anzusteuern ist nur die Testphase. Aber zuerst möchte ich alle LED' zum leuchten bringen. Dann kommt die eigenliche Aufgabe. Die PICkit Meldung wie vor beschrieben sehe ich als Problem, da offensicht- lich die Konfiguration nicht vollständig übernommen wird. Ich verstehe nicht warum sie nicht vollständig ausgeführt werden soll.
Auf Seite 96 des Datenblattes steht: When MCLR is asserted in INTOSC or RC mode, the internal clock oscillator is disabled. Mein Englisch ist nicht so besonders, aber könnte das heisen, dass wenn der interne Oszillator eingeschaltet und MCLR deaktiviert ist, dass dann auch der Oszi nicht schwingt? Versuch doch mal den MCLR nicht abzuschalten und statt dessen den MCLR-PIN mit eine 10k Pullup auf Plus zu legen. Gruß Sven
Willlixx23 schrieb: > ... > Hab die Zeile Config im Quell-Code eleminiert. Dann kam beim Laden ins > PICkit die Meldung 'kein Konfigurationswort im Code'(sinngemäss). > Obwohl ich über 'Configure' ... 'Configurations Bits sets in Code' > das Häkchen gemacht habe, hat MPLAB die eingestellte > Konfigurationseinstellung überhaupt nicht übernommen. Da scheint der > Fehler zu liegen. Gemäß deiner Beschreibung sollte der Fehler bei dir liegen. Denn wenn du in der Checkbox 'Configurations Bits set in code' einen Haken machst, musst du die Configurations Bits auch im Quell-Code setzen. Sonst bekommst du logischer weise die Fehlermeldung, dass kein Config-Wort im Code ist! > ...
Hallo MIchael, das habe ich in der Zwischenzeit auch gemacht, aber das Ding will keine LED leuchten lassen. Meine config sieht mittlerweile so aus: __config _CONFIG1, _DEBUG_OFF & _PLL_EN & _BOR_OFF & _CP_OFF & _MCLR_DIS & _PWRT_EN & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _VCAP_DIS mit gesetzten 'Configure ...' im MPLAP
Das ist ja merkwürdig, dass nur 1 LED leuchtet, da sollte also der Oszillator laufen (habe ich das richtig gelesen, dass bisher gar keine LED an war). PIC defekt, hast Du einen zweiten Chip? Zum Oszillator: stell doch mal von INTOSC auf XT um und klemm einen Quarz (+ 2x 27pF) oder Resonator dran, vielleicht schwingt der gar nicht an, dann können wir das schon mal ausschliessen. Miss auch mal den Strom, der vom PIC zu Deinen Treibern läuft: wenn der Treiber viel zieht, dann sind 3x8=24 Treiber in Ihrer Summe evtl. zu viel. Also ggf. Widerstand zwischen PIC und Treiber.
Willlixx23 schrieb: > Hallo MIchael, > das habe ich in der Zwischenzeit auch gemacht, aber das Ding will keine > LED leuchten lassen. > Meine config sieht mittlerweile so aus: > > __config _CONFIG1, _DEBUG_OFF & _PLL_EN & _BOR_OFF & _CP_OFF & _MCLR_DIS > & _PWRT_EN & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _VCAP_DIS > > mit gesetzten 'Configure ...' im MPLAP '_VCAP_xxx' gehört nicht zu _CONFIG1 sondern zu _CONFIG2 (Spielt zwar hier keine Rolle, weil mit _VCAP_DIS kein Bit verändert wird, aber für später und zur Info für Nachnutzer.) Mein Tipp zum Config-Wort: Immer im Code definieren und niemals in der MPLab-Oberfläche einstellen. (Dein Post vom 19.01.2010 00:16) Der eingefügte Code-Schnipsel ist leider falsch:
1 | bsf STATUS,RP0 ; zurück zu Bank 0 |
die Zeile muss so lauten:
1 | bcf STATUS,RP0 ; zurück zu Bank 0 |
Oder du fügst diese ein:
1 | BANKSEL PORTA ; |
Letzte Frage: Wie hast du die LEDs angeschlossen?
Hallo Michael, besten Dank. Die Bankumschaltung war es. Zugegeben ein dummer Fehler von mir. Jetzt funktioniert es. Vielen Dank auch an alle die mir geholfen haben. Den 16F722 und 16F747 habe ich mir besorgt um Aufgaben, zu erledigen die zeitunkritisch sind und ich mir dann den externen Oszillator spare. Der 16F722 hat komplette 3x8Bit Ports und der 16F747 hat komplette 4,5x8Bit Ports. Eine Platine hatte ich auch schon mit 4 BCD-Schaltern bestückt. Nun kann es losgehen. Nochmals vielen Dank.
Hallo Michael, zu Deiner Frage zur Ansteuerung der LED's : hab 2 Ports mit FETs als LED-Treiber ausgestattet 1 Port direkt mit roten LED's und 430 Ohm Widerständen. Hab alles zu Testzwecken modular aufgebaut (siehe Bild) ob mit oder ohne Treiber, es funktioniert. Wie Du an den Werten siehst betreibe ich die LED's bewusst mit geringen Strömen um die PORTS nicht zu überlasten. nochmals vielen Dank. Wilfried
Hatte wegen den LEDs nur wegen der Fehlersuche gefragt, kommt doch wohl öfter mal vor, dass die LED an Vdd geschaltet ist, den Portpin auf 1 gesetzt wird und über die dunkle LED gerätselt wird. ;-)
Nur noch zur Vervollständigung, da du ja schriebst, du wüsstest nicht wie das Format der Configworte ist. Ich habe es bei einem 16F887 so definiert: __CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _BOR_OFF & _WDT_OFF & _HS_OSC & _IESO_OFF __CONFIG _CONFIG2, _WRT_OFF Sind jetzt natürlich andere Bits, aber das Format sollte erkennbar sein. Gruß Sven
Hallo Sven, vielen Dank, werde Deinen Vorschlag noch einfliessen lassen. Solche Infos sind sehr wertvoll weil es viele Infos gibt, aber sie sind sehr verstreut und zu meinem Leidwesen in englisch. Hallo Michael, Deine Frage wegen den Treibern war berechtigt. Manchmal übersieht man die einfachsten Sachen. Siehe Bankumschaltung bei mir. Nun viele Augen und Gedanken sind da schon hilfreich. Nochmals vielen Dank
Nun ist alles ok. Dank des geballten Wissens gibt es jetzt keine Fehlermeldung. Nochmals vielen Dank. Und nun das komplette Listing, mit allen Änderungen, bei dem es keine Fehlermeldung mehr gibt. MPLAB hatte noch Gross/Kleinschreibung angemahnt !!! list p=16F722 #include <p16F722.inc> __config _CONFIG1, _DEBUG_OFF & _PLL_EN & _BOR_OFF & _CP_OFF & _MCLR_DIS & _PWRT_EN & _WDT_OFF & _INTRC_OSC_NOCLKOUT __config _CONFIG2, _VCAP_DIS org 40H ;------------------------- BANKSEL PORTA ; CLRF PORTA ;Init PORTA BANKSEL ANSELA ; CLRF ANSELA ;digital I/O BANKSEL TRISA ; movlw b'00000000' ;PortA komplett als Ausgang MOVWF TRISA ;-------------------------- BANKSEL PORTB ; CLRF PORTB ;Init PORTB BANKSEL ANSELB CLRF ANSELB ;Make RB<7:0> digital BANKSEL TRISB ; movlw b'00000000' ;PortB komplett als Ausgang MOVWF TRISB ; ;----------------------------------- BANKSEL PORTC ; CLRF PORTC ;Init PORTC BANKSEL TRISC ; movlw b'00000000' ;PortC komplett als Ausgang MOVWF TRISC ; ; ;----------------------------------- BANKSEL PORTA ;oder bcf STATUS,RP0 movlw b'10011011' ;Bitmuster auf allen Ports ausgeben movwf PORTA movwf PORTB movwf PORTC HP01 nop goto HP01 end
Habe mir nicht alles nun durchgelesen, nur zur Frage wie ich das Codewort setze: Ich mach das über das Menü "Configure->Configuration Bits...", vgl. Screenshot. Hab mich daran gewöhnt aber es ist auch immer Geschmackssache.
Michael schrieb: > Habe mir nicht alles nun durchgelesen, nur zur Frage wie ich das > Codewort setze: > > Ich mach das über das Menü "Configure->Configuration Bits...", vgl. > Screenshot. Hab mich daran gewöhnt aber es ist auch immer > Geschmackssache. Das finde ich deswegen blöd, weil bei vielen PIC-Projekten nur 1 ASM-File im Umlauf ist. Da ist es einfach praktischer, die Configuration Bits mit im Code zu definieren. So kann nichts verloren gehen, ja man kann sogar im Code darauf zugreifen (für Parametrierung und bedingte Übersetzung).
Ja sicher, zur Weitergabe ist das natürlich nix. Ich muss meine Files (schreib nur wenig in ASM, mach fast nur C ;)) nicht weitergeben, deshalb genügt mir das so.
Hallo Michael, habe das auch über Configure ...gemacht, wie sceenshot. Musste im Quellcode aber trotzdem Config aufführen sonst hat es nicht funktioniert.
Hallo Willi, wenn Config im Quellcode, dann über den Configure-Dialog vorrübergehend überschreibbar, wenn nicht im Quellcode, dann auf jeden Fall den Haken raus, und manuell einstellen. Nichts durcheinanderbringen. ;-)
Hallo Michael, ja, so hab ich es gemacht, es funktioniert alles einwandfrei. Die BCD-binär Wandlung für die kompletten 8Bit habe ich gestern auch fertiggestellt. Es funktioniert alles wie gewünscht. Vielen Dank Wilfried
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.