PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM auf pin schalten



molleonair
09.07.2007, 21:29
Hallo habe folgendes mini prog um pwm zu testen
um die funktion zu prüfen will ich eine LED angeschlossen an PINd.7
synchron zum OC1a steuern

PWM -Ausgang geht ,LED -Port hat 0V

WARUM????


$regfile = "m168def.dat" ' specify the used micro
$crystal = 16000000 ' used crystal frequency
$baud = 9600 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 32 ' default use 10 for the SW stack
$framesize = 64 ' default use 40 for the frame space

Config Pind.7 = Output
Config Pind.6 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8

Compare1a = 150
Compare1b = 150

Do
Portd.7 = Portb.1
Portd.6 = Portb.2
Loop

jo_robot
09.07.2007, 21:49
also ich hab keine ahnung und übernehm kein gewehr ;) das des richtig ist was ich sag.
aber Portx=portx hört sich für mich ziemlich falsch an. Ich weis nicht genau was du damit sagen möchtest aber da fehlt sicher noch irgendein parameter. Ich weis aber nich was für einer.

irgendetwas in der Art: ist aber so wie ich es geschrieben hab 100pro falsch


portx.level=porty.level


Wei

molleonair
09.07.2007, 21:55
na nix für ungut kleiner ... aberdes ist wirklich 100pro falsch

klingt led1=led2 auch falsch ??

Torsten_G
09.07.2007, 22:48
Hi,

versuchs doch mal mit

Portd.7 = Pinb.1
Portd.6 = Pinb.2

Grüße

Torsten

jo_robot
09.07.2007, 22:50
sry aber was soll den das heißen Porta = Portb

da muss doch irgend ne wertig keit sein?

ich kann ja nicht sagen das das die gleichen sind. weil ich hab ja immer noch 2 verschiedene!

Torsten_G
09.07.2007, 22:55
Jo, Du bist ein wenig auf dem Holzweg.

Portx ist 1 Byte breit und somit eine Wertigkeit von 0...255 Und natürlich kann man ein Byte in ein anderes schreiben, da bilden auch die Port´s keine Ausnahme.

Will man auf einzelne Bit´s zugreifen, macht man das üblicherweise mit Portx.y beim Setzen und Pinx.y beim Abfragen, wobei y dann - entsprechend dem gewünschten Bit - von 0...7 geht.

Die Port´s werden aus Bascom heraus mit ihrem Buchstaben angesprochen - also Porta, Portb, Portc... -> siehe Datenblatt des µC´s

Etwas klarer jetzt?

Grüße

Torsten

Ruppi
10.07.2007, 09:20
Hi Molleonair,

Hardware-PWM lässt sich natürlich nicht auf einen beliebigen Pin schalten, so kann das also nicht klappen. Du könntest eine völlig andere Lösung wählen, indem Du den Timer nicht für PWM, sondern als Timer mit fester Frequenz nutzt. Bei jedem Interrupt könntest Du so die PWM "zu Fuss" erzeugen. Das funktioniert dann eben mit jedem Pin und ist schnell genug.

Ist vielleicht eine Alternative für Dich....

jo_robot
10.07.2007, 11:46
Ok^^
Tut mir leid. Hab halt noch keine ahnung von bascom :(

aber ich lasse mich gerne eines besseren belehren

molleonair
10.07.2007, 17:01
@ruppi da hab ich auch schon drübernachgedacht....
löst denn compare im PWM modus ein timer interupt aus dann könte ich den pin im timerint toggeln.

wenn ich den timer als 8bit counter nutz müßt ich dann in der timerint das compare selbst machen mit einer 8bit schleifenvariable aber der timer int wird ja dann nur alle volle 8bit ausgelöst also müßt ich dann quasi den prescaler auf 1 Schalten um die gleiche PWM-Frequenz zu haben .