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.
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.
; 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?
>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.
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.
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.
>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.
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.
>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
> 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.
>Loop > call Wait ; Wartezeit > rlf PORTB,f ; laufen zur n䣨sten LED > goto Loop Überprüfe und Ändere dies! rlf PORTB,f
@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
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.