Forum: Mikrocontroller und Digitale Elektronik PIC18F46K80 Anfängerfrage


von Ingo S. (schicki)


Lesenswert?

Hallo Zusammen,

ich versuche gerade meine Projekte auf den PIC18F46K80 zu migrieren. 
Folgende Schnittstellen konnte ich schon erfolgreich umsetzten. Mir 
macht das einfachste vom einfachen Probleme, und ich weiß nicht 
warum....

Prozzesor: PIC18F46K80 5 Volt Variante DIP40 Gehäuse
Taktfrequenz: 25 MHz
C-Compiler: C18 aktuelle Version

- ADC Funktionen gehen
- USART Funktionen gehen
- I²C-Bus funktioniert

Ich kann PORTs (LATs) nur beschreiben, nicht einlesen.. Warum? Hier wäre 
ein kleines Beispiel. Am PORTB liegt 0xFF an. Dieser Wert soll negiert 
werden, und an PORTD dargestellt werden.

Ich weiß bei Gott nicht warum ob es meine Config-Bits oder die 
Initalisierung ist. Was ist falsch. Ich glaube nicht dass ich mehrere 
defekte Bausteine oder defekte Hardware habe. Kennt sich jemand mit 
diesem neuen PIC aus? Ich kenn mich am PIC18F452 oder dem PIC18F97J60 
aus aber sowas habe ich bisher noch nie erlebt...

Grüße
Ingo

1
/************************************************************************/
2
//Include Dateien
3
/************************************************************************/
4
#include <p18f46k80.h>        // PIC18F46K80 auswählen
5
#include <stdio.h>        // Standard-Bibiotheken 
6
#include "SP_PIC18F46K80.H"
7
#include "Warten_MS.C"
8
#include "Segment.C"
9
#include "USART.C"
10
/************************************************************************/
11
12
/************************************************************************/
13
// Microcontroller-Konfiguration
14
/************************************************************************/
15
// CONFIG1L
16
#pragma config RETEN = OFF    
17
#pragma config INTOSCSEL = LOW 
18
#pragma config SOSCSEL = DIG
19
#pragma config XINST = OFF
20
21
// CONFIG1H 
22
#pragma config FOSC = HS2       // Oscillator (HS oscillator (Medium power, 16 MHz - 25 MHz)) 
23
#pragma config PLLCFG = OFF      
24
#pragma config FCMEN = OFF       
25
#pragma config IESO = OFF      
26
27
// CONFIG2L 
28
#pragma config PWRTEN = OFF     // Power Up Timer (Disabled) 
29
#pragma config BOREN = OFF 
30
#pragma config BORV = 3         // Brown-out Reset Voltage bits (1.8V) 
31
#pragma config BORPWR = ZPBORMV // BORMV Power level (ZPBORMV instead of BORMV is selected) 
32
33
// CONFIG2H 
34
#pragma config WDTEN = SWDTDIS  // Watchdog Timer (WDT enabled in hardware; SWDTEN bit disabled) 
35
#pragma config WDTPS = 1048576  // Watchdog Postscaler (1:1048576) 
36
37
// CONFIG3H 
38
#pragma config CANMX = PORTC    // ECAN Mux bit (ECAN TX and RX pins are located on RB2 and RB3, respectively) 
39
#pragma config MSSPMSK = MSK7   // MSSP address masking (7 Bit address masking mode) 
40
#pragma config MCLRE = ON       // Master Clear Enable (MCLR Enabled, RG5 Disabled) 
41
42
// CONFIG4L 
43
#pragma config STVREN = OFF      // Stack Overflow Reset (Disabled) 
44
#pragma config BBSIZ = BB2K     // Boot Block Size (2K word Boot Block size) 
45
46
// CONFIG5L 
47
#pragma config CP0 = OFF        // Code Protect 00800-03FFF (Disabled) 
48
#pragma config CP1 = OFF        // Code Protect 04000-07FFF (Disabled) 
49
#pragma config CP2 = OFF        // Code Protect 08000-0BFFF (Disabled) 
50
#pragma config CP3 = OFF        // Code Protect 0C000-0FFFF (Disabled) 
51
52
// CONFIG5H 
53
#pragma config CPB = OFF        // Code Protect Boot (Disabled) 
54
#pragma config CPD = OFF        // Data EE Read Protect (Disabled) 
55
56
// CONFIG6L 
57
#pragma config WRT0 = OFF       // Table Write Protect 00800-03FFF (Disabled) 
58
#pragma config WRT1 = OFF       // Table Write Protect 04000-07FFF (Disabled) 
59
#pragma config WRT2 = OFF       // Table Write Protect 08000-0BFFF (Disabled) 
60
#pragma config WRT3 = OFF       // Table Write Protect 0C000-0FFFF (Disabled) 
61
62
// CONFIG6H 
63
#pragma config WRTC = OFF       // Config. Write Protect (Disabled) 
64
#pragma config WRTB = OFF       // Table Write Protect Boot (Disabled) 
65
#pragma config WRTD = OFF       // Data EE Write Protect (Disabled) 
66
67
// CONFIG7L 
68
#pragma config EBTR0 = OFF      // Table Read Protect 00800-03FFF (Disabled) 
69
#pragma config EBTR1 = OFF      // Table Read Protect 04000-07FFF (Disabled) 
70
#pragma config EBTR2 = OFF      // Table Read Protect 08000-0BFFF (Disabled) 
71
#pragma config EBTR3 = OFF      // Table Read Protect 0C000-0FFFF (Disabled) 
72
73
// CONFIG7H 
74
#pragma config EBTRB = OFF      // Table Read Protect Boot (Disabled) 
75
/************************************************************************/
76
77
78
/************************************************************************/
79
// sonstige Deklarationen
80
/************************************************************************/
81
#define True      1
82
#define False      0  
83
/************************************************************************/
84
85
/************************************************************************/
86
// Hauptprogramm
87
/************************************************************************/
88
89
void main(void)
90
{
91
  
92
  unsigned char unc_Wert;
93
    
94
               
95
    PORTB = 0x00;
96
    LATB = 0x00;
97
    TRISB = 0x00;
98
    
99
    TRISC= 0b01011000;           // PORTC initalisieren
100
    LATC= 0b01011000;
101
    
102
    Init_USART(19200);          
103
  
104
    PORTD = 0x00;
105
    LATD = 0x00;
106
    TRISD = 0x00;        
107
    
108
//*************************************************************************
109
// Start der Hauptprogramm-Schleife 
110
//*************************************************************************  
111
    
112
 while(1)                    // Ganzes Programm ist Endlosschleife
113
 {     
114
115
  
116
      // funktioniert
117
      //unc_Wert = 'F';
118
      //LATB = unc_Wert;
119
      //LATD = unc_Wert;
120
      //Zeichen_Anzeigen(unc_Wert);
121
    
122
    LATB = 0xFF;
123
    LATD =~ LATB;
124
    
125
    // funktioniert
126
    //LATD = 0x00;
127
    //LATB = 0x00;
128
    //Delay10KTCYx(200);
129
    //LATD = 0xFF;
130
    //LATB = 0xFF;
131
    //Delay10KTCYx(200);
132
    
133
    DA= 1;     
134
      printf("%.3u", LATD
135
     printf("\r\n");
136
     DA= 0;
137
      
138
 }
139
//************************************************************************
140
}  // Ende des Hauptprogramm
141
//************************************************************************

von Chris B. (dekatz)


Lesenswert?

Ingo Schick schrieb:
> Ich kann PORTs (LATs) nur beschreiben, nicht einlesen.. Warum? Hier wäre
> ein kleines Beispiel. Am PORTB liegt 0xFF an. Dieser Wert soll negiert
> werden, und an PORTD dargestellt werden.

Weil sich auf PORTB (und PORTA) auch die Analogeingänge befinden und 
nach einem POR sind diese Pins auf Analogbetrieb gestellt. Zuständig 
sind die Register ANCON0 und ANCON1 (oder ANSELH und ANSEL - weiss jetzt 
nicht wie sie bei dem konkreten Controller heissen - DB befragen).

von Ingo S. (schicki)


Lesenswert?

Hi Chris,

danke für den Tipp. Es hat funktioniert Danke. Darauf wäre ich 
warscheinlich so nicht wirklich gekommen.

Grüße
Ingo

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.