www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AN2131 USB CONTROLLER


Autor: Christian Wiemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alexander (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Wiemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heißen Dank....

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

MFG  CW

Autor: Thomas (Gast)
Datum:

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

Thomas

Autor: Alexander (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Christian wiemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian wiemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
??????

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
}

Autor: Christian wiemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert jetzt.....

Danke Dir....

Autor: Andre Rottstegge (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Keil (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den AN2131QC u. AN2131SC gibt es bei R&S

http://www.rsonline.de/

Gruß
Walter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.