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!!!
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.
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.
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.
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!
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.