' PULS WEITEN MODULATION (PWM) ' Sprache: Bascom AVR-Basic (Demoversion 1.11.6.2) ' Getestet mit 8 MHz auf 90S2333.Ausgabewert wird dann ca. 121 mal pro Sekunde ' erneuert. ' 3 Kanäle an Port B0, B1, B2 ' Bewust einfaches Programm zur Erklärung wie eine Software PWM funktionieren kann. ' Timerinterupt, der in gleichmäßigen Abständen ' das Hauptprogramm unterbricht und ein Unterprogramm (Interupthandler) aufruft ' das die Ausgänge ein oder ausschaltet. Im Mittel ergibt sich dann der gewünschte ' Ausgabewert (Normale Multimeter sind langsam genug d.h. der Ausgabewert kann ' für Testzwecke direkt am Pin gemessen werden) ' Sept. 2002 Bernhard T. 'Timer konfigurieren, Vorteiler auf 1 ist gut fürs Simulieren (evtl. anpassen, dann aber ausgang mit R-C Tiefpass) Config Timer0 = Timer , Prescale = 1 'Definiere den Interrupthandler On Ovf0 Tim0_isr 'Wichtig: Config Pinb.0 = Output 'Port B = Ausgang Config Pinb.1 = Output Config Pinb.2 = Output Enable Timer0 'timer einschalten Enable Interrupts 'interrupts einschalten Dim R As Byte ' In diese Variablen muss man Dim G As Byte ' im Hauptprogram die gewünschten Dim B As Byte ' Ausgabewerte laden Dim Z As Word 'Byte ' Zähler Dim Ri As Byte ' Hilfsregister Dim Gi As Byte Dim Bi As Byte Z = 0 Do 'your program goes here 'Bsp.: 'R = 51 ' bei Ub= 5V ca. 1Volt 'G = 102 ' ca. 2V 'B = 1 ' 5V/256 = 0.01953125 V Soll R = 255 G = 255 B = 255 Schleife: Goto Schleife Loop 'Interupthandler, wird bei jedem Timerüberlauf(bei 8 MHz und Vorteiler=1 alle 32 µSec.) 'aufgerufen: Tim0_isr: If Z = 0 Then 'Gewünschte Ausgabewerte an Ri = R 'Hilfsregister übergeben Gi = G Bi = B Z = 255 End If Z = Z - 1 If Ri > 0 Then 'R > Port B.0 Portb.0 = 1 'bei R = 51 wird hier Else 'Port B.0 51 mal auf 1 Portb.0 = 0 'und 205 mal auf 0 geschaltet End If 'das ergibt bei 5V Ub im Mittel Ri = Ri - 1 ' ca. 1 V If Ri = 255 Then Ri = 0 If Gi > 0 Then 'G > Port B.1 Portb.1 = 1 Else Portb.1 = 0 End If Gi = Gi - 1 If Gi = 255 Then Gi = 0 If Bi > 0 Then Portb.2 = 1 'B > Port B.2 Else Portb.2 = 0 End If Bi = Bi - 1 If Bi = 255 Then Bi = 0 ' Hier könnten eigentlich noch weitere Kanäle eingefügt werden Return