Ich habe eine Platine mit dem Mikrocontroller PIC18F452 aufgebaut. Die Ports RE0 - RE2 sind als Eingänge definiert, an den Ports RD4 - RD6 sind 3 LEDs angeschlossen. Das Problem: Die LEDs gehen aus, wenn RE0 mit +5V verbunden wird. Wenn ich aber RE1 oder RE2 mit +5V verbinde, bleiben Sie weiter an. Warum gehen die LEDs aus, wenn ich RE0 auf +5V lege? P.S.: Die Eingänge sind jeweils mit einem 100k-Ohm Widerstand auf Masse gezogen.
Als blöde antwort würde mit mal einfallen: Vl hast du dein Programm so geschrieben, dass es genau das macht! Zeig mal deinen Source-Code.
Ich benutze den C18-Compiler. Hier der Sourcecode: void wait_zyklus(int d){ // Einfach eine bestimmte Zeit abwarten while(d) d--; } void main(void){ ADCON1=0b00000111; TRISA=TRISB=TRISC=TRISD=TRISE=0; wait_zyklus(4); PORTA=PORTB=PORTC=PORTD=PORTE=0; wait_zyklus(4); TRISA=TRISB=TRISC=TRISD=TRISE=0; wait_zyklus(4); TRISD = 255-(16+32+64); // LEDs als Ausgänge PORTD = 16+32+64; // LEDs: an while(1); // Endlos-Schleife .. ganz viel anderer Code, aber wegen Endlosschleife überflüssig .. }
Ich sehe hier aber nirgend wo das du den Port E als Eingang definierst. >>TRISD = 255-(16+32+64); // LEDs als Ausgänge >>PORTD = 16+32+64; // LEDs: an Ich würde das nicht so programmieren, denn damit verbrauchst du unnütz Ressourcen. Schreibe es in Bit-Darstellung, dann kennt man sich auch noch sehr gut aus und du sparst drotzdem Ressourcen. >>wait_zyklus(4); >> TRISA=TRISB=TRISC=TRISD=TRISE=0; Die sollte eigentlich auch eher für den Hugo sein. Ausser du willst Zeit verbratten. Und wenn man einen Schreibzugriff auf die Ports bei den PIC18 macht, sollte man auf die LAT-Register schreiben.
> TRISA=TRISB=TRISC=TRISD=TRISE=0;
Sieht nicht so aus, als ob PORTE ein Eingang wäre. Du solltest TRISE
auf 0x07 setzen.
wie peinlich.... Falsch abgetippt: TRISA=TRISB=TRISC=TRISD=TRISE=0; wait_zyklus(4); PORTA=PORTB=PORTC=PORTD=PORTE=0; wait_zyklus(4); TRISA=TRISB=TRISC=TRISD=TRISE=255;
Ja, aber es sollen auch alle Eingänge sein, die LEDs sind ja Ausgänge: TRISD = 255-(16+32+64); // LEDs als Ausgänge
Noch 'ne andere Frage: Was willst du eigentlich machen? So wie das jetzt da steht macht das insgesamt wenig Sinn. MFG Kai
Noch was: Ich würde an deiner Stelle auf Schreibweisen wie 255-(16+32+64) verzichten und stattdessen 0xF8 schreiben, da weis man dann schneller was im Register steht. Und es ließt sich besser.
Wie siehts eigentlich mit deinen Fuses aus? Hast du LVP aktiviert oder deaktiviert? Wie sind die anderen Ports beschalten? Haben die ein fixes Potential oder sind diese unbeschalten?
Ich habe eine Elektronik in der Firma meines vaters, die die Kälteanlagen und das ganze drumherum kontolliert. In der Firma gibt es 56 solcher Anlagen, an denen jewils 10 digitale Eingänge liegen. Weil diese Elektronik allerdings nichts anzeigt (nur ne graue Box), sollte an jeder Anlage ein kl. Display (1x16 Zeichen) angebracht werden. Zusätzlich sollen die PICs dann noch über ein einfaches Bussystem mit einem PIC in der Leistelle mit einem Grafikdisplay kommunizieren. Es funktioniert auch alles wunderbar, nur das bei einer Störung auf Kanal 1 die LEDs ausgehen, was bei der Vorführung ziemlich negativ wäre, und sich ja irgendwie lösen lassen muss. LVP: aus PORTA: mit 6poligen Dip-Schaltern für Adresse verbunden, entweder über 100k an Masse oder direkt an +5V PORTB: 0 - 3: offen 4: 100k an Masse, oder 5V 5-6: offen 7: Widerstand 120 Ohm - LED - Masse PORTC: 0-2 + 6: 100k an Masse, oder 5V 3+4: offen, werden extern auf Masse, oder +5V gezogen (für den Datenverkehr) 5+7: offen PORTD: 0-3 + 7: 100k an Masse, oder 5V 4-6: Widerstand 120 Ohm - LED - Masse PORTE: 0+1: 100k an Masse, oder 5V 2: offen P.S.: Ich habe gerade gesehen, dass zwar die LEDs an PORTC (4-6) ausgehen, aber die LED an PORTB (7) nicht !!!
Die Configuration-Bits: Oscillator: EC-OSC2 as clock out (habe Quarzoszillator mit 4. MHz zum Test dran) Osc. Switch Enable: Disabled Power Up Timer: Enabled Brown Out Detect: Disabled Brown Out Voltage: 2,5V Watchdog Timer: Disabled-Controlled by SWDTEN bit Watchdog Postscaler: 1:128 CCP2 Mux: RB3 Stack Overflow Programm: Disabled Low Voltage Programm: Disabled Code Protect: alles Disabled
In meinem Datenblatt zu dem PIC hat der PortE.0 noch eine Funktion in Bezug zum "Parallel Slave Port", den Du aktiviert hast (TRISE.4). Sieh mal im Datenblatt nach, da steht die Funktion von jedem Pin aufgeführt und so ein 18F452 hat richtig viele Funktionsgruppen drin.
In dem Datenblatt zum PIC18F452 steht für die Pins drin: RE0: Parallel Read Control IO AN5 RD5: Parallel Slave Port Data / IO RD6: Parallel Slave Port Data / IO RD7: Parallel Slave Port Data / IO >>In meinem Datenblatt zu dem PIC hat der PortE.0 noch eine Funktion in Bezug zum "Parallel Slave Port", den Du aktiviert hast (TRISE.4). Wo habe ich den aktiviert ist der von vorherein aktiviert wie deaktiviere ich den? (Würde ja sinn ergeben.. Am Read Control liegt +5V an und somit wird RD0-7 auf Input geschaltet)
Im Datenblatt steht: PSPMODE = TRISE<4> Wenn ich das also auf Null setze (TRISE=0x2, reicht ja für 0+1), sollte es funktionieren, oder?
Hm.. ich muss sagen... ich habe keine andere Idee... Aber die Lösung würd mich dann aber auch interessieren ;-). Frag doch bitte bei Fernando Heitor im Forum nach. www.fernando-heitor.de dort wird dein PRoblem eher gelöst werden. mfg SChoasch
Ich hab es eben getestet und es funktioniert natürlich. Vielen Dank nochmal !
Der Parallel Slave Port, der alles auf PORTD auf Input geschaltet hat, wenn an RE0 +5V ist
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.