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...)?
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
Von welchem dsPIC ist hier die Rede? Hast du vielleicht noch nicht gemerkt, aber davon gibt es mehrere Typen.
dsPIC30F6014 Ich verstehe nicht genau, was PORTD im Vergleich zu LATD macht. Wenn ich PORTD setze, ändere ich doch auch die Portpins, oder nicht?
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#.C3.84u.C3.9Fere_Form
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
1 | // Test Hello World
|
2 | |
3 | #include <p30f6014.h> |
4 | |
5 | void main(void) |
6 | {
|
7 | TRISD = 1; |
8 | while(1) |
9 | {
|
10 | PORTD=0xFF; |
11 | PORTD=0; |
12 | |
13 | }
|
14 | }
|
> TRISD = 1;
Bedeutet:
TRISD = 0x01; // 0b00000001
also Pins 1-7 sind Ausgang, Pin 0 ist Eingang.
Du meinst vermutlich TRISD = 0xFF.
>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.
holger schrieb: > Du meinst vermutlich TRISD = 0x00. Ja klar - warum müssen die auch unbedingt alles anders machen als der Rest der Welt. ;-)
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!
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?
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... ;)
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 ;-).
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
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" ;-)
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).
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
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.