Forum: Mikrocontroller und Digitale Elektronik Xmega USB String senden


von Frank91 (Gast)


Lesenswert?

HI
Ich arbeite momentan an meiner Technikerarbeit und stehe momentan vor 
folgendem Problem:


Ich verwende den Controller Atxmega128A1U, dieser besitzt ein 
USB-Interface. Für meine Zwecke genügt es einzelne Strings zwischen dem 
Controller und einem PC austauschen zu können. Software am PC wäre 
hierfür Lapwiew oder Profilap.

Ich finde hierfür aber kaum Beispiele. Gibt es irgendwo eine fertige 
Library? Irgendwie kann man das USB doch auch als virtuellen Com-Port 
verwenden (so wie bei einem FT232RL beispielsweiße)?
Wenn ich eine fertige Bibliothek oder Lösungsansatz hätte wäre mir sehr 
geholfen.

von Gerhard G. (g_g)


Lesenswert?

Hallo,

ob wohl das nach Meinung vieler Leute die einfachste Sache der Welt 
wäre,findet man kaum Brauchbares.

Ich verwende bei USB gerne das Stellaris® LM4F120 LaunchPad.
Da kann man mit einen "drei Zeiler" einen virtuellen Com-Port verwenden.
Und das Ganze ist absolut  auch für Anfänger geeignet!

Hier im Forum kann ich dir für den ATXMEGA U Type nur den Artikel 
empfehlen:

Beitrag "CDC für xmega"

Gruß G.G.

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Durchgefallen.

Es gibt sogar auf ATMEL.com Beispiele für USB CDC. Wenn man der 
englischen Sprache wenigstens bruchstückhaft mächtig ist, sollte man die 
finden.

von Frank91 (Gast)


Lesenswert?

Danke für die Hilfe :P

Bei dem Beitrag welchen du mir geschickt hast:

ich hab jetzt dieses das Beispielprogramm auf meinen Controller geladen.
mein PC erkennt jetzt etwas am USB Anschluss.

Er kennt aber keinen passenden Treiber.
Wähle ich die Inf datei welche in der Zip Datei enthalten ist aus, kommt
nur die Meldung, dass das "CDC Virtual Com konnte nicht installiert
werden"

von Gerhard G. (g_g)


Angehängte Dateien:

Lesenswert?

Hallo Frank,

ich habe den Treiber hier gefunden:siehe Bild Anhang

Voraussetzung AVR Studio

Achtung Treiber werden massiv von Microsoft geblockt, trotzdem 
weitermachen!!!!


Gruß G.G.

von Stephan B. (matrixstorm)


Lesenswert?

Hallo.

Falls ATxmega128A3U eine Option fuer dich ist, ggf. magst du dir mal

http://matrixstorm.com/avr/avrstick/

ansehen.
Fuer das Board habe ich ein Beispielcode:

http://vps.matrixstorm.com:1114/bideavr/simpleusbterm.html


MfG

von Frank91 (Gast)


Lesenswert?

Hi :P
danke für die Hilfe bis hier hin.
dass mit dem Treiber hat jetzt funktioniert.

Der ATxmega128A3U ist leider keine Option für mich. Meine bis jetzt 
aufgebaute Schaltung mit dem ATxmega128A1U funktioniert nämlich bereits 
fast komplett außer die USB Schnittstelle.

Ich bin inzwischen weitergekommen, aber so ganz zurecht komm ich noch 
nicht ganz.
Ich schildere euch mal meine aktuelle Lage, vlt fällt ja noch jemanden 
etwas ein :P

Ich bin auf folgende Applikation Note gestoßen:
http://www.atmel.com/Images/doc8447.pdf
Obwohl ASF für mich absolutes Neuland ist hab ich es trotzdem mal 
versucht.
Geöffnet habe ich folgendes Beispielprogramm:
Device Familiy: xmega 8bit
Category: Services
Dann auf Technologie: ASF 3.11.0
USB
USB Device CDC Example - STK600 - ATxmega 128A1U

So sieht meine Main aus:

int main(void)
{
  //war im Beispielprogramm bereits enthalten. Funktion weiß ich nicht
  irq_initialize_vectors();
  //war im Beispielprogramm bereits enthalten. Funktion weiß ich nicht
  cpu_irq_enable();

  // Initialize the sleep manager
  //war im Beispielprogramm bereits enthalten. Funktion weiß ich nicht
  sleepmgr_init();

  //war im Beispielprogramm bereits enthalten. Funktion weiß ich nicht
  sysclk_init();
  //war im Beispielprogramm bereits enthalten. Funktion weiß ich nicht
  board_init();
  //war im Beispielprogramm bereits enthalten. Funktion weiß ich nicht
  ui_init();
  //war im Beispielprogramm bereits enthalten. Funktion weiß ich nicht
  ui_powerdown();

  // Start USB stack to authorize VBus monitoring
  udc_start();
  //udc_attach();


  // The main loop manages only the power mode
  // because the USB management is done by interrupt
  while (true) {

    //war im Beispielprogramm bereits enthalten. Funktion weiß ich nicht
    sleepmgr_enter_sleep();


    //löst aus, wenn etwas empfangen wurde
    if (udi_cdc_is_rx_ready())
    {
      //gibt die Anzahl der empfangenen bytes aus (meist 1)
      leng = udi_cdc_get_nb_received_data();


      for (i =0; i<leng; i++ )
      {
        //string wird im Array test gespeichert
        test[j] =udi_cdc_getc();
        j++;
        if (j >= 200) i=0;
      }
    }

    //Wenn sendebereit: sende "C"
    if (udi_cdc_is_tx_ready) udi_cdc_putc('c');
    //Wenn sendebereit: sende "$"
    if (udi_cdc_is_tx_ready) udi_cdc_putc('$');

  }
}

Ich verwende Profilap zur Kommunikation am PC.
Baudrate habe ich hier 9600 und in der conf_usb.h habe ich auch 9600 
angegeben.

So verkehrt was ich gerade mache kann es nicht sein xD
die Funktion udi_cdc_putc() sendet nämlich scheinbar erfolgreich zum 
PC!!!

Das Empfangen klappt allerdings nicht so.
Ich Sende zum Controller folgenden String:
####1230A$$

ich empfange allerdings (allso im array namens Test):
#230A$

Die Ansätze sind allso da. Aber wieso einzelne Zeichen fehlen verstehe 
ich nicht.

Allerdings gibt es auch einige Dinge bei denen ich mir auch nicht ganz 
richtig bin ob es so richtig gemacht habe. Möglicherweiße ist hier der 
Fehler.

In der Applikation Note steht der genaue Ablauf zum Empfangen. Folgende 
Funktionen werden hier zusätzlich verwendet:

udc_attack()  habe ich auskommentiert, da keinen Unterschied gemacht hat 
ob die Funktion enthalten war.

UDI_CDC_ENABLE_EXT()
UDI_SET_CODING_EXT(cfg)
UDI_CDC_RX_NOTIFY()
Ich habe die Funktionen weggelassen, da sie einen Übergabewert namens 
Port benötigen. Schreibe ich allerdings PORTD sagt mir Atmel Studio, 
dass das ungültig wäre. Keine Ahnung was sonst damit gemeint sein 
könnte.

Aber vlt benötige ich diese Funktionen auch gar nicht....
Den zum Beispielprogramm gibt es folgenden Link:
http://asf.atmel.com/docs/3.11.0/xmegaau/html/udi_cdc_quickstart.html
und
http://asf.atmel.com/docs/3.11.0/xmegaau/html/group__udi__cdc__group.html
und hier wird auch keine dieser Funktionen verwendet.
So wie ich das verstehe, waren diese nur bei einer älteren Version von 
ASF notwendig.

Achja einen Quarz habe ich keinen auf meiner Schaltung verbaut. Benötige 
ich auch nicht, da das Senden ja funktioniert?
Also macht das denke ich auch keinen Unterschied.

Wäre cool, wenn jemand mal drüber schauen könnte und ihm noch was 
einfällt. Schließlich funktioniert es ja so halber.
Von der Theorie müsste ich dann mein bereits bestehendes 
Funktionierendes Programm nur noch in dieses Programm hineinkopieren,
sobald die USB Schnittstelle funktionieren würde.

von Frank91 (Gast)


Lesenswert?

weiß keiner weiter?

von Stephan B. (matrixstorm)


Lesenswert?

Heute abend im TeamSpeak
ts3server://vps.matrixstorm.com:10987?nickname=Frank91 ?

Da kann ich dir per Voice Fragen beantworten/Tipps geben/libusbterm.a 
fuer ATxmega128a1u compilieren - alles schreiben dauert mir hier zu 
lange.

MfG

von Frank91 (Gast)


Lesenswert?

ok, danke das wäre gut :P

Hab heute abend noch viel zu tun aber ich versuch so um 8 mal im ts zu 
sein, wenn dir das passt.

von Frank91 (Gast)


Lesenswert?

erhöhte sicherheitsstufe?

von Matthias F. (frank91)


Lesenswert?

danke nochmal :P
Funktioniert jetzt alles so.

von Stephan B. (matrixstorm)


Lesenswert?

Matthias Frank schrieb:
> Funktioniert jetzt alles so.

Okay, freut mich zu hoeren.

Btw. hab ich jetzt auch Code zum prototypischen implementieren von 
MassStorage ("USB Stick") Devices:

http://matrixstorm.com/avr/avrstick/#bideavr

Nur fuer den Fall, irgendjemand hat Verwendung dafuer.

MfG

: Bearbeitet durch User
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.