Forum: Mikrocontroller und Digitale Elektronik USB Interface Braintechnology


von Heiko P. (Gast)


Lesenswert?

Hallo.

Ich habe eine Platine geschenkt bekommen, USB High Speed Interface 2.6 
von Braintechnology.

Dort ist ein 8051 drauf. Ich werde leider aus den PDFs nicht so recht 
schlau, da dort keine Codebeispiele genannt sind. Hat da jemand 
Beispiel-Code für C, wie man dort Pins konfiguriert?

Zweite Frage: Wie muss ich eine LED an einen IO-Pin anschließen, habe 
bisher mit dem STM32 VL-Discovery Board von ST gearbeitet. Bei dem 8051 
hab ich gelesen, dass man die LED andersrum dranmacht, also - der LED an 
den Pin und + der LED an VCC.

Wenn jemand nen gutes 8051 Tutorial hat, wer das auch ganz gut, hab da 
leider bisher noch nicht das Richtige gefunden.

Vielen Dank.

von Heiko P. (Gast)


Lesenswert?

So hier ist mein Code:
1
#include <reg51.h>
2
3
sbit P1_7 = P1^7;
4
5
void my_delay(void)
6
{
7
  for(...)
8
    for(...)
9
      ;
10
}
11
12
int main(void)
13
{
14
  while(1)
15
  {
16
    P1_7 = 0;
17
    my_delay();
18
    P1_7 = 1;
19
    my_delay();
20
  }
21
}

So, habe jedoch immer ca. 0,3 V an dem Pin PB7.
Habe das ganze mal an einem anderen Pin getestet.
PA7, der hat entweder 0,3 oder 3,18V

Muss ich eigentlich noch irgendwie den Port als Output definieren?

von Εrnst B. (ernst)


Lesenswert?

"Üblicherweise" haben 8051er keine Push/Pull Ausgänge, sondern können 
nur gegen GND schalten, mit internem Pull-Up widerstand.

Kann aber gut sein, dass das bei deinem Derivat anders ist (=> 
Datenblatt)
Der AN2131 "EzUSB" z.B. hatte dafür "PORT?CFG"-Register, die ähnlich der 
DDR? und TRIS? - Register beim AVR oder PIC die Pins zw. Ein- und 
Ausgang umschalten konnten.

von Εrnst B. (ernst)


Lesenswert?

Nachtrag zum AN2131, ist schon länger her:

der PORT?CFG schaltet zwischen "Alternate Function" und "GPIO" um, 
Ausgang geht über Output-Enable "OE?", Setzen über "OUT?" und Lesen über 
"PIN?".


zum Beispiel:
1
  PORTCCFG = 0; // Alle Pins als GPIO
2
  OEC = 0xff; // und als Ausgang
3
  while (1) { // Blink...
4
    OUTC=0x55;
5
    delay(1000);
6
    OUTC=0xAA;
7
    delay(1000);
8
  }

von Heiko P. (Gast)


Lesenswert?

Danke für die Antwort, wo sind denn die OUT? etc definiert? Gibts da ne 
Headerdatei?

von Εrnst B. (ernst)


Lesenswert?

Heiko P. schrieb:
> Gibts da ne
> Headerdatei?

versuch mal
1
#include <fx2.h>
2
#include <fx2regs.h>

Wenn dein Compiler (welcher?) die mitliefert ist alles in Butter, wenn 
nicht hast du wenigstens Google-Futter zum suchen.

von kurz-rs (Gast)


Lesenswert?

Wofür sind beide fx header? Hab mit Google-Futter reingezogen, aber ich 
kenn mich trotzdem nicht mitm 8051 aus :-D

Hab mir das hier mal durchgelesen, wurde aber nicht schlau draus 
http://www.danielclemente.com/placa_pi/index.en.html#toc4

Ich will nix damit machen, mich interessiert's nur (falls ich mal was 
damit machen muss :-D )

von Christian R. (supachris)


Lesenswert?

Hier gibts das komplette Entwicklerpaket: 
http://www.cypress.com/?docID=5975 mit Keil-Compiler, Code-Beispielen 
usw.
Wichtig zu wissen ist, dass der FX2 eher ein USB 2.0 Controller ist, und 
der 8051 quasi nebenbei da drauf sitzt. Man kann natürlich den 8051 auch 
zu mehr nutzen als für den USB Transfer, im Paket ist aber nur eine 4k 
Version des Keil Compilers.
Wichtig ist auch das Technical Reference Manual: 
http://www.cypress.com/?docID=5974 da stehen alle Register drin.
Zu finden alles nochmal komplett hier: http://www.cypress.com/?rID=14319

von Heiko P. (Gast)


Lesenswert?

Die LEDs soll man ja mit Pullup-R an VCC und -LED an OutPin

der Pin müsste ja dann 0V liefern, wenn die LED angehen soll, richtig? 
meiner liefert ja immer 0,3V?

Ich arbeite mit Keil µVision 4, Compiler C51, glaube ich, also der 
Standard bei dem Programm.

Die Pins kann ich ja über die REG51 ansprechen. Nur irgendwie bekomme 
ich die LED nicht an :-(

von Heiko P. (Gast)


Lesenswert?

Christian R. schrieb:
> Wichtig zu wissen ist, dass der FX2 eher ein USB 2.0 Controller ist, und
> der 8051 quasi nebenbei da drauf sitzt. Man kann natürlich den 8051 auch
> zu mehr nutzen als für den USB Transfer, im Paket ist aber nur eine 4k
> Version des Keil Compilers.

Ja das weiß ich, der FX2 soll von einem PC angesteuert werden und die 
LED zum Blinken bringen, bis wieder vom PC eine Meldung kommt, dass sie 
aufhört.
Signale vom PC kommen über USB.

von Heiko P. (Gast)


Lesenswert?

okay, also
1
PORTBCFG = 0;
2
OEB = 0x80; // PortB Pin 7 auf 1 setzen? 1 entspricht OUTPUT
3
4
...main...
5
while(1)
6
{
7
   IOB |= 0xC0; // Pin setzen
8
   delay();
9
   IOB &= 0x00;
10
   delay();     // Pin clear
11
}

So hab ich mir das jetzt aus der TRM rausgesucht.

Leider sind dort keine Codebeispiele und bei den Examples hab ich nix 
gefunden, wie man Pins konfiguriert und anspricht.

Danke.

von Heiko P. (Gast)


Lesenswert?

ich meine 0x80 statt 0xC0

von Heiko P. (Gast)


Lesenswert?

Hat denn keiner eine Idee?

Das aktuelle Problem sieht folgendermaßen aus:

ich habe die LED an den Pin PB7 angeschlossen.
(LED+ an VCC mit Pullup / LED- an PB7)

nur leider hat der Pin im Low-Zustand immer 0,3 V, das müsste doch 
eigentlich 0 sein, damit die LED leuchtet oder?

Vielen Dank.

von Christian R. (supachris)


Lesenswert?

0,3V bei Low ist schon OK. Ganz 0V wird es nicht. Was heißt Pull-Up? Da 
muss ein Vorwiderstand dran. Und denk dran, das sind 3,3V I/Os.

von Heiko P. (Gast)


Lesenswert?

Mh. okay, wenn das 3,3V Ein-/Ausgänge sind, dann weiß ich jetzt auch 
warum da nur 3,3 V rauskommen :-D

Hab bisher nur mit dem STM32 gearbeitet.

Also gelesen hatte ich die LED-Konfiguration so, dass die über nen 
Widerstand an VCC sollen, war ne englische Beschreibung, hab ich dann 
wohl als Pullup ausgelegt.

Wie bekomme ich jetzt die 5V LED zum leuchten? Sie sollte ja bei 3,3V 
auch leuchten nur etwas schwacher oder?

von Heiko P. (Gast)


Lesenswert?

Christian R. schrieb:
> 0,3V bei Low ist schon OK. Ganz 0V wird es nicht. Was heißt Pull-Up? Da
> muss ein Vorwiderstand dran. Und denk dran, das sind 3,3V I/Os.

Meinst du den Vorwiderstand der LED? Das ist eine mit integriertem 
Vorwiderstand...

von Christian R. (supachris)


Lesenswert?

Da wird nicht viel leuchten...du brauchst eine für 3,3V oder eine 
normale und einen Vorwiderstand. Oder du klemmst die LED an 5V, ich hab 
eben im Datenblatt nochmal geschaut, der hat 5V tolerante I/Os. Dürfte 
nix kaputt gehen.

von Heiko P. (Gast)


Lesenswert?

So, ich habe mir jetzt mal eine LED ohne integriertem Vorwiderstand 
besorgt.

Anschluss: Kathode an Pin PB7, Anode über R an VCC (5V)

R = (5V-1,6V)/10mA
R=340 Ohm

Haut das soweit hin?

Jetzt mal zum C-Code für die Geschichte LED-Blinken
1
#include <REG51.h>
2
3
sbit PB7 = 0x97;
4
5
void delay(void)
6
{
7
...
8
}
9
10
int main(void)
11
{
12
  while(1)
13
  {
14
    PB7 = 0;
15
    delay();
16
    PB7 = 1;
17
    delay();
18
  }
19
}

Was muss ich noch machen?
PORTBCFG?
OEB?

Vielen Dank.

von Heiko P. (Gast)


Lesenswert?

Okay, also LED ist angeschlossen, und leuchtet auch, wenn der jeweilige 
Pin auf Low ist. :-)

Nur irgendwie bekomme ich die Pins noch nicht geschaltet.

Kann mit da irgendjemand weiterhelfen?

von Heiko P. (Gast)


Lesenswert?

So hier mein aktueller C-Code:
1
int main(void)
2
{
3
  P1 = 0xFF; // Alle Pins auf 1 setzen
4
  while(1)
5
  {
6
    P1 = 0x7F; // Pin 7 auf 0 setzen
7
    my_delay();
8
    P1 = 0xFF;  // Pin 7 auf 1 setzen
9
    my_delay();
10
  }
11
}

Leider zeigt sich beim debuggen keine Funktion auf dem Board.
Hat jemand eine Idee? Der Code sollte eigentlich stimmen.

Vielen Dank.

von Christian R. (supachris)


Lesenswert?

Ist denn die Zählvariable in der Delay-Funktion als volatine deklariert? 
Beliebter Fehler...

von Heiko P. (Gast)


Lesenswert?

Jetzt ja, aber das ändert nix.

Ich glaube der Fehler liegt in der Konfiguration.
Wie kann ich denn bei Mikrovision 4 nen 8051 flashen? irgendwie hat der 
kein Flashtool mit installiert.

Vielen Dank

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.