mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega32 uart - 1 sender - n Empfänger


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

für eine Wohnraumbeleuchtung plane ich folgendes :
Auf einem Atmega32/644 liegen mehrere Makros, die Lichtszenarien 
beinhalten. Über eine Uart Verbindung sind 3-4 Attiny2313 (4PWM) 
angeschlossen.

Atmega sendet : Attiny1 , LED Kette langsam dimmen
                Attiny2 , LED Sternenhimmel langsames durchfade
                usw .....

Auf den jeweilgen Attinys findet dann die PWM Umsetzung der Makros 
statt.

Wie adressiere ich die einzelnen Attinys ?
Läuft die Steurung über ein Kabel / Verbindung ?

Kann mir jemand ein paar Infos oder Links zu diesem Thema liefern ?

Danke

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie adressiere ich die einzelnen Attinys ?

Indem du ihnen Nummern verpasst.

>Läuft die Steurung über ein Kabel / Verbindung ?

Nö, GND muss auch noch sein. Also zwei Kabel.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@holger

Kannst du mir das bitte ein wenig genauer erklären ?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kannst du mir das bitte ein wenig genauer erklären ?

ATTiny1 Hausnummer 1
ATTiny2 Hausnummer 2

Dann Master:

Sende Hausnummer1+ Befehl an ATTiny1
Sende Hausnummer2+ Befehl an ATTiny2

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

UART im Multiprozessormode.

MfG Spess

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>UART im Multiprozessormode.

Das war jetzt ja wohl ein Griff ins Klo ;)

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ATTiny1 Hausnummer 1
>ATTiny2 Hausnummer 2

>Dann Master:

>Sende Hausnummer1+ Befehl an ATTiny1
>Sende Hausnummer2+ Befehl an ATTiny2

So habe ich mir das auch ähnlich gedacht. Wie adressiere ich die Attiny 
denn ?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Das war jetzt ja wohl ein Griff ins Klo ;)

Was ist daran gross anders, als bei deiner Variante? Ausser das Bit8 als 
Adresskennzeichen benutzt wird. Und die Slaves werden wesentlich weniger 
belastet.

MfG Spess

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>Das war jetzt ja wohl ein Griff ins Klo ;)

>Was ist daran gross anders, als bei deiner Variante? Ausser das Bit8 als
>Adresskennzeichen benutzt wird. Und die Slaves werden wesentlich weniger
>belastet.

Nichts, außer das es für den Probanden zu kompliziert ist.
Siehe seine letzte Antwort bei der ich gar bitterlich weinen muss ;)

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der "Proband" möchte ja auch mal klüger werden, darum fragt er hier ja 
auch

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Der "Proband" möchte ja auch mal klüger werden, darum fragt er hier ja
>auch

SendUart(Hausnummer1)
SendUart(Befehl)

SendUart(Hausnummer2)
SendUart(Befehl)

Klingelt jetzt was?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Nichts, außer das es für den Probanden zu kompliziert ist.
>Siehe seine letzte Antwort bei der ich gar bitterlich weinen muss ;)

Wenn er aber seinen Slaves auch noch beibringen muss, nicht auf falsche 
Daten zu reagieren, werden seine Fragen dich wahrscheinlich noch 
wesentlich weinerlicher stimmen.

@ Tom (Gast)

Nichts für ungut. Aber wenn du es machen willst, dann mach es richtig.

MfG Spess

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@spess53

ich höre dir wissbegierig zu :-) Es soll schon funktionieren

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>@spess53
>ich höre dir wissbegierig zu :-) Es soll schon funktionieren

Mal sehen wie spess53 da wieder raus kommt ;)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Gut eine Kurzeinführung:

Normalerweise werden 8 Bit zur Übertragung verwendet. Multi-processor 
Communication Mode (MPCM) werden 9 bit verwendet. das 9. Bit (Bit8) 
dient zu Kennzeichnung einer Adresse. Zusätzlich gibt es in UCSRA nnoch 
das MPCM-Bit. Wenn dieses Bit gesetzt ist wird ein RXC-Interrupt nur 
ausgelöst, wenn Bit 8 gesetzt ist. Bei der Initialisierung setzen alle 
Slaves ( deine ATTiny) dieses Bit. Wenn der Master (dein ATMega) einen 
Slave Adressieren will, setzt er Bit8 auf 1 und lädt die unteren 8 Bit 
(UDR) mit der Adresse. Bei allen Slaves wird beim Empfang ein 
RXC-Interrupt ausgelöst. Jetzt überprüfen alle Slaves, ob das die eigene 
Adresse (in UDR) ist. Wenn nicht kann weiter geschlafen werden. Der 
Slave mit der übereinstimmenden Adresse löscht jetzt das MPCM-Bit. Damit 
wird auch bei Bit8=0 ein RXC-Interrupt ausgelöst. Der Master sendet die 
Daten mit gelöschtem Bit 8. Damit empfängt nur der zuvor adressierte 
Slave die Daten. Die anderen werden davon überhaupt nicht belästigt. 
Wenn der Slave alle Daten empfangen hat, setzt er sein MPCM-Bit wieder 
auf 1 und wird dadurch wieder nur auf eine neue Adress empfänglich. 
Danach kann er in Ruhe die empfangenen Daten verdauen.

Ich hoffe das war einigemassen verständlich. Ist auch im Datenblatt 
nachzulesen.

MfG Spess

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soweit erste einmal Danke für die Kurzeinweisung. Ist schon was anderes, 
als ein paar LED zu dimmen :-)

Damit ich mich nun weiter schlau machen kann, ist mein Stichwort "RS485" 
?! Zumindest wurde dieses Protokoll genannt, als ich nach 
"Multiprozessormode" gesucht habe.

Und da ich keine bidirektionale Kommunikation brauchem sonder lediglich 
willige "Befehlsempfänger", reichen 2 Leitungen aus ?!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht böse sein spess53. Aber das ist doch für Tom noch viel zu 
kompliziert.

Lass ihn doch einfach seinen Master UART mit allen Slaves verbinden.
Der Master UART brüllt dann einfach raus: Befehl an Tiny mit der Nummer 
25, mach dieses.
Der Tiny mit der Nummer25 reagiert auf den Befehl, alle anderen 
ignorieren ihn ganz einfach.

Das ist so, wie wenn du 20 Schüler in einem Raum hast. Ehe alles 
losgeht, verpasst du jedem eine Nummer.
Und dann brüllst du einfach in den Raum hinein: 23, Fenster aufmachen.
Hans (der vorher die Nummer 23 zugeordnet bekommen hat) macht das dann, 
während Fritz (mit der Nummer 17) den Befehl ignoriert.

Du denkst dir ein Schema aus, welches es dir gestattet eindeutig 
zwischen Adresse und Befehl zu unterscheiden. Zb sind alle Befehle nru 
Nummer zwischen 0 und 127 und alle Adressen sind Zahlen zwischen 128 und 
255. Wenn ein Tiny ein Byte empfängt braucht er nur nachsehen:

  Ist das Byte größer 127?
  +- Wenn ja
  |    Stimmt die Adresse mit meiner eigenen überein?
  |    +- Wenn ja
  |    |    Schalte mich scharf, das nächste Byte ist mein Befehlsbyte
  |    +- Wenn nein
  |         nichts tun
  |
  +- Wenn nein
       Bin ich auf einen Befehl scharfgeschaltet?
       +- Wenn ja
       |    Befehl ausführen
       +- Wenn nein
            Nichts tun
       Scharfschaltung rückgängig machen

Du kannst dir ja auch mal überlegen, wie sich das Auswerteschema 
verändern würde, wenn man ganz einfach Befehl und Adresse umdrehen 
würde. D.h. zuerst wird der Befehl übertragen und dann an wen der Befehl 
gerichtet ist. Um beim Beispiel zu bleiben:
"Fenster auf"  - alle Schüler spitzen die Ohren
23             - Nur Hans geht, alle anderen spielen weiter Karten


  Ist das Byte kleiner 127?
  +- Wenn ja
  |    Befehl für eine mögliche Ausführung speichern
  +- Wenn nein
       Stimmt die Adresse mit meiner eigenen überein?
       +- Wenn ja
            Befehl ausführen

Das ganze ist wirklich keine Hexerei, geh einfach davon aus, dass du 
eine Menge von Menschen hast, die alle strohdumm sind und die du 
fernsteuern musst, indem du Zahlen in die Menschenmenge hineinbrüllst. 
Wie würdest du das machen?
Der von spess53 angesprochene Multiprozessormode ist nur eine 
Möglichkeit, wie man Adressierung and Daten voneinander trennen kann und 
wie die Slaves nur dann belästigt werden, wenn es notwendig ist. Bei dir 
ist aber die Last an den Slaves nicht besonders hoch, so dass du nicht 
darauf angewiesen bist, auch noch das letzte bischen Rechenzeit 
herauszuquetschen. Ehe du Sondermodi in der UART Übertragung benutzt, 
solltest du meiner Meinung nach erst mal mit den Standardmodi und einer 
Standardübertragung klarkommen.
Fang erst mal an den Master mit einem Slave reden zu lassen und dem 
Befehle zu schicken. Dann hast du schon mal ein wesentlich besseres 
Rüstzeug um mehrere Slaves an die UART zu hängen.

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso eigentlich nicht I²C nehmen? Das ist doch extra für solche zwecke 
gedacht!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timmo H. schrieb:
> Wieso eigentlich nicht I²C nehmen? Das ist doch extra für solche zwecke
> gedacht!

Leitungslänge.

Autor: sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wieso eigentlich nicht I²C nehmen?

weil uart schon in hardware implementiert ist ... und für diese einfache 
aufgabe vollkommen ausreicht.
karl heinz hat das schon super beschrieben, dem kann ich nichts 
hinzufügen.

jeder slave lauscht auf dem TX des masters und entscheidet anhand von 
dem was er hört, ob er gerade angesprochen ist.
nicht sehr sicher, aber ob eine lampe mal nicht angeht interessiert den 
master ja herzlich wenig.


I2C wäre auch super geeignet, bedeutet auch nur einen geringfügigen 
mehraufwand.

die leitungslänge sollte man mal noch betrachten ....

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Nicht böse sein spess53. Aber das ist doch für Tom noch viel zu
>kompliziert.

Der zusätzlich Aufwand beschränkt sich auf die Manipulation eines Bits 
beim Master und eines Bits beim Slave. Wenner das nicht packt, hat 
sowiso das falsche Hobby.

>Und da ich keine bidirektionale Kommunikation brauchem sonder lediglich
>willige "Befehlsempfänger", reichen 2 Leitungen aus ?!

Masse macht sich auch nicht schlecht. Also 3.

>Wieso eigentlich nicht I²C nehmen? Das ist doch extra für solche zwecke
>gedacht!

Wenn du das richtig, also mit der implementierung aller möglicher 
Zustände machst, ist es nicht ganz ohne.

MfG Spess

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wow, danke für die rege Teilnahme.

Die Leitungslänge liegtbei ca. 20 cm.

@Karl heinz Buchegger
Danke, super Erklärung. Ich denke, dass dies wohl doch erst einmal der 
richtige Weg für mich ist. Hört sich immer ncoh schwierig genug an. Bei 
diesem System "hört" der slave also ständig, ob der master etwas in den 
Raum brüllt. Dies "blockiert" also seine eigentliche Arbeit --> Dimmen 
und schalten von Licht ? Da diese Szenarien nicht ständig wechseln, wäre 
diese "Ablenkung" aber nicht tragisch ?!

@spess53
Naja, ich denke einmal , das auch du nicht als sprechender Mensch auf 
die Welt gekommen bist, aber es dennoch versucht hast, sprechen zu 
lernen. Ebenso versuche ich dies im Bereich der mc zu tun. Von einem 
"falschen" Hobby kann also meiner Meinung nach  nicht gesprochen werden. 
Dennocoh danke für deine Hilfe

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom schrieb:

> Raum brüllt. Dies "blockiert" also seine eigentliche Arbeit --> Dimmen
> und schalten von Licht ?

Kommt drauf an.
Bei Dimmen hat der µC ständig was zu tun. Er muss ja die PWM bedienen. 
Aber das kann der auch genausogut in Hardware machen.
Bei Schalten muss der µC ja nicht ständig was tun. Er schaltet das Licht 
ein oder aus und legt sich dann wieder schlafen. Wenn das Licht erst mal 
brennt oder aus ist, gibts ja nichts mehr zu tun. Du musst ja auch nicht 
dauernd beim Lichtschalter stehen bleiben :-)

> lernen. Ebenso versuche ich dies im Bereich der mc zu tun. Von einem
> "falschen" Hobby kann also meiner Meinung nach  nicht gesprochen werden.

Na ja.
Du denkst im Moment noch viel zu kompliziert und machst dir über Details 
Sorgen, die in Wirklichkeit keine sind. Dafür lässt du es an 
konstruktiver Phantasie mangeln. Das merkt man schon an deinen Fragen. 
Genauso wie man aus deinen Fragen heraushören könnte, dass dir noch 3 
oder 4 Vorstufen zu deiner Problemlösung fehlen.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Ebenso versuche ich dies im Bereich der mc zu tun. Von einem
>"falschen" Hobby kann also meiner Meinung nach  nicht gesprochen werden.
>Dennocoh danke für deine Hilfe

Das hatte sich lediglich auf das setzen eines Bits bezogen.

>Die Leitungslänge liegtbei ca. 20 cm.

Wenn du keine total elektrosmogverseuchte Umgebung hast, brauchst du bei 
der Entfernung kein RS485. Da reicht Signal und Masse.

MfG Spess

Autor: sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dies "blockiert" also seine eigentliche Arbeit --> Dimmen
und schalten von Licht ? Da diese Szenarien nicht ständig wechseln, wäre
diese "Ablenkung" aber nicht tragisch ?!


wenn du die dimmung über eine hardware (timer) pwm realisierst, hast du 
die komplette rechenzeit des µC brachliegen ... selbst wenn du 100 mal 
pro sekunde dein beleuchtungsszenario änderst, wird sich der µC bei 
20MHz noch langweilen.


und sogar bei PWM in software brauchst ja auch max 200Hz für die 
PWM-frequenz ... d.h. der wird mehr warten als sich mit dem ändern der 
ausgänge beschäftigen.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok. Nochmals vielen Dank. Ich werde euch hoffentlich im Laufe meines 
Projektes ein paar Fortschritte zeigen können.
Bis dahin

Autor: D. S. (datasheet)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich hab mal mehrere UARTs über Multiplexer und Demultiplexer 
angesprochen. Ist zwar für Deine zwei Slaves ein höherer 
Schaltungsaufwand, aber dadurch vereinfacht sich die Software der Slaves 
und man hat kein Problem damit die ganze Geschichte zu erweitern.

bye
Data

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich hab mal mehrere UARTs über Multiplexer und Demultiplexer
>angesprochen. Ist zwar für Deine zwei Slaves ein höherer
>Schaltungsaufwand, aber dadurch vereinfacht sich die Software der Slaves
>und man hat kein Problem damit die ganze Geschichte zu erweitern.

Was ist einfacher anzupassen? Hardware oder Software?
Wenn man sich ein sinnvolles Protokoll ausdenkt, ist das auf jeden Fall 
einfacher (zu erweitern) als irgendwelche Hardware.

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verstehe immernoch nicht warum kein I²C. Das ist doch viel 
einfacher, und der AVR hats in Hardware drin. Man braucht nur noch die 
Adressen für jeden Empfänger festlegen und gut is.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Man braucht nur noch die Adressen für jeden Empfänger festlegen und gut is.

Hast du dir das Kapitel im Datenblatt mal richtig durchgelesen?

MfG Spess

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Nachtrag @Timmo: Der ATTiny2313 den Tom verwenden will hat z.B. kein 
Hardware-I2C.

MfG Spess

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich verstehe immernoch nicht warum kein I²C. Das ist doch viel
>einfacher, und der AVR hats in Hardware drin. Man braucht nur noch die
>Adressen für jeden Empfänger festlegen und gut is.

I²C erwartet ein Handshake. USART nicht.
Wenn der Slave auf die I²C-Nachricht nicht antwortet, hängt der Master 
u.U. irgendwo im Programm fest.
Wenn der Slave keine Nachricht per USART empfängt, ist das dem Master 
sehr egal, weil er eh keine Antwort erwartet.

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Hast du dir das Kapitel im Datenblatt mal richtig durchgelesen?
Ja, und auch schon mehrfach benutzt.

>Nachtrag @Timmo: Der ATTiny2313 den Tom verwenden will hat z.B. kein
>Hardware-I2C.
Der 2313 hat USI und damit geht auch Two-Wire Mode, kann also auch als 
TWI verwendet werden. Dafür hat Atmel sogar eine Application Note: 
http://www.atmel.com/dyn/resources/prod_documents/...

Gut ist programmiertechnisch vielleicht etwas aufwendiger als UART, aber 
der Quellcode ist ja schon fertig.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.