Forum: Mikrocontroller und Digitale Elektronik PIC DEM 4 Demo Board


von Manuel K. (manu1988)


Angehängte Dateien:

Lesenswert?

Guten Tag zusammen.
Ich bin in der Microcontrollertechnik noch sehr unerfahren und ich habe 
folgendes Problem.
Ich soll in mein Betrieb nen Projekt mit dem Microcontroller erstellen, 
will mich aber erstmal damit beschäftigen wie alles funktioniert.
Um das alles realisieren zu können habe ich das PICDEM 4 DEMO BOARD von 
Microchip, denn den MPLAB ICD 2 In-Circuit-Debugger und den PIC16F628A.
Zum programmieren nehme ich MPLAB IDE Version 8.10.
Ich habe erstmal ein Lauflicht geschrieben, das im Anhang ist.
Mein Problem ist jetzt dass das Programm nicht auf den LED's vom Demo 
Board angezeigt wird.
Aber das Programm läuft im MPLAB SIM darum versteh ich das nicht.
Wobei die Mitgelieferten Demos funktioniert haben und ich das Demo 
Programm auch nochmal auf nen anderen PIC gebrannt habe und es da auch 
lief.
Wäre für Tips und Anregungen sehr dankbar.

von Meister E. (edson)


Lesenswert?

Füge folgende Zeilen nach der Variablendeklaration ein:
1
    ORG 0x0000
2
    goto Init

Hintergrund:

Dein PIC weiss nicht automatisch, wo dein Programm anfängt. Da er an 
Adresse 0000h beginnt, realisiert das goto loop den Sprung an den Anfang 
deines Programms.

Gruß,
Edson

P.S. Da du in mindestens zwei Foren angefragt hast bitte ich darum, dein 
Ergebnis auch dort zu veröffentlichen.

von Manuel K. (manu1988)


Lesenswert?

; Variablennamen vergeben

loops   Equ     0x22            ; Zähler für Warteschleife
loops2  Equ     0x23            ; Zähler für Warteschleife

     ORG 0x0000
              goto Init

Sieht jetzt so aus. Habe das in den Pic gebrannt aber auf mein Demo 
Board tut sich trotzdem noch nix. Muss ich vielleicht irgendwelche 
Jumper ziehen?

von Meister E. (edson)


Lesenswert?

>Habe das in den Pic gebrannt aber auf mein Demo
>Board tut sich trotzdem noch nix. Muss ich vielleicht irgendwelche
>Jumper ziehen?

Zunächst wäre interessant ob du den ICD2 als Debugger oder Programmer 
verwendest und ob dir die Bedienung und das Umfeld von MPLAB ausreichend 
bekannt sind. Wenn du mit dem Manual und dem PICDEM4-Schaltplan nicht 
zurecht kommst, schreib mal wie die Jumper momentan gesetzt sind.

von c. (Gast)


Lesenswert?

Solltest du den ICD2 als Debugger verwenden wollen, dann muß es so 
lauten:

 org 0
 nop ; wichtig für den ICD
 goto init; dein startup.

von Manuel K. (manu1988)


Lesenswert?

Ich benutze den ICD 2 als Debugger. Mit der Bedienung komm ich klar, 
habe mich damit lange genug beschäftigt.
Jumper:
J3  steckt
J4  steckt
J28 offen
J23 offen
J24 steckt
J25 steckt
J26 steckt
J27 steckt
J18 steckt auf PIC 16
J19 steckt auf PIC 16
J14 steckt
J7  steckt
J9  steckt
J21 steckt
J22 steckt
J8  steckt auf PIC 16
J10 steckt auf PIC 16

das ist die Reihenfolge auf dem Board von oben nach unten.

von Meister E. (edson)


Lesenswert?

>Solltest du den ICD2 als Debugger verwenden wollen, dann muß es so
>lauten:
>
> org 0
> nop ; wichtig für den ICD
> goto init; dein startup.

Woher hast du denn diese Info? Ich sehe nicht, dass das zwingend nötig 
wäre.

von c. (Gast)


Lesenswert?

icd braucht einen nop an org0, damit er gleich einen Breakpoint vor
Programmausführung macht, denn nach startup ist der breakpoint auf 0 
eingestellt, also nope, steht in einigen app-notes.

von Meister E. (edson)


Lesenswert?

>icd braucht einen nop an org0, damit er gleich einen Breakpoint vor
>Programmausführung macht, denn nach startup ist der breakpoint auf 0
>eingestellt, also nope, steht in einigen app-notes.

Ok, das meinst du. Ist hilfreich, aber keine Bedingung. Der erste 
Breakpoint darf auch mitten im Programm stehen.

@manu1988

Werd mir das heute Abend mal anschauen. Hab hier noch zu tun.

Gruß,
Edson

von Manuel K. (manu1988)


Lesenswert?

Ich danke dir sehr nett.

von denkste (Gast)


Lesenswert?

>   ORG 0x0000
>    goto Init
oder
>org 0
> nop ; wichtig für den ICD
> goto init; dein startup.

Sollte immer gemacht werden, ist aber in diesem konkreten Fall nicht 
erforderlich.

von denkste (Gast)


Lesenswert?

>Loop
 >       call    Wait            ; Wartezeit
  >      rlf     PORTB,f         ; laufen zur n䣨sten LED
   >     goto    Loop


Überprüfe und Ändere dies!
rlf     PORTB,f

von Meister E. (edson)


Lesenswert?

@manu1988

Die Jumper sollten für dein Vorhaben folgendermaßen gesetzt sein:

J3  raus
J4  raus
J28 offen, ok
J23 offen, ok
J24 raus
J25 raus
J26 raus
J27 raus
J18 raus
J19 raus
J14 raus
J7  raus
J9  raus
J21 steckt, ok
J22 steckt, ok
J8  raus
J10 raus

J20 raus

Vor allem der bei Dir gesetzte J14 hat mich erschreckt. Du solltest dich 
schon für eine Taktquelle entscheiden. Sag jetzt bitte nicht, dass Y1 
auch noch in seinem Sockel sitzt. Oder ist das XT_OSC aus dem Quellcode 
ebenfalls nicht 'ernst gemeint'?

Zuerst sollten die Hardware-Fehler ausgeschlossen werden, da kann sicher 
auch dein Ausbilder weiterhelfen. Dann kümmerst du dich um das 
Lauflicht. Aber dazu später.

Schönen Abend noch,
Edson

von c. (Gast)


Lesenswert?

Warscheinlich ist auch kein osz vorhanden, außer Rc, deshalb auf INT_OSC
umcompilieren.
Die Leds sind bei RA0-RA3 sowie RB4-RB7 verbunden. Weiters müssen inputs
wie potentiometer ausgejumpert werden. Und Compararator comconf auf 7 
stellen.

von c. (Gast)


Lesenswert?

list p=16f628a
;**************************************************************

;
        #include <P16f628a.INC>
;
; Configuration festlegen
;
; bis 4 MHz: Power on Timer, kein Watchdog, INT-Oscillator
        __CONFIG        _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

; Variablennamen vergeben

loops   Equ     0x22            ; Zähler für Warteschleife
loops2  Equ     0x23            ; Zähler für Warteschleife
var     Equ     0x24


Init
        clrf    STATUS
        clrf    PORTA
        clrf    PORTB
    BSF CMCON, CM0
    BSF CMCON, CM1
    BSF CMCON, CM2

        bsf     STATUS, RP0     ; auf Bank 1 umschalten
        movlw   B'00001111'     ; PortB alle output
        movwf   TRISB
        movlw   B'11110000'     ; PortB alle output
        movwf   TRISA
        bcf     STATUS, RP0     ; auf Bank 0 zurückschalten

        clrf    var
        movlw   B'11111111'
        movwf   PORTA
        movwf   PORTB
        call    Wait_1
        clrf    PORTA
        clrf    PORTB
        call    Wait_1


; 1. LED einschalten

        bsf     STATUS,0         ; LED an RB0 einschalten

; Lauflicht

Loop
        call    Wait            ; Wartezeit
        rlf     var,f         ; laufen zur nächsten LED
        movfw   var
        movwf   PORTA
        movwf   PORTB
        goto    Loop


;**********************************************************
; Warteschleife 250 ms

Wait_1
        call Wait
        call Wait
        call Wait

Wait
        movlw   D'250'          ; 250 ms Pause
        movwf   loops

Wai
        movlw   .110           ; Zeitkonstante für 1ms
        movwf   loops2
Wai2    nop                    ;
        nop
        nop
        nop
        nop
        nop
        decfsz  loops2, F      ; 1 ms vorbei?
        goto    Wai2           ; nein, noch nicht
                               ;
        decfsz  loops, F       ; 250 ms vorbei?
        goto    Wai            ; nein, noch nicht
        retlw   0              ; das Warten hat ein Ende

        end

von Manuel K. (manu1988)


Lesenswert?

Guten Morgen,
habe die Jumpereinstellung geändert und das Programm so wie es da steht 
reinkopiert, da erscheint folgende Fehlermeldung:

ICD0083: Debug:  Unable to enter debug mode.

von Manuel K. (manu1988)


Lesenswert?

Funktioniert hab das mal mit dem Programmer gemacht...Dankeschön

von c. (Gast)


Lesenswert?

OOO Mann ooo Mann, du bist einer, keine Lust eine Anleitung zu lesen,
und erwarten, daß andere dir das Lösen.

Der 16f62x hat keine Debug-Funktion, es gibt aber einen 16f628A-ICD,
der das kann, ist aber eine Spezialversion.

Nimm einen 16f88, der kann das, bei gleichem Pinout.

Was geht bei dem Programm nicht, vielleicht kann dir geholfen werden,
oder wolltest du nur mal so step für step das Programm durchlaufen 
lassen.
Hätte eigentlich nicht erwartet, bei deinem Programm, daß du den 
Debug-Modus fährst, weil du da den Port direkt mittels Schiebebefehle 
schiebst,
abgesehen davon, daß das Programm mit deiner HW niemals funktioniert 
hätte, und das natürlich nicht geht, wenn du auf die RB6-7 angewisen
bist, um sie einzulesen, aber im ICD-Modus arbeitest.

PS. Zum Verwenden des Debuggers mußt du die Config-Register anders 
setzen, sowie zusätzliche SW einbinden, damit das funktioniert. Auch 
hier,
bitte die Kurzanleitung zum ICD lesen, ist auch in einem kleinen readme 
vorhanden.

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.