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 

Hitri 10bitni PWM za Mego

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
blay44
Član
Član



Pridružen-a: Ned 19 Dec 2010 18:17
Prispevkov: 603
Aktiv.: 3.73

PrispevekObjavljeno: Ned Jan 05, 2020 6:27 pm    Naslov sporočila:  Hitri 10bitni PWM za Mego Odgovori s citatom

Prevečkrat že razlagam okoli, pa bi izkoristil forum za tablo.
Zdej, z Arduinom nism glih domač. Pač imam raje C ali asm, zato kode glih ne ocenjujte.
Gre samo za način kako nastaviti timerje 1,3,4,5.
Timer0 raje ne uporabljajte, ker ga uporablja sam Arduino.
Paziti je še potrebno, katere zunanje knjižnice uporabljate(recimo servo.h) in le te uporabljajo naše timerje.


Koda:

#include "pins_arduino.h"
#include "wiring_private.h"


//mega2560 PWM z 10bitno rezolucijo na 15kHz
int brisi = 7; // postavitev tccrxb na registea na 0
int myPrescaler = 1;  //delitelj clocka je brez deljenja
int sprejem = 0;
int pinPWM = 11; //OC1A tomerja1 izhodni pin

void setup()
{
 
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(pinPWM, OUTPUT);
  Serial.begin(9600);
  TCCR1B &= ~brisi;   //timer1
  TCCR1B |= myPrescaler;  //timer1
  //nastavitev timer1 na 10bit rezulucije, Fpwm= 15,63kHz
  //za pin OC1A/PB5/arduino pin11
  // za 8 bitno rezolucijo ni potrebno tega nastavljati
  sbi(TCCR1A, COM1A1);
  sbi(TCCR1A, WGM10); //za 9 bit mora WGM1 = 0 in ga ne postavljamo
  sbi(TCCR1A, WGM11);
  sbi(TCCR1B, WGM12);
}

void loop()
{
 //kontrola pwmja preko serijskega porta0: 9600,n,1
if (Serial.available() > 0)
{
    digitalWrite(LED_BUILTIN, HIGH); //prizgi lucko
    sprejem = Serial.parseInt();
    //analogWrite(pinPWM, sprejem); za 8bitno rezolucijo in brez glave
   
     OCR1AH = highByte(sprejem);
     OCR1AL = lowByte(sprejem);

     Serial.print(F("Sprejel sem: "));
     Serial.println(sprejem);
     digitalWrite(LED_BUILTIN, LOW);  //ugasni lucko   
}
//nekaj dalje 
}
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Č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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group