Hallo Ich möchte mit dem Atmega Serielle Geräte abfragen. 12 Stück um genau zu sein. In dem Wiki steht das das alles kein Problem ist da man das ja in Software realisieren kann. Ich dachte an z.b. den Atmega32. Meine Frage ist hat jemand sowas schon einmal gemacht? Hat der Atmega32 genug "Power" um dich um 12*9600bit/s zu kümmern und das dann noch z.b. an einen PC zu senden? gruss Markus
> Hat der Atmega32 genug "Power" um dich um 12*9600bit/s zu kümmern und > das dann noch z.b. an einen PC zu senden? Nein, auf keinen Fall gleichzeitig. Da eine Soft-UART Timer braucht, werden wohl max. 2 UARTs per Software realistisch sein. Letztlich mußt Du Dein Problem wohl mit einem anderen Ansatz lösen (sequentielle Abfrage).
>Hat der Atmega32 genug "Power" um dich um 12*9600bit/s >zu kümmern und das dann noch z.b. an einen PC zu senden? Das bezweifle ich. In solcheinem Fall sollte man eher auf externe UART ausweichen. Man könnte ein paar mega8 per SPI, TWI oder sonst wie an einen Master-Controller (könnte auch ein Mega8 sein...) anbinden. Die UART-Controller könnten dann auch Datenzwischenspeichern, falls der Master gerade etwas anderes tut und nicht auf etwaige Daten reagieren kann.
>Ich dachte an z.b. den Atmega32. Meine Frage ist hat jemand sowas schon >einmal gemacht? Hat der Atmega32 genug "Power" um dich um 12*9600bit/s >zu kümmern und das dann noch z.b. an einen PC zu senden? Ich denke schon, dass das geht. Du brauchst nicht für jeden UART einen Timer, Du kannst alle UARTs innerhalb eines Timer-IRs bedienen. Jedenfalls wenn die Baudraten alle gleich sind (wie Du geschrieben hast). Auch von der Rechenleistung sollte der ATmega reichen. Voraussetzung ist natürlich eine effektive Programmierung. Gruß, Stefan
Markus wrote: > Ich dachte an z.b. den Atmega32. Meine Frage ist hat jemand sowas schon > einmal gemacht? Hat der Atmega32 genug "Power" um dich um 12*9600bit/s > zu kümmern und das dann noch z.b. an einen PC zu senden? Ja, sollte gehen. Du mußt die Bits mindestens 3-fach abtasten, d.h. etwa 500 Zyklen pro Timerinterrupt sind verfügbar. Kannst Du sie aber nacheinander abfragen, ist es überhaupt kein Problem. Peter
>Das bezweifle ich. ... nicht mehr... >Ja, sollte gehen. 1. Wenn Peter das schreibt, ist da was dran. 2. Ich bin vom Standard-Soft-UART mit einem Timer und Startbit-Interrupt auf fallende Flanke ausgegangen.
> Auch von der Rechenleistung sollte der ATmega reichen. Voraussetzung ist > natürlich eine effektive Programmierung. Die möchte ich dann gerne sehen !
@Fritz >> Auch von der Rechenleistung sollte der ATmega reichen. Voraussetzung ist >> natürlich eine effektive Programmierung. Naja, wo gilt der Satz nicht? ;-) >Die möchte ich dann gerne sehen ! Me too! Hmmm, mal überschlagen. Nehmen wir 9K6, macht 1041,6666 us / Bit. Normale UARTs arbeiten mit 16 facher Überabtastung, manchmal auch im High Speed Modus mit nur 8facher. Wenn man nen Baudratenquarz benutzt, geht sicher auch 8fache, ggf. sogar nur x4. Bei x8 braucht man einen Timerinterrupt von 13,02 us. Ein MEGA@16MHz hat da 208 Takte. Mit diesen 208 Takten muss er 12 Pins einlesen (easy), auseinanderfummeln (gehtmal noch), 12x in eine Statemachine gehen und auswerten (uiuiuiui). Das wird ENG! Sinnvoller ist hier sicherlich die Verwendung des Hardware-UART, eines MAX232 + 12fach MUX für die einzelnen Schnittstellen. MfG Falk
Wenn diese seriellen Geräte "abgefragt" werden - müssen die alle gleichzeitig aktiv sein, oder reicht es aus, wenn der Controller sie alle nacheinander abfragt? Dann wird's nämlich nahezu trivial.
Also gut, mit 16-facher Überabtastung wird es nicht gehen. Mir bekannte Soaftware-UARTs arbeiten mit 3-facher Überabtastung. Dabei z.B. der SW-UART von HITEX, nicht gerade eine Bastlerklitsche. Auch Beispiele von Atmel sind meines Wissens mit 3-facher Überabtastung (habe jetzt aber nicht genauer nachgeschaut). Möchte man mehr als 3-fach verwenden, sollte man sich erstmal fragen, was man dadurch gewinnt. Bei 16-fach kann man einen Voter realisieren und "Noise" feststellen. Nur ... selbst bei den Hardware-UARTs benutzt die meiste Software diese Flags nicht. Mit 3-facher Überabtastung erhält man 555 Zyklen bei 16Mhz und 9600 Baud. Aber mal ehrlich: was hat denn die State-Machine so viel zu tun? Wenn pro State mal mehr als 10 Assemblerbefehle stehen, dann ist das viel. Ich sehe keinen State, der mehr als 20 Zyklen benötigt. Dazu die Zyklen, die die State-Machine braucht, das sind auch unter 20 Zyklen, worstcase. Viele Grüße, Stefan
@Stefan Kleinwort >Atmel sind meines Wissens mit 3-facher Überabtastung (habe jetzt aber >nicht genauer nachgeschaut). Wieso 3. Die Zahl ist mir in diesem Zusammenhang ein wenig suspekt. Besser doch 4. Macht auch USB bei 12 Mbit so. >Baud. Aber mal ehrlich: was hat denn die State-Machine so viel zu tun? Programmiers mal. Dann wirst du schon sehen. Ausserdem braucht es ja noch ein wenig Rechenzeit für die Hauptschleife. MFG Falk
> Wieso 3. Die Zahl ist mir in diesem Zusammenhang ein wenig suspekt.
Immer ungerade bei Software-UART! Wenn Du einen Wechsel zum Startbit
hast, weißt Du nie genau, ob Deine Abtastung zufällig sofort nach dem
Wechsel war oder zufällig haarscharf vor dem nächsten Wechsel. In beiden
Fällen kann es passieren, daß die Abtastung genau 1/Baud später eben
gerade ins falsche Bit rutscht.
Du kennst also nur einen Zeitraum, in dem der Wechsel stattgefunden hat.
Wenn Du mit einem Abtastzeit/punkt/ maximalen Abstand von einem
Zeit/raum/ haben willst, brauchst Du eine ungerade Anzahl von
Abtastungen pro Zyklus, mindestens drei. In der Praxis zeigt sich, daß
drei meistens auch reicht.
Aber ist vier nicht besser? Nein! Denn man kann nicht entscheiden,
welchem Abtastwert man trauen kann. Wenn bei 4 noch Passivlevel war und
bei 1 schon das Startbit abgetastet wurde, soll man dann 2 oder 3
nehmen? Jeder von denen könnte nur ein Viertel Zyklus vom Bitwechsel
entfernt sein; ein Viertel bekommt man aber ja nachdem schnell zusammen.
Auf jeden Fall schneller als das Drittel, das man bei nur dreifacher
Überabtastung hat. (Um fair zu sein: kleiner Vorteil der vierfachen
Überabtastung ist eine gewisse Fehlererkennung, wenn mal 2 und 3
unterschiedlich sind.)
Wenn's noch nicht klar ist, mal Dir mal ein Diagramm (Eingang und
Abtastung über Zeit), dann ist es ganz anschaulich.
@Philipp Sªsse >Immer ungerade bei Software-UART! Wenn Du einen Wechsel zum Startbit >hast, weißt Du nie genau, ob Deine Abtastung zufällig sofort nach dem >Wechsel war oder zufällig haarscharf vor dem nächsten Wechsel. In beiden Nur mal zur Info, USB Tranceiver arebiten EXAKT mit 4facher Überabtastung bei LOW/Full Speed. Und das funktioniert wunderbar. Man muss nur die Logik ein wenig richtig interpretieren. >Fällen kann es passieren, daß die Abtastung genau 1/Baud später eben >gerade ins falsche Bit rutscht. Denke ich nicht. Der Algorithmus muss nur passen. Von daher unterscheiden sich Software- und Hardware UART nicht. MFG Falk
@Stefan Kleinwort >Wieso 3. Die Zahl ist mir in diesem Zusammenhang ein wenig suspekt. >Besser doch 4. Macht auch USB bei 12 Mbit so. Durch die asynchrone Abtastung des RXD-Signals musst Du damit rechnen, dass die erste Abtastung des Startbits nicht direkt bei dessen Start erfolgt. Bei 2-fach ergibt sich: Abtast-Nummer: 1 2 Sample-Position: 0 - 49% 50 - 99% Der ideale Sampingpunkt ist 50% (Mitte einer Bit-Zeit). Wie man sieht, ist sowohl Abtast-Nummer 1 als auch 2 nicht sicher (0% bzw 99% worstcase). Bei 3-fach ergibt sich: Abtast-Nummer: 1 2 3 Sample-Position: 0 - 32% 33 - 65% 66% - 99% Abtast-Nummer 2 ist mit einer Sampe-Position zwischen 33% und 65% in der Praxis verwendbar. >Programmiers mal. Dann wirst du schon sehen. Ausserdem braucht es ja >noch ein wenig Rechenzeit für die Hauptschleife. Etwas habe ich mir das Problem schon angeschaut, bevor ich geschrieben habe ;-) Lass es meinetwegen worstcase 70% CPU-Belastung werden. So what? Die Rest-Rechenleistung entspricht einem ATmega mit 5Mhz-Quarz. Viele meiner Projekte takten nicht schneller (3,0V und/oder um Strom zu sparen). Gruß, Stefan
@Stefan Kleinwort >>Programmiers mal. Dann wirst du schon sehen. Ausserdem braucht es ja >>noch ein wenig Rechenzeit für die Hauptschleife. >Etwas habe ich mir das Problem schon angeschaut, bevor ich geschrieben >habe ;-) Und wo ist der getestete, lauffähige Code? Bis jetzt ist alles nix als Konzept und Planung. MFG Falk
>Und wo ist der getestete, lauffähige Code? Bis jetzt ist alles nix als >Konzept und Planung. Ich helfe ja gerne. Aber nur um Dir zu zeigen, dass das funktioniert, setze ich mich nicht hin und programmiere etwas, was ich selbst nie brauchen werde. Und wenn Du mir nicht glaubst, dann halte es einfach wie Rahul: >1. Wenn Peter das schreibt, ist da was dran. Stefan
Hallo, ich habe nicht alles gelesen. Aber du könntest alle TX zusammen und die RX jeweils mit einem Transister zusammen schalten. ==> Weisst du was ich meine? Dann ein Protokoll machen die Nachricht immer an alle schicken und denjenigen, der gefragt ist, antwortet. So reicht dir 1 Serielle Schnittstelle. mfg mathias
>Aber du könntest alle TX zusammen und die RX jeweils mit einem >Transister zusammen schalten. ==> Laaaaaaaaaaaaaaaaaaaangweilig... Was ist eigentlich ein Transister? Vielleicht ein Transsexueller Kanister? (Vielleicht auch eine Mischung aus TransistOr und Kanister?
Ich glaub wir sollten den Original-Poster mal wieder zu Wort kommen lassen. Seit der ursprünglichen Frage hat er sich nämlich nicht mehr reingetraut.
@ Raul lustig lustig, wenigstens habe ich eine sinvollen Beitrag geleistet mfg
>@ Raul lustig lustig, wenigstens habe ich eine sinvollen Beitrag >geleistet Sinnvoll? Darüber lässt sich streiten. Lesen und schreiben ist auch nicht deine Stärke... das >Laaaaaaaaaaaaaaaaaaaangweilig... bezog sich auch nur darauf, dass diese Lösung inzwischen sooo häufig hier gepostet wurde, dass mal ein anderer Weg interessant wäre.
Aeh, der mit den 16 Statemschinen zum Abtasten leuchtet nicht ein. Die Statemaschinen laufen nicht seriell, sondern parallel. Die kann man alle zusammen in einem Word oder zwei laufen lassen. Z.
@Stefan Kleinwort >Und wenn Du mir nicht glaubst, dann halte es einfach wie Rahul: >>1. Wenn Peter das schreibt, ist da was dran. Weder Peter, noch ich, noch sonstwer hat die Weisheit für sich gepachtet. Auch Peter haut mal daneben. Und am Ende zählt nur eine lauffähige Lösung, kein "Das Problem ist lösbar" Gerede. @Zossi >Aeh, der mit den 16 Statemschinen zum Abtasten leuchtet nicht ein. Die Bei 12 Kanälen sind es "nur" 12 State Machines. >Statemaschinen laufen nicht seriell, sondern parallel. Die kann man alle >zusammen in einem Word oder zwei laufen lassen. Und du denkst das wird einfacher? Denk dran, die laufen nich alle parallel im gleichen State. MFG Falk
Na ja ich mach mir nix aus rechtschreibung, in Deutsch hatte ich immer die schlechtesten Noten. ... aber es geht ja um was anderes. Man könnte vielleicht auch nur Dioden nehmen. Oder UND-Gatter 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.