www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC Pin kaputt?


Autor: Tine Schwerzel (tine)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, der PD.0 von meinem fabrineuen dsPIC zappelt beim Umschalten vom 
ganzen PortD auf ca. 4 Volt mit einer Amplitude von 3.8-4.2 Volt (0,4 
Volt) herum. Alle anderen tun was sie sollen. Der PD.0 sollte eigentlich 
eine LED schalten, tut er aber nicht. Ist das eine bekannte Fehlfunktion 
(Überspannung, Ausschuss, etc...)?

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tine Schwerzel schrieb:
> Hmm, der PD.0 von meinem fabrineuen dsPIC zappelt beim Umschalten vom
> ganzen PortD auf ca. 4 Volt mit einer Amplitude von 3.8-4.2 Volt (0,4
> Volt) herum. Alle anderen tun was sie sollen.

Das nennt man galvanische Kopplung. (bei den Frequenzen spielt die 
Induktivität des Masse-Pins bereits eine Rolle). Evtl läßt sich durch 
bessere Abblockung die Amplitude noch ein klein wenig verbessern.

Tine Schwerzel schrieb:
> Der PD.0 sollte eigentlich
> eine LED schalten, tut er aber nicht. Ist das eine bekannte Fehlfunktion
> (Überspannung, Ausschuss, etc...)?

Ich tippe auf Software-Bug in Zeile 42 (Verwendung von PORTD anstelle 
LATD).

Gruß Anja

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Von welchem dsPIC ist hier die Rede? Hast du vielleicht noch nicht 
gemerkt, aber davon gibt es mehrere Typen.

Autor: Tine Schwerzel (tine)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dsPIC30F6014
Ich verstehe nicht genau, was PORTD im Vergleich zu LATD macht. Wenn ich 
PORTD setze, ändere ich doch auch die Portpins, oder nicht?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Unterschied ist hier vielleicht nicht relevant, wird es aber 
spätestens dann, wenn man mit bidirektionalen Pins (z.B. 1-Wire) am 
gleichen Port zu tun hat, daher wird empfohlen, für Ausgabepins stets 
LATx zu verwenden.

Zur Zeile 42: 
http://www.mikrocontroller.net/articles/Netiquette...

Autor: Tine Schwerzel (tine)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist mal der Programmcode. Bit 1 bis 7 alternieren zwischen 0 und 5 
Volt, nur eben Bit 0 bleibt bei 4 Volt +-0.2V

// Test Hello World

#include <p30f6014.h>

void main(void)
{
TRISD = 1;
while(1)
{
PORTD=0xFF;
PORTD=0;

}
}

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> TRISD = 1;

Bedeutet:
  TRISD = 0x01; // 0b00000001
also Pins 1-7 sind Ausgang, Pin 0 ist Eingang.

Du meinst vermutlich TRISD = 0xFF.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hier ist mal der Programmcode. Bit 1 bis 7 alternieren zwischen 0 und 5
>Volt, nur eben Bit 0 bleibt bei 4 Volt +-2V

Was soll der auch schon machen wenn du ihn nicht
auf Ausgang schaltest.

>Du meist vermutlich TRISD = 0xFF.

Du meinst vermutlich TRISD = 0x00.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:

> Du meinst vermutlich TRISD = 0x00.

Ja klar - warum müssen die auch unbedingt alles anders machen als der 
Rest der Welt. ;-)

Autor: Tine Schwerzel (tine)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah Mist. Ich dachte das Direction register würde den ganzen Port setzen. 
Mein Fehler. Das erklärt das hochohmige Verhalten. Danke! Ich habe einen 
Teil der Sachen aus dem Buch "Programming 16-bit Microcontrollers in C: 
Learning to fly the PIC24". Da wird LATx gar nicht verwendet und unter 
TRISA=1; steht, dass das den PORTA auf Ausgang setzen würde. Naja. 
Danke!

Autor: Tine Schwerzel (tine)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch eine generelle Frage: ich habe bisher hauptsächlich AVRs mit Bascom 
(sehr einfach zu bedienen :-) und Assembler prorammiert. Da gibt es ja 
eine Compilerreferenz mit in der Hilfe. In MPLAB gibt es das aber nicht, 
oder? Wo findet man denn mal eine komplette Übersicht mit Beschreibung 
(englisch) der ganzen Befehle?

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> holger schrieb:
>
>> Du meinst vermutlich TRISD = 0x00.
>
> Ja klar - warum müssen die auch unbedingt alles anders machen als der
> Rest der Welt. ;-)

Stellt sich die Frage warum der Rest der Welt mit 1 für Input und 0 für 
Output nicht warm werden wollte... ;)

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meister Eder schrieb:

> Stellt sich die Frage warum der Rest der Welt mit 1 für Input und 0 für
> Output nicht warm werden wollte... ;)

Stellt sich die Frage, warum Microchip diesen Unterschied überhaupt erst 
Jahrzehnte nach dem der Rest der Welt gemacht hat ;-).

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meister Eder schrieb:
> Stellt sich die Frage warum der Rest der Welt mit 1 für Input und 0 für
> Output nicht warm werden wollte... ;)
>
Genau weil das ist genau das was ich erwarte wenn ich einen Open-Drain 
Pin mit dem Tris-Register simuliere. Das Latch bleibt dabei auf Low. Mit 
Tris = 0 schalte ich dann den Port-Pin auf Low mit Tris = 1 schalte ich 
den Port-Pin auf hohe Impedanz (oder High falls ein Pull-up dran hängt).

Gruß Anja

Autor: AkkiSan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anja schrieb:
>> Stellt sich die Frage warum der Rest der Welt mit 1 für Input und 0 für
>> Output nicht warm werden wollte... ;)
>>
> Genau weil das ist genau das was ich erwarte wenn ich einen Open-Drain
> Pin mit dem Tris-Register simuliere. Das Latch bleibt dabei auf Low. Mit
> Tris = 0 schalte ich dann den Port-Pin auf Low mit Tris = 1 schalte ich
> den Port-Pin auf hohe Impedanz (oder High falls ein Pull-up dran hängt)

Stellt sich die Frage, ob das nicht alles viel zu kompliziert
gedacht ist ;-)

Mit "TRIS" als Abkürzung für "tristate", "0" für "AUS" und
"1" für "AN", sieht das Ganze schon viel logischer aus, gell?

Die alten N-MOS Dinger, so auch der erste PIC,
General Instruments' PIC1650 (so Ende der 70er), hatten keine
push-pull Stufen und ebensowenig einen "dritten Zustand".
Um Pins als Eingänge nutzen zu können, mußte das latch
auf "1" gesetzt sein (nur ein weak-pull aktiv).

Als man wenig später, dank C-MOS Technologie einen
neuen, dritten Zustand "erfunden" (...) hat:
Gäbe es zur Aktivierung desselben eine geschicktere Variante
als "TRISTATE = 1"?

Vielleicht gibts aber auch bald ein neues config-bit:
"TRISREVERSE: 0=classic; 1=modern" ;-)

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AkkiSan schrieb:

> Als man wenig später, dank C-MOS Technologie einen
> neuen, dritten Zustand "erfunden" (...) hat:

NMOS Technik passt zwar recht gut zu einer bidirektionalen 
Portkonfiguration wie in 8051 und den ursprünglichen PICs, 
Push/Pull-Stufen und Tristate lassen sich aber auch in NMOS 
implementieren - immerhin arbeiten Datenbusse so. Die I/O-Bausteine der 
Prozessorkonkurrenz besassen auch bereits eine Richtungskontrolle (6820, 
8255), ebenso andere Mikrocontroller der NMOS-Ära (Z8).

Autor: Michael Roek (mexman) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tine,


hat sich Dein Problem also erledigt?

> oder? Wo findet man denn mal eine komplette Übersicht mit Beschreibung
> (englisch) der ganzen Befehle?

Eine kleine und gute Referenz der Befehle gibt es in den Datenblaetern 
der PICs.
Die Hilfe in MPLAB ist m.E. auch nicht schlecht.
Ausserdem gibt es ein seeeeeehr gutes Forum auf der 
Wicrochip-Webseite...wenn Du Englisch schreiben kannst.

Bei den PICs ist durch die hohe Peripheriedichte und Mehrfachverwendung 
der Portpins eine richtige Initialisierung der Ports wichtig, aner auch 
das steht in den Datenblaettern und wenn Du einen Peripheriebaustein 
einmal drauf hast, gibt es nichts problematisches mehr.


Gruss

Michael

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.