Bekommt man die UART auch mit dem internen Oszillator zum laufen? Oder braucht man einen externen? Danke. mfg mathias
@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
Gibt es eine 8 Pin µC wo man eine UART mit internem Oszillator hinbekommt? mfg mathias
@Math Giaco
>Auch wenn man Sie ganz langsam macht?
Nein. 5% Frequenzfehler sind immer 5%, egal ob bei 115k2 oder 75 Baud.
MFG
Falk
Warum 8Pin uC? Platz? Wäre vielleicht auch ein 20 Pinner möglich (SO20)? ATtiny 2313, hat sogar Hardware-UART. MFG Falk
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
@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
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
@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
jo das mit dem galvanischen Trenne geht schon aber eben zum Probelm welche Schnittstelle am besten.
Würde es gehen wenn man den RC-Oszillator kalibrieren würde? Besten Dank mfg mathias
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
@ 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
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
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
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
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
Bzw. kann ich ja bis auf das Messen und die UART alles in C machen oder? mfg mathias
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.