Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller Ports schalten nicht


von Bastian (Gast)


Lesenswert?

Hallo,

ich habe ein kleines Problem mit meinem PIC18F4685. Ich möchte ledeglich 
einen Port einschalten. Mein C Programm schaut wie folgt aus:
1
#include <PIC18F4685.h>
2
#include <htc.h>
3
#pragma config WDT = OFF
4
#pragma config LVP = OFF
5
6
void main (void)
7
{
8
OSCCON = 0b01110010;    //Interner Quarz wird verwendet
9
SWDTEN = 0;
10
TRISC = 0;
11
12
   while (1)
13
   {
14
    PORTC = 0b11111111;
15
   }
16
}

Wenn ich dieses Programm mit dem PICkit2 überspiele wird der PORTC nicht 
eingeschalten. Alle PORTs bleiben auf 0V. Warum?

von Michi (Gast)


Lesenswert?

Weil du die Pins nicht als Ausgang defninert hast.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

von Michi (Gast)


Lesenswert?

Sry, zu spät gesehen das du PIC verwendest, wie es da ist weiß ich 
nicht.

von piggy (Gast)


Lesenswert?

Probier mal den LATC Port...

piggy

von Bastian (Gast)


Lesenswert?

Also, hier mal der Beispielcode aus dem Datenblatt, zur Initialisierung 
des PORTs C allerdings in Assembler:

EXAMPLE 10-3: INITIALIZING PORTC

CLRF PORTC ; Initialize PORTC by
           ; clearing output
           ; data latches

Wäre bei mir dann PORTC = 0b00000000;

CLRF LATC  ; Alternate method
           ; to clear output
           ; data latches

In meinem Programm: LATC = 0b00000000;

MOVLW 0CFh ; Value used to
           ; initialize data
           ; direction

Weiß ich nicht, was ich angeben müsste, wird doch eigendlich über TRIS 
geregelt, oder?

MOVWF TRISC ; Set RC<3:0> as inputs
            ; RC<5:4> as outputs
            ; RC<7:6> as inputs

In meinem Programm: TRISC = 0;

von Linüx (Gast)


Lesenswert?

Bastian schrieb:
> Wenn ich dieses Programm mit dem PICkit2 überspiele wird der PORTC nicht
> eingeschalten. Alle PORTs bleiben auf 0V. Warum?

Läuft denn überhaupts was? Richtige ConfigBits für deine Taktquelle, 
Brownout gecheckt? MCLR richtig beschaltet? Schreiben tun wir in LATx 
und nicht PORTx. In PORTx wird nur gelesen - nie geschrieben. Zufällig 
die Analogen Eingänge konfiguriert? Stichwort ANSEL, etc.

von Bastian (Gast)


Lesenswert?

Also, zunächst kann ich sagen, dass am Reset 5V Anliegen, was ja 
bedeutet, dass er PIC nicht zurückgesetzt wird.
Brownout habe ich mit #pragma config BOREN = OFF ausgeschalten.

Hab mal ein neues Programm geschrieben, mit dem am PIN RC0 5V ausgegeben 
werden sollen. Habe sicherheitshalber mal den TMR1CS auf Internen Takt 
umgestellt.
A/D Wandler sind auf dem gesamten PORTC nicht vorhanden.

Hier mein Code
1
#include <PIC18F4685.h>
2
#include <htc.h>
3
#pragma config WDT = OFF
4
#pragma config LVP = OFF
5
#pragma config BOREN = OFF
6
7
void main(void)
8
{
9
    OSCCON = 0b01110010;    //Oszillator Einstellungen
10
    SWDTEN = 0;             //WDT OFF
11
12
    //--------PORTC Initialisieren---------------------------
13
    PORTC = 0b00000000;
14
    LATC = 0b00000000;
15
    TRISC = 0;          //PORTC als Ausgang
16
    TRISC0 = 0;         //Pin RC0 auf Ausgang
17
    TMR1CS = 0;         //Timer1 auf Internen Takt schalten (RC0)
18
19
20
21
    while (1)
22
    {
23
        
24
        LATC = 0b11111111; //Gesamten PORTC einschalten
25
        LATC0 = 1;         //RC0 einschalten 
26
      
27
    }
28
}

Die Oszillatoreinstellungen müssten soweit Stimmen, ich habe im OSCCON 
Register volgendes eingestellt:

OSCCON = 0b01110010;

bit 7: IDLEN Device enters Sleep mode on SLEEP Instruction

bit 6-4: 111 8MHz (INTOSC drives clock directly)

bit3: Oscillator Start-up Timer time-out is running; primary oscillator 
is not ready

bit2: IOFS: INTOSC frequency is not stable

bit1-0: SCS1:SCS0 System Clock Select bits
        1x = Internal oscillator Block

von johannes (Gast)


Lesenswert?

hi,

versuch zu erstmal den port als ausgang zu definieren und dann dem 
ausgang was zuzuweisen. also bevor du mit latch was machst.
1
#include <PIC18F4685.h>
2
#include <htc.h>
3
#pragma config WDT = OFF
4
#pragma config LVP = OFF
5
#pragma config BOREN = OFF
6
7
void main(void)
8
{
9
    OSCCON = 0b01110010;    //Oszillator Einstellungen
10
    SWDTEN = 0;             //WDT OFF
11
12
    //--------PORTC Initialisieren---------------------------
13
    TRISCCLR = 0xFFFF;          //PORTC als Ausgang
14
    LATCCLR = 0xFFFF;  //Port auf low setzen
15
16
    TMR1CS = 0;         //Timer1 auf Internen Takt schalten (RC0)
17
18
19
20
    while (1)
21
    {
22
        
23
        LATCSET = 0bFFFF; //Gesamten PORTC einschalten
24
        LATCSET = 0x0001;         //RC0 einschalten 
25
      
26
    }
27
}

habe bisher nicht viele pics benuzt. nur 32bit er.
ich würde dir auch empfehlen das setzen und löschen der pins mit xxxSET 
und xxxCLR zu machen. so packst du nicht immer den gesamten port an

von Bastian (Gast)


Lesenswert?

habs getestet,
funktioniert immer noch nicht. Mittlerweile habe ich die befürchtung, 
dass der Microcontroller einfach schläft.
Im Datenblat steht auch einiges Dazu ich habe es nur nicht ganz 
verstanden. Soweit ich es verstanden habe muss man das OSCTUNE Register 
auf 0b01001111 setzen. Bin mir aber nicht sicher.

von Chris B. (dekatz)


Lesenswert?

Bastian schrieb:
> Soweit ich es verstanden habe muss man das OSCTUNE Register
>
> auf 0b01001111 setzen. Bin mir aber nicht sicher.

Mit Bit#6 (OSCTUNE.PLLEN) schaltest du auf PPL-Betrieb  - wenn du mit 
internem Oszillator im 4MHz o. 8MHz Mode arbeitest.
Die restlichen Bit "tunen" nur die Frequenz des interne Oszillatores - 
hat aber mit deinem Problem ganz sicher nix zu tun.

Und CONFIG1H auf 0b00001000 setzen = Interner Oszillator, Portfunction 
on RA6 & RA7. Ist womöglich Defaultmäßig so gesetzt, aber man kann ja in 
MPLAB direkt an den CONFIG-Registern "drehen" und bei 
gesetzten/gelöschten Häckchen wird dann diese Einsteillung ins HEX 
übernommen...keine Ahnung was du alles gemacht hast...

von Bastian (Gast)


Lesenswert?

Das eigendliche Problem ist ja, dass ich nicht Debuggen kann. Es kommt 
imer die Meldung:
No source Code lines were found at current PC 0x0
Dann könnte ich ja schnell schauen wo es klemmt.

von Purzel H. (hacky)


Lesenswert?

Bei 0x00 sollte doch der Resetvektor sein... mach den mal rein.

von Bastian (Gast)


Lesenswert?

Chris B. schrieb:
> Ist womöglich Defaultmäßig so gesetzt, aber man kann ja in
>
> MPLAB direkt an den CONFIG-Registern "drehen" und bei
>
> gesetzten/gelöschten Häckchen wird dann diese Einsteillung ins HEX
>
> übernommen...keine Ahnung was du alles gemacht hast...

Im MPLAB X habe ich ansich nichts eingestellt, ledeglich die Register im 
C File, wie bereits beschrieben.

Siebzehn und Fuenfzehn schrieb:
> Bei 0x00 sollte doch der Resetvektor sein... mach den mal rein.

Hört sich leicht an, habe aber nichts passendes gefunden. Weist du 
wonach ich suchen muss?

von Chris B. (dekatz)


Lesenswert?

Den Resetvektor erzeugt ohnehin der Compiler.
WIE wurde den das Projekt erzeugt? Als "Stand alone" oder als "Library" 
Project.
Und Compiliert wurde mit "Clean and build for Debugging" oder nur "Clean 
and build"?

von Bastian (Gast)


Lesenswert?

Das Projekt habe ich als Stand alone Projekt erstellt.
Fürs debuggen klicke ich auf "Debug Main Project", dann erscheint in der 
Debugger Console:
Launching
Programming target
No source code lines were found at current PC 0x0
User program stopped
User program finished


Als compiler verwende ich den hi-tech-picc18 (v9.80)

von Chris B. (dekatz)


Lesenswert?

Und "Build for Debugging" bzw. "Clean and build for Debugging" gemacht?
Als Debugger PicKit2 ausgewählt? (wobei mir dieser in MPLABX "Gelb" 
markiert wird, weiss aber jetzt nicht auf Anhieb was das für 
Auswirkungen hat).

von Bastian (Gast)


Lesenswert?

Ich kann halt zwischen Debug Main Project und Launch Debugger Main 
Project auswählen.

Bei Debug main project kommt die Fehlermeldung mit PC 0x0 und bei Launch 
Debugger Main Project schließt sich einfach das MPLAB.

PICkit2 habe ich als Debugger ausgewählt

von Chris B. (dekatz)


Lesenswert?

Ja, in der oberen Leiste under "Debug".
In der Leiste darunter sollten sich 2 Icons befinden ("Hammer" und 
"Hammer mit Besen"). Dort kann man zwischen "Build Project" und "Build 
for Debugging" auswählen.

"Debug" und "Launch Debugger" funkteonieren nur wenn auch für 
"Debugging" Compiliert wurde (nehme an, gilt auch für HiTech C-18)

Habe hier keinen HiTech C-18 installiert, kann also auch nicht testen 
was da unter MPLABX an "Build-Optionen" wählbar ist!?

von Bastian (Gast)


Lesenswert?

funktioniert immer noch nicht.
Habe Clean and Build for Debugging Main Project ausgewählt, und dann auf 
Debug main Projekt geklickt, und es kommt dann wieder die Meldung No 
source code lines were found at current PC 0x0.

von Horst (Gast)


Lesenswert?

Das hat keinen Sinn, ich würd's sein lassen.
Mach was anderes

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.