PWM zur Tonausgabe auf einem Lautsprecher Mega8

OP #743096
Lesenswert?

Hallo,
also habe mal versucht ein Ton zu erzuegen, habe dazu das Programm (ist 
eigentlich fast vollständig kopiert).
Meiner Meinung nach müsste damit jetzt ein Ton mit der Frequenz von ca. 
4kHz erzeugt werden. Das wollte ich dann einen Audio-Ampfiler an einen 
Lautsprecher anschließen, stimmt da das Signal so?
1
.include   "m8def.inc"
2
 
3
   .def   temp      = r16
4
 
5
start:
6
   ldi    temp, LOW  (RAMEND)
7
   out    SPL, temp
8
   ldi    temp, HIGH (RAMEND)
9
   out    SPH, temp
10
 
11
 
12
   ldi    temp, 0xFF
13
   out    DDRB, temp                ;define PortB as output
14
 
15
   ldi    temp, 0xFF
16
   out    TCCR1A, temp              
17
 
18
   ldi    temp, 0x02
19
   out    TCCR1B, temp              ;set Prescaler 2
20
 
21
   sei
22
 
23
main:
24
   ldi    temp, 0x1
25
   out    OCR1AH, temp              ;set pwm pin 1 highbyte
26
 
27
   ldi    temp, 0x00
28
   out    OCR1AL, temp              ;set pwm pin 1 lowbyte
29
                            ;pin: PortB1 
30
   
31
loop: 
32
  rjmp   loop

mfg
Gast #743245
Lesenswert?

1
  ldi    temp, 0xFF
2
  out    TCCR1A, temp              
3
 
4
  ldi    temp, 0x02
5
  out    TCCR1B, temp              ;set Prescaler 2

Meinst Du, ich fummel jetzt anhand der I/O-Registerliste raus, ob mit 
"0x02" in TCCR1B auch die richtigen Bits eingeschaltet werden?  Mann, 
schreib das so (auch in Deinem eigenen Interesse!):
1
  ldi   t,  0<<COM1A1 | 1<<COM1A0 | 0<<COM1B1 | 0<<COM1B0 | 0<<FOC1A | 0<<FOC1B | 0<<WGM11 | 0<<WGM10
2
  out   TCCR1A, t         
3

4
  ldi   t, 0<<ICNC1 | 0<<ICES1 | 0 | 0<<WGM13 | 1<<WGM12 | 1<<CS12 | 0<<CS11 | 0<<CS10
5
  out   TCCR1B, t

Für gesetzte Bits schreibst Du eine Eins an die passende Stelle, für 
gelöschte ein Null.
#743296
Lesenswert?

Die Timer des Mega8 sind etwas langsam, um die PWM als DAC zu nutzen, da 
braucht es schon einen Timer mit PLL wie im Tiny15 oder Tiny25/45/85.

Falls Du nur Rechteck erzeugen willst, dann brauchst Du keine PWM, 
sondern musst den Timer im Toggle-Mode betreiben. Denn mittels PWM 
erzeugst Du ja eine feste Frequenz mit variablem Tastgrad.

Ich könnte Dir zwar ein paar Links nennen, die nützen Dir aber nichts, 
da die Programme voraussetzen, dass Du Dich mit Interrupt-Programmierung 
auskennst.

...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren