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


von Elektro F. (elektrofuzzi)


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.

von Stephan (Gast)


Lesenswert?

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

Stephan.

von Rüdiger B. (ruedigerbritzen)


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

von Christoph db1uq K. (christoph_kessler)


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.

von SIGINT (Gast)


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

von Gast ein Anderer (Gast)


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ß

von RAM (Gast)


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.

von Hannes L. (hannes)


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.

...

von Elektro F. (elektrofuzzi)


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...

:-)

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.