Hallo, ich versuch krampfhaft ein PWM Signal an einem Ausgangspin meines Controllers zu erzeugen. Ich verwende einen AT89C5131 von Atmel. Wie ich die einzelnen Pins anspreche das sie 1/0 sind habe ich rausgefunden. Leider sind meine Programmierkenntnisse überschaubar. Ich möchte dieses Signal nutzen um einen Servo anzusteuern aber das ist noch Zukunftsmusik. Zuerst möchte ich einen Pin als Pwm Pin festlegen und ein Signal erzeugen das ich messen kann. Mir fehlt leider die Idee wie der C51 Syntax dafür aussehen könnte. Für eure Hilfe wäre ich dankbar.....
Moin, dürfte bei der Kiste das "PCA" programmable counter array erledigen. Wenn du die Pins schon toggeln kannst, ist dir das setzen von Registern bekannt. Such dir in der Doku den Teil über die PCA und fütter die Register, insbersondere CCPAM, um die Zähler in den PWM Modus zu bringen. Die Ausgangspins sind allerdings nicht frei wählbar, jeder Zähler hat einen festen Ausgang: CEXn, wobei n von 0 bis 4 geht. -- SJ
Hi, danke erstmal auch wenn mich deine Antwort erstmal überfordert hat. Meinst du mit füllen der Register, dass ich Diese dann im Quellcode über Interrupts aufrufen muss oder bin ich da komplett auf dem Holzweg?!
Step Han schrieb: > Hi, > > danke erstmal auch wenn mich deine Antwort erstmal überfordert hat. > > Meinst du mit füllen der Register, dass ich Diese dann im Quellcode über > Interrupts aufrufen muss oder bin ich da komplett auf dem Holzweg?! Na ja. du wirst ja wohl schon irgendwas mit deinem µC gemacht haben, oder nicht? zb eine Popel-LED eingeschaltet oder ausgeschaltet. einen Pin abgefragt. Irgendwas. Dazu musstest du Werte in ein Register schreiben, bzw. ein einzelnes Bit gezielt in einem Register auf 1 oder 0 setzen. Und hier sind das auch nur Register. In dem Fall dann eben Konfigurationsregister. Du schreibst in einem bestimmten Register ein bestimmtes Bit auf 1 und das bewirkt dann etwas. Was das bewirkt steht im Datenblatt, in dem du die Beschreibung aller für eine bestimmte Funktionalität wichtigen Register findest. Dort wählst du die Funktionalität aus, die du haben willst, stellst fest welche Bits in welchem Register zu setzen sind und ... dann setzt du sie einfach in deinem Programm. genauso wie du zum Ein/AUsschalten einer LED eben wieder anderer Bits in einem anderen Register gesetzt hast.
Danke.... das heisst also wenn im Datenblatt steht "PWM(CCAPMn.1) enables the pulse with modulation mode" dann muss ich dieses Register auf "1" setzen um es anzusprechen....?? Wie lautet denn dann der Befehl im Quellcode? Mit welchen Befehlen lege ich die Zeiten im PWM-Mode fest?? Benötige ich grundsätzlich keine Interrupts um PWM auszugeben?? BZW. geht das alles im Hauptprogramm.....
Moin, wenn du Fragen zum "Quellecode" stellst, solltest du fairerweise zumindest die Sprache und das ggf. den verwendeten Compiler angeben. Ansonsten funktioniert das genauso wie auch das beschreiben der Register der I/O Pins. Warum bist du eigentlich so auf Interrupts fixiert? Die PCA ist eine eigene Einheit im Controller. Wird über die Register parametriet, sprich eingestellt, und KANN auch Interrupts erzeugen. Nur wozu? Die Zeiten werden über das Compare Register gesteurt; die Abbildung ist da recht hilfreich. -- SJ
Sorry, ich verwende RIDE 7 und die Sprache ist C51.... ich bin keineswegs auf Interrups fixiert.... Ich dachte man kann die Register nur so ansprechen... Kann mir bitte jemand ein kleines Beispiel zeigen wie der Syntax zum Aufruf eines Gegisters aussieht.... Ich habe folgende Angaben aus dem Datenblatt: PCA Time/counter Module 4 CCAPMN.1 enables PWM mode CEX nur weis ich nicht wie ich etwas mit diesen Angaben anfange....
Moin, das ist leider sehr davon abhängig, wie das dein Compiler macht, bzw. wie die Libraries gestaltet sind. Gegenfrage: wie hast du denn die Ports geschaltet? Normalerweise sind das auch Register und genauso lassen sich auch die Steuerregister der PCA setzen. Aus dem Fragment das du angegeben hast läßt sich kaum etwas ableiten, die mittlere Zeile bedeutet halt, das im Registr CCAPMN das 1te. bit gesetzt werden muss um das entprechenden Modul in den PWM Modus zu versetzen. CEX ist der Ausgang eines der Module. (Wenn ich das Sheet so grob überfliege) -- SJ
Hi, danke für die Antwort... ich hab den Quellcode jetzt grad nicht zur Hand aber ich habe: #define LEDPort P1 // P1 ist eine LED Reihe mit den LEDs P1.....P7, ist im .h der Schule so festgelegt P1 = 0x00 // alle LEDs aus dann: jeweils einzelene LEDs in einer while Schleife auf 1 bzw 0 gesetzt. Den Wert der LEDs kann dann durch einen Befehl(weis ich grad nicht) an die Pins übergeben werden, die in Reihe zu den LEDs liegen.....
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.