Hallo, ich habe gerade erst angefangen, mit Mikrocontrollern zu arbeiten. Nun möchte ich gerne ein projekt verwirklichen, doch weiß noch nicht so recht wie. Das Projekt ist eine Türschlussüberwachung d.h. es soll angezeigt werden(wahrscheinlich am PC über die serielle Schnittstelle), ob eine Tür abgeschlossen ist oder nicht. Dazu liegen schon hinter jedem Schließblech die Kabel, an denen nur noch ein entsprechender Taster angebracht werden muss. Soweit so gut, nun aber zum eigentlichen problem: Es ist nicht nur eine Tür! --> Es sind 15 Türen, wobei jede Tür 2 Taster besitzen soll: 1. Tür ist geschlossen - 2. Tür ist ABgeschlossen Daraus folgt, dass ich mindestens 30 Kontakte überwachen muss!!! Doch welcher Mikrocontroller(am liebsten von Atmel) schafft das? Oder kann man das als dezentrales System ausführen, was sich vielleicht lohnen würden, da sich die Türen auf mehrere Gebäude/Etagen verteilen? Ich stelle mir das so vor: am PC hab ich einen MC, der die verständigung mit dem PC übernimmt und die Daten von den anderen MCs aus den anderen Gebäuden bekommt. Wie können sich MCs untereinander verständigen? Gibt es da irgentwelche Beschränkungen(Kabellänge ect.)? ...aber irgendwie wäre mir ein MC doch lieber ;) Über konstruktive Ideen/Vorschläge/Tipps bin ich dankbar... Methi und bitte kein Fach-Kaudawelsch... bin, wie gesagt, noch Anfänger ;)
Naja, du könntest die Kontakte beispielswse über einen Multiplexer an nen µC hängen, 4097 fällt mir da ein, und die zyklisch durchgehen ob offen oder zu. Für die Kontakte würd ich Reedkontakte favorisieren. Die IOs von nem AVR auf 30m zu verlängern sollte gehen. Du bist dann aber auf diese Funktionen beschränkt. Wenn Du mal später die Rolläden mit steuern oder die Heizung regeln willst musst du wieder komplett ans Reißbrett zurück. Anbieten würde sich auch ein sog. Hausbus-System, beispielsweise per RS485 oder CAN-Bus, dann könntest Du das System nachträglich erweitern. Ich würde aber an Deiner stelle nicht einen AVR mit allen Türen belegen, sondern die Türen gegen den µC multiplexen um noch Anschlüsse für beispielsweise n LCD-Display frei zu haben
versteh ich dich richtig: ein multiplexer stellt mir an einem µC noch mehr IO zur verfügung? Mit welchem µC würde den z.b. der 4097 funktionieren? und wie muss der angeschlossen werden? Zyklisch durchgehen heißt wohl: erst I1, dann I2, dann I3 usw. am ende wieder bei I1 beginnen??? zu dem vorschlag von reedkontakten: Taster sind einfacher und billiger; ich wenn der Taster schaltet, ist der Schließzylinder hinter dem schließblech und gut ist :) Hausbus-systeme lohnen sich nicht, da es wirklich nur um Verschlussüberwachung geht: wir haben keine Rollläden und die Fenster sind vergittert(nein, ich sitze nicht im Knast ;) ) Es ist ein Gelände eines vereins am Waldrand, wo zwar oft was los ist, aber doch nicht jeden tag... und momentan hat sich gerade der Randalismus breit gemacht: eine Tür, die nur einmal umgeschlossen war, wurde aufgehebelt und mit den Feuerlöschern, die dort hingen, wurde "rumgesaut"(Das pulver aus den löschern ist echt in jeder ritze und maschine)... deswegen habe ich nun den auftrag, die verschlusskontrolle zu ende zu bauen(wir überlegen schon seit 2 jahren, sowas anzuschaffen/zubauen)
Mach doch erstmal Versuche mit einer Tür. Wenn du da alles laufen hast, kannst du dir immer noch Gedanken machen, wie du es am sinnvollsten für 15 Türen hinbekommst. Meine langjährige Erfahrung ist, dass viele Projekte, aus welchen Gründen auch immer, wieder einschlafen. Dann ist es praktischer, erstmal eine kleine Lösung anzutesten. Wenn man dann noch genug Energie hat, es weiterzuführen, bestens. Wenn nicht, ist nicht so viel Zeit drauf gegangen. Außerdem motiviert ein schneller Erfolg. Die meisten Anfänger nehmen sich viel zu komplizierte Dinge vor und scheitern dann regelmäßig. Übrigens: Selbst mit anspruchslosen (leicht lötbaren) AVR's solltest du zumindst 8 Türen direkt überwachen können. Pack in deinen PC 2 serielle Schnittstellen oder gehe gleich über USB und bau den Kram zweimal auf.
lange Kabel -> irgendein sinnvolles serielles Bussystem nehmen. Mein Ansatz wäre, jeder Tür einen eigenen MC (ein 8Pin-Tiny reicht) zu spendieren. Dazu vielleicht RS485-Bustreiber. Die Übertragung Manchester-codiert, dann kannst du den internen Oszillator nehmen. Und da du keinerlei Zeitprobleme hast, kannst du ein single master system nehmen.
Hallo Matthias, mit einer Tür und kurzem Kabel ist das sicher kein Problem. Aber wenn Du 30 Taster mit jeweils bis zu 30m Kabel an den µC anschließt, baust Du Dir damit ein tolles Antennensystem auf, mit dem Du sicher auch Störungen vom Mars einfangen kannst - ein tolles Projekt für SETI-Fans. Wenn es funktionieren soll, würde ich das von Crazy Horse vorgeschlagene System verwenden. Die Hardware ist echt simpel, und da sie nicht besonders teuer wird, kann man sie auch leicht 15 mal aufbauen. Die Software wird dafür etwas aufwendiger - schließlich mußte Du ein Bus-Protokoll auf den µCs implementieren. Gruß, Markus_8051
nix kompliziertes Busprotokoll: Master sendet eine Anfrage an einen slave, Kennzeichen gesetztes Bit7, die anderen 7Bit enthalten die slave-Adresse. Der angesprochene antwortet, Bit7 ist immer 0, die restlichen 7Bit können Daten enthalten. Fertig ist das Mini-Netzwerk ausreichender Adressierbarkeit und Funktionalität. Man muss nur dafür sorgen, dass jeder slave eine eindeutige Adresse hat (im Flash oder EEPROM).
@crazy horse: ich habe nix von kompliziert geschrieben, und daß es etwas aufwendiger ist, als wenn man nur einen µC über RS232 an den PC hängt, wirst Du zugeben müssen. Und für die Adresse im EEPROM muß der arme Mathias jetzt auch noch einen EEPROM-Zugriff programmieren (er hat doch geschrieben: er ist Anfänger, das wird dann für so ein Anfangsprojekt doch schon ganz umfangreich...) Markus_8051
ok, vielleicht meldet sich Mathias ja noch mal, ob er alles verstanden hat. Jedenfalls ist der Ansatz TTL-Sternverkabelung zum Scheitern verurteilt.
klar meld ich mich nochmal^^ wirklich mitgekommen bin ich noch nicht... so, hab mich mal über machester-codierung und rs485 informiert :) klingt ja schon recht vielversprechend, was ihr mir vorgeschlagen habt... nur die technische umsetzung ist mir nicht ganz klar. wie sagt ich jetzt dem µC, dass er slave ist, wie das er master ist? als ich eben schreib, sind mir schpn wieder einige Fragen klargeworden. Also schreib ich mal eine zusammenfassung, wie ich es verstanden habe: 1. Master spricht reihum jeden Slave an 2. Der entsprechende Slave antwortet; Datenpacket entweder Tür offen oder Tür zu(1 oder 0) 3. Master verarbeitet Daten, schickt sie zum rechner Richtig? Welchen Rs485 Treiber schlagt ihr vor? welchen µC für die türen, welchen für den Master?
1. Master spricht reihum jeden Slave an 2. Der entsprechende Slave antwortet; Datenpacket entweder Tür offen oder Tür zu(1 oder 0) 3. Master verarbeitet Daten, schickt sie zum rechner Richtig? Richtig, wobei der master auch der PC selbst sein kann, brauchst am PC nur einen RS232/RS485-Umsetzer, Statussignale der seriellen Schnittstelle benutzen, LPT geht auch. Das der slave ein slave ist, ergibt sich aus dem Programm. Im Prinzip so: -Transceiver steht auf Empfang -eingehende Impulse dekodieren -Adressvergleich -falls Adresse = eigener Adresse {Eingänge lesen Transceiver auf senden schalten Daten senden } -gehe in das Gefängnis, begib dich direkt dorthin, ziehe nicht 4000DM ein Passender Transceiverbaustein wäre z.B. der MAX485, als MC sollte ein Tiny12 reichen.
klingt gut :) nur: die umsetzer, die es bei reichelt gibt, sind ein bisschen teuer (<60 Euro)... Kann man die auch selber bauen?
Bloede Frage: Muss es unbedingt ein PC sein, der den Master spielt. Ein kleiner Mega mit einem schicken LCD der neben dem Haupteingang haengt und auf dem die nicht abgeschlossenen Tueren angezeigt werden, sollte es doch auch tun. Nach dem Muster: der letzte checkt am LCD, ob alles zugesperrt ist.
naja, es sollte schon ein PC sein, da die Daten per Internet abgefragt werden sollen können. Es geht nicht nur darum, beim verlassen zu schaun, ob alles zu ist, sondern auch, wenn man nicht oben ist, nach schaun zu können
muss dann aber auch kein PC sein. Gibt ja inzwischen einige webfähige Baugruppen. Ich habe mal ein paar nette Spielereien mit der webcat von Achatz gemacht.
aber das wird dann für mich nicht einfacher :) kann man den umsetzer also nicht selber bauen?
doch, kann man. Und muss man wahrscheinlich sogar, wenn du manchester-codiert arbeiten willst. Im Prinzip brauchst du dafür nur einen MAX232, einen MAX485 und 5V. Wie das allerdings bei heutigen PCs so aussieht, einzelne Bits in bestimmten Zeiten auszugeben/einzulesen - da bin ich überfragt. Das ist nicht mein Gebiet :-). Ich würde das gar nicht erst versuchen, sondern dort auch noch einen MC dazwischenschalten, geht aber sicher auch ohne. PC <-> MAX232 <-> MC <-> MAX485 <-> slaves Wenn du den MC weglassen willst, musst du auf Bitebene die Daten erzeugen/empfangen. Ebenfalls weglassen kannst du den MC, wenn du direkt mit UART-Signalen arbeitest. Das setzt dann aber stabile Taktverhältnisse an den slaves voraus, sonst wird das Murks.
Schau mal in den Dateianhang: Du brauchst halt noch ein paar Gatterbausteine, also UND-/ODER-/Invertierer-Bausteine. Das funktioniert dann so: Du schließt den Adressbus an 5 Ausgangspins an z.B. Port A (0-4) und das Ergebnis an einen Eingang an. Jetzt kannst Du nacheinander die Schalter abfragen: Schicke eine 1 an Port A und Du erhälst den Zustand der Leitung 1 Schicke eine 2 an port B und Du erhälst den Zustand der Leitung 2 ... usw.. Das ganze in einer Schleife.. Wenn Du Hilfe mit den Gatterbausteinen brauchst... Frag einfach (ich bin zwar auch nicht der Speziallist, hab aber schonmal damit rumgebastelt) Ich empfehle Dir auch, die Türleitungen nicht einfach so an die Logik anzuschließen, sondern sie irgendwie abzukoppeln.... Gruß Christian
Kleiner Tippfehler: So ist es richtig: Jetzt kannst Du nacheinander die Schalter abfragen: Schicke eine 1 an Port A und Du erhälst den Zustand der Leitung 1 Schicke eine 2 an port A und Du erhälst den Zustand der Leitung 2
@christian: danke für die idee mit den gatterbausteinen... aber mit denen hab ich noch nie gearbetet, hab nur mal kurz von ihnen gehört, aber hab keine ahnung, wie die genau funktionieren... PC <-> MAX232 <-> MC <-> MAX485 <-> slaves so hatte ich mir das ja ursprünglich auch mal vorgestellt... werd mal schaun, dass ich ein paar max485 und tinys bekomme und mal testreihen starten(Breadboard lässt grüßen)
Das mit den Gattern ist nicht wirklich schwer... Da ist ein Microprozessor die Hölle dagegen. Nehmen wir mal ne einfache & Verknüpfung: Stell Dir also einen Chip mit 5 Pins vor: 1: +5V 2: GND 3: Eingang A 4: Eingang B 5: Ausgang Der Ausgang ist auf 5V, wenn A und B auch auf 5V sind. In allen anderen Fällen ist der Ausgang auf Masse. So einfach wie hier beschrieben ist das wirklich... Nur daß in einem Gehäuse normalerweise mehr als nur ein Gatter sitzt. Genauso gibts OR NOR NAND usw... Such mal nach -7411 (3x AND mit je 3 Eingängen) -7405 (6x Invertierer, macht aus 0->1 und aus 1->0) -7408 (4x AND mit 2 Eingängen) - ... Ich denke, da lässt sich über Google noch mehr auftreiben. Naja.. Ich will Dich zu nichts überreden, aber es ist wirklich n icht schwer... Gruß Christian
hab gerade mal weiter gestöbert: ist es nicht einfache, das ganze über den I²C zu machen? manche MC scheinen den direkt zu unterstützen...was spricht für den, was gegen den?
Ist nicht für lange Leitungen gedacht. War ursprünglich für Kommunikation zwischen Schaltkreisen auf einer Platine gedacht. Dafür wird er immer noch hauptsächlich verwendet. RS485 ist schon das richtige für lange Leitungen.
Evtl wär auch 1wire eine Lösung: Z.b der Baustein http://pdfserv.maxim-ic.com/en/ds/DS2413.pdf (ist dann wahrscheinlich nur wieder ein Problem mit der Erhältlichkeit) Gruß Roland
Man könnte I²C in abgewandelter Form benutzen, indem man die Datenleitung in eine Hin- und Rückleitung aufteilt. Das erfordert dann noch ein Leitungspaar mehr (muß ich für einen Sensor so machen). Die Lösung von wirren Pferdchen sind schon richtig. Man könnte die Lösung mit dem LCD auch noch machen: dann hätte das PC-Interface noch eine Anzeige, und man müsste nicht immer erst am PC gucken, ob alles zu ist...
Man sollte nicht morgens um halb etwas posten... Die Rechtschreibfehler darf der Oberlehrer behalten. Ich hoffe, der Sinn meiner Aussage ist trotzdem klar geworden.
man könnte auch WLAN, SMS oder Ethernet nehmen... Meine Lösung ist sicher nicht die einzig mögliche sinnvolle, aber immer dran denken, es geht um etliche Meter Draht. Warum sollen immer exotische Varianten probiert werden, wenn es genau für solche Zwecke entwickelte, erprobte und bewährte Verfahren gibt? Versteh ich nicht. Noch ein billiger RS485-Transceiver: SN75176, kostet bei Reichelt 50Cent.
Ich muss crazy horse zustimmen. Für lange Leitungen wäre RS485 angebracht. Ausserdem kannst Du so Fehlschaltungen vermeiden, und Du willst mit Sicherheit eine zuverlässige Aussage der Türschlösser ;-) zu I2C: Dieser Bus kann auch mit Treibern auf lange Kabel ausgedehnt werden. (ursprünglich aber nur zum Verschalten auf einer Platine gedacht.... s.o. ) Wen es brennend interessiert wie so etwas geht: Elektor USB-I2C Interface Ausgabe 12/2004 Vielleicht willst Du so etwas in abgewandelter Form benutzen.... Gruß Sven
Eine nette Variante für den PC-freien Betrieb wäre ein Beck-IPC. Na, PC-Frei ist gelogen, im prinzip enthält dieser kleine Baustein einen kompletten Mini-PC mit RAM, Flash, 186´er Prozessor, zwei seriellen Schnittstellen und Netzwerkcontroller. ( www.beck-ipc.com ) Sprich, die Slaves bleiben wie geplant und der Beck-IPC kann als Master eingesetzt werden. Er kann die Anbindung ans Internet machen (wahlweise über Ethernet oder auch über Modem). Er enthält auch direkt einen kleinen WEB-Server, so daß man die Tür-Daten als WEB-Seite anzeigen könnte. Außerdem hat er noch einen I2C-bus wo man ein Display dranhängen könnte. Programmierung in Borland-C Markus_8051
Dann kann man auch eine Ethernut nehmen; wenn man als Türschloß-Sklaven einen AVR nimmt, hat man weniger Probleme beim Programmieren der Ethernut, da die IMHO auch einen AVR benutzt. Ethernet-Add-Ons gibt es inzwischen ja auch wie Sand am Meer. Wenn man an Funk denkt, könnte man auch Blauzahn benutzen...
Ich denke man sollte das für Matthias so einfach wie möglich machen. Für uns mag ja Master/Slave Bussysteme, uC Webserver usw. recht einfach sein, aber er hat geschrieben, daß er ein Anfänger ist. Die Frage ist jetzt was er schon zur Verfügung hat. Z.B ist schon ein Programmier/Experementierboard vorhanden (Stichwort STK500)? Wie sieht es mit den Lötkenntnissen aus? Kannst du Platinen selber ätzen usw. ? Wie liegen die Prioritäten ? Lieber ein ausgefuchstes Master/Slave Bussystem oder lieber einen uC mit Multiplexer und nen paar KM Kabel ? In letzterem Fall würde ich nen Mega8 mit nem 7,ungerade Quarz nehmen. Dazu nen MAX232 (o.ä.) als Pegelwandler zum PC. Als Multiplexer kann man Logicgatter, PLDs, Intel 82C55 oder Philips PCF8574 nehmen. (Jetzt schreit nicht Leute, ich weiß der Intel ist nen riesiges Uraltteil). Wenn nicht gelötet werden kann, dann kann der ganze Kram auch auf einem Experementierboard aufgebaut werden. (alle Bauteile gibt es als DIP) Dort kann man dann auch gleich gleich so einen kleinen ISP Progger für LPT mit draufpacken. Bis dann Hauke
@Hauke: Man kann das ganze Ding auch mit Relais aufbauen, oder sich einen Wachmenschen mieten. Sachen wie RS485 bieten sich wegen ihrer Übertragungsmethode (differentiell) an, da sie etwas störsicherer sind. Wenn man dem Türsensor schon Intelligenz (Tiny...) verpasst, dann kann man auch noch andere Sachen wie defekte Schalter detetektieren oder auch eine Zugangskontrolle mit RFID o.ä. realisieren. Dann könnte man natürlich auch einen Türöffner ansteuern, wenn es sich um einen berechtigten Zutritt handelt. Das sind Erweiterungen, die man in einen Mikrocontroller besser reinbekommt als in einen 8255 (ist der wegen bleifrei nicht endlich abgekündigt?). Bei 15 Türen lohnt es sich ja schon eine Platine ätzen zu lassen...
@Rahul In allen Punkten gebe ich dir recht, aber nur wenn es sich um einen Fortgeschrittenen handelt. Es geht hier ja um das Projekt eines Anfängers. Dort große Anfangsziele zu setzen ist Fatal, weil man dann mit großer Wahrscheinlichkeit an allen Ecken und Enden scheitert. Und das verdirbt grade einem zu Anfang den Ansporn weiterzumachen. Deshalb zu Anfang lieber einfach und schnell zu lösen. Wenn man das Ursprüngliche Ziel erreicht hat dann kann man immer noch Erweiterungen einbauen. Deshalb meinte ich ja auch zu Anfang auf einem Steckbrett, weil man dann immer noch umbauen kann. (Zu Anfang vergisst man ja immer gerne Abblock Cs und Pullup Rs). Wenn man mal eine Baugruppe stabil auf dem Steckbrett laufen hat, dann kann man das immer noch in eine geäzte Platine "gießen". (Wobei die Handhabung von Platinen Programmen wie EAGLE schon wieder ein Stolperstein ist, der zu Anfang einfach nicht notwendig ist). Ich glaube du hast zu Beginn deiner uC Karriere bestimmt auch nicht gleich mit RDIF angefangen. bis dann Hauke
Es ging mir nicht darum, wie Mathias den Einstieg findet, sondern darum, dass er ein Ziel hat, auf das er zuarbeiten kann. Die von Crazy Horse vorgschlagene Lösung ist aus meiner Sicht relativ einfach zu realisieren, und gleichzeitig ziemlich störunanfällig. Dass man das auch anders lösen kann ist klar. Die Ideen mit RFID etc. waren einfach nur Ideen, was man in einem System, mit dieser Flexibilität machen könnte. Ob, und wann man es macht, steht auf einem anderen Zettel. Dass dabei nach einer Woche eine fertige 4-Lagen-Platine herauskommen soll, ist ja wohl selbstverständlich ;) (HanneS zu zitieren: Das ist ein Smilie). Natürlich entsteht das Ding erst auf einem Steckbrett. Wie auch sonst? Übrigens habe ich bis jetzt noch gar nichts mit RFID gemacht...(liegt wohl daran, dass ich es noch nicht brauchte...) Eigentlich wollte ich nur aufführen, was man mit soeinem System (bidirektional) machen kann, im Gegensatz zu einem unidirketionalen (Fern-Tasterabfrage...).
ich will mal noch ein paar antworten geben: ein stk500 liegt noch nicht vor, sämtliche meienr versuche mit uC hab ich am breadboard vorgenommen... mal mit erfolg, mal hab ich es aufgegeben Lötkenntnisse sind da, solange es kein SMD ist platinen ätzen ist auch nicht das problem, solange es sich wenige handelt ob nun multieplexer oder doch ein bussystem hab ich mich noch nicht entschieden... wobei der bus dann doch mehr möglichkeiten bietet.. vllt kommt dann doch noch mal ne Rolltorsteuerung hinzu(das hat aber zeit)... und scheitern werd ich an diesem projekt nicht, ich weiß ja, wie schnell man hier hilfe bekommt ;)
@Methi Was für einen Progger benutzt du denn? Was den Projektanfang angeht würde ich auf Mega8 (oder Mega16) setzen. Die haben die wichtigsten Schnittstellen onchip ohne allzusehr komplex zu sein. Als Multiplexer würde ich ein paar PCF8574 benutzen. Die sind überall zu bekommen. Weiterhin hält sich der Verdrahtungsaufwand durch die TWI Anbindung in Grenzen. Damit bekommt man bis zu 64 (interruptfähige) Kanäle. Mit einem kleinen Trick (PCF8574A oder PCF8575) auch 128 Kanäle. Pro Tür wäre ja eh eine mindestents 3-Adrige Leitung (besser 4-5 Adern) zu ziehen. Diese könnte man auch hinterher für einen langsamen Bus verwenden. Da kann man auch einen Software TWI (wegen der Slew-Raten) mit einer Freq uenz von 10 Hz nehmen (dürfte ausreichend Störfest sein). Für eine Rolltorsteuerung oder ein Codeschloss braucht man ja keine 10kBit/s oder sowas. Wenn der Krempel läuft kann man sich dran machen wie man so ein Master uC und Slave uC System aufzubauen hat. cu Hauke
Diesen Thread nochmal hochhol... irgendwie steh ich auf dem schlauch... wollte das mit tiny12 und max485 mal testweise was aufbaun, nur werd ich aus dem Datenblatt des Max485 nicht schlau: Welche Pins davon müssen an den tiny? Am tiny müsste ich den Uart doch Softwaremäßig umsetzen, richtig? Auch über die manchesterkodierung finde ich irgendwie nicht viel... und schon gar nicht, wie man die umsetzt... wär schön, wenn ihr mir da nochmal weiterhelfen würdet
Hier steht ja schon ein wenig drüber: http://www.maxim-ic.com/appnotes.cfm/appnote_number/723 Dann gäbe es noch: http://de.wikipedia.org/wiki/EIA-422 http://de.wikipedia.org/wiki/RS485 Du musst überlegen, ob du ein RS485 Buss-System oder eine RS422 Point-to-Point Verbindung aufbauen willst. RS485 wäre auf Seite 13 im Datenblatt gezeigt, RS422 auf Seite 8. Bei RS485 muss der Sender bei jeder Datenübertragung aktiviert werden, damit immer nur ein Sender auf dem Buss hängt. Dafür brauchst du das Enable Signal. Tiny 12 hat in der Tat keine Hardware-Uart. Da muss du alles Softwaremäßig implementieren. Würd besser zu einem Tiny 13 o.ä. greifen, der kostet nahezu gleichviel und hat UART.
Die Manchester brauchste an sich nicht für RS485. Bei Funkübertragung ist sie absolut sinnvoll, aber bei UART ist das nicht unbedingt von Nöten. Du brauchst für die RS485 3 Pins des µC RX, TX und Datenrichtung. RX und TX sind sowqeit klar denk ich, Daten rein und Daten raus. Wichtig bei der 485 ist, das sie NICHT vollduplex ist, sprich es kann ein Busteilnehmer nur entweder empfangen oder senden, nicht beides gleichzeitig im Gegensatz zur RS232. Der MAX485 muss nun gesagt bkommen was der µC tun will, senden oder empfangen. Dafür hat er die RE- und DE- Pins. Wenn Du genau ins Schaltbild schaust wirst Du sehen, das einer der Eingänge invertiert ist. Das versetzt Dich in die Lage die beiden einfach brücken zu können und mit einem Pin Deines µC zu verbinden und so die gewünschte Datenrichtung einfach durch H oder L-Pegel an dem Pin einzustellen. Bei Verwendung der Hardware UART ist noch ein wichtiger Punkt zu beachten, der Puffer. Wenn Du auch die Hardware-UART Zeichen sendest werden die im Puffer zwischengespeichert und dann über die Datenleitung geschoben. Das passiert unabhängig von Deinem Programm, das läuft derweil munter weiter. Es ist aber sinnvoll die Busteilnehmer nach dem senden von Daten auf Empfangsbereitschaft zu setzen (!). Dafür wird der MAX485 auf Empfangsmodus umgeschaltet. Geschieht das aber während der noch Daten überträgt wird der Versand unterbrochen -> Datenverlust. Die Hardware-UART hat aber n Flag-Bit, das man abfragen kann ober der Puffer leer ist, also alle Daten raus sind. Es ist daher sinnvoll, den Programmablauf bzw. das Umschalten der Datenrichtung durch Abfrage dieses Flag zu unterbrachen bis eben dann die Daten raus sind und dann die Richtung ändern.
@winfried: es wird auf jedenfall ne rs485 bussystem, da der aufbau ja so sein soll: PC - RS232 - MC - RS485 - MC(für Tür) - RS485 - MC(Tür) ... das mit der verschaltung versteh ich immer noch nicht: ich habe am 485 R0, RE-, DE, DI RE und DE brücke ich und lege sie auf PB0, R0 und DI bekommen je einen PB? Der UART wird auf Software rauslaufen, auch wenn ich noch keine Ahnung habe, wie ich den implementieren soll...ich hab ja schon tiny12 dar und würd sie auch gerne nutzen... weiß jmd gute seiten wo so ne implementierung schon beschrieben ist?
Ja, Belegung sollte so funktionieren. Software Uart sollte man per Timer machen. Einsprung in den Timer so einstellen, dass du nach jeder Bitzeit hineinspringst, um das nächste Bit seriell rauszuschieben. Klar, dass du dir da irgendwie den Zustand merken musst, um beim nächsten Einsprung zu wissen, welches Bit jetzt dran ist. Empfangen geht dann ganz ähnlich.
Zur SoftUART gibt es Application Notes auf der Atmel-Seite.
ApplicationNotes: AVR304, AVR305, AVR306 und AVR307. Unter http://www.atmel.com/dyn/products/app_notes.asp?family_id=607 zu finden...
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.