mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kommunikation: PC <-> AVR


Autor: Elektro Fuzzi (elektrofuzzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

wie der Threadtitel schon sagt, suche ich eine brauchbare Möglichkeit
zur Kommunikation zwischen 4+ AVRs und einem PC.

Bis jetzt habe ich vom Parallelport je 2 Pins pro AVR verwendet, über
den ich ein selbstgestricktes serielles Protokoll (mit Handshake,
etc...) angewendet habe.

Das Problem bei der Sache ist, dass die CPU des PCs extrem stark
ausgebremst wird, und manchmal Fehler auftreten (durch Timing) und die
Daten neu angefordert werden müssen. Dazu kommt noch, dass die ganze
Sache extrem langsam ist. Ich benötige ca 30-40ms um ein Byte so
durchzuschieben.

Ich gebe zu, dass das ziemlich schlecht klingt, aber ich bin eben noch
Anfänger.

Die ganze Sache soll ausserdem an einem normalen PC ohne Zusatzhardware
im PC (Steckkarte oder so, extern ist egal) laufen. Irgendwas in
Richtung Parallel, Seriell, USB, etc. wären nicht schlecht. Und
"zügiger" Datentransfer (100+ Byte/sec) ohne den PC auszubremsen wäre
auch super.

Falls irgendjemand eine Idee hätte, wäre ich sehr dankbar.

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Von Silicon Labs gibt es uCs mit integrierter USB 2.0 - Schnittstelle.
Treiber, etc. Sind auf Basis 8052.

Stephan.

Autor: Rüdiger Britzen (ruedigerbritzen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

binde doch einen AVR als Master über USB (FTDI FT232R) an den Rechner
an und lass' diesen Master dann über I2C mit deinen 4+ AVR (I2C
unterstützt bis zu 32 Slaves) kommunizieren.

Der FTDI FT232R lässt sich im C++-Builder wunderbar einfach handeln und
braucht als externe Komponenten lediglich 4 Kondensatoren und 2
Widerstände. Ich habe eben mein erstes Projekt mit dem Chip fertig und
bin wirklich begeistert!

Gruß, Rüdiger

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht mit I2C-Bus ?
Die analogen TV-Karten mit BT848-Chip o.ä. enthalten oft schon einen
I2C-Bus, ich weiß aber nicht, ob der sich so einfach ansprechen läßt.
Sonst gibt es ja genug Bauanleitungen für die parallele oder serielle
Schnittstelle auf I2C, mit simplem Interface oder PCF8574
Das würde am AVR nur zwei Ports kosten. Die genormte I2C kann
allerdings nur 100 kBit/s, manchmal auch 400 kBit/s. Es kommt auf die
gewünschte Kabellänge an.

Autor: SIGINT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Christoph: Die TV-Karten erlauben es unter Linux den I2C Bus zu
verwenden. Ich hab so schon mal ein PCF8574 mit LCD angeschlossen un
betrieben... ist aber relativ riskant, wenn man einen Fehler in der
Schaltung hat ;)

Abgesehen davon sollte die Idee mit dem I2C - Interface ganz gut sein.
So kann man neben den AVRs noch andere Hardware anschliessen.
I2C-Bausteine gibts ja relativ viele.
Eine weitere Möglichkeit wäre RS485.

Gruss,
  SIGINT

Autor: Gast ein Anderer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übergebe die Daten doch einfach über Parallel Port (LPT) mit 8 bit
breite an einen Hilfs-AVR der dann die Daten über serielle Leitungen
und Softwareprotokoll (Z.B. SPI)  an die AVR, s weiterleitet. Im EPP
Modus kann die LPT sogar  Adressen und Daten ausgeben. Steuerleitungen
werden dafür automatisch gesetzt,  das entlastet dein PC enorm.
Theoretisch sind sogar 32 bit Werte/ Adressen ( als 4 * 8) möglich .
Simples EPP mit 8bit Daten/Adressen ist nicht alzu schwer zu handhaben.
Es gibt von Atmel ne Aplications note mit interessanten Links zum Thema.

Gruß

Autor: RAM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Daisy Chain" wäre auch eine Möglichkeit.


Dazu wird die serielle Schnittstelle aller Beteiligten in Reihe
geschaltet, also Tx des einen AVR an Rx des nächsten .. Tx und Rx des
PCs werden durch einen MAX232 o.ä. auf Pegel gebracht und ebenfalls in
den Kreis eingebunden.

Verwendet wird dann ein einfaches paketorientiertes Protokoll, das als
eines der ersten Elemente eine Adressinformation zur Auswahl des AVRs
enthält.

Alle AVRs müssen alle empfangenen Daten, die nicht für sie selbst
bestimmt sind, auf ihrer Sendeleitung weiterreichen.

Sofern keine Kommunikation der AVRs untereinander gewünscht ist, muss
der PC das nicht tun.

Um Kollisionen zu vermeiden, sollte jeder AVR in der Lage sein, ein
empfangenes Paket zwischenzuspeichern, falls der betreffende AVR gerade
selbst Daten erzeugt und in den Kreis einspeist.

Daher sollte die Paketgröße nicht ins unermessliche wachsen.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre das eine Art "Token Ring", bei dem ein Datenpaket (Token) im
Kreis herum gereicht wird?

Jeder Teilnehmer liest die für ihn selbst bestimmten Teile des
Telegramms und fügt ggf. Sequenzen für andere Teilnehmer an. Gelöscht
werden die Sequenzen dann von dem, der sie auf den Weg geschickt hat,
denn das Ankommen der selbst auf die Reise gebrachten Telegrammsequenz
ist ja die Bestätigung, dass das Telegramm vom Adressaten fehlerfrei
gelesen wurde. Hat kein Teilnehmer eine Nachricht zu versenden, wird
ein Dummy-Telegramm weitergereicht (leeres Token) um die Senderechte zu
synchronisieren und Kollisionen zu verhindern.

...

Autor: Elektro Fuzzi (elektrofuzzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für eure Ideen.

Die Idee mit der "Daisy Chain" klingt sehr gut, da ich dafür wohl am
wenigsten Bauteile benötige, und das auch am leichtesten erweiterbar
ist. Da muss ich mal ein paar Tests machen...

:-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.