PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : nochmal: 1x PC, 2x UART (ATMEGA32)



boeseTURBO-CT
26.08.2004, 11:34
Hallo,

Ich habe folgendes Problem:

Ich habe 2 ATMEGA32 mit jeweils einer einer seriellen schnittstelle und ein PC der als Steuerung dient... Ich möchte jetzt den IC´s befehle mit hilfe des PC´s senden... Kann man das irgentwie über eine serielle Schnittstelle mit Adress-befehlen irgentwie regeln?

Hat da jemand ne Idee?

Ich hatte zuerst geplant, das der Master IC die serielle Schnittstelle mit ner logischen Verknüpfung umschalten kann... Aber so toll finde ich die Lösung irgentwie nicht.

Gruss

Jan

x-ryder
26.08.2004, 11:49
Was willst du genau machen?

PC -> ATMEGA32(1) -> ATMEGA32(2)?

oder wie?

Martin

Joerg
26.08.2004, 11:51
Hi Jan,

selbst wenn man Adressinfos über die serielle Schnittstelle an beide Controller schickt, gibt solch eine Y-Lösung spätestens dann ein Problem, wenn die Controller Daten zurück an den PC senden sollen.

Ich würde die Controller einfach über I2C oder notfalls auch SPI verbinden und die seriellen Infos an nur einen Controller schicken, der dann die Sachen weiterreicht.

HTH und Viele Grüße
Jörg

Freiheitspirat
26.08.2004, 12:14
Warum soll es bei der Y-Lösung Probleme geben ?
Wenn im Protokoll klar geregelt ist, das nur ein Slave(Controller) zur Zeit senden darf und dies ganz klar vom Master (PC) gesteuert wird, gibt es auch keine Konflikte.
Einziger Nachteil ist, das ggf. der Master immer wieder die einzelnen Slaves nach ev. auftauchenden Informationen abfragen muß, da die ja nicht von sich aus senden dürfen (es sei denn, man steuert so ein Slaverequest über eine weitere eigene Leitung)

boeseTURBO-CT
26.08.2004, 12:38
@x-ryder

Der PC soll Befehle an jeden Controller senden können, und der Controller soll nach dem Empfang des Befehls ein Rückgabewert an den PC senden. Ohne Befehl vom PC haben die Controller nichts zu senden... Also selbstständig werden diese nichts ausgeben... Halt nur nach einem Befehl....

Gruss

Jan

Joerg
26.08.2004, 13:06
Hallo Freiheitspirat,


Warum soll es bei der Y-Lösung Probleme geben ?
Wenn im Protokoll klar geregelt ist, das nur ein Slave(Controller) zur Zeit senden darf und dies ganz klar vom Master (PC) gesteuert wird, gibt es auch keine Konflikte.

leider doch, die RS-232 Schnittstelle ist nicht busfähig. In Richtung Controller ist ein Sender (PC) mit zwei Empfängern (Controller) verbunden. Das gibt (mal abgesehen vom Pegel bei manchen Treibern) keine Probleme. In Richtung PC arbeiten zwei Sender (Controller) auf einen Empfänger (PC). Dabei sind zwei Ausgangstreiber auf einer Leitung. Sofern beide ruhig sind, kein Problem, wenn jetzt einer sendet, bringt der eine Sender +12V, der andere bleibt jedoch bei -12V, alles auf der gleichen Leitung, der stärkere gewinnt.

Klar kann man jetzt die MAX-Treiber über eine Logik abklemmen oder hochohmig schalten. Der Aufwand dafür dürfte jedoch ziemlich hoch sein, zumindest deutlich höher, als immer nur mit einem Controller zu reden und die Befehle an den anderen Controller quasi zu forwarden.

Viele Grüße
Jörg

26.08.2004, 13:26
leider doch, die RS-232 Schnittstelle ist nicht busfähig. In Richtung Controller ist ein Sender (PC) mit zwei Empfängern (Controller) verbunden. Das gibt (mal abgesehen vom Pegel bei manchen Treibern) keine Probleme. In Richtung PC arbeiten zwei Sender (Controller) auf einen Empfänger (PC). Dabei sind zwei Ausgangstreiber auf einer Leitung. Sofern beide ruhig sind, kein Problem, wenn jetzt einer sendet, bringt der eine Sender +12V, der andere bleibt jedoch bei -12V, alles auf der gleichen Leitung, der stärkere gewinnt.

Ich dachte der Ruhestrom beim UART ist positiv und beim senden negativ?

Joerg
26.08.2004, 14:03
Ich dachte der Ruhestrom beim UART ist positiv und beim senden negativ?

Das ist beim UART ja auch richtig. Der Schnittstellentreiber (MAX232 oder kompatible) invertiert das ganze jedoch, und da wird aus dem Ruhepegel (5V/high) -12V und dem Aktivpegel (0V/low) +12V.

Viele Grüße
Jörg

26.08.2004, 14:20
Hallo Leute :)
Kann ich denn die zwei ATMEGA´s direkt über I2C Bus miteinander verbinden? Hat da jemand n Code-Beispuel für Bascom?

Gruss

Jan

Joerg
26.08.2004, 14:41
Hallo Jan,


Kann ich denn die zwei ATMEGA´s direkt über I2C Bus miteinander verbinden? Hat da jemand n Code-Beispuel für Bascom?

für BASCOM nicht. Ich habe sowas mit dem AVRco von E-Lab schon mehrfach durchgezogen, BASCOM nutze ich leider nicht.

Viele Grüße
Jörg

BlackBox
26.08.2004, 14:45
Nur mal als Tipp, es gibt auch RS232-Treiber mit Tristate-Ausgängen. Damit kann man auch einen RS232 Bus aufbauen.

Nachbilden kann man das Ganze auch recht einfach, indem man die Empfangsleitung des PC über einen Widerstand (10k) auf -10V zieht (z.B. DTR anzapfen) und die Daten der Controller über eine Open-Kollektor Stufe (pnp) mit 5V ausgibt. Für kurze Entfernungen ist das kein Problem. Die Pegel liegen mit -10V, +5V im definierten Bereich der PC-Schnittstelle.

Wenn das Ganze später mal ausgebaut werden soll, dan bieten sich RS485-Wandler an.

BlackBox

26.08.2004, 15:10
@blackbox

haste da mal n beispiel IC damit ich mir das Datenblatt mal ansehen kann?

Gruss

Jan

Joerg
26.08.2004, 15:49
z.B. der MAX3232 hat dieses Feature.

Viele Grüße
Jörg

boeseTURBO-CT
26.08.2004, 16:03
@baclbox @jörg

Kann da noch jemand ein Beispiel geben?

@blackbox:

Wenn ich damit dann sende bekommen es dann beide IC´s ? Um nen Schaltbeispiel wäre ich dankbar dann check ich das glaub ich auch ;)

Schönen Gruss

Jan

BlackBox
26.08.2004, 16:12
@Jörg

Den hätte ich jetzt auch genannt.

@Jahn

Hier der Link zum Datenblatt, dort ist auch ein Beispiel mit drin.
Natürlich bekommen beide MCs die Daten vom PC. Die TXD-Treiber sidn aber normalerweise auf tristate geschaltet. Nur wenn sich ein MC angesprochen fühlt schaltet er den treiber aktiv und kann Daten zum PC senden.

BlackBox

boeseTURBO-CT
26.08.2004, 17:22
@BlackBox

yo hab mir das mal angeschaut... Irgentwie schnall ich das nicht...

Könnte jemand n kurzes Beispiel-schaltplan skizzieren? (wo meine 2 ATMEGA´s drauf sind ; ))) dann versteh ich das auch...

Wäre echt super!

Vielen Dank erstmal

Gruss

Jan

LoD
26.08.2004, 17:39
Wie versteht sich eigentlich 2 ATMega? sind es zwei Prozessoren im selben Gerät oder zwei Geräte? Hatte es erst so verstanden, dass es ein Gerät mit zwei Prozessoren ist. Dann würde ich auch bei einer UART Schnittstelle beideProzessoren mit Widerständen getrennt an den selben Max232 würgen.
Grundsätzlich hat der ATmega32 aber sogar eine USART Schnittstelle, die im Multi-processor Communication Mode betrieben wedern kann. Damit und dem Treiberbaustein sollte dann sogar eine kreuz und Querkomunikation möglich sein. Zur Arbitration (wer darf senden) muss man sich dann noch Gedanken machen. Im Ethernet wird es z.B. so gemacht: Wenn eine Sendekollision erkannt wird (im schlimmsten Fall merkt man es spätestens an einer Paritätskontrolle) warten die Sender jeweils eine zufällige Zeit und versuchen dann erneut zu senden.

Zu Deiner Frage, die Signale kommen an beiden Controlern vorbei, an der Schaltung wirst Du also keine Lösung finden. Deine Software, bzw Schnittstelleneinstellungen der USART müssen darüber entscheiden, ob und wie der Jeweilige Controller zu reagieren hat.

Joerg
26.08.2004, 18:10
Hallo Jan,

habe mal kurz die Variante mit den 2 MAX3232 aufgezeichnet, wenngleich ich das nicht so realisieren würde (Begründung siehe oben).
http://www.roboter-teile.de/download/rs232bus.gif

Wenn ein Controller senden will, muss er über die Enable-Leitung den MAX aus seinem hochohmigen Zustand in den Aktiv-Zustand versetzen.
Die Logik dafür, muss in die Software.


Grundsätzlich hat der ATmega32 aber sogar eine USART Schnittstelle, die im Multi-processor Communication Mode betrieben wedern kann.

Wird das auch unter BASCOM unterstützt?

Viele Grüße
Jörg

boeseTURBO-CT
26.08.2004, 18:15
Hallo Jörg,

Hmm, aber wenn man den enable-Pin auf hochohmig setzt, dann geht doch der ganze Treiberbaustein aus, und nicht nur die "senden-Leitung" ??? Oder seh ich das jetzt falsch?

Joerg
26.08.2004, 19:08
Hi Jan,

sorry hier ist einiges schiefgelaufen. Das passiert, wenn man so nebenbei ein paar Postings beantwortet :(

Also der MAX3232 hat dieses Feature gar nicht, sondern maximal der MAX3222. Weiter hat dieser Treiber zwar einen Enable, doch wirkt dieser auf die Receiver und nicht wie von mir vermutet auf die Sender. Das heißt, er ist für diesen Zweck nicht einsetzbar.

Du bräuchtest einen Treiber mit abschaltbaren Sendern, wie z.B. den MAX225. Nur kostet der wirklich jenseits von gut und böse.

Viele Grüße
Jörg

boeseTURBO-CT
26.08.2004, 19:23
Moin Jörg,

BOAH der kost ja bald 20 EUR LOOL ;) ne das dann doch bischen viel ;)...

Hmm das ja scheisse... Hat jemand jetzt noch ne Idee wie man das sonst noch realisieren könnte? Man kann die senden-Leitung ja einfach über nen Logikbaustein laufen lassen...

Müsste doch mit nem AND-Gatter funzen... der eine Pin an den TX, den anderen an den "IchsendeJetztpin"... das zweimal für jeden ATMEGA, und die Ausgänge der Logikbausteine zusammenschalten und auf den RS232 Treiber-Baustein legen...

Kann die die RX-Eingänge vom RS232-Treiberbaustein einfach auf die ATMEGA legen?

Gruss

Jan

Joerg
26.08.2004, 19:58
Hi Jan,

vergiss den ganzen Quatsch mit den doppelten MAXen, der PC wird mit einem einfachen MAX232 verbunden, fertig.
Der Empfänger des MAX wird mit den RX-Eingängen der MEGA132 verbunden.


Man kann die senden-Leitung ja einfach über nen Logikbaustein laufen lassen...

Müsste doch mit nem AND-Gatter funzen... der eine Pin an den TX, den anderen an den "IchsendeJetztpin"... das zweimal für jeden ATMEGA, und die Ausgänge der Logikbausteine zusammenschalten und auf den RS232 Treiber-Baustein legen...

Ganz genau. Die TX-Leitungen werden auf ein AND geführt. Wenn ein MEGA132 zu senden beginnt, geht die Leitung auf Low, der Ausgang des Gatters folgt diesem Pegel. Das "IchsendeJetztPin" braucht man in diesem Fall gar nicht.

Warum eigentlich so einfach wenn's doch auch viel umständlicher geht. \:D/

Viele Grüße
Jörg

boeseTURBO-CT
26.08.2004, 20:08
Moin Jörg ;)

Manchmal ist einfahc denken besser ;)... Es schadet den RX-Eingängen auch nicht, wenn die aufeinanderliegen?

Gruss

Jan

Joerg
26.08.2004, 20:14
Manchmal ist einfahc denken besser ;)... Es schadet den RX-Eingängen auch nicht, wenn die aufeinanderliegen?

Nein den schadet das wirklich nicht, ein Ausgang auf zwei Eingänge ist OK.

Es dürfen nur niemals zwei Ausgänge gegeneinander arbeiten (außer bei Open Collector).

Viele Grüße
Jörg

boeseTURBO-CT
26.08.2004, 20:26
yo super... dann wird das ja doch günstiger als ich dachte ;)

Schönen Gruss und besten dank für die Hilfe!


Jan

LoD
26.08.2004, 22:36
Ab ich das nicht ungefähr gesagt? Voraussetzung, die ATmegas sind in einem Gerät... zwei Widerstände und ein OR Gatter (würde ich persönlich dem AND vorziehen, sonst geht nur das synchronsenden...) sind nun wirklich fast das selbe... aber auf mich hört ja keiner...

P.S.: Weiß ich was Bascom kann? In ASM gehts... der baustein kanns, warum sollte man BASCOM nicht so austriksen können, dass das auch geht. Gibts da kein Peek und Pock, wie beim C64?

Joerg
27.08.2004, 06:11
Hi LoD,


... zwei Widerstände und ein OR Gatter (würde ich persönlich dem AND vorziehen, sonst geht nur das synchronsenden...) sind nun wirklich fast das selbe... aber auf mich hört ja keiner...

naja das mit dem OR-Gatter wird so nicht gehen, da die UART im nichtaktiven State ein High (+5V) produziert.
Wenn nun beide Controller-UART-Ausgänge mit einem OR verknüpft werden, geht der Ausgang nur auf Low, wenn beide gleichzeitig senden.

Viele Grüße
Jörg

27.08.2004, 06:24
Jeder MAX232-Ausgang über eine Diode (Kathode an MAX232). Beide Anoden zusammen über einen Widerstand an +10V (einen freien Ausgang des MAX232 nutzen - der liefert +10V). Der Verbindungspunkt Diodenanoden und R ist der neue TxD.

Blackbird

BlackBox
27.08.2004, 06:58
@Jörg
"sorry hier ist einiges schiefgelaufen. Das passiert, wenn man so nebenbei ein paar Postings beantwortet"

Mmmhhh, dem kann ich nur zustimmen. Ich meinte eigentlich den Max3323 und der Link zum Datenblatt (http://pdfserv.maxim-ic.com/en/ds/MAX3322E-MAX3323E.pdf) ist irgendwie verlorengegangen.

@Jan

Wenn beide MCs in einem Gehäuse sind ist das natürlich kein Thema.
Aber hier noch die angesprochene "Sparschaltung" an Stelle eines Treiberbausteines. R4 darf natürlich nur ein mal auf der PC-Seite installiert sein.

BlackBox

LoD
27.08.2004, 07:06
naja das mit dem OR-Gatter wird so nicht gehen, da die UART im nichtaktiven State ein High (+5V) produziert.


Ooops, wieder zu viel im Kopf invertiert... AND war richtig...

Aber ist die Diodenlösung wegen der Invertierung nicht auch gerade falsch herum? Wenn beide MAX inaktiv mit +5V beschaltet sind, ligt der TX doch auf -12V, die Dioden schalten und ziehen neuen TX,Knoten runter. Versucht nun ein MAX zu senden (+12V) scheitert er an der Diode, erst wenn beide Schlaten zieht der Widerstand den Knoten auf +12V.
Oder verdrehe ich jetzt wieder was?

*erst mal nen Kaffee holt*


Edit: Hubs noch ein neuer Beitrag. Kannst Du die Bauteile nochmal dazuschreiben? die kommen auf dem Bild nicht raus. Ist vor allem auch sehr platzsparend...

27.08.2004, 07:29
@blackbox

jau die beiden IC´s liegen sogar direkt nebeneinander... Das ist also kein Problem... Ich glaub ich werde die Schaltung mit nem 2x AND Gatter aufbauen... Muss zwischen dem Gatter und dem ATMEL jetzt noch n Wiederstand zwischen oder nicht?

Nochwas: da ich ja zwei ATMEL´s hab, kann ich die mit einem Quarzoszillator betreiben?

Gruss

Jan

boeseTURBO-CT
27.08.2004, 07:31
Huch sorry, war nicht eingeloggt, der letzte Beitrag war von mir...

Gruss

Jan

27.08.2004, 08:42
Kann sein, dass die Diodenlösung jetzt zum falschen Pegel zieht. Also alles andersrum polen und von -10V ausgehen (auch die liefert der MAX232 an einem Ausgang!). Die Schaltung habe ich grad nicht hier, aber bei mir funktioniert sie schon seit 2 Jahren mit 16 Sendern an einer RS232-Leitung (Gesamtlänge ca. 25m).
Der Widerstand sollte nicht mehr als den maximalen Ausgangsstrom EINES MAX232-Ausgangens aufnehmen (eher etwas weniger). Aber auch nicht zu wenig, sonst ist die Störsicherheit hin!

Blackbird
PS: Ob ein OR, ein AND mit Transistoren oder Dioden aufgebaut wird, ist bei diesen Pegeln egal.
Und da der MAX232 2 Ausgänge hat und man nur einen braucht, kann der andere als Spannungsversorgung benutzt werden (-10V oder +10V je nach Belegung des zugehörigen TTL-Einganges).

Einfacher geht's nicht.

BlackBox
27.08.2004, 08:49
@LoD

Für die Schaltung kannst Du fast jeden beliebigen Kleinleistungstransistor und eine beliebige Signaldiode nehmen. In der Schaltung sind das BC807, BC817 und BAS16.
Die Verknüpfung der beiden TXD Signale passiert natürlich vor dem Max. Wäre ja Quatsch zwei Stück einzubauen.

@Jan

Beim Atmel kenne ich mich nicht so aus aber bei einem PIC wäre das möglich. Für die Verknüpfung würde ich zwei Dioden (gibt es auch in einem Gehäuse) + 1 Pull-Down Widerstand verwenden. Ist billig, platzsparend und funktioniert.

BlackBox