Forum: Mikrocontroller und Digitale Elektronik PIC 16F722 mit PICit 2


von Willlixx23 (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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.

von Willlixx23 (Gast)


Lesenswert?

Das ist richtig. Hab alles aus dem Datashet von Microchip übernommen. 
Wer ich mal probieren. Vielen Dank

von Willlixx23 (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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.

von Willlixx23 (Gast)


Lesenswert?

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.

von Willlixx23 (Gast)


Lesenswert?

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 ?

von Stephan (Gast)


Lesenswert?

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?

von Stephan (Gast)


Lesenswert?

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.

von Willlixx23 (Gast)


Lesenswert?

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.

von stepp64 (Gast)


Lesenswert?

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

von Michael L. (michaelx)


Lesenswert?

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!

> ...

von Willlixx23 (Gast)


Lesenswert?

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

von Stephan (Gast)


Lesenswert?

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.

von Michael L. (michaelx)


Lesenswert?

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?

von Willlixx23 (Gast)


Lesenswert?

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.

von Willlixx23 (Gast)


Angehängte Dateien:

Lesenswert?

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

von Michael L. (michaelx)


Lesenswert?

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. ;-)

von Sven S. (stepp64) Benutzerseite


Lesenswert?

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

von Willlixx23 (Gast)


Lesenswert?

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

von Willlixx23 (Gast)


Lesenswert?

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

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Michael L. (michaelx)


Lesenswert?

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).

von Michael (Gast)


Lesenswert?

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.

von Willlixx23 (Gast)


Lesenswert?

Hallo Michael,
habe das auch über Configure  ...gemacht, wie sceenshot. Musste im 
Quellcode aber trotzdem Config aufführen sonst hat es nicht 
funktioniert.

von Michael L. (michaelx)


Lesenswert?

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. ;-)

von Willlixx23 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.