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.