Forum: Mikrocontroller und Digitale Elektronik Erbitte Hilfe bei Timer3 init auf Atmega128 (avr-gcc)


von Chris (Gast)


Lesenswert?

Hi!

Ich möchte an PinE5 eines Atmega128 einen Piezo-Schallwandler betreiben 
und dazu über Timer3 (OC3C) ein Rechtecksignal mit veränderbarer 
Frequenz ausgeben. Der Piezo hängt zwischen 5V und PinE3. An PinE3 hängt 
ein Oszilloskop.

 Hier mein Code zum Testen:
1
DDRE |= (1<<DDE5);
2
3
TCCR3A |= (1<<COM3C1);
4
  
5
TCCR3B |= (1<<WGM33);
6
TCCR3B |= (1<<WGM32);
7
TCCR3A |= (1<<WGM31);
8
TCCR3A |= (1<<WGM30);
9
  
10
//TCCR3B |= (1<<CS30);
11
//TCCR3B |= (1<<CS31);
12
TCCR3B |= (1<<CS32);
13
  
14
sei();
15
  
16
for (uint16_t i = 0; i<0xffff; i++) {
17
   OCR3C = i;
18
   _delay_ms(1);
19
}  }

Erwartet hätte ich jetzt, dass dort ein Rechtecksignal anliegt. 
Stattdessen messe ich einen high-Pegel (und höre beim Einschalten 
entsprechend nur ein "Plop". Was habe ich falsch gemacht?

Gruß,
Chris

von Karl H. (kbuchegg)


Lesenswert?

> TCCR3B |= (1<<WGM33);
> TCCR3B |= (1<<WGM32);
> TCCR3A |= (1<<WGM31);
> TCCR3A |= (1<<WGM30);


Wieso ein PWM Modus?

> for (uint16_t i = 0; i<0xffff; i++) {
>    OCR3C = i;

C? Wieso C?   Beim oben eingestellten Modus Fast-PWM sorgt OCR3A für die 
Veränderung des TOP Wertes und damit der PWM-Frequenz

Mit OCR3A veränderst du die Frequenz und OCR3C (wenn dein Schallwandler 
an diesem Ausgang hängt) muss dann die Hälfte von OCR3A haben, damit ein 
Rechteck entsteht.



Hä? Was hast du denn da bei den Com-Bits eingestellt?
Das ist ein Toggle von OCnA, also kommt dein Rechteck gar nicht an OC3C 
raus, sondern an OC3A


Also: vergiss OCR3C. Häng deine Tröte an OC3A und verändere das OCR3A 
Register.

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.