PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Port A als GND nutzen? PIC16F627



RoboSam
20.01.2010, 15:25
Hi

Ich baue gerade eine 5x5 LED Matrix mit meinem PIC16F627.
Ich hab vorher nur mit dem ATtiny13 und dem ATmega8 gearbeitet.
Dort konnte ich mit sbi und cbi die auf GND oder vcc stellen. Aber bei MPLAB zeigt er bei dem programm die befehle in rot an, also als variaben.

Wie kann ich den port a auf GND schalten?

danke für alle antworten!!

KingTobi
20.01.2010, 15:28
Einfach auf Low setzen, oder täusch ich mich?

RoboSam
20.01.2010, 15:29
denk ich eigentlich auch, aber ist low nicht = aus? also gar nichts?

KingTobi
20.01.2010, 15:32
Garnichts, gibts nicht!
Low ist im idealfall 0Volt, also GND.

RoboSam
20.01.2010, 15:33
ok danke! Ich werd es gleich ausprobieren.

RoboSam
20.01.2010, 15:49
noch eine frage: Kann ich den pic ohne quarz nutzen? und wie genau kann ich ca eine sekunde den pic pausieren damit er danach eine neue LED anmacht?

KingTobi
20.01.2010, 15:52
Timer:
http://www.sprut.de/electronic/pic/grund/timer/timer.htm

Du musst mal gucken ob der nen internen Oszilator hat, ich benutze selber keine Pics

RoboSam
20.01.2010, 15:55
er hat nen kreuz bei timer0-2.

Ich hab hier noch den code von meinem k8048:

Kann ich den ohne quarz nutzen?


; *********************************************
; * Example of a delay routine *
; *********************************************

DELAY_ROUTINE MOVLW D'255' ;54 Generate approx 10mS delay at 4Mhz CLK
MOVWF TIMER2
DEL_LOOP1 MOVLW D'255' ;60
MOVWF TIMER1
DEL_LOOP2 DECFSZ TIMER1,F
GOTO DEL_LOOP2
DECFSZ TIMER2,F
GOTO DEL_LOOP1
RETLW 0

justin
20.01.2010, 16:06
Ja, kannst du ohne Quarz nutzen.

RoboSam
20.01.2010, 17:57
Hi, bei mir tut sich irgendwie garnichts.

Hiere mein code:



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
;================================================= =========================
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'255' ;54 Generate approx 10mS delay at 4Mhz CLK
MOVWF TIMER2
DEL_LOOP1 MOVLW D'255' ;60
MOVWF TIMER1
DEL_LOOP2 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'00000000'
MOVWF TRISB

MOVLW B'00000000'
MOVWF TRISA
BCF STATUS,RP0 ;Switch Back to reg. Bank 0
CLRF PORTB
;

EFFECT_1
MOVLW B'11111101' ;Activate LD1 (RB0)
MOVWF PORTB
MOVLW B'00000010' ;all RA ports are inputs
MOVWF PORTA
CALL DELAY_ROUTINE
MOVLW B'11111011' ;Activate LD2 (RB1)
MOVWF PORTB
MOVLW B'00000100' ;all RA ports are inputs
MOVWF PORTA
CALL DELAY_ROUTINE
MOVLW B'11110111' ;Activate LD3 (RB2)
MOVWF PORTB
MOVLW B'00001000' ;all RA ports are inputs
MOVWF PORTA
CALL DELAY_ROUTINE
MOVLW B'11101111' ;Activate LD4 (RB3)
MOVWF PORTB
MOVLW B'00010000' ;all RA ports are inputs
MOVWF PORTA
CALL DELAY_ROUTINE
MOVLW B'11011111' ;Activate LD5 (RB4)
MOVWF PORTB
MOVLW B'10000000' ;all RA ports are inputs
MOVWF PORTA
CALL DELAY_ROUTINE
MOVLW B'11001111' ;Activate LD6 (RB5)
MOVWF PORTB
MOVLW B'10010000' ;all RA ports are inputs
MOVWF PORTA
CALL DELAY_ROUTINE
MOVLW B'11000111' ;Activate LD6 (RB5)
MOVWF PORTB
MOVLW B'10011000' ;all RA ports are inputs
MOVWF PORTA
CALL DELAY_ROUTINE
MOVLW B'11000011' ;Activate LD6 (RB5)
MOVWF PORTB
MOVLW B'10011100' ;all RA ports are inputs
MOVWF PORTA
CALL DELAY_ROUTINE
MOVLW B'11000001' ;Activate LD6 (RB5)
MOVWF PORTB
MOVLW B'10011110' ;all RA ports are inputs
MOVWF PORTA
CALL DELAY_ROUTINE
GOTO EFFECT_1
END


Wisst ihr ob es am code liegt? Wenn nicht dann muss ich nochmal bei meinem display schauen.

Das VSS an - und VDD an + kommt ist richtig oder?

EDIT: Die ganzen beschreibungen im code hab ich nicht entfernt. Die sind alle ungültig.

PICture
20.01.2010, 18:03
Hallo!

Bei Problemen würde ich https://www.roboternetz.de/wissen/index.php/PIC_Assembler im unserem Wiki empfehlen.

MfG

RoboSam
20.01.2010, 19:21
ich find es besser wenn ein experte von euch mal mein programm anschaut.

justin
20.01.2010, 19:27
Der interne Oszillator ist nicht aktiviert. Da muss statt "_XT_OSC" "_INTRC_OSC_NOCLKOUT " hin.

RoboSam
20.01.2010, 19:31
Danke. Ich werd es sofort ändern ^^. wenn jemand noch weitere fehler entdeckt bitte melden

RoboSam
20.01.2010, 20:06
jetzt werden diese fehler beim compillieren angezeigt. Sry, aber ich bin im pic programmieren ein totaler noob. den ATtiny hätte ich viel schneller so programiert, nur hat er nur 8 pins^^



Error[115] D:\PROGRAM FILES\VELLEMAN\K8048\EXAMPLES\NEU.ASM 82 : Duplicate label ("_INTRC_OSC_NOCLKOUT" or redefining symbol that cannot be redefined)
Error[113] D:\PROGRAM FILES\VELLEMAN\K8048\EXAMPLES\NEU.ASM 85 : Symbol not previously defined (_XT_OSC)
Message[302] D:\PROGRAM FILES\VELLEMAN\K8048\EXAMPLES\NEU.ASM 128 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] D:\PROGRAM FILES\VELLEMAN\K8048\EXAMPLES\NEU.ASM 132 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] D:\PROGRAM FILES\VELLEMAN\K8048\EXAMPLES\NEU.ASM 135 : Register in operand not in bank 0. Ensure that bank bits are correct.

justin
20.01.2010, 20:41
Oh, das sieht mir sehr danach aus, als hättest du das bei den ganzen EQUs für die configbits geändert. Tschuldigung, ich dachte, das wär klar, dass das in die Zeile soll, die mit "_CONFIG" beginnt und sich noch über die nächste erstreckt. Also in die Zeile, wo er jetzt einen Error[113] meldet. Das andere bitte rückgängig machen. Dann dürfte es gehen.

Edit:
Also statt

__CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF &

_LVP_OFF & _MCLRE_ON & _XT_OSC


__CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF &

_LVP_OFF & _MCLRE_ON &_INTRC_OSC_NOCLKOUT

RoboSam
20.01.2010, 20:44
also bei mir war ein _INTRC_OSC_NOCLKOUT zu viel da. habs gelöscht und dann könnte er es compillieren

EDIT: funktionier aber immer noch net

RoboSam
21.01.2010, 14:34
Es wär net wenn mir jemand ein Programm erstellen könnte. Hier die daten vom display:

Anoden:
RA1 ;von oben nach unten angeordnet
RA2
RA3
RA4
RA7

Kathoden:
RB1 ;von links nach rechts angeordnet
RB2
RB3
RB4
RB5


vielen dank

Siro
26.01.2010, 15:37
Hallo,
hast Du den Pin 4 MCLR über einen Widerstand an Plus angeschlossen ?
Du hast in deinem Configurationsword _MCLRE_ON gesetzt.
Dadurch ist es notwendig den MCLR Pin über einen Widerstand an Plus zu hängen. Sonst wird der PIC nicht richtig anlaufen.
Oder du schaltest den PIN aus mit _MCLRE_OFF.
mfg Siro