Forum: Mikrocontroller und Digitale Elektronik RB6,RB7 und ICD2 mit pic18f


von Thorsten (Gast)


Angehängte Dateien:

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?

von Frank K. (fchk)


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

von Thorsten (Gast)


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?

von Frank K. (fchk)


Lesenswert?

Genau.

Warum nimmst Du nicht den Microchip-Compiler? Immerhin ist die 
Lite-Version kostenlos. Und niemand kennt die ganzen Macken der PICs so 
gut wie Microchip selber.

fchk

von Thorsten (Gast)


Lesenswert?

OK habs gefunden. Ich hätte als Programmiergerät nicht "Debugger" 
sondern "Programmer" nehmen sollen. Dann werden die Konfigurationsbits 
nicht geändert.

Danke Trotzdem für die Tipps.

von Thorsten (Gast)


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.

von Peda (Gast)


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.

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.