Forum: Mikrocontroller und Digitale Elektronik AN2131 USB CONTROLLER


von Christian Wiemann (Gast)


Lesenswert?

Hallo an alle....

Hab folgendes Anliegen.....

Beschäftige mich grad mit Mikrocontroller-Programmierung mittels
C-Sprache und habe einen USB-Controller der Firma Cypress mit der
Kennung AN2131Q...
Dieser besitzt 3 Ports (A,B und C)
An Port C würde ich gern 1-2 LEDS ansteuern können mittels eines
C-Programms.... Jedoch sind mir die Befehle für USB-µController noch
nicht vertraut, um solche Funktionen zu realisieren...
Als Compiler nutze ich den Keil....
Könnte mir jemand helfen, welche Befehle ich zum Setzen und Rücksetzen
von LEDs benötige? Gelten die auch für USB-Controller??

MFG  Christian Wiemann

von Alexander (Gast)


Lesenswert?

Hallo,

ausser den zusätzlichen Registern / Interrupts für den USB verhält sich
das Teil wie ein 8052.

http://www.8052.com/tutorial.phtml

Gruss
  Alexander

von Christian Wiemann (Gast)


Lesenswert?

Heißen Dank....

Ich schau mal ob mir das weiterhilft.....

MFG  CW

von Thomas (Gast)


Lesenswert?

das ist nicht ganz korrekt. Die Ports werden komplett anders
angesprochen. Die sind nicht 51er kompatibel

Thomas

von Alexander (Gast)


Lesenswert?

Hallo,

stimmt, sorry, ist schon etwas her, dass ich mit dem Teil gearbeitet
habe. Das Tutorial finde ich trotzdem gut, schadet sicher nicht.

Gruss
  Alexander

von Walter (Gast)


Lesenswert?

So läuft es bei mir mit Keil
Gruß Walter


#include <stdio.h>  /* Standard I/O-Funktion */
#include <string.h>     /* Standard I/O-Funktion */
#include <math.h>  /* Standard Mathematik-Funktion */
#include <regan21.h>  /* Controller AN2131 */

/* Datenrichtung: 0 = Eingänge, 1 = Ausgänge */
#define OUTA  0x7F96;  /* PortA Ausgaben */
#define OEA    0x7F9C;  /* Datenrichtung PortA */
#define PINSA  0x7F99; /* PortA Eingaben */
#define OUTB  0x7F97;  /* PortB Ausgaben */
#define OEB    0x7F9D;  /* Datenrichtung PortB */
#define OUTC  0x7F98;  /* PortC Ausgaben */
#define OEC    0x7F9E;  /* Datenrichtung PortC */

volatile unsigned char xdata *c_Adr_Ptr;/* allg. Adr-Zeiger */
volatile unsigned char xdata *c_PortA_Ptr;/* PortA-Zeiger */
volatile unsigned char xdata *c_PortB_Ptr;/* PortB-Zeiger */
volatile unsigned char xdata *c_PortC_Ptr;/* PortB-Zeiger */

/* Port A auf Eingang setzen */
c_PortA_Ptr = OEA;
*c_PortA_Ptr = 0x00;  /* Port A als Eingang */
c_PortA_Ptr = PINSA;

/* Port B auf Ausgang setzen */
c_PortB_Ptr = OEB;
*c_PortB_Ptr = 0xFF;  /* Port B als Ausgang */
c_PortB_Ptr = OUTB;

*c_PortB_Ptr = 0xFC;

/* Port C auf Ausgang setzen */
c_PortC_Ptr = OEC;
*c_PortC_Ptr = 0xFF;  /* Port C als Ausgang */
c_PortC_Ptr = OUTC;
*c_PortC_Ptr =  0x20;

von Christian wiemann (Gast)


Lesenswert?

Vielen Dank Walter....
Jedoch bleibt mir ein Problem offen....

Diesen Code hab ich insofern modifiziert, das ich nur die Anweisungen
für den Port C drin gelassen habe, da mich Port A und B nicht
interessieren.
Auf Port C ist bei mir beim 7.Bit (PC7) eine LED angeschlossen. Diese
möchte ich demnach an- und ausschalten.
Mein Code sieht demnach folgendermassen aus:

#define OUTC 0x7F98; /* PortC Ausgaben */
#define OEC 0x7F9E; /* Datenrichtung PortC */

void main ()
{
volatile unsigned char xdata *c_PortC_Ptr;/* PortC-Zeiger */

/* Port C auf Ausgang setzen */

c_PortC_Ptr = OEC;
*c_PortC_Ptr = 0x80; /* Port C als Ausgang (PC7) */
c_PortC_Ptr = OUTC;
*c_PortC_Ptr = 0x80;

}
Mit OEC wird ja festgelegt, ob mein PIN am Port C (bei mir ist es Pin 7
--> PC7) ein Input oder Output ist. Und mit OUTC schreib ich doch meinen
Wert, welcher dann am Output Pin gestzt werden soll.

Leider geht die LED nicht an, wenn ich das Programm auf den Controller
schreibe... Nun wollt ich dich fragen ob ich zufällig was vergessen
habe bzw. ich was nicht berücksichtigt habe....

Würde mir sehr helfen.

MFG Christian Wiemann

von Walter (Gast)


Lesenswert?

Hallo Christian,
PC7 ist das 8. Bit (PC0 - PC7)

schalte mal alle 8 Leitungen ein und aus, dann müßtest du was sehen.

/* Port C auf Ausgang setzen */
c_PortC_Ptr = OEC;
*c_PortC_Ptr = 0xFF;  /* Alle Leitungen Port C als Ausgang */
c_PortC_Ptr = OUTC;
*c_PortC_Ptr =  0xFF;

anschliessend alle Ausgänge mit
*c_PortC_Ptr =  0x00;
auf 0 setzen.

wie überträgst du eigentlich das Programm in den Controller ?


Gruß Walter

von Christian wiemann (Gast)


Lesenswert?

Hallo Walter....

Bin grad zuhause und hab den Controller leider nicht hier...
Ich probier das morgen...

Was die übertragung angeht, lasse ich es mit Keil in ein Hex-File
umwandeln und übertrage das Hex-File mit Hilfe des Anchor EZ-USB
Control Panel auf den Controller....

Ich probier es morgen....

P.S.  Bei den Adresszuweisungen in der Zeile: c_PortC_Ptr = OUTC;
Muss da nicht noch ein Und-Zeichen vor dem OUTC bzw. OEC?
Also so: c_PortC_Ptr = &OUTC; c_PortC_Ptr = &OEC;
??????

von Walter (Gast)


Lesenswert?

Hallo Christian,
wenn dein Programm nicht funktioniert, probier mal das untenstehende
Programm aus, habe es bei
http://www.elexs.de/modulbus/technik/ezusb.html
gefunden und in C umgeschrieben (EZdl.frm)

Wenn das nicht funktioniert, hast du ein Hardwareproblem.

P.S. vor OUTC bzw. OEC darf kein &-Zeichen sein


void main(void)
{
 char xdata *Adr_Ptr;
 char A;

   A = 0xFF;
  Adr_Ptr = 0x7F9E;
  *Adr_Ptr = A;
  Adr_Ptr = 0x7F98;

  do
  {
    A--;
    *Adr_Ptr = A;
  }while(1);
}

von Christian wiemann (Gast)


Lesenswert?

Funktioniert jetzt.....

Danke Dir....

von Andre Rottstegge (Gast)


Lesenswert?

Hallo Christian

hab mir auch den USB-Controller der Firma Cypress zugelegt und komm
noch nicht so richtig mit dem Control Panel zurecht. Kannst du mir kurz
erklären wie du ein Hex File übertrage kannst und muss ich vorher noch
Einstellungen vornehmen, um ein ersten Programm zu testen.
Gruß Andre

von Thomas Keil (Gast)


Lesenswert?

Hallo Christian,
Mich würde interessieren, woher Du den Chip hast, suche dringend diesen
Typ. Falls Du weitere Probleme hast, kannst Du mich auch direkt
kontaktieren (th_keil@arcor.de)
Gruß Thomas

von Walter (Gast)


Lesenswert?

Den AN2131QC u. AN2131SC gibt es bei R&S

http://www.rsonline.de/

Gruß
Walter

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.