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.
@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?
>@ 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