USB Interface Braintechnology

Gast #2176813
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.
Gast #2177361
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?
#2177371
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.
#2177379
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
  }
#2177429
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
Gast #2177440
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 :-(
Gast #2177443
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.
Gast #2177486
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.
Gast #2179313
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.
Gast #2179329
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?
Gast #2186241
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.
Gast #2186530
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren