Hallo zusammen Ich bin gerade daran die Schaltung des Ultraschallartikels nachzubauen (übrigens ein sehr guter Beitrag). Meine Frage ist nun eine allgemeinere: Wie kann ich ein PWM-Signal invertieren? Ich glaube nicht das es geht, aber falls es mit einem Atmega16 geht wäre das natürlich perfekt. MfG Florian
Florian K. schrieb: > (übrigens ein sehr guter Beitrag). Meine Frage ist nun eine > allgemeinere: Wie kann ich ein PWM-Signal invertieren? Ich glaube nicht > das es geht, aber falls es mit einem Atmega16 geht wäre das natürlich > perfekt. Wie wird die PWM erzeugt? Die Hardware-PWM kann man so konfigurieren, dass sich die Polarität umdreht. -> Datenblatt und die Konfigurationsregister durchsehen. Eine Software-PWM hast du ja sowieso selber in der Hand.
Ich ging ganz nach diesem Artikel (http://www.mikrocontroller.net/articles/Entfernungsmessung_mit_Ultraschall) vor. Den Code für die PWM habe ich auch von dort. Wie ginge das mit dem Software invertieren? Kommt dann wirklich -4.5V und +4.5V heraus?
Also Hardware - PWM TCCR1A = (1<<COM1A1) | (1<<COM1A0) | (1<<WGM11); TCCR1B = (1<<WGM12) | (1<<WGM13) | (1<<CS10); Jetzt schnappst du dir das Datenblatt deines Prozessors (find ich witzig, dass im Artikel zwar die Timer Initialisierung angegeben ist, aber nicht für welchen Prozessor) und schlüsselst erst einmal auf, was denn da eingestellt wird. Am Beispiel eines Mega16 WGM11, WGM12 und WGM13 zusammen schalten den Timer in den Modus 14, Fast PWM CS10 schaltet den Vorteiler auf 1 Damit hast du erst mal die Grundkonfiguration. Die Bedeutung der restlichen Bits hängt auch ein wenig vom Modus ab, daher hab ich den Modus als erstes dekodiert. Aber was ist mit den Bits COM1A1 und COM1A0? Im Datenblatt findet sich bei der Beschreibung der Bits eine Tabelle, die für den Fast-PWM Modus gilt
1 | COM1A1/COM1B1 COM1A0/COM1B0 Description |
2 | |
3 | 0 0 Normal port operation, OC1A/OC1B disconnected. |
4 | |
5 | 0 1 WGM13:0 = 15: Toggle OC1A on Compare Match, |
6 | OC1B disconnected (normal port operation). |
7 | For all other WGM13:0 settings, normal port |
8 | operation, OCnA/OCnB disconnected. |
9 | |
10 | 1 0 Clear OC1A/OC1B on compare match, set |
11 | OC1A/OC1B at BOTTOM, |
12 | (non-inverting mode) |
13 | |
14 | 1 1 Set OC1A/OC1B on compare match, clear |
15 | OC1A/OC1B at BOTTOM, |
16 | (inverting mode) |
Bei dir ist COM1A1 und COM1A0 jeweils auf 1 gesetzt. Laut Tabelle ist das die letzte Tabellenzeile (der 'inverting mode'). Du willst aber das genaue Gegenteil (in der Tabelle steht auch sinnigerweise immer dabei, was die Einstellung mit den Pins macht), den 'non-inverting mode'. ALso wirst du die Konfiguration wie umändern? Du solltest jetzt NICHT hergehen und meine Ergüsse einfach ohne nachzudenken übernehmen. Schau in dein Datenblatt, such dir die Beschriebung vom Timer1 und geh dort in den Abschnitt "Register Description". Das ist die Zusammenfassung, welches Bit in welchem Register was bewirkt. Dort sind auch die Tabellen, die dir Modi aufschlüsseln, wenn mehrere Bits gemeinsam eine Einstellung bewirken. Das Datenblatt ist dein Freund. Du MUSST lernen damit umzugehen. Ansonsten wirst du deinen µC nie voll ausschöpfen können.
Wenn ich Com1a1 auf 1 und und com1a0 auf 0 setzte, kommen die zwei Signale (invertiert und nichtinvertiert) an den Ports OC1A und OC1B heraus? Danke vielmals für deine ausführliche Antwort MfG Florian
Florian K. schrieb: > PS: Ich brauche nicht 4.5V zu 0V sondern 4.5V zu -4.5V Eine Moeglichkeit waere, das Signal durch einen MAX232 oder MAX202 zu schicken. Der macht aus 0V/+5V dann +10V/-10V, also invertiert und verschiebt gleichzeitig die Spannung. All das ohne zusaetzliche negative Stromversorgung. Aus +/-10V dann +/-4.5V zu machen ueberlasse ich Dir als Uebung :-) (Stichwort Spannungsteiler). MAX232 gibt's bei jedem Elektronikshop um wenige Cents. Wolfgang
Das wäre eine gute Idee allerdings habe ich bloss eine 4.5V Stromversorgung (Batterie). Es wäre mir neu das das gehen würde.
@Karl heinz Buchegger Was kommt dann als Output und wo? ist das Signal dann -4.5V / +4.5V oder nur 4.5V / 0? und wo kann ich diese zwei abgreifen (im Moment hole ich es bei ICP1 weiss aber nicht mehr wieso)?
Hallo, > wo kann ich diese zwei abgreifen (im Moment hole ich > es bei ICP1 weiss aber nicht mehr wieso)? Das kann nicht sein; der Pin "ICP1" ist ein Eingang, und Du benutzt Hardware-PWM. Der Pin "OC1A" ist hier der Richtige. Und wenn Du den Timer für die 'invertierte PWM' richtig programmiert hast, sollte dieses Signal am Pin "OC1B" erscheinen. Und an diese 2 Pins wird dann der Sender angeschlossen.
Florian K. schrieb: > Das wäre eine gute Idee allerdings habe ich bloss eine 4.5V > Stromversorgung (Batterie). Es wäre mir neu das das gehen würde. Doch, genau dafuer ist der MAX232 gedacht - Konvertierung von TTL/CMOS (0/5V) auf RS-232-Pegel (-/+10V). Der hat eine integrierte Ladungspumpe (charge pump) und einen Inverter, die aus 5V (oder auch 4.5V) 10V und -10V machen. Ist also ideal fuer Deine Situation mit +4.5V single supply. An externen Komponenten brauchst Du bloss 4 Kondensatoren (1 uF fuer MAX232, oder 0.1uF fuer MAX232A oder MAX202). Es gibt auch aehnliche Chips (z.B. MAX3323) die den Trick sogar mit 3.3v-Versorgung schaffen. Wolfgang
Die Idee mit dem MAX232 tönt in dem Fall sehr interessant. Ist eine solche Spannung für Ultraschallsender zu empfehlen? und kann der MAX232 mit dem Takt des PWM von 40khz mithalten?
Spezi schrieb: > Das kann nicht sein; der Pin "ICP1" ist ein Eingang, und Du benutzt > Hardware-PWM. Ja hast recht ich hab auf der falschen Seite des Mikrocontrollers gesucht. Ich benutze im Moment den OC2-Pin
Florian K. schrieb: > Spezi schrieb: > >> Das kann nicht sein; der Pin "ICP1" ist ein Eingang, und Du benutzt >> Hardware-PWM. > > Ja hast recht ich hab auf der falschen Seite des Mikrocontrollers > gesucht. Ich benutze im Moment den OC2-Pin Auch das kann nicht sein, da du den Timer 1 benutzt. OC2 ist aber vom Timer 2 Ausserdem willst du eigentlich 2 Signale die gegenphasig laufen. D.h. du solltest eigentlich vom Timer 1 die OC1A und OC1B benutzen. Den OC1A konfigurierst du dir auf normale Operation, den OC1B auf invertierte Operation. Dann hast du dein gegenphasiges Signal auf den beiden Pins. Aber wie wäre es, wenn du zunächst mal den Sender einfach nur zum laufen bringst? Deine Fragerei lässt nämlich darauf schliessen, dass du zu optimieren anfängst noch ehe du die Sache überhaupt verstanden hast.
Florian K. schrieb: > Die Idee mit dem MAX232 tönt in dem Fall sehr interessant. Ist eine > solche Spannung für Ultraschallsender zu empfehlen? und kann der MAX232 > mit dem Takt des PWM von 40khz mithalten? Ob Dein Sender die Spannung vertraegt musst Du selber anhand des Datenblattes herausfinden. Die Frequenz ist fuer den MAX232 jedenfalls kein Problem - der kann standardmaessig zumindest 115 kHz (= maximale Standard-Datenrate fuer RS-232). Eine Sache noch, nachdem dieser Chip als RS-232-Treibe gedacht ist - die Last sollte nicht zu niederohmig sein (Spec ist typischerweise ~5 kOhm). Wolfgang
@Karl Heinz Buchegger Ich kann bereits senden und empfangen. Allerdings kann ich es bisher noch nicht auswerten mit einem Mikrocontroller. Ich versuche die Auswertung via AC zu realisieren. Das Empfangen kann ich bisher bloss mit einem Messgerät feststellen, der Unterschied zwischen nicht-empfangen und empfangen ist mir aber ein bisschen zu klein. Danke vielmals für eure Hilfe.
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.