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
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
das ist nicht ganz korrekt. Die Ports werden komplett anders angesprochen. Die sind nicht 51er kompatibel Thomas
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
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;
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
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
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; ??????
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); }
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
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
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.