Forum: Mikrocontroller und Digitale Elektronik Virtueller Port auf PIC32


von ab2501 (Gast)


Lesenswert?

Hallo,

ich möchte Werte parallel an einen AD-Wandler schicken. Mir ist es aber
nicht möglich einen kompletten zusammengehörenden Port für diesen Zweck 
zu nutzen. Ich habe 16 verschiedene Bits (beispielsweise RA7, RB5, RC3, 
usw..) Natürlich könnte ich jedes Bit einzeln setzen. Eleganter wäre es 
aber, wenn ich mir einen "virtuellen" Port aus eben diesen Bits
erstellen könnte und so immer alle Bits gleichzeitig schreiben. Ist das 
möglich? Ich nutze einen PIC32 und programmiere in C unter MPLAB (C32 
Compiler). Wäre echt eine große Hilfe, wenn das gehen würde. Könnte das 
auch an vielen anderen Stellen einsetzen.

Deshalb schonmal Danke für die Unterstützung!!!

von PICkel (Gast)


Lesenswert?

Laut Datenblatt ist beim PIC32MX110 - 150 der Port RB mit allen 16 Bits 
nach außen geführt (DIP 28 Gehäuse).

Beim PIC32MX210 - 250 fehlen ein paar bits.

Allerdings gibt es natürlich Überschneidungen mit anderen Signalen.

von Frank K. (fchk)


Lesenswert?

nein, das geht so nicht.
Alternative: 4 zusammenhängende Portbits, Latches dahinter, und die 
Daten stückweise rausschreiben, oder per SPI und Schieberegister seriell 
rausschieben. Beides dürfte bedeutend schneller sein.

von c-hater (Gast)


Lesenswert?

ab2501 schrieb:

> Mir ist es aber
> nicht möglich einen kompletten zusammengehörenden Port für diesen Zweck
> zu nutzen.
[...]
> Eleganter wäre es
> aber, wenn ich mir einen "virtuellen" Port aus eben diesen Bits
> erstellen könnte und so immer alle Bits gleichzeitig schreiben. Ist das
> möglich?

Höchstens virtuell (aus Sicht der Logik der Anwendung). Physisch aber 
ist es unmöglich.

Alles, was man in einem solchen Fall unternehmen kann, ist eine Art 
Schadensminimierung. D.h.: man setzt immer wenigstens all die Bits auf 
einmal, die sich physisch tatsächlich auf einmal setzen lassen. Bei 
kluger Wahl der Bitverteilung auf die physischen Ports reicht dieser 
Ansatz oft auch bereits, um letztlich das gewünschte Ergebnis erzielen 
zu können.

Ob es überhaupt geht und wenn ja, wie genau die optimale Verteilung dazu 
aussehen muß, das sind Sachen, die leider sehr stark von der konkreten 
Hardwareperipherie abhängen. Deren Funktionsweise muß man dazu bis in's 
Detail verstehen, zumindest den Teil, der die Kommunikation der Hardware 
mit dem Steuercontroller betrifft.

von ab2501 (Gast)


Lesenswert?

Danke für die Antworten.. hatte schon befürchtet, dass so etwas nicht 
geht und ärger mich jetzt etwas, dass ich nicht den Mehraufwand beim 
Layout in Kauf genommen habe, um wirklich einen kompletten Port nutzen 
zu können.

Habe jetzt auch das gleiche Problem bei der Ansteuerung eines 2x16 
Displays (LCD). Also habe die 8 Datenbits auch von drei verschiedenen 
Ports. Hättet ihr da vielleicht eine Idee, wie ich es zumindest in der 
Software halbwegs sauber hinbekomme, dass ich nicht jedes Bit einzeln 
setzen muss. Da ich die Werte erst nach abgeschlossener Messung anzeigen 
möchte, ist es auch keine zeitkritische Anwendung. Die Ausgänge physisch 
nacheinander zu setzen, sollte also kein Problem sein. Ich möchte nur in 
der Software nicht jedes Bit einzeln aufrufen, sondern möchte zum 
Beispiel einfach nur "DisplayDaten = 527" schreiben können.

Ich habe beim Display eh noch ein grundsätzliches Problem. Nehmen wir 
mal an ich möchte "Drehzahl: 543 rpm" auf dem Display anzeigen. Muss ich 
dann wirklich das ganze Font-Map aus dem Display-Datenblatt in meinem 
PIC speichern (beispielsweise "LHLLLHLL" für das große "D") und dann 
jedes Zeichen des Wortes durchgehen und die entsprechenden Bits senden?

Nochmals Danke für die Hilfe!

von Klaus (Gast)


Lesenswert?

ab2501 schrieb:
> Ich möchte nur in
> der Software nicht jedes Bit einzeln aufrufen, sondern möchte zum
> Beispiel einfach nur "DisplayDaten = 527" schreiben können.

Ich bring da mal ein revolutinäres Konzept ins Spiel: Funktionen mit 
Übergabeparametern

MfG Klaus

von Michael L. (michaelx)


Lesenswert?

ab2501 schrieb:

> Ich habe beim Display eh noch ein grundsätzliches Problem. Nehmen wir
> mal an ich möchte "Drehzahl: 543 rpm" auf dem Display anzeigen. Muss ich
> dann wirklich das ganze Font-Map aus dem Display-Datenblatt in meinem
> PIC speichern (beispielsweise "LHLLLHLL" für das große "D") und dann
> jedes Zeichen des Wortes durchgehen und die entsprechenden Bits senden?

Wahrscheinlich bist du jetzt total überrascht, dass der Compiler schon 
"weiß", dass mit "D" ein "LHLLLHLL" oder 0x44 gemeint ist. Dieses 
Kunststück nennt sich ASCII-Code.

;-)


PS: Ich glaube, du stehst noch gaaanz am Anfang eines langen Weges.

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
Noch kein Account? Hier anmelden.