|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 26.02.2007, 19:09 Titel: Problem mit PIC16F627 |
|
|
Hallihallo
Seit kurzem schlage ich micht mit dem 16F627 von MicroChip rum...
Habe mir als C-Compiler PICC-Lite runtergeladen, und benutze als IDE MPLAB 7.5.
Mein Problem ist, dass ich am Port RA0 einen Taster höngen habe und diesen abfragen möchte.
Also im Code das Tristateregister auf 0 gesetzt (= hochomig), und dann über die Variable RA0 abgefragt...
Doch anscheinend ist der Pegel *immer* null.
Bei den Config-Bits habe ich auch schon alles Erdenkliche ausprobiert, doch vielleicht hat jemand noch eine Idee?
Dass der PORTA Analogfunktionen hat, ist mir klar, und dass man die über das CMCON-Regiser ausschalten kann,
auch, aber ein "CMCON = 0;" hat's bis jetzt auch nocht nicht gebracht...
Hat jemand ein paar Ideen?
Bin für jeden Vorschlag dankbar
Viele Grüße,
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 26.02.2007, 19:13 Titel: |
|
|
Ich hab zwar keine Ahnung von Microkontrollern (naja, nich wirklich) aber ich werd meinen Paps fragen, der hat Ahnung.
Mit "Variable RA0" - is das nich eher ein Register?
(sry für den Hilflosen Beitrag, vlt. mutiert er ja noch in die Lösung ) |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 26.02.2007, 19:24 Titel: |
|
|
Hängs zur not an einen anderen Port
Alternativ klemm mal n wiederstand auf Plus, udn dem eingangspin. Dann ziehst mit dem Taster direkt am Pic-Pin die Spannugn nach masse rutner. Die Pics haben soweit ich weis, keine Pulldown wiederstände drin. Daher musste das selber machen.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 26.02.2007, 20:25 Titel: |
|
|
Vielleicht im ANSEL-Register von analog auf digital umschalten?
EDIT: Habe gerade im Datenblatt gesehen, dass das ein Koperator- aber kein ADC-Eingang ist. ANSEL gibt's also nicht. _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 26.02.2007, 22:00 Titel: |
|
|
@ThePuppetMaster: Ist schon erledigt, da ich das Velleman PIC-Kit von Conrad benutze...
@Skilltronic: Aber wie schalte ich den Komparator ab? Hier ist mal ein Assembler-Listing von Velleman,
bei dem die Tasteransteuerung funktioniert, vielleicht sagt dir das was:
Code: |
;**************************************************************************
;* VELLEMAN High-Q KIT K8048/VM111 SAMPLE SOFTWARE *
;**************************************************************************
;* Microchip PIC(tm) Programmer & experiment board *
;* DEMO2 program for testing K8048 with PIC16F627(A)! *
;* Generate 4 LED light effects, you can select these with SW1..4 *
;**************************************************************************
;* (C) VELLEMAN Components,2003 All rights reserved *
;**************************************************************************
;* Hardw. Rev: P8048'1 Softw. Rev: 1.21 *
;* OSC.......: XT 4MHz Max. POWER.....: 12V DC *
;**************************************************************************
W EQU H'0000'
F EQU H'0001'
;----- Register Files------------------------------------------------------
INDF EQU H'0000'
TMR0 EQU H'0001'
PCL EQU H'0002'
STATUS EQU H'0003'
FSR EQU H'0004'
PORTA EQU H'0005'
PORTB EQU H'0006'
INTCON EQU H'000B'
OPTION_REG EQU H'0081'
TRISA EQU H'0085'
TRISB EQU H'0086'
CMCON EQU H'001F'
;----- STATUS Bits --------------------------------------------------------
IRP EQU H'0007'
RP1 EQU H'0006'
RP0 EQU H'0005'
NOT_TO EQU H'0004'
NOT_PD EQU H'0003'
Z EQU H'0002'
DC EQU H'0001'
C EQU H'0000'
;==========================================================================
;
; RAM Definition
;
;==========================================================================
__MAXRAM H'01FF'
__BADRAM H'07'-H'09', H'0D', H'13'-H'14', H'1B'-H'1E'
__BADRAM H'87'-H'89', H'8D', H'8F'-H'91', H'93'-H'97', H'9E'
__BADRAM H'105', H'107'-H'109', H'10C'-H'11F', H'150'-H'16F'
__BADRAM H'185', H'187'-H'189', H'18C'-H'1EF'
;==========================================================================
;
; Configuration Bits
;
;==========================================================================
_BODEN_ON EQU H'3FFF'
_BODEN_OFF EQU H'3FBF'
_CP_ALL EQU H'03FF'
_CP_75 EQU H'17FF'
_CP_50 EQU H'2BFF'
_CP_OFF EQU H'3FFF'
_DATA_CP_ON EQU H'3EFF'
_DATA_CP_OFF EQU H'3FFF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_LVP_ON EQU H'3FFF'
_LVP_OFF EQU H'3F7F'
_MCLRE_ON EQU H'3FFF'
_MCLRE_OFF EQU H'3FDF'
_ER_OSC_CLKOUT EQU H'3FFF'
_ER_OSC_NOCLKOUT EQU H'3FFE'
_INTRC_OSC_CLKOUT EQU H'3FFD'
_INTRC_OSC_NOCLKOUT EQU H'3FFC'
_EXTCLK_OSC EQU H'3FEF'
_LP_OSC EQU H'3FEC'
_XT_OSC EQU H'3FED'
_HS_OSC EQU H'3FEE'
__CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC
;==========================================================================
; Variable Definition
;==========================================================================
;INPUTS
SW1 EQU H'00' ;SW1 is triggering RA0
SW2 EQU H'01' ;SW2 is triggering RA1
SW3 EQU H'02' ;SW3 is triggering RA2
SW4 EQU H'03' ;SW4 is triggering RA3
TIMER1 EQU H'20' ;Used in delay routine
TIMER2 EQU H'21' ; " " "
PATERN EQU H'22' ;Pattern data for effect's
ORG 0 ;Reset vector address
GOTO RESET ;goto RESET routine when boot.
; *********************************************
; * Example of a delay routine *
; *********************************************
DELAY_ROUTINE MOVLW D'100' ;54 Generate approx 10mS delay at 4Mhz CLK
MOVWF TIMER2
DEL_LOOP1 MOVLW D'100' ;60
MOVWF TIMER1
DEL_LOOP2 BTFSC PORTA,SW1
GOTO MENU
BTFSC PORTA,SW2
GOTO MENU
BTFSC PORTA,SW3
GOTO MENU
BTFSC PORTA,SW4
GOTO MENU
DECFSZ TIMER1,F
GOTO DEL_LOOP2
DECFSZ TIMER2,F
GOTO DEL_LOOP1
RETLW 0
; **********************************
; ** RESET : main boot routine **
; **********************************
RESET MOVLW B'00000111' ;Disable Comparator module's
MOVWF CMCON
;
BSF STATUS,RP0 ;Switch to register bank 1
;Disable pull-ups
;INT on rising edge
;TMR0 to CLKOUT
;TMR0 Incr low2high trans.
;Prescaler assign to Timer0
;Prescaler rate is 1:256
MOVLW B'11010111' ;Set PIC options (See datasheet).
MOVWF OPTION_REG ;Write the OPTION register.
;
CLRF INTCON ;Disable interrupts
MOVLW B'11000000'
MOVWF TRISB ;RB7 & RB6 are inputs.
;RB5...RB0 are outputs.
MOVLW B'11111111' ;all RA ports are inputs
MOVWF TRISA
BCF STATUS,RP0 ;Switch Back to reg. Bank 0
CLRF PORTB
GOTO EFFECT_1
;
MENU CLRF PORTB
;
BTFSC PORTA,SW1
GOTO EFFECT_1
BTFSC PORTA,SW2
GOTO EFFECT_2
BTFSC PORTA,SW3
GOTO EFFECT_3
BTFSC PORTA,SW4
GOTO EFFECT_4
GOTO MENU
EFFECT_1 MOVLW B'11111111' ;
MOVWF PORTB
CALL DELAY_ROUTINE
MOVLW B'00000000' ;
MOVWF PORTB
BTFSC PORTA,SW1
GOTO EFFECT_1
E1 MOVLW B'00100000' ;
MOVWF PORTB
CALL DELAY_ROUTINE
GOTO E1
EFFECT_2 MOVLW B'11111111' ;
MOVWF PORTB
CALL DELAY_ROUTINE
MOVLW B'00000000' ;
MOVWF PORTB
BTFSC PORTA,SW2
GOTO EFFECT_2
E2 MOVLW B'00000001' ;
MOVWF PORTB
CALL DELAY_ROUTINE
GOTO E2
EFFECT_3 MOVLW B'11111111' ;
MOVWF PORTB
CALL DELAY_ROUTINE
MOVLW B'00000000' ;
MOVWF PORTB
BTFSC PORTA,SW3
GOTO EFFECT_3
E3 MOVLW B'00000001' ;
MOVWF PORTB
CALL DELAY_ROUTINE
GOTO E3
EFFECT_4 MOVLW B'11111111' ;
MOVWF PORTB
CALL DELAY_ROUTINE
MOVLW B'00000000' ;
MOVWF PORTB
BTFSC PORTA,SW4
GOTO EFFECT_4
E4 MOVLW B'00000001' ;
MOVWF PORTB
CALL DELAY_ROUTINE
GOTO E4
END
|
Ich programmiere wie gesagt nur in C und beherrsche kein Assembler.
Kann mir jemand weiterhelfen?
Schönen Abend noch,
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 27.02.2007, 00:17 Titel: |
|
|
Hallo
Ich habe schon länger nichts mehr mit PICs gemacht und musste mich erst wieder ein bisschen einlesen, aber vielleicht habe ich jetzt was gefunden. Der Arbeitsmodus der Komperatoren wird über die drei niederwertigsten Bit (CS2-CS0) des CMCON-Registers gesteuert. Um die Komperatoren abzuschalten, müssen diese drei Bit gesetzt sein, versuche also mal, anstatt einer 0 den Wert 7 in CMCON zu schreiben. In deinem Beispielcode passiert das hier:
Code: | MOVLW B'00000111' ;Disable Comparator module's
MOVWF CMCON |
Also CMCON = 7 statt CMCON = 0 wenn das mit deinem Compiler so geht. Dann schreibst du noch:
jb hat Folgendes geschrieben: | Also im Code das Tristateregister auf 0 gesetzt (= hochomig), und dann über die Variable RA0 abgefragt... |
Aber die Bits müssen in TRISA auf eins gesetzt werden, um die entsprechenden Pins auf Input und die Ausgangstreiber hochohmig zu schalten.Auf Seite 29 des Datenblatts gibt es auch ein Beispiel in Assembler für die Initialisierung als digitaler Eingang. In deinem Code werden alle TRISA-Bits gesetzt und damit alle Pins auf Input geschaltet:
Code: | MOVLW B'11111111' ;all RA ports are inputs
MOVWF TRISA |
Hast du dich schon mit PIC-Assembler beschäftigt? Mit seinen wenigen Befehlen ist es leicht zu erlernen und wenn es auch auf den ersten Blick etwas umständlich erscheint, ist es oft von Vorteil, wenn man wirklich die Kontrolle über jedes einzelne Bit hat.
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 27.02.2007, 11:17 Titel: |
|
|
Jo danke, schau ich mir mal zu Hause anschauen (bin gerade in der Schule)
;it PIC-Assembler habe ich mich zugegebenermaßen noch nicht beschäftigt, da
die vielen Banks mich etwas verwirren... Werde ich mir später bei umfangreicheren
Projekten auf jeden Fall mal ansehen, aber jetzt geht's ja nur um die Funktionsweise
Das CMCON = 7; werde ich beim C-Compiler PICC-Lite mal versuchen.
Danke auf jeden Fall schonmal.
Viele Grüße,
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 27.02.2007, 14:20 Titel: |
|
|
jb hat Folgendes geschrieben: | da die vielen Banks mich etwas verwirren... |
Der 16F627 hat doch nur zwei? Aber wo du es ansprichst, ich weiss nicht, ob das mit dem C-Compiler automatisch passiert, aber in Assembler müsste man die Bank noch umschalten, da CMCON in Bank 0 liegt und TRISA in Bank 1. _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 27.02.2007, 16:43 Titel: |
|
|
Der C-Compiler macht's automatisch. Aber was ich meinte, ist, dass man sich für Assembler längere Zeit einarbeiten muss.
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 27.02.2007, 19:56 Titel: |
|
|
Das mit Tris hab ich Anfangs auch chronisch verwechselt ...
Der Trick ist:
1 ist Input
0 ist Output
1 sieht aus wie I und 0 wie O
PMedia hat Folgendes geschrieben: | Mit "Variable RA0" - is das nich eher ein Register? |
Bei PIC werden die Bezeichnungen Varibeln und Register "wild durcheinander" verwedentet.
(In ASM wäre es übrigens PortA.0 wobei das .0 für 0 Bit steht)
ThePuppetMaster hat Folgendes geschrieben: | Die Pics haben soweit ich weis, keine Pulldown wiederstände drin. Daher musste das selber machen. |
Ich bin jetzt zu Faul um ein Datenblatt zu suchen wo das Gegenteil drin steht, aber bei einigen PICs kannst an PortB Interne Pull Ups einschalten.
Übrigens Widerstand und nicht Wiederstand
Edit:
Skilltronic hat Folgendes geschrieben: | Hast du dich schon mit PIC-Assembler beschäftigt? Mit seinen wenigen Befehlen ist es leicht zu erlernen und wenn es auch auf den ersten Blick etwas umständlich erscheint, ist es oft von Vorteil, wenn man wirklich die Kontrolle über jedes einzelne Bit hat. |
Wobei man beim Bit setzten/löschen an einem Port etwas aufpassen sollte, weil BSF und BCF Read-Write Kommandos sind.
Wer zu kurz hintereinander Bits von einem Port ändert bekommt dank dieses Verhaltens Probleme. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.02.2007, 21:18 Titel: |
|
|
[OT]
herzlichen glückwunsch an den themenstarter, bei dir hat das unix-zeitalter begonnen (1970er post!)
[/OT] _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 28.02.2007, 01:37 Titel: |
|
|
Hallo
jb hat Folgendes geschrieben: | Aber was ich meinte, ist, dass man sich für Assembler längere Zeit einarbeiten muss. |
Ich finde, das Gegenteil ist der Fall. Es gibt kaum etwas logischeres oder verständlicheres als PIC-Assembler. Es gibt nur 35 Befehle, die im Prinzip auch noch selbsterklärend sind. Wie z.B. das MOVLW aus dem Beispiel. Das steht für move l to w oder so ähnlich, was bedeutet kopiere den literalen (L), also ausgeschriebenen Wert (in dem Fall b'00000111' für eine binäre Sieben) ins Arbeitsregister (W). MOVLW b'00000111' schreibt also sieben ins Arbeitsregister. Im Datenblatt ist ab Seite 106 der komlette Befehlssatz ausführlich erklärt. Die Einstellungen für den PIC wie diese Geschichte mit dem TRISA und CMCON sind komplizierter als das Programmieren an sich.
Funktioniert es denn jetzt?
jojo hat Folgendes geschrieben: | [OT]
herzlichen glückwunsch an den themenstarter, bei dir hat das unix-zeitalter begonnen (1970er post!)
[/OT] |
Es gibt sogar Leute, die sich für keinen noch so sinnfreien Kommentar zu schade sind und sich nach dieser Rechnung schon ins 32. Jahrhundert gebeamt haben. (3103er post!)
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 28.02.2007, 18:14 Titel: |
|
|
Einige weitere Vorteile von ASM:
Ich und Skilltronic können dir direkt helfen
Die Bauteil Auswahl ist für einen ASM Programmierer grösser
Der Ressourcen Bedarf ist kleiner
Relativ Einfache Implementierung von Zeitkritischen abläufen
Beispiel Codes zur Initalisierung sind im Datenblatt
...
Übrigens JB:
Bist du die Sicher, das wenn du RA0 abfragst, wirklich den Schalter abfragst?
RA0 ist ja Pin 0 von PortA.
Ich weiss nicht, wie man in PICC-Lite auf einen einzelnen Pin zugreift, aber RA0 sieht für mich schon etwas komisch aus.
(In ASM wäre es wie gesagt PortA.0)
@ThePuppetMaster
Der PIC16F627 übrigens zumindest an PortB interne Pullups, siehe
Datenblatt. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 28.02.2007, 18:24 Titel: |
|
|
Hui .. nice ... Dachte, die haben alle keine Drin ... (War früher ein Grund, warum ich die Dinger wie Brot gefressen hab ...)
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 02.03.2007, 16:32 Titel: |
|
|
@Michael: RA0 ist schon in Ordnung, sonst hätte ich es ja nicht geschrieben ( )
Wird über ein Header-File als das erste Bit des Ports A definiert.
@Skilltronic: Ja, jetzt klappt's. Danke sehr Wegen der Assemblersache: Da ich in C schon einiges programmiert habe,
fällt mir dieses momentan eher leichter. Wenn ich mal Zeit haben werde, kann ich micht ja mal an Assembler heranwagen,
aber momentan sieht's eher mau aus.
Viele Grüße,
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|