Forum: Mikrocontroller und Digitale Elektronik PIC 12F675 kaputt??


von Martin (Gast)


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.

von Anja (Gast)


Lesenswert?

Liegt ganz klar am Programm:
erst schreibst Du "0" an Gpio 0 und 1 und dann löscht Du die beiden Bits 
wieder.

von Martin (Gast)


Lesenswert?

ja schon, aber doch erst nach 100ms. demnach müsstens die leds zumindest 
kurz aufblinken aber es passiert nichts ...

von Martin (Gast)


Lesenswert?

oder muss ich die anderen pins, die als eingänge definiert sind auch 
irgendwie anschließen? also mit dem hochohmigen widerstand oder so...

von Buschfunker (Gast)


Lesenswert?

0 = aus

du aktivierst also nie den ausgang!

von Buschfunker (Gast)


Lesenswert?

wenn du den MCLRE Eingang im Brenner aktiviert hast, dann musst du den 
auf 5V legen, wenn der PIC nicht resettet werden soll

von Christian F. (uncledave)


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.)

von Martin (Gast)


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

von Martin (Gast)


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..."                     !!!

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.