-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: PIC16F876A Probleme mit PORTA

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    02.11.2006
    Beiträge
    18

    PIC16F876A Probleme mit PORTA

    Anzeige

    Hallo, ich probiere nun schon seit tagen rum am meinem PIC16F876A die RA-Ports (alles Outputs) zum laufen zu bringen.

    (RA1,RA2,RA3,RA4,RA5) trotz aller bemühungen klappt es nicht ich bekomm immer nur einen ausgang zum "Durchschalten" (RA5). Woran kann das liegen? die ADCs sind aus... bin mit meinem latein am ende...



    Code:
    init
    
    ;
    ; --------------------------------
    ; Ports Initalisieren
    ; --------------------------------
    ; 0 = Output, 1 = Input
         
         	clrf 	PORTA
    		clrf 	PORTB
    		clrf 	PORTC
            
            bsf 	STATUS,RP0       ; RAM Bank 1
    		
    		; 16F876: alle ADC-Eingänge auf digital I/O umschalten
        	MOVLW 	0x06         ; PCFG3..0 = '0110'
        	MOVWF 	ADCON1
    
    		
            movlw 	b'00000000'
            movwf 	TRISA
    
            movlw 	b'11111111'
            movwf	TRISB
    
            movlw 	b'11111000'
            movwf 	TRISC
            
            bcf     STATUS, RP0     ; Bank 0
    
    		goto 	StartPIC
    ....
    [/code]

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    67
    Beiträge
    2.063
    Für Port A mußt Du neben der Richtung (Eingang oder Ausgang) auch noch initialisieren, welcher Pin analog bleibt und welcher Pin digital werden soll:
    Code:
    		; -----------------------------------------------
    		; ADCON1 (Bank 1)	AD Control-Register 1 :
    		; 7	Result Format	8 Bits in ADRESH / 2 Bits in ADRESL(7..6 000000)
    		; 6-4	-
    		; 3-0	Port Config
    		;		an7  an6  an5    AN4  AN3  AN2  AN1  AN0  Ref+  Ref-
    		;	Bits	RE2  RE1  RE0    RA5  RA3  RA2  RA1  RA0
    		;	0000	 A    A    A      A    A    A    A    A   Vdd   Vss
    		;	0001	 A    A    A      A   Ref+  A    A    A   RA3   Vss
    		;	0010	 D    D    D      A    A    A    A    A   Vdd   Vss
    		;	0011	 D    D    D      A   Ref+  A    A    A   RA3   Vss
    		;	0100	 D    D    D      D    A    D    A    A   Vdd   Vss
    		;	0101	 D    D    D      D   Ref+  D    A    A   RA3   Vss
    		;	011x	 D    D    D      D    D    D    D    D   Vdd   Vss
    		;	1000	 A    A    A      A   Ref+ Ref-  A    A   RA3   RA2
    		;	1001	 D    D    A      A    A    A    A    A   Vdd   Vss
    		;	1010	 D    D    A      A   Ref+  A    A    A   RA3   Vss
    		;	1011	 D    D    A      A   Ref+ Ref-  A    A   RA3   RA2
    		;	1100	 D    D    D      A   Ref+ Ref-  A    A   RA3   RA2
    		;	1101	 D    D    D      D   Ref+ Ref-  A    A   RA3   RA2
    		;	1110	 D    D    D      D    D    D    D    A   Vdd   Vss
    		;	1111	 D    D    D      D   Ref+ Ref-  D    A   RA3   RA2
    		; -----------------------------------------------
    		movlw	00000010b
    		;		 0			= Result format = Left
    		;			  0010	= Analog RA0-RA3 & RA5
    		;						= Digital RA4,RE0-RE2
    		movwf	ADCON1
    PortA Bit 4 (RA4) ist nur digital, deshalb funktioniert der auch immer

    Edit: Mit Brille wär das nicht passiert: Du hast ja ADCCON1 gesetzt und auch vorher auf Bank 1 umgeschaltet.

    Hast Du ganz am Anfang:
    include "p16f877a.inc" ; Registerdefinitionen einbinden
    und
    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _HS_OSC & _LVP_OFF & _DEBUG_OFF
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    02.11.2006
    Beiträge
    18
    Mein ganzer anfang sieht wie folgt aus:

    Code:
            LIST P=16F876A, R=DEC   ; Benutze Pic16F676A
    
            #include "P16F876A.INC" ; Fileheader includen
    
    		__config  _HS_OSC & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON 
    
    waitloopA	equ 0x20	; warteschleife A
    waitloopB	equ 0x21	; warteschleife B
    waitloopC	equ 0x22	; warteschleife C
    
    #define StatusLED1	PORTC,2		; Status LED 1
    #define StatusLED2	PORTC,1		; Status LED 1
    #define StatusLED3	PORTC,0		; Status LED 1
    
    #define ServoD0		PORTA,3		; ServoData 0
    #define ServoD1		PORTA,4		; ServoData 1
    #define ServoD2		PORTA,5		; ServoData 2
    
    #define MotorD0		PORTA,0		; MotorData 0
    #define MotorD1		PORTA,1		; MotorData 1
    #define MotorD2		PORTA,2		; MotorData 2
    
    init
    
    ;
    ; --------------------------------
    ; Ports Initalisieren
    ; --------------------------------
    ; 0 = Output, 1 = Input
         
         	clrf 	PORTA
    		clrf 	PORTB
    		clrf 	PORTC
            
            bsf 	STATUS,RP0       ; RAM Bank 1
    		
    		; 16F876: alle ADC-Eingänge auf digital I/O umschalten
        	MOVLW 	0x06         ; PCFG3..0 = '0110'
        	MOVWF 	ADCON1
    
    		
            movlw 	b'00000000'
            movwf 	TRISA
    
            movlw 	b'11111111'
            movwf	TRISB
    
            movlw 	b'11111000'
            movwf 	TRISC
            
            bcf     STATUS, RP0     ; Bank 0
    
    		goto 	StartPIC

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    67
    Beiträge
    2.063
    Tja, das ist soweit ok; und weil ein Ausgang funktioniert, würde ich jetzt mal einfach behaupten, Du steuerst die anderen Ausgänge nicht an
    Was ich auch vermisse, wo ist das ORG ?
    Schau Dir mal diese oder diese Assemblerbeispiele an, evtl. noch die PIC-Checkliste , vielleicht findest Du dann den Fehler.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    02.11.2006
    Beiträge
    18
    jo das org 0x00 hab ich vergessen, jedoch änderts nix an der funktion, hab extra gestern ein Tesprogramm geschrieben was nur die Sinn hatte PORTA 0-5 zu Setzten.. nur RA5 ging auf +5V (direkt am µC-Pin gemessen). schon merkwürdig

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.979
    Hallo impact!

    Es wäre gut, wenn Du Dein ganzes Testprogramm posten würdest, dann kann man erst ein Fehler suchen...

    Was macht das R=DEC (kenne ich nicht) in der ersten Zeile Deines Listings ?

    MfG

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    67
    Beiträge
    2.063
    R = Radix, R=DEC = Zahlenangaben ohne Zusatz sind dezimal.
    Andere Schreibweisen bleiben erhalten: 0xF8 ... 00011b .... 16 = dezimal
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    02.11.2006
    Beiträge
    18
    Hallo, ich hab dienacht ggn 3 die tolle idee gehabt, meine platine einfach umzubaun. Hab nun die RA ports einfach nach RC verschoben und es klappt. *Problem gekonnt übergangen*

  9. #9
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.979
    Hallo kalledom!

    Vielen Dank für Deine Erklärung ! Ich habe es noch nie benutzt, weil ich an hex gewohnt bin.

    Schöne Grüsse !

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    67
    Beiträge
    2.063
    @impact
    Es wäre aber sicherlich für Alle interesanter gewesen, wenn Du uns hättest sagen können, wo der Fehler lag. Dann müssen wir nicht in die gleiche 'Falle' tappen (obwohl ich bisher kein Problem mit Port A als Digital-Port gehabt habe).

    @PICture
    Das radix kenne ich schon aus Z80-Zeiten, ist somit uuuuuuralt
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •