- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: Usb + Avr

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.01.2006
    Ort
    Mönchengladbach
    Beiträge
    544
    Anzeige

    Powerstation Test
    Der Schaltplan sieht in der Tat sehr übersichtlich aus, aber die Hintergründe sind umso trickreicher. Der Aufbau ist nur ne Fingerübung... das kann jeder, der mit einem Lötkolben umgehen kann. Aber zur Firmware:
    Auf der OBDEV-Seite gibt es einen Link "AVR-USB Projects". Wenn du da drauf klickst kommst du auf eine Seite mit Projekten, die den OBDEV-Treiber verwenden. (auf "All Projects" klicken!!) Hier kannst du aussuchen, welches Projekt am besten deinen Ansprüchen entspricht:
    Möchtest du eine USB-Tastatur haben, einen USB<->RS232 Wandler, ein Gamepad oder ganz was eigenes (fällt in deinem Fall aber weg).
    Wenn du z.B. AVR-CDC (ein Projekt) nutzt, dann wird der AVR als virtueller COM-Port im Rechner erkannt. Das bedeutet, daß dieser AVR (mit der OBDEV-Firmware) wie eine RS232 Schnittstelle arbeitet (mal abgesehen von den Pegeln. dafür benötigst du bei bedarf noch einen MAX232).
    Wenn du aber das Projekt "C64 Keyboard" nutzt, dann wird der AVR als HID-Keyboard erkannt und du kannst an den AVR eine C64-Tastatur anschliessen. Schau dir die Projekte einfach alle an.
    Wenn du es kannst, dann kannst du auch ein eigenes USB-Gerät programmieren, daß du dann mit einem speziellen Windoof-Treiber ansprechen musst... das ist aber nicht ganz einfach.

    Kurz gesagt: Der AVR mit der OBDEV-Firmware dient im einfachsten Fall als einfacher Schnittstellenwandler. Es ist aber auch sehr viel mehr möglich. (der AVR-CDC hat einen Postscript-ähnlichen Interpreter eingebaut)

    Gruß,
    SIGINT

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209
    Die Projekte habe ich mir auch schonmal angeschaut, recht interessant!
    Du meinst also die RS232 Schnittstelle zu verwenden wäre sinnvoller als USB? Wofür ich das genau will führe ich nochmal vor Augen: Ich möchte von AVR beliebige "einsen und nullen" zum PC senden, welche ich aber selber aussuche bzw. die Reihenfolge möchte ich selber auswählen. Das ganze auch andersrum also vom PC zum AVR. Ein Beispiel:
    Vom PC kommt: "10" was heißen soll, er will was senden,
    Vom AVRkommt: "10" was heißen soll dass er senden kann.
    jetzt soll der PC von mir spezielle Dualzahlen zum AVR senden also beispielsweise "101100". Das ganze soll auch andersrum funktionieren. Ich hoffe es ist einigermaßen verständlich. Wenn ja, was ist dafür komfortabler USB oder RS232?

    MfG Killer

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.01.2006
    Ort
    Mönchengladbach
    Beiträge
    544
    Hmmm,
    irgendwie kommen wir nicht auf einen grünen Zweig.
    Also versuch ich es ander zu erklären. Es gibt mehrere Möglichkeiten der Kommunikation zwischen PC und AVR:

    1) [ PC <-> COM-Port (RS232)] <->MAX232(Spannungs-Pegelwandler)<-> [USART (auch RS232) <-> AVR]

    Der PC besitzt einen COM-Port mit dem er im RS232 Standard mit anderen Geräten kommunizieren kann. Diesen Port kannst du (über einen MAX232) direkt mit dem AVR verbinden. Die meisten AVRs besitzen einen sog. USART (das ist das Gegenstück zum COM-Port am PC) mit dem der AVR die Daten vom PC empfangen kann. Die Verbindung geht in beide Richtungen.

    2) [PC<->USB-HOST] <-> [USB nach RS232 Wandler (FTDI oder AVR-CDC)<->virtueller COM-Port] <-> [USART<->AVR]

    Der PC bestizt eine USB-Schnittstelle, die von einem sog. USB-Host Controller gesteuert wird. (nur zur Info... nicht weiter interesannt)
    An der USB-Schnittstelle kannst du einen USB nach RS232 Wandler (z.B. einen FTDI-Chip) anschließen, der dann einen virtuellen COM-Port zur verfügung stellt. (Virtuell bedeutet, daß der COM-Port nicht physikalisch im PC ist) An diesem externen COM-Port kannst du nun wie bei der ersten Möglichkeit den AVR anschliessen.

    3) [PC<->USB-Host]<->[GPIO<->AVR]
    Diese Möglichkeit scheidet für dich aus, da du hierbei die OBDEV-Firmware ändern müsstest. Du kannst nämlich den AVR direkt, über die General Purpose IOs (also die normalen IO-Pins am AVR) an den USB-Bus hängen und die Software mit dem USB-Host reden lassen. Der Datenaustausch erfolgt dann über sog. Deskriptoren. Alle Projekte bei OBDEV nutzen diese Möglichkeit... einige bieten aber fertige Brücken zwischen USB und einer anderen Standardschnittstelle an (halt RS232 beim AVR-CDC).


    Ich hoffe du konntest das jetzt etwas besser verstehen.

    Gruß,
    SIGINT

  4. #14
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209
    Also ich meine die Nummer 1 also Verbindung zwischen AVR und PC über RS232. Hardwaretechnisch dies aufzubauen ist ja kein Problem, da ich das schon öfters gemacht habe. Auch ausgaben auf dem Bildschirms des PC's.

    Allgemeine Frage: Kann ich die Entsprechenden Ports (TXD und RXD) einfach auf 0 oder 1 schalten, sodass der PC eine Änderung "seiner" Pins abfragen kann? Also wie man diese Verbindung manuell befehligen kann, kann ich mir nicht vorstellen. Wie kann man sich das klar machen?

    MfG Killer

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    18.09.2007
    Beiträge
    6
    Zitat Zitat von Killer
    Allgemeine Frage: Kann ich die Entsprechenden Ports (TXD und RXD) einfach auf 0 oder 1 schalten, sodass der PC eine Änderung "seiner" Pins abfragen kann?
    Könnte man sicher, aber das wär' ehrlich gesagt ziemlich unsinnig. Dann könntest du auch jede andere IO-Leitung benutzen aber müsstest dich selber um die Synchronisation kümmern (damit meine ich: wenn zwei "Einsen" hintereinander kommen, woher weißt du, wann die erste zu Ende ist und die zweite anfängt?).

    Am einfachsten wärs, wenn du immer komplette Bytes sendest/empfängst. Dafür ist RS232 ausgelegt und du kannst jedes Standardbeispiel dazu nutzen, ohne dich darum kümmern zu müssen, was auf der Leitung genau passiert.
    (Notfalls kannst du ja deine Einsen und Nullen in je ein Byte packen, das verlangsamt die Übertragung dann aber logischerweise.)

    Gruß,
    Tom

  6. #16
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209
    Ich möchte nur leider genau wissen, was auf der Leitung genau passiert
    Angenommen ich möchte ein Byte = "10000101" an den PC senden; wie geht das denn dann überhaupt? Und wie geht das andersherum also vom PC wieder zurück zum AVR?

    Kann mir eventuell mal jemand einen Codefetzen posten, für die Übertragung des Bytes (s.o.) für den AVR? Wenn möglichen in Bascom vielleicht verstehe ich es dann endlich mal

    MfG Killer

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    18.09.2007
    Beiträge
    6
    Zitat Zitat von Killer
    Ich möchte nur leider genau wissen, was auf der Leitung genau passiert
    Du machst es einem (und auch dir) wirklich nicht leicht...

    Ich verstehe nicht, inwiefern das für deine Fragestellung wirklich relevant ist, aber andererseits habe ich wohl dein Anliegen insgesamt noch nicht richtig verstanden (und ich befürchte, ich bin nicht der einzige...).

    Zu wissen, was auf der Leitung passiert, schadet natürlich nicht, aber ich dachte, es geht dir in erster Linie darum, zwischen A und B (AVR und PC) Informationen zu übertragen. Wenn du das wirklich "zu Fuß" machen willst, dann musst du ein ganzes Stück tiefer ansetzen und dir erstmal Gedanken machen über Dinge wie Timing, Synchronisierung, Handshaking etc.
    Warum es bei RS232 Start- und Stoppbit(s) gibt ist dir klar?


    Zitat Zitat von Killer
    Kann mir eventuell mal jemand einen Codefetzen posten, für die Übertragung des Bytes (s.o.) für den AVR? Wenn möglichen in Bascom vielleicht verstehe ich es dann endlich mal
    Mit Bascom kann ich nicht dienen, aber wenn du in C den UART eines AVRs verwenden willst ohne das Rad neu zu erfinden, dann schnappst du dir 'ne passende Library, bindest die ein und nach der Initialisierung ist die Übertragung so einfach wie das hier:

    Code:
    uart_putc(0b10000101);
    empfangenes_byte = uart_getc();
    Gruß,
    Tom

  8. #18
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209
    Ja, ich kann das schlecht beschreiben...
    Meine Vorstellung: Der PC will zum AVR senden und sendet meinetwegen "10101010" als Anfrage. Sobald der AVR diese gleiche Dualzahl erwiedert soll der PC ein Byte zum AVR senden und der AVR soll dieses dann abfragen und in einer Variable zwischenspeichern. Das ist vorerst mein Hauptziel bzw. meine Vorstellung!
    -----------------------------------------------------------------------
    Ist das mit dem MAX232CPE realistisch diese Verbindung aufzubauen wie ich sie mir vorstelle?

    MfG Killer

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    18.09.2007
    Beiträge
    6
    Das ist so möglich und auch üblich. Damit kannst du dann entweder direkt auf eine "echte" serielle Schnittstelle vom PC gehen oder über einen zusätzlichen USB-Adapter eben auf eine virtuelle (wie oben ja bereits erwähnt wurde).

    Und wenn du dich nicht darauf versteifst, die Bits einzeln übertragen zu wollen, dann sind das auch nur ein paar Zeilen Programmcode...

    Gruß,
    Tom

  10. #20
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209
    Man überträgt ja für gewöhnlich Daten vom AVR zum PC beispielsweise in Bascom wie folgt: "PRINT " blablabla" ". Lässt sich das auch anders niederschreiben wie eine Variable welche man dann sozusagen an den PC sendet? Und wie empfängt man? Vielleicht kann mal jemand zu diesen beiden Fragen ein Codebeispiel posten

    MfG Killer

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen