Forum: Mikrocontroller und Digitale Elektronik Pic18f2550 LED ansteuern


von Meike W. (meike)


Lesenswert?

Hallo,

ich versuche verzweifelt eine LED an irgend einem Pin des Pic18f2550 
anzusteuern. Ich verwende MPLAB.

Mein Programm sieht so aus:
1
LIST P=18F2550       
2
#include "P18F2550.INC" (die Datei liegt im gleichen Ordner wie die asm Datei)
3
4
  CONFIG    PLLDIV = 1 
5
  CONFIG    CPUDIV = OSC1_PLL2
6
  CONFIG    USBDIV = 1
7
  CONFIG    FOSC = INTOSC_HS
8
  CONFIG    IESO = OFF
9
  CONFIG    PWRT = ON
10
  CONFIG    BOR = OFF
11
  CONFIG    BORV = 2
12
  CONFIG    VREGEN = ON
13
  CONFIG    WDT = OFF
14
  CONFIG    WDTPS = 1
15
  CONFIG    MCLRE = ON
16
  CONFIG    LPT1OSC = OFF
17
  CONFIG    PBADEN = OFF
18
  CONFIG    CCP2MX = OFF
19
  CONFIG    STVREN = OFF
20
  CONFIG    LVP = OFF
21
  CONFIG    XINST = OFF
22
  CONFIG    DEBUG = ON  
23
24
25
  ORG  0x0000      
26
  goto  Main
27
28
Main:
29
30
31
  CLRF  PORTB
32
  CLRF  LATB
33
34
  CLRF    TRISB             ; Port B auf Ausgang umschalten
35
36
  MOVLW   0x0F ; Configure A/D
37
  MOVWF   ADCON1 ; alle Pins als digitale Eingänge
38
39
Loop:
40
   
41
  CLRF  LATA
42
  BSF  LATA,RA1
43
44
  MOVLW  0x03
45
  MOVWF  LATA
46
47
goto Loop
48
49
50
END


Das Problem ist, dass nicht mal der MPLAB Simulator die Werte in LATA 
weder mit BSF noch mit MOVWF ändert. Es tut sich einfach nichts. Genauso 
wenig ändert sich etwas in PORTA, wenn ich LATA durch PORTA ersetzte.
Alles andere konnte ich im Simulator nachvollziehen und funktioniert. 
Kann mir jemand erklären woran das liegt?

Ihr würdet mir auch sehr helfen, wenn ihr mir erklärt wie ich alles 
richtig konfigurieren muss (CONFIG ...) damit der interne Oszillator 
verwendet wird.

Viele Grüße
Meike

von morph1 (Gast)


Lesenswert?

ähm du setzt die richtungsregister vom portB und schreibst dann ins 
latch vom portA?

vl probierst es mal auf dem gleichen port ;)

von Meike W. (meike)


Lesenswert?

Sorry, das ist ein copy paste Fehler. In meinem Programm ist alles 
PortA.
Trotzdem setzt er die Werte im Latch nicht. Wo liegt also der Fehler?

von Marco S. (sharkman)


Lesenswert?

bin mir grad nicht sicher wie es bei den 18fxxx ist, aber beim 16fxxx 
musst meistens vorher die bank wechseln, bevor du TRISX ausführst. musst 
mal im datenblatt schauen, aber da könnte der fehler liegen.

weiterhin solltest du vielleicht erst die Digitalen ausgänge setzen und 
sie dann konfigurieren. also erst TRISX und dann PORTX

von Jens (Gast)


Lesenswert?

Die Ports haben meist zwei oder mehr Funktionen, welche über die 
Konfigurationsregister selektiert werden. Bei Port A sind es die 
analogen Eingänge. Dummerweise sind die nach einem Reset aktiv, womit 
die digitalen Funktionen (I/O) quasi tot sind. Ich bin mir jetzt 
allerdings nicht 100%ig sicher, welches Register da beschrieben werden 
muss, am besten mal ins Datenblatt schauen.

PS: Gute Seite für PIC-Einsteiger ist www.sprut.de.

von Jens (Gast)


Lesenswert?

Man sollte halt das Listing richtig lesen, sorry...

Hier noch mal das Beispiel vom Datenblatt zum Initialisieren von PortA, 
vielleicht spielen die Komperatoren noch eine Rolle.

CLRF PORTA ; Initialize PORTA by
; clearing output
; data latches
CLRF LATA ; Alternate method
; to clear output
; data latches
MOVLW 0Fh ; Configure A/D
MOVWF ADCON1 ; for digital inputs
MOVLW 07h ; Configure comparators
MOVWF CMCON ; for digital input
MOVLW 0CFh ; Value used to
; initialize data
; direction
MOVWF TRISA ; Set RA<3:0> as inputs
; RA<5:4> as outputs

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
Noch kein Account? Hier anmelden.