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.
Liegt ganz klar am Programm: erst schreibst Du "0" an Gpio 0 und 1 und dann löscht Du die beiden Bits wieder.
ja schon, aber doch erst nach 100ms. demnach müsstens die leds zumindest kurz aufblinken aber es passiert nichts ...
oder muss ich die anderen pins, die als eingänge definiert sind auch irgendwie anschließen? also mit dem hochohmigen widerstand oder so...
wenn du den MCLRE Eingang im Brenner aktiviert hast, dann musst du den auf 5V legen, wenn der PIC nicht resettet werden soll
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.)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.