Hallo,
was aehnliches habe ich gerade mit einem ATmega8 zu Testzwecken zusammengebrutzelt:
http://www.elektronik-web.de/pwm_test.jpg
Allerdings habe ich hier noch einen Infrarotempfaenger (TSOP1136) mit aufs Board gebastelt (Stichwort RC5). Mit ner Standart TV-Fernbedienung schalte ich eine Gluehlampe mit der "1" ein und mit der "2" wieder aus. Mit der "4" wird heller gedimmt und mit der "5" dunkler.
Auf PortB.0 wird hier das PWM-Signal erzeugt.
Ich benutze da ein simples PWM-Beispiel mit einem 8Bit Timer aus dem Claus Kuehnel Buch von Seite 159.
Da der Timer0 schon von der Infrarotgeschichte benutzt wird, habe ich hier den Timer 2 verwendet.
Die kleine Gluehlampe (12V) wird ueber einen BD243 geschaltet, der ueber nen 1K direkt an PortB.0 haengt.
Aus dem folgenden Code (ist sicherlich nicht optimal), musste Dir das wichtigste rausfischen.
Mit freundlichen GruessenCode:$regfile = "m8def.dat" $crystal = 12000000 Const True = 1 Const False = 0 Config Pinb.0 = Output Config Rc5 = Pinb.1 Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portd.0 , Rs = Portd.1 Config Lcd = 16 * 4 Config Timer2 = Timer , Prescale = 64 Ausgang Alias Portb.0 On Timer2 Timer2_isr Dim Hi As Byte Dim Lo As Byte Dim Phase As Bit Dim Address As Byte , Command As Byte Dim A As Integer Lo = 1 Phase = True Enable Timer2 Enable Interrupts Initlcd Cursor Off Cls Locate 1 , 1 Lcd "PWM-Test" Lo = 0 Hi = 0 A = 0 Do Getrc5(address , Command) If Address <> 255 Then Command = Command And &B01111111 Select Case Command Case 1 : A = 0 Case 2 : A = 255 Case 4 : A = A - 5 If A <= 0 Then A = 0 Case 5 : A = A + 5 If A >= 255 Then A = 255 End Select Lo = A Hi = 255 - Lo Locate 3 , 1 Lcd A ; " " End If Loop End Timer2_isr: If Phase = True Then Ausgang = 1 Timer2 = Lo Phase = False Else Ausgang = 0 Timer2 = Hi Phase = True End If Return
Digitali





Zitieren


Lesezeichen