www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 
Sponsored by SiOL

Attiny45 - frekvenca PWM

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
jozzze2000
Član
Član



Pridružen-a: Pet 25 Nov 2011 8:36
Prispevkov: 162
Aktiv.: 1.66
Kraj: Novo mesto

PrispevekObjavljeno: Pet Dec 23, 2016 9:43 pm    Naslov sporočila:  Attiny45 - frekvenca PWM Odgovori s citatom

Na Attiny45 želim narediti PWM s frekvenco cca 32kHz na 8MHz frekvenci CPU.

Spodnja koda naj bi dala ven tako frekvenco, v realnosti je pa cca 4kHz.
Kaj je narobe?

Koda:
#define F_CPU 8000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdint.h>
#include <stdbool.h>
#include <math.h>


void PortInit()
{
   DDRB  = 0b00000001;   // 1 -> output port;   //  0 -> input port
   PORTB = 0b00001000; // pull-up
}

void initPWM ()
{

      TCCR0A =
      (1 << COM0A1) |    // set inverting mode, to be able to achieve 0 value
      (1 << COM0A0) |    //
      (1 << WGM01)  |    // fast PWM mode
      (1 << WGM00);

      TCCR0B = (1 << CS00);   // prescaler = 8 --> CS01,
               // prescaler = 0 --> CS00
   
}

int main ()
{
   PortInit();
   initPWM ();
   while (1)
   {
      OCR0A = 128;
      _delay_ms(5000);
   }
}
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jan
Član
Član



Pridružen-a: Sob 10 Jun 2006 14:19
Prispevkov: 286
Aktiv.: 1.75
Kraj: Dolenjska

PrispevekObjavljeno: Pet Dec 23, 2016 11:45 pm    Naslov sporočila:   Odgovori s citatom

Verjetno imaš v fuse bitih nastavljen delilnik glavne ure na 8,
tako da v resnici nimaš 8 MHz, ampak 1 MHz clock.

Jan
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
jozzze2000
Član
Član



Pridružen-a: Pet 25 Nov 2011 8:36
Prispevkov: 162
Aktiv.: 1.66
Kraj: Novo mesto

PrispevekObjavljeno: Sob Dec 24, 2016 11:01 am    Naslov sporočila:   Odgovori s citatom

Sem preveril, pa sta fuse bita nastavljena na privzeti vrednosti, ki naj bi bila 8MHz Sad

Low Fuse 0x62
High Fuse 0xDF
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
jozzze2000
Član
Član



Pridružen-a: Pet 25 Nov 2011 8:36
Prispevkov: 162
Aktiv.: 1.66
Kraj: Novo mesto

PrispevekObjavljeno: Sob Dec 24, 2016 11:04 am    Naslov sporočila:   Odgovori s citatom

Sorry, sem mislil da privzeti biti pomenijo 8MHz...potem pa vidim CKDIV8
Divide clock by 8 obkljukan Rolling Eyes

Sem nastavil na

Low Fuse 0xE2
High Fuse 0xDF

pa zadeva špila Dancing

Najlepša hvala za pomoč.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 207 dni


Powered by phpBB © 2001, 2005 phpBB Group