Forum: Mikrocontroller und Digitale Elektronik Eigenes BUS-System


von Sebezahn (Gast)


Lesenswert?

Hi,

folgendes "Problem" stellt sich mir: Ich möchte die Lüfter in meinem
PC zentral steuern, jeden über einen eigenen AVR. Die Steuerung als
solche funktioniert auch soweit, nun muss nur noch die Kommunikation
mit einem Steuergerät her.

Hierzu möchte ich NICHT von jedem Steuermodul ein Kabel zum
Zentralgerät ziehen, sondern ein BUS-System bauen. - sprich, eine
Steuerleitung, die über alle Module drüber läuft.

Dazu habe ich mir gedacht, in jeden AVR eine eindeutige ID zu brennen
und mit dieser das jeweilige Gerät anzusprechen. Der absolute Overkill
wäre jetzt natürlich, wenn sich die Geräte auch noch am Zentralgerät
anmelden würden, so dass diese gar nicht mehr eingetragen werden
müssten... Das ist aber nicht wirklich nötig.

Doch auch ohne diese Anmelde-Prozedur, wie realisiere ich so ein
BUS-System? Über den UART? Gibt es da irgendeine Beispielschaltung? Ich
bin für jeden Tip dankbar...

BTW: Dieses Forum ist mehr als cool... Langsam verstehe ich das
Potential von AVRs zu nutzen, vor drei Monaten wusste ich noch nicht
einmal, dass die Dinger existieren.

THX a lot,
Sebezahn

von Matthias (Gast)


Lesenswert?

Hi

also entweder mit dem UART und dann einen RS485/RS422 Bus aufbauen. Da
sind allerdings die Transmitter nicht ganz günstig. Wenn das ganze
innerhalb eines PC's abläuft und günstig sein soll:

Master->Slaves:
Uart TX vom Master mit allen Uart RX der Slaves verbinden.

Slaves->Master:
Über jeweils einen Transistor ein Wired-AND aufbauen. Die Slaves dürfen
dann aber nur auf Anforderung senden. Ja nach Aufbau muß das Signal auf
Empfängerseite dan nochmal invertiert werden.

Matthias

von Reiner (Gast)


Lesenswert?

Schau Dir mal das hier an:
http://www.thomasknauf.de/rap/seatalk1.htm#Har
Ist zwar für einen ganz anderen Zweck entwickelt, funktioniert aber
hervorragend.  (Ungeschirmte) Datenleitungen über eine Entfernung von
vielen Metern in einer "noisy" Umgebung sind kein Problem (und die
Regel) und die Comms Hardware besteht aus zwei Transistoren.

Reiner

von Sebezahn (Gast)


Lesenswert?

Hi,

Ok, ist noch ein wenig hoch das alles für mich, aber ich werde mich
durchkämpfen. Vielen Dank,

Sebezahn

von thkais (Gast)


Lesenswert?

Auf vielen Motherboards werden einige Funktionen (z.B. die
Temperatursensoren) über den I²C-Bus angesteuert. Evtl. wäre es sogar
möglich, sich an den vorhandenen Controller anzuhängen (es gibt einige
Freeware-Tools, die die Sensoren abfragen - also muß es möglich sein).

von Reiner (Gast)


Lesenswert?

@Sebezahn

Ist im Prinzip ganz einfach:
1. Die ATMEL UART wird für 9 Datenbits konfiguriert.
2. Jedes Device hört auf dem Bus bis der Bus frei wird und
   danach wartet das Device mit seiner eigenen Wartezeit (Priorität).
3. Danach kann das Device senden und hört seine eigene Sendung mit.
   Wird die Sendung gestört (anderes Device sendet) -> restart mit 1.
   Die anderen Devices erkennen den Abbruch daran, daß das Datagram
nicht die richtige Länge hat.

void ST_transmit_frame(unsigned int *frame, unsigned char size)
{
register int *fptr;    /* pointer to frame.    */
register int ch;    /* echo from bus.    */
register unsigned char retransmit = TRUE;/* retransmit flag.  */
register unsigned char i;  /* byte counter.    */

while (retransmit == TRUE)  /* while frame not sent    */
{
retransmit = FALSE;          /* assume we have success  */
fptr = frame;      /* set ptr to start of frame    */
while (!ST_idle);    /* wait for bus to idle.  */
while ((ch = ST_uart_getchar()) != -1);  /* empty ST queue.  */
for (i = size; i; i--)    /* transmit frame.    */
{
ST_uart_putchar(*fptr);    /* transmit a byte.    */
while ((ch = ST_uart_getchar()) == -1);  /* read the echo.  */
if (*(fptr++) != ch)    /* compare with echo          */
{
retransmit = TRUE;     /* no match      */
break;        /* stop transmission         */
}
}                                                  /* next byte      */
}
}

von Sebezahn (Gast)


Lesenswert?

Hi,

vielen Dank, das hat mich schon sehr weiter gebracht. Ich werde mir
sowohl den UART als auch den I2C zu Gemüte führen.

Gruß
Sebezahn

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.