www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Einsteigerproblem mit PIC16F627


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas (Gast)

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

Autor: Sven Stefan (stepp64) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven Stefan (stepp64) Benutzerseite
Datum:

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

Sven

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.