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 Silicon Labs gibt es uCs mit integrierter USB 2.0 - Schnittstelle. Treiber, etc. Sind auf Basis 8052. Stephan.
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
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.
@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
Ü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ß
"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.
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. ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.