Hallo,
ich verwende einen Attiny 45 (mit 1 Mhz getaktet) an einem 7805 mit
einem Piezo-Signalgeber am PIN 1 (Hardware-Pin 6).
Ich möchte nun einen halbwegs hörbaren Ton ausgeben, bin dabei aber auf
Probleme gestoßen.
1. Versuch: PWM mittels analogWrite(..) auf Pin 1. Ich las, dass die
PWM-Frequenz bei ca. 500Hz liegt, ich habe keinen solchen Ton gehört,
stattdessen klingt es etwas klapprig und ich messe mit dem Multimeter
60Hz (mag sein, dass das Multimeter ungenau ist, aber ca. Faktor 9 wird
der Fehler nicht groß sein..).
2. Versuch: PWM mit den nötigen Registern einstellen. Ich habe
angenommen, dass der PWM mit Timer 0 funktioniert, ich habe es aber
nicht genau im Datenblatt gefunden.
Folgendes habe ich gesetzt:
1 | TCCR0A |= (1 << COM0A1); // Clear on compare match
|
2 | TCCR0B |= (1 << CS02); // Prescaler 256
|
3 | TCNT0 = 0; //Startwert Counter
|
4 | OCR0A = 0; // Jeden Tick zählen
|
Damit komme ich auf einen PWM Takt von 3906 Hz, das erreiche ich aber
wieder nicht einmal annäherend.
3. Versuch: Timer interrupt mit Timer 1:
1 | cli();
|
2 | TCCR1 |= (1<<CS10) | (1<<CS11) | (1<<CS12) | (1<<CS13);
|
3 | TCNT1 = 0; /* Startwert Counter */
|
4 | OCR1A = 0x0000; /* Stopwert Counter */
|
5 | DDRB = 0xFF; /* Alle Pins als Ausgang */
|
6 | TIMSK |= (1<<TOIE1); /* Overflow Interrupt an */
|
7 | sei();
|
8 |
|
9 | // .......
|
10 |
|
11 | ISR(TIMER1_OVF_vect)
|
12 | {
|
13 | digitalWrite(summPin,0);
|
14 | digitalWrite(summPin,1);
|
15 | }
|
Damit ist der Prescaler bei ca. 16000, der zu erreichende Takt liegt bei
62,5Hz (nur Testweise), ich höre aber nur alle ca. 4 Sekunden einen
Tick!
Mache ich einen Denkfehler, oder läuft mein Attiny bei 4kHz..
Danke im Voraus, Adrian