PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Signale an Ports abfragen???



Magge2k
31.12.2004, 13:46
Hi Leute,

ich hätte da mal ne frage bezüglich des Einlesens von signalen in den PIC.
Ich möchte meinem PIC 16F871 mit Hilfe des Parallelports des druckers mit 8 Bit am PORTD ansprechen. Dieser ist in der normalen I/O Port funktion und nicht in den PSP geschaltet. Mein erstes Ziel wäre es über eine kontinuierliche Abfrage des Portds immer ein Wechselndes Bitmuster abzufragen.

Wenn ich z.B. 00000101 an Port D anlege soll der µController eine Funktion starten. beispielsweise einen Schrittmotor ansteuern. Als Pogrammiersprache verwende ich C -> C Compiler = CC5X in der Freeware Version.

Auf antworten würde ich mich freuen.
gruß Marc

ingo_01
31.12.2004, 17:26
Hi Marc,
Du brauchst den D-Port nicht kontinuierlich abfragen! Es reicht wenn Du das Strobe-Signal des Parallel-Ports auf einen Interupt-Eingang legst. Entweder auf B7-B4, dann kann man den B-Change-Interupt abfragen. Oder auf B0, dann man den Externel-Interupt aktivieren, auf steigende oder fallende Flake einstellen und schon ist der Pic immer informiert wenn Daten vom parallelen Port zu holen sind!

GRUSS
INGO

Magge2k
31.12.2004, 18:08
Hi Ingo,

danke für den Tip, das hört sich gut an. Aber weißt du zufälliger weiße auch wie man den PIC dann programmiert? Weil darin sehe ich auch noch ein problem, das ich nicht so ganz genau weiß wie ich dies umsetzen soll!

gruß marc

stegr
01.01.2005, 19:07
Aufbau des Programms:
- Auf Interrupt warten
- Schauen, ob es auch der richtige Interrupt ist (die PIC's haben nur einen Interruptvektor)
- Auslesen des Wertes an PortD (als Byte)
- Select Case-Schleife:
-- wenn Wert = 00011000, dann springe zu Funktion a()
-- wenn Wert = 00001100, dann springe zu Funktion b()
-- wenn Wert = 00001110, dann springe zu Funktion c()
-- usw.
- Die einzelnen Funktionen, z.B. zum Ansteuern des Schrittmotors...

Das ist eigentlich das ganze Programm...

MfG
Stefan

Magge2k
01.01.2005, 22:19
Danke Stefan,

nur noch eine frage wie genau funktioniert daß auslesen des PortD's?
Das ist eigentlich mein hauptproblem!

gruß Marc

02.01.2005, 11:52
Du bindest die zum Pic gehörende include Datei in Deinen Assembler-Code ein und dann:

movf portd, w

und schon steht der Wert von PortD im W-Register und kann weiter verarbeitet werden.

GRUSS
INGO

Magge2k
02.01.2005, 12:33
hey cool, danke!

ihr habt mir wirklich weitergeholfen.
ich wünsche euch noch ein schönes Jahr 2005!

gruß Marc

stegr
02.01.2005, 13:39
Da du mit C programmierst, sollte es auch eine entsprechende Routine geben, die das über eine C-Funktion erledigt.

Assembler sollte man nur dann in C-Programme einbinden, wenn es gar nicht anders geht, d.h. es auf die Geschwindigkeit ankommt.

Im CC5X (hab ich zwar nie benutzt, aber die haben auch Beispiele) gibt es dazu die Präprozessoranweisung #pragma. Diese weist einem Symbol (Namen) einen Pin bzw. Port zu. Wie das geht, siehst du am besten in Beispiel 1 auf der Homepage von CC5X.
Anscheinend kannst du wohl aber auch direkt unter dem Symbol PORTD auf den Port zugreifen und musst davor nur das TRISD-Register entsprechend setzen.

Ansonsten wünsch ich dir auch ein gutes Neues...

MfG
Stefan

ingo_01
02.01.2005, 17:16
UUPPSS

das mit dem CC5x Compiler hatte ich völlig übersehen!! SORRY

GRUSS
INGO