Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega8 und MAX485 an PC
Hallo zusammen,
ich hätte mal wieder eine Frage, und zwar habe ich einen Atmega8 mit
einem Max485 verbunden und versuche nun diesen in ein Bus zu
integrieren. Nun meine Frage: Die Anschlüsse des Max485 sind nun A und
B, also Halbduplex. Am PC habe ich RXD+, RXD- und TXD+, TXD- . Für
Halbduplexbetrieb muss ich nun RXD+ mit TXD+ und RXD- mit TXD-
verbinden. Aber welcher der beiden Anschlüsse am PC entspricht nun A und
welcher B?
Weiter habe ich nun noch einen Kanal für die Flussrichtung des MAX485,
welcher vom µC kommt. Um zu senden oder empfangen. Welcher Zustand ist
nun Senden bzw. Empfangen? Pin auf High oder Low?
ich habe in BASCOM die crystal des Atmega8 auf 4000000 eingestellt. Und
die Baud auf 19200. Ist das so korrekt?
Und soweit ich weiß "Config COM ..." wird auch nicht benötigt oder?
Vielen Dank für euere Hilfe
19478
Laut Datenblatt empfängt der Chip sobald Pin 2 auf Low ist und wenn Pin 3 High ist wird der Sender aktiviert. Aber an deiner Stelle würde ich Pin 2 und 3 mit einem Pull-down Widerstand versehen und dann an den Controller anschließen.
Wenn du nur einen COM Port benutzt brauchst du kein Config COM zu schreiben.
Der Invertierte Ausgang ist der invertierende Empfänger oder der invertierende Sender, also in deinem Fall der Pin 7 und Pin 6 ist dann der nichtinvertierende Empfänger oder Sender. Und was meinst du mit RXD+ mit TXD+? Du hast nur den einen Baustein und da verbindest du 6 und 7 der beiden Chips. Hast du überhaupt einen fertigen RS485 Empfänger am PC? Weil sonst musst du das RS485 in RS232 umwandeln damit du über RS485 mit deinem Mega kommunizieren kannst.
Hi, welche größe würdest du wählen für denn Pulldownwiderstand? Du meinst den Widerstand am MAX485 für die Pins 2+3? Es langt doch wenn ich beide Pins gleichtzeitig mit einem Widerstand auf Masse ziehe oder?
Also am PC ist eine RS422 Schnittstelle mit TXD+ und RXD+ sowie TXD+ und RXD- das heißt es wäre theoretisch Vollduplexbetrieb (also Senden und Empfangen geichzeitig) möglich. RS485 ist allerdings Halbduplex (Senden oder Empfangen) und um aus der RS422 eine RS485 Schnittstelle zu machen muss ich die Klemmen RXD+/TXD+ und RXD-/TXD- zusammenfassen oder?
Gruß
Ja es reicht wenn du beide Pins zusammen mit einem Widerstand nach Masse ziehst. RE und WE sind ja jeweils bei unterschiedlichen Pegeln aktiv (einmal bei Low und einmal bei High). Als Pull-up Widerstand kannst du 4,7k-10k nehmen. Das ist eigentlich die gängige Größenordnung dafür. Den Pull-up Widerstand nimmst du einfach damit du einen deffinierten Zustand hast, wenn der Controller mal aus ist. Weil du weißt ja nicht wie der Controllerpin dann geschaltet ist und je nachdem kann sich der MAX dann anders verhalten als du denkst.
Ob das mit dem Klemmen verbinden so geht kann ich dir leider aus dem Stehgreif nicht sagen, da ich selber noch recht neu auf dem Gebiet bin.
Edit:
Hab mir das mal auf der Seite hier angeschaut:
http://www.pci-card.com/rs422_rs485.html
Und es müsste gehen wenn du Rx- und Tx- sowie Tx+ und Rx+ zusammen legst. Aus Rx- und Tx- müsste sich dann eine Leitung A(-) und aus Rx+ und Tx+ müsste sich dann eine Leitung B(+) ergeben.
Hi, müsste das nicht eigentlich ein Pulldownwiderstand sein wenn ich ihn gegen Masse ziehe?
Also die Seite hatte ich mir auch angeschaut. Aber wenn ich mir das Datenblatt des MAX485 Ansehe dann ist da A+ und B- ???
aber normaal müssen die Beiden Pegel doch gleich sein wenn ich Sie verbinde!? Das heißt A- vom PC muss auf B- vom µC und A+ vom PC auf B+ vom µC.
Aber normal wäre es ja A auf A und B auf B oder?
Hi, müsste das nicht eigentlich ein Pulldownwiderstand sein wenn ich ihn gegen Masse ziehe??
Stimmt....sorry verschrieben :)
Und ja du verbindest normal A mit A und B mit B. Weil A ist das invertierte Signal und B ist das nicht invertierte Signal.
Und was meinst du mit Pegel gleich sein? Das ist ein differenzieller Bus....d.h. was 1 und was 0 ist hängt davon ab welche der beiden Leitungen High oder Low sind.
Ja, das is schon klar, nur auf der seite die du vorhin genannt hast, ist A z.b - also low und B + also high. Im Datenblatt des MAX485 is es aber genau herum gedreht, A = + als high und B = - also low. Normal muss man doch beim RS485 alle A miteinernder und alle B miteinander verbinden. Dann sind alle auf dem gleichen Level, alle A low und alle B high. Aber laut dem Datenblatt wäre das dann anders. Am Pc wäre A high und am MAX485 A low, das darf doch nicht sein oder? So meinte ich das. Ich hoffe ich hab es verständlich rüber gebracht? ;)
Musst du mal ausprobieren wie du das an den PC anschließen musst ^.^
Ich hab auch erst 2-3x was mit RS485 gemacht und hab da auch nicht wirklich drauf geachtet ob man nun A mit A oder A mit B verbinden muss. Aber ich glaube du musst die drehen......aber wie gesagt probier es aus. Das ist wie RS232 wenn es verdreht ist sendet der nichts bzw. empfängt nichts.
Ok ich werde es mal versuchen.
Danke schon mal!
Hallo, ich bins nochmal. ;)
Also ich habe jetzt alles wie gesagt angeschlossen. Nun habe ich folgendes Problem, also ich scheine etwas zu empfangen, was aber scheinbar Murks ist. Und zwar versuche ich in 2 Byte die Zahl 300 zu senden. Was in Binärscheibweise ja 00000001 00101100 entspricht. Empfangen werden aber 2 Byte mit 00000000 10000000. Wie kann das sein? Bzw. woran kann das noch liegen? Ich habe bei beiden Teilnehmern 19200 Baud eingestellt. Ich habe zwischen Kanal A und B an beiden Enden einen 120 Ohm Widerstand angeschlossen. Obwohl die Leitungslänge nur ca. 16cm ist.
Der Atmega 8 ist in BASCOM Programmiert. Dort habe ich die Crystal auf 8000000 und die Baud auf 19200 eingestellt. Das müsste doch auch passen oder? Was mache ich Falsch?
gruß
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.