Forum: Mikrocontroller und Digitale Elektronik Einsteigerproblem mit PIC16F627


von Thomas (Gast)


Lesenswert?

Hallo,

hab mal eine Frage zum programmieren eines PIC Controllers.

Ich habe mir das Programmier- und Experimentierboard von Velleman (P8048 
/ VM111) bei Conrad besorgt.
Jetzt bin ich dran, ein paar Spielereien mit den LED und Tastern 
vorzunehmen, aber irgendwie will das gar nicht so recht funktionieren.
Ich benutze die Entwicklungsumgebung PIKLAB und die GPUtils unter 
debian.
Wenn ich die Bespielprogramme von der beigelegten CD reinschiebe 
funktioniert das alles wunderbar.
Probiere ich aus, irgendetwas selbst zu schreiben, dann scheint das 
blöde Ding gar nicht zu reagieren. Entweder sind nach einem Reset alle 
LEDs an oder aus.
Dabei wollte ich lediglich eine LED zum blinken bewegen, oder, solange 
eine Taste gedrückt ist, eine LED zum leuchten bringen.

Was mache ich falsch?
Sind irgendwelche Config Einstellungen zu beachten? Im Anschluss 
befindet sich das Prog, welches eine LED bei Tastendruck leuchten lassen 
soll.
PORTB<0:5> sind die LEDS und PORTA<0:3> die Taster.

Ich weiß echt nicht weiter, selbst das Umsetzen der Beispiele bei 
sprut.de laufen irgendwie nicht. Wird hängt der sich in irgendeiner 
Schleife auf? Springt evtl. ein Interrupt an?
WDT ist aus, somit sollte die Fehlerquelle nicht in Betracht kommen.


Schon einmal vielen Dank im voraus für Eure Hilfe.

Gruß,
Thomas

; 
-----------------------------------------------------------------------
; Template source file generated by piklab
    #include <p16f627.inc>

; 
-----------------------------------------------------------------------
; Configuration bits: adapt to your setup and needs
    __CONFIG _WDT_OFF & _PWRTE_ON & _XT_OSC & _MCLRE_ON & _BODEN_ON & 
_LVP_OFF & _DATA_CP_OFF & _CP_OFF

; 
-----------------------------------------------------------------------
; Variables declaration
INT_VAR UDATA_SHR
w_saved      RES 1 ; variable used for context saving
status_saved RES 1 ; variable used for context saving

var1         RES 1 ; Beispiel-Variable


; 
-----------------------------------------------------------------------
; reset vector
STARTUP CODE 0x000
    nop                    ; Benötigt für ICD2-Debugging
    movlw   high Reset     ; load upper byte of 'start' label
    movwf   PCLATH         ; initialize PCLATH
    goto    Reset          ; go to start of main code

; interrupt vector
INT_VECTOR CODE 0x004
    goto    interrupt      ; go to start of interrupt code

; relocatable code
PROG CODE
interrupt
    movwf   w_saved        ; save context
    swapf   STATUS,w
    movwf   status_saved
    ; << insert interrupt code >>
    swapf   status_saved,w ; restore context
    movwf   STATUS
    swapf   w_saved,f
    swapf   w_saved,w
    retfie

Reset  bsf  STATUS,RP0
  movlw  b'00001111'
  movwf  TRISA
  movlw  b'00111111'
  movwf  TRISB
  bcf  STATUS,RP0
  bcf  INTCON,GIE
  bcf  INTCON,INTF
  bcf  CMCON,CM2
  bcf  CMCON,CM1
  bcf  CMCON,CM0
;  clrf  PORTB

start  movf  PORTA,W
  movwf  PORTB,F
  goto    start              ; loop forever


END

von Erhard (Gast)


Lesenswert?

Hallo Thomas,

zuerst mal:
    movlw   high Reset     ; load upper byte of 'start' label
    movwf   PCLATH         ; initialize PCLATH
 kannst du dir sparen

  bcf  INTCON,GIE
es wird kein Interrupt ausgeführt (wobei bei dir eh nichts drinsteht)

  movlw  b'00111111'
  movwf  TRISB

wenn bei dir an PORTB,0:5 die LED´s dran sind, musst du

  movlw  b'00000000'
  movwf  TRISB

schreiben und die PORTB,0:5 als Ausgänge definieren (0 = OUTPUT, 
1=INPUT)

Pull-Up-Widerstände an den Tastern nicht vergessen, falls nicht schon 
vorhanden!

MfG

Erhard

von gast (Gast)


Lesenswert?

Thomas (Gast)

Nimm das Demo und bastel eine Tasterabrage rein.
Ohne Int, ganz einfach.
Jetzt bin ich zu faul.

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Und falls du die Komparatoren nicht benutzen willst, solltest du die Ein 
und Ausgänge auf digital umschalten.

; PIC16F628 alle Comparatoreingänge auf Digital umschalten
; alles in der Bank 0
    BSF      CMCON, CM0
    BSF      CMCON, CM1
    BSF      CMCON, CM2

Gruß
Sven

von Thomas (Gast)


Lesenswert?

Danke für eure Antworten.

Es lag echt nur daran, die Komparatoren auf digitale Eingänge 
umzuschalten.
Also CMCON<0:2> auf 1 setzen.

Gruß,
Thomas

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Ist glaub ich der Standardfehler für Einsteiger ;-) Viel Spaß noch beim 
basteln.

Sven

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.