Ich habe mehrere Sensoren mit PWM Ausgang, die ich mit dem Mega32 verarbeiten will. Wie kann man das am Besten machen und wieviele solcher Sensoren sind max. anschließbar. Der Wert des Sensors ist das PWM Verhältnis. Falls Beispiele genannt werden, möglichst in Assembler. mfg Quehl
Wenn deine Sensoren mit PWM ausgängen arbeiten, dann schliess sie am ADC des ATM32 an,.. 7 Ports, (ausser bei differentieller) beispiele findest du in C und ASM im datasheet von ATmel www.atmel.com grüüüüße
Hi, @Kai: da sagt das Datenblatt aber etwas anderes: - 8 single ended channels - 7 differential channels (TQFP only) - 2 differential channels with gain (1x, 10x, 200x) Und ich würde lieber versuchen, das ganze über die capture funktion des timers zu realisieren. Also bei steigender/fallender Flanke einen Interrupt generieren und die entsprechenden Timerwerte ermitteln. Die Zeitabstände kann man dann in das PWM Verhältnis umrechnen. Gruß Fred
Es kommt (wie immer) auf die Details an. Der Umweg über Tiefpass und ADC ist prinzipiell eine gute Lösung, aber nicht immer die beste. Capture ist die beste Lösung, die AVRs (zumindest die mir näher bekannten) haben aber nur einen Hardware-Capture-Kanal. Nun kommt es auf die Frequenz der PWM-Signale an. Ist sie langsam genug, kann man die Eingänge pollen und auf Änderung prüfen (mehrkanaliges Software-Capture). Es lohnt sich auch, darüber nachzudenken, ob man nicht einen AVR mit Pinchange-Interrupt benutzt, da lässt sich Software-Capture einfacher realisieren. Also, nenne die zu erwartenden Frequenzen, dann sehen wir weiter... ...
...oder man schaltet mit ein paar Port-Pins einen Muxer und legt so die zu messenden Eingänge der Reihe nach an den Capture-Eingang zum Messen. Dauert dann aber halt immer min. 2 Taktperioden (eine während der (asynchron) umgeschaltet wird, die nächste kann man dann messen).
oder man sucht sich eine µC aus, der die entsprechenden Anzahl an Capture Kanälen hat. Man sollte dochmal darüber nachdenken ob der Mega32 dann für DIESE Anwendung der richtige µC ist.
Und zu Assembler: Wer Assembler zu mehr als direkten Registerzugriffe nutzt, ist ein Masochist.
Ralph wrote: > Und zu Assembler: > > Wer Assembler zu mehr als direkten Registerzugriffe nutzt, ist ein > Masochist. Wie kommst Du zu dieser (diskriminierenden) Aussage? Ich nutze auch Assembler zum Programmieren von AVRs. ...
@ Fred: ja ne sry, meinte 8ports, zu den sogenannten 7 differentiellen: man kann ADC0..6 nur differentiell zu ADC0..2 also 3 ports messen, womit man bei
>>NUR 3 'wirkliche' differnentielle kanäle hat,
nimmt man differentiell nur ein externe refferenzspannung
an port ADC1 kann man effektiv 7 spannungen differentiell messen. und natürlich wenn
8 kanäle...
aber ein frage stellt sich noch:
>>Wie groß ist die ausgangsauflösung deiner sensoren ,10mV?
den der ATMega32 hat nur ein 10bittigen ADC.
grüüüüße
also PWM ist digital und darum nicht an den Analogeingängen zu gebrauchen, sonst bitte mehr Informationen. Zeitdauer hatte ich mal was mit 300ms gelesen. Aktuell müßte ich das noch nachsehen. Das captureregister fiel mir zwar auch ein, nur gibt es dafür nur einen Eingang. Kann man vielleicht die Int. Eingänge benutzen, sind immerhin 3 Eingänge mit Captureeingang 4 Eingänge. Da müßte man doch im Interupt Zweig nur den Timer1 Stand auslesen und sichern. Kleines Problem ist, wenn die Interrupts gleichzeitig auftreten. Bleibt die Interruptanforderung solange bestehen, bis der aktuelle Interrupt abgearbeitet ist? Dann hätte ich eine kleine Ungenauigkeit drin, die aber evtl. akzeptiert werden könnte, wenn die Int.abarbeitung kurz gehalten wird. Pollen ist nicht ganz so gut, weil durch bedingte Jumps unterschiedl. Laufzeiten entstehen und die Programme recht groß werden sollen. Nicht nur Tests sondern auch Anwendung. Welcher AVR hat Pinchange Interrupt? Verwenden will ich nur DIP Gehäuse. mfg Quehl
Also bei 300ms Periodendauer schafft das der AVR mit Software-Capture mit links uns 40 Fieber... Ich würde die Eingänge (einen Port für 8 Signale, bei Bedarf einen weiteren Port für weitere 8 Signale) im Timer-Interrupt abfragen. Mit der modifizierten PeDa-Tastenabfrage (Entprellung raus, dafür beide Flanken auswerten) ist das mit wenigen Takten in der Timer-ISR getan. Das Hauptprogramm wertet dann die Flanken-Flags aus und liest den (Software-) Zähler ab, den die Timer-ISR hochzählt. Der (beim Pollen) von Dir befürchtete Jitter durch unterschiedliche Programmlaufzeiten tritt nicht auf, das Pollen erfolgt im Timer-Interrupt mit einem von Dir frei bestimmbaren Zeitraster. Da das Programm vermutlich noch etwas mehr tun soll, muss man sehen, wie man die restlichen Jobs mit der Timer-ISR verzahnt. PCI findest Du z.B. bei der Mega[4/8/16]8-Serie (DIL28). Das ist bei der langsamen Signalfrequenz aber nicht nötig. Betreffs ADC: Jedes PWM-Signal lässt sich mit einem Tiefpass zu einem Analogsignal wandeln und dann mit ADC messen. Ob das sinnvoll ist, entscheidet der Einzelfall. Signale mit Periodendauer über 10ms (unter 100Hz) würde ich durch Tastgradmessung (Zeitmessung, Software-Capture) auswerten. ...
danke, das hört sich ganz gut an. Meine Gedanken waren von den Flanken als genaueste Möglichkeit vernebelt. Und weil das so in den Datenblättern steht. PCI sind doch die Interruptpins? Die gibt es beim Mega32 auch. da sogar 3 Pins und beim Mega8 nur 2 Pins. Sonst hab ich beim Mega8 nichts darüber gefunden. Je nach Anforderung werde ich mal beides im Auge behalten. mfg Quehl
PCI: Ich sprach nicht vom Mega8 sondern vom Mega48, Mega88 und Mega168. Schau mal in dessen Datenblatt. Externer Interrupt und PCI sind Zweierlei. Bei Deinem Tempo (unter 100Hz) fährts Du aber mit Scann im Timer-Interrupt bedeutend ressourcenschonender. Außerdem kannst Du einen Software-Zähler nehmen, dessen Zähltakt Du mit einem Timer Deinen Wünschen anpassen kannst. Dies kann (falls alle Sensoren mit halbwegs gleicher Frequenz "klappern") Divisionen einsparen, die beim AVR recht ressourcenfressend sind. ...
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.