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