Erbitte Hilfe bei Timer3 init auf Atmega128 (avr-gcc)

Gast #2338022
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
#2338040
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.

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