www.mikrocontroller.net

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


Autor: Willlixx23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Willlixx23 (Gast)
Datum:

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

Autor: Willlixx23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Willlixx23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Willlixx23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Willlixx23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: stepp64 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael L. (michaelx)
Datum:

Bewertung
0 lesenswert
nicht 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!

> ...

Autor: Willlixx23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael L. (michaelx)
Datum:

Bewertung
0 lesenswert
nicht 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:
bsf     STATUS,RP0   ; zurück zu Bank 0

die Zeile muss so lauten:
bcf     STATUS,RP0   ; zurück zu Bank 0

Oder du fügst diese ein:
BANKSEL PORTA     ;

Letzte Frage:
Wie hast du die LEDs angeschlossen?

Autor: Willlixx23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Willlixx23 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Michael L. (michaelx)
Datum:

Bewertung
0 lesenswert
nicht 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. ;-)

Autor: Sven Stefan (stepp64) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Willlixx23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Willlixx23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael L. (michaelx)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Willlixx23 (Gast)
Datum:

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

Autor: Michael L. (michaelx)
Datum:

Bewertung
0 lesenswert
nicht 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. ;-)

Autor: Willlixx23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.