Ein PWM Signal wird häufig gebraucht um die Digitale Signale in Analoge zu wandeln.

Ich möchte dies mit einem Atmega16 und einem Bascom Programm vereinfacht zeigen.
Um mit dem einem AVR ein PWM Signal zu erzeugen ist wieder nicht viel nötig.

Hier nur eine sehr kurze Beschreibung mit Quellcode. Eine sehr gute und ausführliche Beschreibung gibt es hier.

Angeschlossen wird an den Pins 18 (PD4) und 19 (PD5).

Den Timer1 verwende ich im PWM Mode, mit dem  Teiler 256, im 8Bit Mode.

Das bedeutet bei meinem 8Mhz Quarz arbeitet das PWM Signal mit einer Frequenz 61Hz

8000000Hz : 256=31250 (Teiler 256)

31250 : 512 =61.04 hz (8bit)

Bascom Code:

$regfile = "m16def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64
$crystal = 8000000
$baud = 9600
'$sim

'PWM timer
config timer1 = PWM ,prescale=256,pwm=8,compare a pwm =clear down , compare b pwm=clear down
enable  INTERRUPTS

dim x as byte

do
for x= 1 to 255
pwm1a = x      'Portd5
pwm1b =100     'Portd4
waitms 100
next

Loop

  • Das Signal auf PD5 steigt lansgam an und fällt dann wieder ab
  • Das Signal auf PD4 bleibt konstant.