RB6,RB7 und ICD2 mit pic18f

Gast #2019612
Lesenswert?

Nabend zusammen,

Ich möchte auf PORTB eines p18f2620 auf jedem Pin als Test ein 
Rechtecksignal ausgeben. Für alle Pins außer RB6,RB7 funktioniert das 
auch wunderbar. Die Pins RB6,RB7 sind mit angeschlossenem ICD2 dauerhaft 
0 ohne angeschlossenem ICD2 dauerhaft 1 (siehe Screenshot DB6,DB7).

Das Programm sieht wie folgt aus:
counter = 0;
while(1) {
    counter++;
    if (counter == 0) LATB = 0xaa;
    if (counter == 32768) LATB = 0x55;
}

Die Konfiguration ist u.A. wie folgt:
CONFIG_3H = _PBADEN_PORTB_4_0__CONFIGURED_AS_DIGITAL_I_O_ON_RESET_3H
CONFIG_4L = _DEBUG_OFF_4L & _LVP_OFF_4L;

Die Ports werden wie folgt initialisiert:
  // Disable all analog inputs and set analog port to digital i/o
  ADCON0=0x00;
  ADCON1=0x0f;
  // Configure port A output (1=input, 0=output)
  CMCON=0x07;
  TRISA=0x00;
  PORTA=0x00;
  // Configure port B output (1=input, 0=output)
  TRISB=0x00;
  PORTB=0x00;
  // Configure port C output
  TRISC=0x00;
  PORTC=0x00;

Habe es mit und ohne angeschlossenem ICD2 probiert.
Mit angeschlossenem Debugger sehe ich das zwar TRISB auf z.B. 0x55 geht 
PORTB aber nur auf 0x15 bzw. TRISB=0xaa und PORTB nur auf 0x2a. Die 
oberen beiden Bits sind also immer 0. Dies könnte ich noch verstehen da 
der ICD2 mit dran hängt.

Ohne ICD2 messe ich PORTB ohne jede zusätzliche Beschaltung direkt am 
Pic.
An RB6,RB7 ist weder ein Pullup noch ein Pulldown noch sonst irgendein 
Bauteil dran.

Alle bisher hier im Forum vorgeschlagenen Lösungen zu ähnlichen 
Problemen haben leider keinen Erfolg gebracht.
Was mache ich falsch?
Angehängte Dateien:
#2019636
Lesenswert?

Thorsten schrieb:

> Ich möchte auf PORTB eines p18f2620 auf jedem Pin als Test ein
> Rechtecksignal ausgeben. Für alle Pins außer RB6,RB7 funktioniert das
> auch wunderbar. Die Pins RB6,RB7 sind mit angeschlossenem ICD2 dauerhaft
> 0 ohne angeschlossenem ICD2 dauerhaft 1 (siehe Screenshot DB6,DB7).
[...]
> Was mache ich falsch?

Datenblatt? Insbesondere die Fußnote (3) auf Seite 95 (Table 9-3 PORTB 
I/O SUMMARY). Und die Beschreibung von REGISTER 23-5: CONFIG4L: 
CONFIGURATION REGISTER 4 LOW (BYTE ADDRESS 300006h) auf Seite 253.

Ich sehe gerade: Das /DEBUG-Bit hast Du schon gesetzt. Überprüfen würde 
ich das trotzdem noch mal. Was für einen Compiler nimmst Du? Ich kenne 
das nur mit dem #pragma config Anweisungen.

fchk
Gast #2019773
Lesenswert?

Als Compiler verwende ich den sdcc. Ich habe damit schon einige Projekte 
gemacht und bisher keine Probleme gehabt (allerdings auch nie RB6,RB7 
benötigt).
Testweise habe ich das Programm auch wieder aus dem PIC ausgelesen und 
die Config Register angeschaut. Wenn ich mir die Hex Datei ansehe kommen 
mir Zweifel:

Die Konfiguration ist laut hex Datei wie folgt:
0E00000000C6181E008501000FC00FE00F4063
CONFIG4_L also 0x01 und nicht 0x81 d.h. nur STVREN gesetzt und somit 
DEBUG=0 also aktiv.

Ich denk das würde mein Problem erklären?
Gast #2019812
Lesenswert?

Ein Nachtrag zum Thema Microchip Compiler: Der hat bei mir unter Linux 
nicht auf Anhieb funktioniert. Der sdcc funktionierte direkt und bisher 
hat er mir keinen Grund gegeben zu wechseln. Im Endeffekt lag es ja auch 
nicht am Compiler.
Gast #2161201
Lesenswert?

In dem Fall war's nicht das Problem: Wenn man allerdings komische 
Effekte hat bei denen die Ausgaenge nicht tun was sie sollen, sollte man 
sicherstellen das die Ports richtig initialisiert wurden, d.h. auf 0 
gesetzt worden sind.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren