Hallo Leute,
ich habe mal ne recht einfach frage. Wie stelle ich fest, durch eine
Messung, ob ein Pin eines Mikrocontrollers als Eingang oder Ausgang
definiert wurde?
Es geht genauer um folgendes.
Ich habe mir das Xminilab von Gabotronics besorgt.
http://www.gabotronics.com/development-boards/xmega-xminilab.htm
Nun versuchte ich, das Oszilloskop über USART anzusteuern und
auszulesen.
Dies wollte mir nicht so recht gelingen, also habe ich den Support dort
angeschrieben und die haben mir gesagt, dass sie die USB Pins PD6 und
PD7 als nutzen und nicht PE2 und PE3 wie im Schaltplan vorgesehen.
Ich könne aber die Pins von Port D mit den Pins von Port E verbinden.
1
I recently changed the firmware so that the serial port is on pins PD6, PD7 (Micro USB connector) instead of PE2, PE3 (External Port).
2
This was done because the USB stack is not ready and most users will buy the USB to UART cable to connect to the PC.
3
4
[...]
5
6
But if you wish to try now, you could solder the TX and RX to the little vias that are close to the micro USB connector.
Leider wurde mir noch nicht verraten, welche Pins mit welchen zu
verbinden sind.
Tx->D-;
Rx->D+;
oder umgekehrt?
Auf mein Nachfragen wurde bisher noch nicht geantwortet.
Da ich bisher noch nie nen ATXmega programmiert habe, sondern nur die
8-Bit-Varianten, werde ich leider auch aus dem Source Code so schnell
nicht schlau.
Habt Ihr eine Idee ob und wie man messen kann, ob ein Pin als Eingang
oder Ausgang fungiert?
Oder kann jemand den Source lesen:
Laut dem Code sind nur die unteren 5 Portausgänge von Port D auf Ausgang
gesetzt (PORTD.DIR = 0x1F;)!
Schau dir mal den Code der seriellen Schnittstelle an, da müßten
irgendwo noch Port D6 und D7 definiert sein.
EVSYS.CH3MUX=0xD0;// Event CH3 = TCD0 overflow used for DAC
Aber wo PD6 und PD7 explizit neu gesetzt wurden, fand ich jetzt nicht.
Ich habe mal auch noch die main.h in den Anhang als Ergänzung zur main.c
gepackt. Vll gibt das Aufschluss.
Ich würde auch gern den ganzen Code in den Anhang packen. Aber ich frage
mich, wie sinnvoll das ist, zumal man es sich über den Link im ersten
Post auch ziehen kann.
Gruß
Fabian
Fabian Hoemcke schrieb:> Also, Messtechnisch gibt es da keinen Lösungsansatz?
Wenn er Ausgang ist, sollte er auch entweder bei einer gewissen
Belastung noch nicht zusammenbrechen, oder GND-Pegel haben.
Eingänge haben i.d.R. eine relativ hohen Pull-Up-Widerstand, dessen
Ausgangsspannung bei Belastung zusammenbrechen müsste, wenn man ihn
stark genug belastet.
Der Ausgangswiderstand der Pins sollte aus dem Datenblatt hervorgehen.
Fabian Hoemcke schrieb:> Also, Messtechnisch gibt es da keinen Lösungsansatz?
Du kannst dir immer eine Serienschaltung aus 2 x 4k7 Widerständen bauen,
die Enden mit VCC bzw. Gnd verbinden und an der Mittelanzapfung die
Spannung messen (vorzugsweise mit einem Oszi) und damit an den µC-Pins
rumstochern. Solange du in der Luft oder an einem Eingang bist (und da
niemand anderes dran zieht) mißt du VCC/2, wenn du an einen Ausgang
gerätst, geht die Spannung näherungsweise auf VCC bzw. Gnd.
Wolfgang schrieb:> Fabian Hoemcke schrieb:>> Also, Messtechnisch gibt es da keinen Lösungsansatz?> Du kannst dir immer eine Serienschaltung aus 2 x 4k7 Widerständen bauen,> die Enden mit VCC bzw. Gnd verbinden und an der Mittelanzapfung die> Spannung messen (vorzugsweise mit einem Oszi) und damit an den µC-Pins> rumstochern. Solange du in der Luft oder an einem Eingang bist (und da> niemand anderes dran zieht) mißt du VCC/2, wenn du an einen Ausgang> gerätst, geht die Spannung näherungsweise auf VCC bzw. Gnd.
Hi, das hört sich gut an. Wie muss ich mir das vorstellen?
In etwa so:
Fabian Hoemcke schrieb:> // Initialize USARTE0 for External Interface Port> USARTE0.BAUDCTRLA = 0x17; // BSCALE = -6, BSEL = 1047> USARTE0.BAUDCTRLB = 0xA4; // ==> 115211 bps (~115.2kbps)
Wer soll das lesen können ? Richte dich doch bitte nach der für alle
AVRs üblichen Syntax:
1
// serial port setup
2
#define USART USARTF0
3
/* Set baud rate */
4
staticvoidUSARTInit(void)
5
{
6
USART_PORT.DIRSET=PIN3_bm;// Pin 3 (TXD0) as output.
7
USART_PORT.DIRCLR=PIN2_bm;// Pin 2 (RXD0) as input.
Ist doch gleich viel besser zu lesen, oder ?
Fabian Hoemcke schrieb:> nie nen ATXmega programmiert habe, sondern nur die> 8-Bit-Varianten
XMegas sind 8-bit Controller, nur mal nebenbei :P
Fabian Hoemcke schrieb:> Hi, das hört sich gut an. Wie muss ich mir das vorstellen?
Genau so. Wenn der µC die Datenrichtung im Programm wild ändert, muß man
natürlich schon mit dem Oszi genau hinsehen.
Wolfgang schrieb:> Fabian Hoemcke schrieb:>> Hi, das hört sich gut an. Wie muss ich mir das vorstellen?>> Genau so. Wenn der µC die Datenrichtung im Programm wild ändert, muß man> natürlich schon mit dem Oszi genau hinsehen.
Oh, vielen Dank! Das werde ich ausprobieren.
Gruß
Fabian
Matthias Sch. schrieb:> Wer soll das lesen können ? Richte dich doch bitte nach der für alle> AVRs üblichen Syntax:
Ich hatte ja bereits geschrieben, von wem der Source stammt.
Und wenn Du schon auf für alle üblichen Syntax wert legst, dann lass das
Plenken sein. ;)
Danke für das Aufdröseln, des Sources, jedoch müsste demzufolge ganz
normal PE2 und PE3 Rx und Tx sein. Sind sie aber nicht. Laut der Firma
sind es PD6 und PD7. Die Zuordnung aber brauche ich. Und die finde ich
nicht im Source Code.
______Matthias Sch. schrieb:> XMegas sind 8-bit Controller, nur mal nebenbei :P
Ja, hatte irgendwie gedacht, dass das schon die 32-Variante sein.
Wofür hat denn diese Serie das "X" bekommen?
Gruß
Fabian
Mich würde mal generell interessieren, wenn ich auf gut Glück die
jeweiligen Leitungen verbinden würde und ich bei der fifty-fifty Chance
die falschen Verbindungen ziehen würde, ob dass schlecht für den/die
Controller wäre?.
Ich vermute mal, bei den Pins, die beide als Eingänge fungieren,
entsteht kein Problem. Aber bei den beiden Ausgängen. Wenn der eine
gerade HIGH ausgibt und der andere ein LOW, dann habe ich doch einen
harten Kurzschluss oder?
Oder ist es gar unbedenklich, wenn ich es auf diese Art und Weise
ausprobieren würde?
Gruß
Fabian