mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Seltsames Problem mit PIC


Autor: Dominik Derigs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Dominik Derigs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ..

}

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Kai Riek (kairiek)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  TRISA=TRISB=TRISC=TRISD=TRISE=0;

Sieht nicht so aus, als ob PORTE ein Eingang wäre. Du solltest TRISE
auf 0x07 setzen.

Autor: Dominik Derigs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist dann drotzdem noch Falsch.. denn dann setzt du jeden Port am PIC
als Eingang.

Autor: Dominik Derigs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, aber es sollen auch alle Eingänge sein, die LEDs sind ja Ausgänge:

 TRISD = 255-(16+32+64); // LEDs als Ausgänge

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sind die LEDs eigentlich am PIC angeschlossen?

Autor: Dominik Derigs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PIC - Widerstand 120 Ohm - LED - Masse

Autor: Kai Riek (kairiek)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch 'ne andere Frage: Was willst du eigentlich machen? So wie das
jetzt da steht macht das insgesamt wenig Sinn.

MFG

Kai

Autor: Kai Riek (kairiek)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Dominik Derigs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 !!!

Autor: Dominik Derigs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Bernd Rüter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Dominik Derigs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Dominik Derigs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Dominik Derigs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab es eben getestet und es funktioniert natürlich.

Vielen Dank nochmal !

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was war es nun?

Autor: Dominik Derigs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Parallel Slave Port, der alles auf PORTD auf Input geschaltet hat,
wenn an RE0 +5V ist

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.