40 kHz PWM med timer0 på atmega16?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
mmarks
Inlägg: 46
Blev medlem: 4 februari 2012, 16:00:14

40 kHz PWM med timer0 på atmega16?

Inlägg av mmarks »

Jag har hört att det går om man kör MCU:n på 8 kHz men jag kan inte få till det, någon här som vet hur man gör?
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: 40 kHz PWM med timer0 på atmega16?

Inlägg av snigelen »

Jag antar att du menar att du kör i 8MHz (inte kHz).

Nu är inte mega16 direkt modern, så det går inte att köra 40 kHz hårdvaru PWM med timer0 eller timer2. Däremot går det med timer1.

Du skulle behöva ha en PWM-mode där du kan sätta TOP till t.ex 8e6/40000 - 1 = 199 för att få 40kHz PWM.
mmarks
Inlägg: 46
Blev medlem: 4 februari 2012, 16:00:14

Re: 40 kHz PWM med timer0 på atmega16?

Inlägg av mmarks »

ja självklart 8 MHz, men vad bra, tack.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: 40 kHz PWM med timer0 på atmega16?

Inlägg av snigelen »

Du kan få 8e6/256 = 31.25 kHz.

Om du använder intern RC-oscillator, skulle man, i princip*, kunna skruva upp frekvensen till 10.24 MHz genom att ratta i OSCCAL. I så fall går det att få 40kHz PWM med både timer0 och 2. Eller använda en extern klocka med den frekvensen.

*Men det är inte rekomenderat om man skriver till EEPROM eller FLASH.
mmarks
Inlägg: 46
Blev medlem: 4 februari 2012, 16:00:14

Re: 40 kHz PWM med timer0 på atmega16?

Inlägg av mmarks »

Det kanske är av någon form av allmänintresse men jag upptäckte att det går faktiskt om man kör i CTC mode, är det någon som känner till eventuella nackdelar med att inte köra i fast PWM mode?
Raderna nedan gör tricket.


DDRB |= (1<<PINB3); // output on PB3/OC0
TCCR0 |= (1<<WGM01); // CTC mode
TCCR0 |= (1<<COM00); // toggle on compare match
OCR0 = 99; // => 40 kHz, se "modes of operation"
TCCR0 |= (1<<CS00); // start timer0, no prescaler
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: 40 kHz PWM med timer0 på atmega16?

Inlägg av snigelen »

Hade du frågat om man kan få ut en symmetrisk 40kHz fyrkansvåg med timer0 på en mega16 så hade jag svarat ja. Men du kan ju inte variera pulsbredden, så då kan man ju inte kalla det PWM. Så det är alltså det som skiljer mellan CTC- och PWM-mode.

Men det var ju bra att du fick till det du ville ha. :)
mmarks
Inlägg: 46
Blev medlem: 4 februari 2012, 16:00:14

Re: 40 kHz PWM med timer0 på atmega16?

Inlägg av mmarks »

Tja det är ju en 50 % PWM ;) men du har helt rätt, det var otydligt skrivet.
Skriv svar