Forum: Mikrocontroller und Digitale Elektronik PWM zur Tonausgabe auf einem Lautsprecher Mega8


von Martin K. (spyro07)


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

von Otto (Gast)


Lesenswert?

Hallo Martin,

und wo ist die Vektor-Tabelle und der Interrupt-Handler ?

Gruss Otto

von AVRFan (Gast)


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.

von Martin K. (spyro07)


Lesenswert?

Hallo,
also ich habe das Programm hier her:
http://www.mikrocontroller.net/articles/AVR_PWM

Da ist ja auch kein Interrupt-Handler. Ich hatte mir so gedacht, das mit 
PWM eine analoge Spannung erzeugt wird, womit ich den LS dann betreiben 
kann.
Ich habe es ausprobiert und es geht aber leider nicht.
Also reicht dieses Programm nicht allein zur Tonerzeugung?

mfg

von Paul Baumann (Gast)


Lesenswert?

Ich denke, daß Dein Programm in der Schleife "loop" kreiselt. Da ist 
aber keine "Musik" drin.

MfG Paul

von Martin K. (spyro07)


Lesenswert?

Nein, ich meine das durch das ständige ein  - und ausschalten von Port 
B, was ja eigentlich alleine durch den Timer passiert,  der Ton erzeugt 
wird.

mfg Martin

von Otto (Gast)


Lesenswert?

Hallo Martin,

> also ich habe das Programm hier her:

dann nimm es so, wie es ist ich sehe da einige Unterschiede.

Sobald Du "sei" verwendest, sollte eine Vektortabelle vorhanden sein.

Gruss Otto

von Hannes L. (hannes)


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.

...

von Martin K. (spyro07)


Lesenswert?

Hallo hannes,
mit Toggle-Modus meinst du wohl Pin einschalten, und dann den Timer 
immer den Pin umschalten lassen?

von spess53 (Gast)


Angehängte Dateien:

Lesenswert?

Hi

Vielleicht hilft dir das weiter (Anhang).

MfG Spess

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

Martin K. wrote:
> Hallo hannes,
> mit Toggle-Modus meinst du wohl Pin einschalten, und dann den Timer
> immer den Pin umschalten lassen?

Jou. Ein Beispiel ist im Anhang, allerdings für Mega48, dessen Timer 
etwas anders ausgestattet sind als beim Mega8.

...

von Martin K. (spyro07)


Lesenswert?

Hallo,
habe es jetzt hinbekommen.

mfg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.