 |

|
|
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 2025 12 20, 14:03. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » Sinusinio signalo darymas su 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 2 iš 2 Pereiti prie Atgal 1, 2 |
|
 |
 |
 |
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 26, 21:53 |
|
|
|
|
Pasimečiau programoj, šita programa tiesiog turėtų uždegti šv. diodą. bandžiau puse dienos visokiais būdais paleisti, esme tame, kad pradžioj (žiūrint oscilografu) atsiranda pašalinių impulsų
Kas čia negerai?
| Kodas: |
#include "iotiny2313.h"
void main(){
int a=0,p=0;
int h[21];
long f;
DDRB=(1<<DDB2)|(1<<DDB3)|(1<<DDB4);
TCCR0A=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM00);
TCCR0B=(1<<CS01)|(0<<CS01);
h[0]=0;
h[1]=20;
h[2]=40;
h[3]=60;
h[4]=79;
h[5]=97;
h[6]=116;
h[7]=133;
h[8]=150;
h[9]=166;
h[10]=181;
h[11]=194;
h[12]=207;
h[13]=217;
h[14]=227;
h[15]=236;
h[16]=232;
h[17]=248;
h[18]=250;
h[19]=254;
h[20]=255;
while(1){
for (f=0; f<100000; f++){};
p++;
if (p==21) p=20;
OCR0A=h[p];
}
}
|
Reikia pastebėti, kad pakeitus int h[21]; į int h[17]; pradeda veikti gerai. o pakeitus iki int h[30]; nebeveikia iš viso. |
|
_________________ Teorija - kai viską žinai, bet niekas neveikia,
Praktika - kai viskas veikia, bet nežinai kodėl.
Skype : VytautasRX |
|
|
|
 |
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 26, 22:07 |
|
|
|
|
int h[17];
int h[21];
Kiek aš suprantu, nuo masyvo dydžio išvis niekas neturėtu keistis, bet nustačius 30 niekas neveikia. Kame šaknys?
Įtampa pačioj pradžioj truputi nukrenta dėl to, kad uždėta kondensatorius į korpusą. |
|
_________________ Teorija - kai viską žinai, bet niekas neveikia,
Praktika - kai viskas veikia, bet nežinai kodėl.
Skype : VytautasRX |
|
|
|
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 26, 22:26 |
|
|
|
|
| Taigi naturalu kad neveikia. Pasiziurek i programa. Esi parashes, kad jei pasiekia 21, vel p=20. Tai čia ir sustoja. 30-ies niekad ir nepasieks. |
|
|
|
|
|
 |
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 26, 22:30 |
|
|
|
|
| Vytautasr rašo: |
Pasimečiau programoj, šita programa tiesiog turėtų uždegti šv. diodą. bandžiau puse dienos visokiais būdais paleisti, esme tame, kad pradžioj (žiūrint oscilografu) atsiranda pašalinių impulsų
Kas čia negerai?
Reikia pastebėti, kad pakeitus int h[21]; į int h[17]; pradeda veikti gerai. o pakeitus iki int h[30]; nebeveikia iš viso. |
visus pirma C kalboje h[] rasoma masyvo dudis todel 0-20 bus 21 reiksme, todel ir reikia rasyti char h[21]
bet geraiu daryk taip:
char h[20]={1,2,3,4,5,6....... } cia ir surasyk visas 20 reiksmiu.
(reiksmes neturi virsyti 127 jei datai 1/4 periodo)
arba surasyk pilna sinusoides perioda nuo 0 iki 360 laipsniu
o siaip tau vsikas veikia taip kaip parasei.
jei atminties netruksta surasyk viso periodo reiksmes, tai nerekes sukti galvos su visokiom manipulacijom. bet siaip tai si 1/4 periodo reiketu daryti sitaip
tas skaicius 127 turi buti nulinis signalo lygis, nes neigiamu skaiciu naudoti negalima maksimalus h ne daugiau 127
while(1){
// 0-90laipsniu
for (p=0; f<20; p++){
OCR0A=h[p]+127;
};
//90- 180 laipsniu
for (p=20; f>0; p--){
OCR0A=h[p]+127;
}
// 180-270laipsniu
for (p=0; f<20; p++){
OCR0A=127-h[p];
};
//270-360 laipsniu
for (p=20; f>0; p--){
OCR0A=127-h[p];
}
} |
|
|
|
|
|
 |
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 27, 21:27 |
|
|
|
|
| vakaras rašo: |
| Taigi naturalu kad neveikia. Pasiziurek i programa. Esi parashes, kad jei pasiekia 21, vel p=20. Tai čia ir sustoja. 30-ies niekad ir nepasieks. |
Jūs ne taip supratot. aš tą 30 kai pvz. daviau, pas mane tų reikšnių iš viso 20 ir yra.
| Kodas: |
| visus pirma C kalboje h[] rasoma masyvo dudis todel 0-20 bus 21 reiksme, todel ir reikia rasyti char h[21] |
Aš taip ir parašiau tik ne char o int.
Jūs nesupratot mano problemos
Pas mane daug gilesnė problema, galbūt IAR'as kažką kreivai sukompiliuoja, dar nežinau, bet man neveikia ši elementari programa. Pas mane tiesiog turi užsidegti šv. diodas, bet užsidega nevisai kaip reikia  |
|
_________________ Teorija - kai viską žinai, bet niekas neveikia,
Praktika - kai viskas veikia, bet nežinai kodėl.
Skype : VytautasRX |
|
|
|
 |
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 27, 22:15 |
|
|
|
|
nu ziurint i osilogramas viskas veikia kaip parasyta programoje.
nelabai suprantu kas dar kitaip ten turi buti |
|
|
|
|
|
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 27, 22:21 |
|
|
|
|
Antroj nuotraukoj kai masyvo dydis 21, pradžioj pakyla, nusileidžia, pakyla per kelis pasilaiko ir toliau kyla gerai. Va ta pradžia man nesuprantama. Juo labiau kaip tai gali proklausyti nuo masyvo dydžio. Nieko nebesuprantu
Arba galiu užduot kitaip klausimą. Kodėl masyvą padarius 30'ies išviso niekas neveikia? |
|
_________________ Teorija - kai viską žinai, bet niekas neveikia,
Praktika - kai viskas veikia, bet nežinai kodėl.
Skype : VytautasRX |
|
|
|
 |
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 27, 22:30 |
|
|
|
|
parašius kaip siūlei:
| Kodas: |
| int h[20]={20,40,60,79,116,133,150,166,181,194,207,217,227,234,232,248,250,254,255}; |
Klaida:
Error[e46]: Undefined external "ML_FLASH_SRAM_16EC_8_L07" referred in 2 ( D:\kita\dev\uC\linui\Debug\Obj\2.r90 )
SRAM'o trūkume ir yra visa esmė? Bet int pakeitus į char klaida lieka. Dar kažkas negerai  |
|
_________________ Teorija - kai viską žinai, bet niekas neveikia,
Praktika - kai viskas veikia, bet nežinai kodėl.
Skype : VytautasRX |
|
|
|
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 27, 22:59 |
|
|
|
|
jei tu naudoji attiny tai gali buti kad atminties nepakanka,
tavo CPU turi 128 baitus o 30 int masyvas sunaudoja 60 baitu.
visu pirma int masyvas tau nereikalingas, tau uztenka char, o antra daryk flash masyva, bet nezinau ar palaiko tavo kompiliatorius.
as tai naudoju codevision ir viskas gerai ir paprastai.
o saip kas tau su ta pradzia negerai? man tai atrodo veikia normaliai. |
|
|
|
|
|
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 27, 23:18 |
|
|
|
|
1. Pradžia
2. pirma reikšmė.
3. Krenta į nulį (blogai)
4. pakyla per kelis laiptus.(blogai)
 |
|
_________________ Teorija - kai viską žinai, bet niekas neveikia,
Praktika - kai viskas veikia, bet nežinai kodėl.
Skype : VytautasRX |
|
|
|
 |
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 27, 23:40 |
|
|
|
|
Radau kaip irašyti š flash.
| Citata: |
How to put strings into flash
The idea here is to override each string in the code so that it ends up in flash.
__flash char str1[] = "abcdef";
__flash char str2[] = "ghi";
__flash char __flash * pVar[] = { str1, str2 }; |
http://supp.iar.com/Support/?note=86174&from=search+result
Tagi parašius:
| Kodas: |
| __flash int __flash * h[]={20,40,60,79,116,133,150,166,181,194,207,217,227,234,232,248,250,254,255}; |
arba
| Kodas: |
| __flash int __flash * h[20]={20,40,60,79,116,133,150,166,181,194,207,217,227,234,232,248,250,254,255}; |
meta klaidą:
| Kodas: |
| Error[Be009]: memory attributes not allowed on auto variables or parameters |
Ką tai galėtų reikšti ? |
|
_________________ Teorija - kai viską žinai, bet niekas neveikia,
Praktika - kai viskas veikia, bet nežinai kodėl.
Skype : VytautasRX |
|
|
|
 |
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 28, 00:19 |
|
|
|
|
flash masyvai manau turi buti globalus, ju negalima daryti funkcijos viduje
viduje sukurti kintamieji dedemi i steka.
del tos pradzios tai labai sunku kaska pasakyti kai nera pilno periodo sinusoides.
gali buti kad pwm registrui npatinka nuline reiksme o va ta 4 vieta gana keistai atrodo, per ilgai laikosi tas pats lygis, visu laiktu plotis turetu buti vienodas
geraiu padaryk kad tas signalas kartotusi o ne sustotu, nes pagal viena gabala nesimato kas vyksta
pataisyk
if (p==21) p=20;
i
if (p==21) p=0; |
|
|
|
|
|
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 28, 07:22 |
|
|
|
|
| Vytautasr rašo: |
Tagi parašius:
| Kodas: |
| __flash int __flash * h[]={20,40,60,79,116,133,150,166,181,194,207,217,227,234,232,248,250,254,255}; |
meta klaidą: |
Tai kad nesąmonę parašei. Rašyk:
| Kodas: |
| __flash unsigned char h[] = {20,40,60,79,116,133,150,166,181,194,207,217,227,234,232,248,250,254,255}; |
|
|
|
|
|
|
 |
Sinusinio signalo darymas su PWM |
Parašytas: 2006 08 28, 19:43 |
|
|
|
|
Dėkui, susitvarkiau  |
|
_________________ Teorija - kai viską žinai, bet niekas neveikia,
Praktika - kai viskas veikia, bet nežinai kodėl.
Skype : VytautasRX |
|
|
|
|
 |
Google paieška forume |
|
|
 |
Naujos temos forume |
|
 |
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 |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Must have farming mods
Farming simulator modhub,
Best farming simulator mods |
|

|
 |