www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART mit USI nach AVR307


Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bekommt man die UART auch mit dem internen Oszillator zum laufen? Oder 
braucht man einen externen?

Danke.

mfg mathias

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Math Giaco

>Bekommt man die UART auch mit dem internen Oszillator zum laufen? Oder
>braucht man einen externen?

Man braucht einen ausreichend genauen. Der interen RC-Oszillator ist zu 
ungenau. Bleibt nur ein externer Takt.

MFG
Falk


Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn man Sie ganz langsam macht?

Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es eine 8 Pin µC wo man eine UART mit internem Oszillator 
hinbekommt?

mfg
mathias

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Math Giaco

>Auch wenn man Sie ganz langsam macht?

Nein. 5% Frequenzfehler sind immer 5%, egal ob bei 115k2 oder 75 Baud.

MFG
Falk

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum 8Pin uC? Platz? Wäre vielleicht auch ein 20 Pinner möglich (SO20)? 
ATtiny 2313, hat sogar Hardware-UART.

MFG
Falk

Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte meher kleine µC´s mit einem großen verbinden, mit meheren 
meine ich so ca. 30 Stk. Beim 2312 bräuchte man dann doch auch eine 
Quarz oder nicht?

mfg mathias

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Math Giaco

>Ich möchte meher kleine µC´s mit einem großen verbinden, mit meheren
>meine ich so ca. 30 Stk. Beim 2312 bräuchte man dann doch auch eine
>Quarz oder nicht?

Den brauchst du so oder so. Anders ist ein genauer Takt nicht 
erreichbar.
Soll das ein kleines Netzwerk ala RS485 werden?

MFG
Falk

Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich will mit einem ARM7 eben so ca. 30 kleine µC´s verbinden. Ich 
brauche bei den kleinen einen ADC und eine PWM und eben einen Bus um 
alle miteinander zu verbinden. Zudem brauche ich bei der Verbindung eine 
galvanische Trennung.

Auch sollte das ganze billig sein weil 30 Stk usw.

So was könnte ich da machen?

mfg mathias

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Math Giaco

>Also ich will mit einem ARM7 eben so ca. 30 kleine µC´s verbinden. Ich
>brauche bei den kleinen einen ADC und eine PWM und eben einen Bus um
>alle miteinander zu verbinden. Zudem brauche ich bei der Verbindung eine
>galvanische Trennung.

Wie weit sind die 30 uC voneinander entfernt? 1m? 10m? 100m?

Bei 1m geht einfach 3.3V CMOS mit Optokopplern. Bei mehr eher RS485 + 
Optokoppler.

MfG
Falk

Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kleiner 1m.

Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo das mit dem galvanischen Trenne geht schon aber eben zum Probelm 
welche Schnittstelle am besten.

Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde es gehen wenn man den RC-Oszillator kalibrieren würde?

Besten Dank

mfg
mathias

Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach noch eine Frage mit einem Resonator würde es gehen?

mfg
mathisa

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit einem Resonator gehts auf jeden Fall. Für einen UART braucht man 
etwa 2% Genauigkeit des Taktes und das erfüllt ein Resonator.

Aber so eine Kommunikation ist auch mit den internen Oszillatoren der 30 
AVRs möglich, wenn man ein entsprechendes Protokoll mit 
Taktsynchronisierung wählt. Schau dir z.B. mal den LIN-Bus an (dazu 
gibts Application Notes bei ATMEL). Bei LIN beginnt jeder Frame mit 
einem Break-Signal danach ein Byte (55h) mit dem sich alle Empfänger auf 
die genaue Baudrate synchronisieren können, und erst dann folgen die 
Bytes mit Inhalt (Adresse, Daten, Checksumme).
Wie in der Application Note ersichtlich braucht man dazu ein 
Software-UART mit fein-programmierbarer Baudrate.

Gruss Andi

Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Andi,

Werde ich mir mal anschauen.

mfg mathias

Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Andi So ich habe mir nun das mit dem Lin Bus angeschaut. Irgendwie ist 
das ganze do recht kompliziert für meine Anwendung oder vielleicht sehe 
ich das auch nur so. Zudem muss ich ja dann auch einen Master Code 
schreiben für den LPC. Gibt es vielleicht auch noch was anderes?

Ist das die einzige Möglichkeit oder hat jemand eine andere Idee meine 
30 Tinys mit eine ARM zu verbinden aber mit interem Oszillator und 
galvanischer Trennung.

Besten Dank im Voraus

mfg mathias

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich dachte auch nicht dass du genau den LIN Bus implementieren sollst, 
es geht nur ums Prinzip der Baudratensynchronisation.
Ich habe mal für eine Klanginstallation in einer Galerie einen PC ca. 10 
PICs seriell ansteuern lassen, die alle mit internem Oszillator liefen. 
Dabei haben die PICs beim Einschalten des Ganzen auf das erste Byte vom 
PC gewartet, davon die Startbitlänge gemessen, und damit ihre Baudraten 
eingestellt. Danach konnten sie ganz normal seriell kommunizieren. Das 
lief den ganzen Tag ohne Probleme, da sich die Temperatur im Raum kaum 
änderte, und die Spannung stabil war.
Aber auch das geht nur mit einem Software-UART, der seine Baudrate an 
einen gemessenen Bitdauer anpassen kann.

Gruss Andi

Autor: mgiaco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, aber keine Ahnung wie man sowas macht. Kannst du mir vielleicht 
ein paar Tipps geben wie du das genau meinst mit Startbitlänge messen 
usw. Oder gibts dazu vielleicht was zum lesen.

Habe ich das richtig verstanden. Master sendet irgend eine definierte 
Nachricht. Alle Slaves versuchen die Baudrate zu messen und stellen 
diese dann eine.

Besten Dank im Voraus

mfg mathias

Autor: Andi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hab dir mal ein Code-Beispiel für AVR-Assembler angehängt. Das 
ist allerdings zusammenkopiert, unvollständig und ungestestet (SerIn und 
SerOut sind getestet). Die Routinen basieren auf Delays die genau 10 
Cycles dauern, das ist so nur in Assembler möglich.

Wichtig ist, dass der Master nach dem alle Slaves gestartet sind das 
Byte 0xFF  mit der gewünschten Baudrate sendet (Code ist für 9600 Baud 
gedacht). Bei diesem Wert ist nur das Starbit auf LOW, alle Daten und 
Stopbits auf HIGH. Die Slaves messen die Zeit des Startbits, und 
verwenden diese auch für alle weiteren Bits beim Senden und empfangen.

Da du kein AVR mit Hardware-UART benötigst genügt z.B. ein Tiny13 mit 
internem 9.6MHz Oszillator (8 Pin und günstig).

übrigens der Main-Loop ist so gedacht, dass der Master ein Kommando 
sendet und damit einen der 30 AVRs auswählt. Nur dieser sendet danach 
seinen ADC Wert (oder was du willst) zum Master. Danach warten alle aufs 
nächste Kommando. So geht eine Leitung vom TX des Masters zu allen RX 
der Slaves, und alle TX der Slaves werden verODERt zusammen an RX des 
Masters geführt.

Gruss Andi

Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay danke dann werde ich das in den nächsten Tagen mal versuchen zu 
Realisieren, ich habe mir erstmal ein paar Tinys bestellt.

Das ganze müsst in C auch zu realisieren sein oder ist doch Assembler 
besser ?

mfg mathisa

Autor: Mathias G. (mgiaco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bzw. kann ich ja bis auf das Messen und die UART alles in C machen oder?

mfg mathias

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.