Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller


von Flo K. (Firma: Techniker) (mikroflo)


Lesenswert?

Hallo zusammen,

hoffe bin hier richtig :)

Ich mache momentan meine Abschlussarbeit.
Dabei geht es darum meinen Mikrocontroller (atxmega128A1) über USART
mit dem Computer zu verbinden. Dazu soll ich den Port D mappen damit ich 
diesen Port als serielle Schnittstelle verwenden kann.

Nun meine Fragen:
- Was genau ist Portmapping?
- Wie programmiere ich diesen Portmapping?

Programmiert wird das ganze mit Atmel Studio in C.
Habe schon im Internet geschaut und nichts hilfreiches gefunden,
daher würde ich mich über hilfreiche Antworten freuen.
Danke schon mal im vorraus.

PS: Bin im Internet auf diese befehle gestoßen:
PORTCFG_VIRTMAP0_PORTC_gc;
PORTCFG.VMAP0;
PORTCFG_VIRTMAP0_PORTD_gc;
PORTCFG.VMAP1;

PORTCFG.VMAP1;
PVIRT0.DIR = 0xFF;

weiß aber nicht was mit anfangen.

von Hans (Gast)


Lesenswert?

Flo King schrieb:
> Nun meine Fragen:
> - Was genau ist Portmapping?
> - Wie programmiere ich diesen Portmapping?

Wer schreibt mir die Arbeit?

von Flo K. (Firma: Techniker) (mikroflo)


Lesenswert?

Hallo Hans,

danke für die schnelle Antwort.

Dies ist nur ein Bruchteil von meiner gesamten Arbeit.
Ich muss zwei Motoren ansteuern die ihre Koordinaten über USART vom PC
bekommen. Ich habe bereits die Motoransteuerung sowie die Sende- und 
Empfangsroutine, nur hänge ich mittlerweile seit fast zwei Wochen an dem 
Portmapping und kann daher mein komplettes Programm nicht testen.

hoffe daher mir kann da jemand weiterhelfen :)

von Peter II (Gast)


Lesenswert?

Flo King schrieb:
> hoffe daher mir kann da jemand weiterhelfen :)

hast du schon mal ins Datenblatt geschaut, darin steht eigentlich alles 
drin. Dafür braucht man nicht das Internet abzusuchen.

von Flo K. (Firma: Techniker) (mikroflo)


Lesenswert?

Hallo Peter,

auch danke für deine Antwort.

Ja habe ich. Aus dem Datenblatt (von Atmel) habe ich die oben
genannten Befehle.
Habe schon mehrmals probiert es mit diesen Befehlen zu programmieren.

von Peter II (Gast)


Lesenswert?

Flo King schrieb:
> Ja habe ich. Aus dem Datenblatt (von Atmel) habe ich die oben
> genannten Befehle.
> Habe schon mehrmals probiert es mit diesen Befehlen zu programmieren.

ich sehen keine Befehle.

Ich sehe maximal Register denen man einen Wert zuweisen kann, und welche 
Werte welche Auswirkung haben steht im Datenblatt.

von Cyblord -. (cyblord)


Lesenswert?

Flo King schrieb:
> Ich muss zwei Motoren ansteuern die ihre Koordinaten über USART vom PC
> bekommen. Ich habe bereits die Motoransteuerung sowie die Sende- und
> Empfangsroutine

Na sicher. Nur hast du das bestimmt nicht selber erstellt. Wer sowas 
programmieren kann, der kann auch das DB lesen und scheitert sicher 
nicht am Portmapping.

gruß cyblord

von Flo K. (Firma: Techniker) (mikroflo)


Lesenswert?

Hallo,

na also sehr hilfreich war das hier bis jetzt nicht wirklich.
Und doch ich habe die Motorsteuerung, Sende- und Empfangsroutine
selber programmiert.

Danke trotzdem.

von Mirco C. (Firma: s@Td) (mcontroller)


Lesenswert?

Durch das Portmapping kannst du dir einen Virtuellen Port zusammenbauen.
Z.B. ist das sinnvoll wenn du ein paralleln 8bit Input hast aber keinen
ganzen Port mehr frei. Dann setzt du dir den Virtuellen Port aus zwei 
anderen Ports zusammen und brauchst dann nur einen Befehl um den Ausgang 
zu setzen.

Wenn du das nicht brauchst würde ich ganz einfach bei den normalen Ports 
bleiben:

( PORTA.DIR | DIRSET | DIRCLR | DIRTGL )
( PORTA.OUT | OUTSET | OUTCLR | OUTTGL )
( PORTA.IN )

: Bearbeitet durch User
von Flo K. (Firma: Techniker) (mikroflo)


Lesenswert?

Hallo Mikro Controller,

Danke für deine Antwort, das heißt also ich kann auf dem Port D dann
virtuell die TX und RX Pins von Port C (USB-Stecker) für die serielle 
Übertragung festlegen.
OK habe ich vestanden :) und dann kann ich diesen virtuellen Port wie
jeden anderen Port ansteuern?

von Kai E. (kai20)


Lesenswert?

Hallo Flo,
du kannst einen PortA oder PortB etc auf Vports mappen,
damit ist dein I/O Zugriff schneller.
Hier ein Codeschnipsel, sollte selbsterkärend sein.
//PORTC wird als Virtueller Port definiert
PORTCFG.VPCTRLA |= PORTCFG_VP02MAP_PORTC_gc;
//Der Virtuelle Port0 wird als Ausgang definiert
VPORT0.DIR = PIN0_bm;

Dann z.B. mit
VPORT0.OUT = 0x00;
den PortC auf 0 setzen, einzelne Bits geht natürlich auch.

Ein Bit-Zugriff mittels VPORT ist wirklich eine SBI oder CBI Anweisung,
wenn du einen normalen Port Zugriff verwendest, sind es drei einzelne 
Befehle.

Grüße,
Kai

von Mirco C. (Firma: s@Td) (mcontroller)


Lesenswert?

Flo King schrieb:
> Danke für deine Antwort, das heißt also ich kann auf dem Port D dann
> virtuell die TX und RX Pins von Port C (USB-Stecker) für die serielle
> Übertragung festlegen.

Nein, das gilt nur für den IO Port. Ich bin mir nicht sicher ob es noch 
andere Einstellungen gibt wo man richtig multiplexen kann (jede Hardware 
an jeden Pin). Der Viruelle Port ist aber nur ein IO Port.

Wenn du dir dieses DB anschaust: ATxmega64A1/128A1 Preliminary
Da gibt es ein Unterpunkt Pinout and Pin Functions.

Du schaust dir an an welchen Pins die serielle Verbindung hängt.
Z.B. an PD6,7 dann siehst du im DB, dass du USART_D_1 benutzen musst.

Wenn die Serielle an anderen Pins hängt an denen kein USART angegeben 
ist sieht es soweit ich weiß eher schlecht aus.

: Bearbeitet durch User
von Flo K. (Firma: Techniker) (mikroflo)


Lesenswert?

Hallo Kai,

Okay jetzt ist es mir klar, danke dir :)

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Flo King schrieb:
> Dazu soll ich den Port D mappen damit ich
> diesen Port als serielle Schnittstelle verwenden kann.

Die UART zu initialisieren hat nicht wirklich etwas mit "Port-Mapping" 
zu tun, schon gar nicht mit virtuellen Ports. Es werden hier lediglich 
die Pins der UART auf die betreffenden Portpins geschaltet und somit die 
Standard-I/Os überschrieben. Das war schon bei den Tinys und Megas so, 
nur dass bei den XMEGAs noch Funktionen dazugekommen sind. Um alle 
informationen für den XMEGA zu erhalten, benötigt man immer das 
Familien-Manual und das Datenblatt des betreffenden Controllers. Dann 
muss man nur noch lesen können ;-)

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

[off topic]

@Flo King (Firma: Techniker) (mikroflo)

Wie kommt man eigentlich auf die geniale Idee, in einem 
Mikrocontrollerforum einen Thread mit dem aussagekräftigen Betreff 
"Mikrocontroller" zu eröffnen?

[/off topic]

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.