PIC 12F675 kaputt??

Gast #1446250
Lesenswert?

Hallo Leute,
ich habe mir erstmalig einen PIC zugelegt und wollte als erstes eine LED 
zum leuchten/blinken bringen - allerdings ohne Erfolgt. Der 
Microcontroller gibt keine Lebenszeichen von sich.
Den PIC 12F675 an sich konnte ich fast problemlos mit meinem Programm 
beschreiben, was ich auch nachträglich nochmal durch Lesen getestet 
habe.
An der Beschaltung kann es eigentlich auch nicht liegen, hab den 
Vorwiderstand mal rausgenommen und die Diode direkt an den PIN gesteckt 
und wieder nichts.
Also entweder es liegt am PIC oder am Programm.
Ich hoffe jemand kann mir bei letzterem weiterhelfen, denn ich bin 
verzweifelt :-&
Danke schonmal im Voraus!!!



LIST ;P=PIC12F675
NOLIST

#include <C:\PicProg2006\Include\p12f675.inc>


ORG 0 ;PIC's reset vector
BSF STATUS,RP0 ;Bank1
MOVWF OSCCAL ;Calibrate the Int RC osc
GOTO START ;Jump to START routine when boot

DELAY100MS BCF STATUS,RP0 ;Bank0
CLRW
MOVLW D'255'
MOVWF TMR0

;----------------------------------------------------------------------- 
----------------

START CLRWDT ;Clear the watchdog a power up
MOVWF CMCON ;disable comparator

BSF STATUS,RP0 ;Bank1
MOVLW B'11111100' ;
MOVWF TRISIO ;GP0,GP1 = Outputs
CLRF ANSEL ;Digital I/O

LOOP BCF STATUS, RP0 ;Bank0
MOVLW B'11111100' ;
MOVWF GPIO ;GPIO0,GPIO1 = on
CALL DELAY100MS ;Wait for 100mS
CLRF GPIO ;Clear the LED
CALL DELAY100MS ;and wait again for 100mS
GOTO LOOP ;Do forever this loop....

END ;End of source code.
#1446895
Lesenswert?

Hi,
so wie ich das sehe beschreibst du CMCON mit Nullen oder einem 
zufälligem Wert
sollte eigendlich so in der Art aussehen

START CLRWDT ;Clear the watchdog a power up
MOVLW B'111'  ; <- COMP = off
MOVWF CMCON
BSF STATUS,RP0 ;Bank1
MOVLW B'11111100' ;
MOVWF TRISIO ;GP0,GP1 = Outputs
CLRF ANSEL ;Digital I/O
BCF STATUS,RP0 ; Bank0  <- gleich zurückschalten, dann musst du das 
nicht im UP

loop
MOVLW  b'00000011'
MOVWF GPIO
call  DELAY100MS
MOVLW  b'00000000'
MOVWF  GPIO
call  DELAY100MS
goto loop

und aus dem unterprogramm kommst du nicht zurrück, sondern landest bei 
Start aber ziehst keine 4000 ein:)

ich würde die Warteschleife in etwa so gestalten:

DELAY100MS
bcf  INTCON,T0IF  ;flag löschen
MOVLW D'255'
MOVWF TMR0
BTFSS INTCON,T0IF ;timer fertig?
goto $-1          ; nein warten
return            ; ja, rücksprung

im Datenblatt ab seite 27 findest du noch Infos zum Timer 0, du wirst 
sicher noch ein paar Einstellungen vornehmen müssen( Quelle, teiler 
usw.)
Gast #1459521
Lesenswert?

Danke erstmal für die Hilfe!

Leider klappt es immer noch nicht und ich bin so langsam am verzweifeln, 
versuche das jetzt schon seit gut zwei Wochen ...

Ich hab die Sache mit dem Zähler jetzt mal rausgenommen und bin dazu 
übergegangen, einfach nur eine LED leuchten zu lassen aber es 
funktioniert nicht. Hab die P12F675.inc - Datei im selben Ordner wie die 
ASM - Datei, also müsste MPASM zumindest richtig compilieren, oder?

Vielleicht könnte mir ja mal jemand meinen Quellcode einfach nur in eine 
HEX-Datei umwandeln, oder noch besser, irgendwer schickt mir ein 
Programm in HEX-Code, das auf jeden Fall funktionieren sollte.

Hier mein Programm:


;LED-TEST

list      P=12F675  ; Prozessor definieren
include "P12F675.inc"   ; entsprechende .inc Datei für MPASM
nolist

__config _CP_OFF & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & 
_INTRC_OSC_NOCLKOUT

  org   0x0000
      call  Init
      goto   Main

;-----------------------------------------------------------------------

Main
    movlw    b'00000011'
    movwf   GPIO

loop   goto  loop    ; Endlosschleife


;----------------------------------------------------------------------- 
-

Init  clrf  GPIO    ; lösche Port
    movlw   b'111'  ; COMP = off
    movwf   CMCON
    bsf  STATUS,RP0  ; auf Bank1 umschalten
        clrf   ANSEL                   ; GP0,1,2,4 von ADC auf digital
    movlw  b'11111100'  ; GPIO 0,1 = Ausgänge
    movwf  TRISIO
    bcf  STATUS,RP0  ; auf Bank0 zurückschalten


    return      ; springe zurück zu Main

;----------------------------------------------------------------------- 
-

end
Gast #1459525
Lesenswert?

Es klaaaaaaaaapt!!!

hab wieder die Raute vor dem include vergessen und damit wusste er ja 
nix mit den Befehlen anzufangen. Es lag wohl bei meinen vorherigen 
Versionen einfach immer daran, dass er die library also P12F675.inc 
nicht gefunden hatte.
Danke nochmal für die vielen Ratschläge!


Also an alle, die sich wie ich mit Anfängerproblemen herumschlagen:

!!! Checken, ob Library sich auch dort befindet, wo man sie angibt !!!
!!! Raute nicht vergessen:     #include "P..."                     !!!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren