Elektronika.lt
 2024 m. gruodžio 24 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

Elektronika.lt portalo forumas

Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo. Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.

Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius, kurie nesilaiko forumo taisyklių. Pastebėjus nusižengimus, prašome pranešti.

Dabar yra 2024 12 24, 22:44. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » ATMEGA8 PWM:)
Jūs negalite rašyti naujų pranešimų į šį forumą
Jūs negalite atsakinėti į pranešimus šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite ištrinti savo pranešimų šiame forume
Jūs negalite dalyvauti apklausose šiame forume
 
  
Puslapis 12
Pereiti prie 1, 2  Toliau
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 15, 20:58 Pranešti apie taisyklių pažeidimą Atsakyti su citata
edvintas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Kodas:
#include <avr/io.h>
#include <avr/iom8.h>
#include <avr/delay.h>

char pwm;
int i;

int main()
{
  TCCR1A = 0xFF;
  OCR1A = 127;
  while(1)
  {
    pwm++;
    for(i=0;i<10000;i++);
   OCR1A = pwm;
  }
  return 0;
}

niekaip nepavyksta paleist Timer1 PWM'o ką reikia rašyt į tą TCCR1A = ???; Ar galima tą PWM paleist ant betkurios kojos ar tik ant 15PIN'o - OC1A?
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 15, 21:13 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Vytautasr
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
Gal datasheet'ą paskaityk Smile
TCCR1A = (1 << WGM10)|(1 << WGM12)|(1 << COM1A1)|(1 << COM1A0)|(1 << COM1B1)|(1 << COM1B0);
Turėtų veikt.

Citata:
Ar galima tą PWM paleist ant betkurios kojos ar tik ant 15PIN'o - OC1A?

Tik ant 15. Nebent darysi Softwarinš PWM.

_________________
Teorija - kai viską žinai, bet niekas neveikia,
Praktika - kai viskas veikia, bet nežinai kodėl.

Skype : VytautasRX
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 15, 21:31 Pranešti apie taisyklių pažeidimą Atsakyti su citata
edvintas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Kodas:
#include <avr/io.h>
#include <avr/iom8.h>
#include <avr/delay.h>

char pwm;
int i;

int main()
{
  DDRB = 0b00000110;
  PORTB = 0b00000110;
  TCCR1A = (1<<WGM10)|(1<<COM1A1)|(1<<COM1B1);
  TCCR1B = 0x03; // prescaler 1/64
  OCR1A = 0;
  OCR1B = 255;
  while(1)
  {
    pwm++;
    for(i=0;i<10000;i++);
   OCR1A = pwm;
   OCR1B = 255-pwm;
  }
  return 0;
}

valio gavosi kažkas Smile
pasinaudojau tavo patarimu paskaityt datasheet'ą ir visai beveik turbut supratau kame čia kampas Rolling Eyes

tik vat pagal ką dabar PWM dažnį suskaičiuot?
f=16000000/2*64*TOP
kas tas top? Smile
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 15, 21:50 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Vytautasr
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
TOP tai taspats kas PWM plotis, pvz. 8bitų pwm top yra 256, 9 bitų top 512, 10 bitų 1024.

_________________
Teorija - kai viską žinai, bet niekas neveikia,
Praktika - kai viskas veikia, bet nežinai kodėl.

Skype : VytautasRX
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 15, 21:52 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Vytautasr
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
Citata:
f=16000000/2*64*TOP


Teisingiau būtų: f=16000000/(2*64*TOP) arba f=16000000/2/64/TOP

_________________
Teorija - kai viską žinai, bet niekas neveikia,
Praktika - kai viskas veikia, bet nežinai kodėl.

Skype : VytautasRX
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 15, 22:25 Pranešti apie taisyklių pažeidimą Atsakyti su citata
edvintas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
A dabar supratau, radau lentelę datasheet'e ten surašyti PWM nustatymai ir top reikšmės... Smile
tai čia gaunas 8bitų PWM top bus 255 o dažnis 488Hz Rolling Eyes
488=16000000/(2*64*255)
blin bet tam hardwarinem pwm'e labai jau mažas pasirinkimas dažnių Confused
negalima pvz 66666Hz Rolling Eyes

čia nelabai į temą bet idomu ar AVR'ai turi tokį daiktą kaip thread's(kaip normaliuose PC)?
nu vnz kad kelias funkcijas vykdyti vienu metu? Smile
skaičiau, kad kažką ten su interuptais reik daryt, bet interuptai pertraukia pagrindinį procesą.. ir vistiek gaunasi, kad vykdomos funkcijos tik esančios interupte... Confused

ir dar vienas klausimas dėl char tipo kintamųjų..
Kodas:
 
  cahr pwm;
  ...
  while(1)
  {
    while(pwm < 255)
   {
     pwm++;
      for(i=0;i<10000;i++);
     OCR1A = pwm;
     OCR1B = 255-pwm;
    }
   while(pwm > 0)
   {
     pwm--;
      for(i=0;i<10000;i++);
     OCR1A = pwm;
     OCR1B = 127-pwm;
    }
  }

kompiliatorius prisikabino, kad while(pwm < 255)
visada true, nesupratau kame čia kampas, parašiau 127 viskas ok..
tai avr'uose char tipo kintamieji 7 bitų ar čia nuo kompiliatoriaus(WinAVR+AvrStudio4) priklauso? Rolling Eyes
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 15, 22:48 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Vytautasr
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
Citata:
A dabar supratau, radau lentelę datasheet'e ten surašyti PWM nustatymai ir top reikšmės...
tai čia gaunas 8bitų PWM top bus 255 o dažnis 488Hz
488=16000000/(2*64*255)
blin bet tam hardwarinem pwm'e labai jau mažas pasirinkimas dažnių
negalima pvz 66666Hz

Taip pasirinkimas mažas, iš bėdos galima kombinuotis su išorinio kvarco dažniu, dalikliu, PWM pločiu.

Citata:
čia nelabai į temą bet idomu ar AVR'ai turi tokį daiktą kaip thread's(kaip normaliuose PC)?
nu vnz kad kelias funkcijas vykdyti vienu metu?
skaičiau, kad kažką ten su interuptais reik daryt, bet interuptai pertraukia pagrindinį procesą.. ir vistiek gaunasi, kad vykdomos funkcijos tik esančios interupte...

Šituo klausimu dėja nepadėsiu Neutral

Citata:
kompiliatorius prisikabino, kad while(pwm < 255)
visada true, nesupratau kame čia kampas, parašiau 127 viskas ok..
tai avr'uose char tipo kintamieji 7 bitų ar čia nuo kompiliatoriaus(WinAVR+AvrStudio4) priklauso?


Aš pats tik su IAR programuoju, tai nzn, o jei char'ą pakeisi int'u vistiek taspats?

_________________
Teorija - kai viską žinai, bet niekas neveikia,
Praktika - kai viskas veikia, bet nežinai kodėl.

Skype : VytautasRX
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 15, 23:38 Pranešti apie taisyklių pažeidimą Atsakyti su citata
edvintas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
su int viskas gerai, bet char mažiau vietos užima Smile
ir šiaip gera char savybė, kad jeigu viršija 127 vėl skaičiuojasi nuo 0... Rolling Eyes
o integer'is nugrybauja kažkur į minuso pusę jeigu viršija MAX_INT ribą.. Confused
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 16, 00:48 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Digix
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
del keliiu programu vienu metu vienintelis budas ta padaryti sudeti kelis procesorius, PC negali sito daryti geriau nei atmega.

windows naudoja taimeri ir pertraukimus programu perjunginejimui. vienu metu programos nevykdomos.


pertaukimai labai neblogai leidzia padaryti viska ko tokiais atvejais reikia,
tiesiog padaryk interupto funkcija trumpa, kad nerukdytu likusiai programai.

arka pasinaudok kokia nors RTOS sistema, yra paruostu C moduliu kurie ledzia vykdyti kelias programas beveik vienu metu.


del int jei nenori nesamoniu, naudok unsigned int ir unsigned char o tai pasitaiko nesuprantamu kvailysciu su programa
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 16, 09:42 Pranešti apie taisyklių pažeidimą Atsakyti su citata
edvintas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
nu aišku tada, bet niekur nerandu kaip padaryt interrupt on port change? kad paspaudus mygtuką būtų vykdomas interrupt'as...
ar atmega neturi tokios funkcijos?
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 16, 10:07 Pranešti apie taisyklių pažeidimą Atsakyti su citata
augyy
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Citata:

nu aišku tada, bet niekur nerandu kaip padaryt interrupt on port change? kad paspaudus mygtuką būtų vykdomas interrupt'as...
ar atmega neturi tokios funkcijos?


Turi. Žiūrėk išorinius interruptus int0 ir int1. Aišku mygtukai turės būti ant atitinkamų kojų..
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 17, 16:58 Pranešti apie taisyklių pažeidimą Atsakyti su citata
edvintas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Kodas:
#include <avr/io.h>
#include <avr/iom8.h>
#include <avr/delay.h> //f=16000000/(N*(1+TOP)) 31250Hz

int pwm = 0;

int main()
{
  DDRB      = 0b00001110;
  DDRD      = 0b00000011;
  ///Fast PWM TOP=ICR1///
  TCCR1A    = 0xA2;//COM1A1; COM1B1; WGM11;
  TCCR1B    = 0x1A;//WGM13; WGM12; CS12; CS10;
  /////////////////////// N = 0x1D-1024; 0x1C-256; 0x1B-64; 0x1A-8; 0x19-1;
  ICR1      = 63;
  OCR1A      = 12;
  OCR1B      = 64;
  while(1)
  {
    OCR1A = pwm;
   OCR1B = ICR1-pwm;
   if((PORTD & 0b00000001) == 0b00000001) pwm++;
   if((PORTD & 0b00000010) == 0b00000010) pwm--;
  }
  return 0;
}

kilo keli kalusimai dėl pwm Smile
ar aš teisingai suskaičiavau dažnį 31250Hz?
ką daro tas prescaleris, jeigu top reikšmė priklauso nuo ICR1?
tarkim top bus 16, OCR1A bus 8 tai tada gausis 50% pwm'as, ar ne?
kam dar tas prescaleris? Confused

ir kodėl blin man mygtukai neveikia? Rolling Eyes
ačiū Smile
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 17, 20:12 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Digix
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
pwm taip skaiciuojamas

clk / prescalerio/ pwm taimerio maksimumo

aisku prescaler reikia daryti minimalu kad gauti didziausia greti,

jei taimerio top paimsi 16 tada turesi 1/16 tiksluma jei ocr 8 tada bus 8/16


mygtukai su interuptais gali buti problema, on change tau neveiks, reikes kazko protingesnio. sakykim padarom interupta on low, tada kai mygtukas paspaustas pakeiciame i on high.

as tai taip nip peles ta optini atstumo matuokli jungau, isejo kaip potenciometras. tik skaitmeneinis
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 17, 21:57 Pranešti apie taisyklių pažeidimą Atsakyti su citata
CodeC
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
Digix rašo:
as tai taip nip peles ta optini atstumo matuokli jungau, isejo kaip potenciometras. tik skaitmeneinis


biski sunkiai suprast eina - is peles padarei atstumo matuokli? ar kaip cia?
 ATMEGA8 PWM:)
PranešimasParašytas: 2006 07 17, 22:09 Pranešti apie taisyklių pažeidimą Atsakyti su citata
edvintas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
kažką ne taip supratai, potenciometras - liaudiškai tariant reguliatorius Smile
skaitmeninis reguliatorius Rolling Eyes

bet nelabai suprantu ką tas prescaleris veikia?
TOP - 16, OCR - pulso plotis, prescaleris žingsnių skaičius ar kaip?

ta formulė iš datsheet'o f=clk/(N*(1+TOP)) tai iš čia man atrodo, kad prescaleris yra tai kiek kartų timeris turi prasisukti nuo 0 iki TOP? teisingai supratau?
tarkim TOP yra 2 preskaleris 32 tai PWM'as turės 64 žingsnius...?
bet čia kažkas nelogiška Confused Rolling Eyes

Kad žiūriu atmega8 interuptus turi tik ant 4 ir 5 kojos Confused

nu bet tas variantas kur parašiau tai be interuptų tiesiog kai sujungtas pinas su GND turi būti 1 if((PORTD & 0b00000001) == 0b00000001) pwm++; bet kažkodėl tas if'as nelabai veikia Rolling Eyes
Pradėti naują temą  Atsakyti į pranešimą Pereiti prie 1, 2  Toliau
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

Sveiki ir ekologiški maisto produktai

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

Technologijos.lt

Buitinė technika ir elektronika internetu žemos kainos – Zuza.lt

www.esaugumas.lt – apsaugok savo kompiuterį!

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

Draugiškas internetas

FS25 Tractors
Farming Simulator 25 Mods, FS25 Maps, FS25 Trucks
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS25 Mods
VAT calculator
VAT number check, What is VAT, How much is VAT
LEGO
Mänguköök, mudelautod, nukuvanker
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope
FS25 Mods
FS25 Harvesters, FS25 Tractors Mods, FS25 Maps Mods
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
FS25 Mods
FS25 Maps, FS25 Cheats, FS25 Install Mods
GTA 6 Weapons
GTA 6 Characters, GTA 6 Map, GTA 6 Vehicles
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps
ATS Trailers
American Truck Simulator Mods, ATS Trucks, ATS Maps
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Script hook v, Openiv, Menyoo
gta5mod.net
FS25 Mods, FS25 Tractors, FS25 Maps
fs25mods.lt
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
Reklamos paslaugos
SEO sprendimai

www.addad.lt
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama