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
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
Thomas (Gast) Nimm das Demo und bastel eine Tasterabrage rein. Ohne Int, ganz einfach. Jetzt bin ich zu faul.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.