|
|
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 11 14, 16:06. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Mikrovaldikliai » Algoritmas su C Pic
|
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 1 iš 2 Pereiti prie 1, 2 Toliau |
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 10, 15:10 |
|
|
|
Sveiki ,
Padekit del algoritmo. Noriu išdėlioti impulsus laike kuo tolygiau. Sakykim pakete turiu 50 vietų ir jame reikia kuo tolygiau paskyrstyti vienetukus. Matricos visam sitam reikalui daryti nenoriu.... Gal išeitų kaip nors matematiškai ...
Sakykim :
00000000000000000000000000000000000000000000000001 1
00000000000000000000000010000000000000000000000001 2
00000000000000010000000000000001000000000000000100 3
00000000000100000000000100000000000100000000000100 4
00000000010000000001000000000100000000010000000001 5
00000001000000010000000100000001000000010000000100 6
Bet kai pulsiuku pasidaro koks 17 su matematika man sunku pasidaro ...
Dekui
Linas |
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 10, 15:53 |
|
|
|
kaip klausima suprasti. tai tu turi 50 skaiciu ir is jus kazkiek vienetu?
bet kiek tu vienetu ir kaip juos tu isdelioti nori
ir koks tos nesamoes tikslas |
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 10, 16:04 |
|
|
|
As turiu tolygiai uzpildyti sita seka vienetukais.
Sakykim as turiu 17 vienetuku , tai man reikia juos kazkaip isdelioti sitoje 50 vietų sekoje , kad gautusi tolygus vienetukų pasiskirstymas.
Ten gale skaiciukas rodo tik kiek 1 yra sekoje. Sito tikslas yra sroves reguliatorius kuris reguliuja srove iskirpdamas visą sinuso periodą. |
|
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 10, 16:17 |
|
|
|
nu tokiu atveju viskas elementaru:
tavo taveju nereikia tos 50 vietu sekos, paprasčiausia padaryk reguliuojama taimeri ir padavinek impulsus kas kazkoki reguliuojama laika
ko gero tau reikia tiktai dar kazkokio sinchronizacijos, kad isejime signalas butu paduodamas tik esant pereijimui per nuli.
o siap jei nori smegenu mankstos, tai matematika nesudetinga cia yra:
reikia imituoti ka as sakiau.
50 dalinam is 17 = 2.94 sakykim cia kintamasis z
n - kintamasis skaiciuojantis impulsus
tai dabar darom skaitliuka
n++
if n>z paduoti impulsa ir z=z+2.94
kai matai teks naudotis floating point arba didinti tu tavo 50 vietu skaiciu iki sakykim 5000 |
|
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 10, 17:04 |
|
|
|
Schema mano paaryti ir viskas veikia , iskyrus tai , kad dabar noriu kazkaip tuos impulsiukus graziau isdeliot , kad maziu trukdyt ir tolygiau apkrauti tinklą.
Su float cia nelabai gaunasi , nes zingsnis 2.94 netinkamas , nes cia dvejetaine, gali but tik sveiki skaiciai ... i 5000 dalinti nelabai galiu nes gaunasi labai jau ilgas laiko tarpas pas mane 50 seka yra 1 sekunde . Dar galeciau is bedos paimti kitokį intervalą , sakykim 200 seką.
Galeciau pasidaryti duomenų masyvą 1 - (000001) 2 - (001001) , bet sakau , gal galima kaip nors sugalvoti , kaip graziai matematiskai issiskaiciuoti. |
|
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 10, 17:56 |
|
|
|
tai jei nenori float tai kam tau reikia to 50 intervalo isvis?
nesuorantu kam tu uzssiimi tokiom nesamonem jei galima viska padaryti lengvai ir paprastai
pas tave yra "zero" detektorius kiek suprantu ir isejimas i tiristoriaus valdyma.
tai tesisiog padaryk ant to procesoriaus reguliuojama taimeri geriausia hardwarini.
tada tolaiu paprasta, jei taimeris prisipildo pazymim koki nors kintamaji, kad reikia isejime paduoti impulsa.
ir kai is to zero dekettoriaus ateina signalas tai jei reikia tuo metu paduodam impulsa ir kintamaji nutrinam
sakykim mazdaug tokia programa:
while(1){
delay(x) laukiam nurodyta laika
pulse =1; pazymim kad reikia isejime duoti impulsa
}
interrupt {
OUT =1
delay(1ms)
OUT =0
pulse =0; pazymim kad impulsa jau padavem
}
ir jokios matematikos nereikia isvis |
|
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 10, 18:43 |
|
|
|
Gal trumpai parašysiu kas pas mane čia per daiktas , nes žiūriu kitaip klystam ne į ta puse. Man reikėjo padaryti sroves reguliatorių . Jei paprastai, tai schema tokia : 220 tinklas -> diodų lygintuvas > tiristorius > aktyvinė apkrova.
Srovę aš reguliuoju išmesdamas visą kintamos sinuso periodą . Na sakykim 1 periodą praleidžiu du išmetu . Momentinė srovė man nėra svarbi. Po to matuoju sroves sinuso viršuje, sumuoju 1s laike, vidurkinu ir gaunu vidurkinę srovę. Iš čia gal ir tas mano 50 atsirado , nes 1s - 50 periodų . Na o norėdamas tolygiau reguliuoti turiu pavyzdžiui gauti , kad iš 50 periodų man reikia praleisti tik 17. Galima būtų daryti paprastai : pirmi 17 yra kitų 33 nėra, bet norėčiau padaryt , kad impulsai pasiskirstytų tolygiau laike. Laikyti pastovią vidurkinę srovę galima būtų ir kokių 5s intervale.
Dabar reguliuoju taip :
%Praleidziamų impulsų
0% 0000000000 0000000000 0000000000 0000000000 0000000000
2% 0000000000 0000000000 0000000000 0000000000 0000000010
4% 0000000000 0000000000 0000000000 0000000000 0000001010
6% 0000000000 0000000000 0000000000 0000000000 0000101010
8% 0000000000 0000000000 0000000000 0000000000 0010101010
10% 0000000000 0000000000 0000000000 0000000000 1010101010
12% 0000000000 0000000000 0000000000 0000000010 1010101010
14% 0000000000 0000000000 0000000000 0000001010 1010101010
16% 0000000000 0000000000 0000000000 0000101010 1010101010
18% 0000000000 0000000000 0000000000 0010101010 1010101010
20% 0000000000 0000000000 0000000000 1010101010 1010101010
22% 0000000000 0000000000 0000000010 1010101010 1010101010
24% 0000000000 0000000000 0000001010 1010101010 1010101010
26% 0000000000 0000000000 0000101010 1010101010 1010101010
28% 0000000000 0000000000 0010101010 1010101010 1010101010
30% 0000000000 0000000000 1010101010 1010101010 1010101010
32% 0000000000 0000000010 1010101010 1010101010 1010101010
34% 0000000000 0000001010 1010101010 1010101010 1010101010
36% 0000000000 0000101010 1010101010 1010101010 1010101010
38% 0000000000 0010101010 1010101010 1010101010 1010101010
40% 0000000000 1010101010 1010101010 1010101010 1010101010
42% 0000000010 1010101010 1010101010 1010101010 1010101010
44% 0000001010 1010101010 1010101010 1010101010 1010101010
46% 0000101010 1010101010 1010101010 1010101010 1010101010
48% 0010101010 1010101010 1010101010 1010101010 1010101010
50% 1010101010 1010101010 1010101010 1010101010 1010101010
52% 1110101010 1010101010 1010101010 1010101010 1010101010
54% 1111101010 1010101010 1010101010 1010101010 1010101010
56% 1111111010 1010101010 1010101010 1010101010 1010101010
58% 1111111110 1010101010 1010101010 1010101010 1010101010
60% 1111111111 1010101010 1010101010 1010101010 1010101010
62% 1111111111 1110101010 1010101010 1010101010 1010101010
64% 1111111111 1111101010 1010101010 1010101010 1010101010
66% 1111111111 1111111010 1010101010 1010101010 1010101010
68% 1111111111 1111111110 1010101010 1010101010 1010101010
70% 1111111111 1111111111 1010101010 1010101010 1010101010
72% 1111111111 1111111111 1110101010 1010101010 1010101010
74% 1111111111 1111111111 1111101010 1010101010 1010101010
76% 1111111111 1111111111 1111111010 1010101010 1010101010
78% 1111111111 1111111111 1111111110 1010101010 1010101010
80% 1111111111 1111111111 1111111111 1010101010 1010101010
82% 1111111111 1111111111 1111111111 1110101010 1010101010
84% 1111111111 1111111111 1111111111 1111101010 1010101010
86% 1111111111 1111111111 1111111111 1111111010 1010101010
88% 1111111111 1111111111 1111111111 1111111110 1010101010
90% 1111111111 1111111111 1111111111 1111111111 1010101010
92% 1111111111 1111111111 1111111111 1111111111 1110101010
94% 1111111111 1111111111 1111111111 1111111111 1111101010
96% 1111111111 1111111111 1111111111 1111111111 1111111010
98% 1111111111 1111111111 1111111111 1111111111 1111111110
100% 1111111111 1111111111 1111111111 1111111111 1111111111
Gražiausia čia vieta , kai 50% O kai 18% , impulsai susistūmę vienoje pusėje ...
Apie patį reguliavimą gal nebekalbėkime (kodėl nekirpti sinuso...) , nes platos jau sukonstruotos ir ruošiamos masinei gamybai .... |
|
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 10, 19:04 |
|
|
|
aisku kad tolygiai isdestyti nepavyks... Tik nesuprantu kuo ta "srove" reguliuoji? Jei tiristorium ar simistorium-tai viskas yra daroma ne taip... O sinusa karpyti kazkokiu tai raktu???? , valdomu impulsais... Panasu, kad cia netoks pasirinktas principas... |
|
_________________ Nieko taip lengvai nedaliname, kaip patarimus... |
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 10, 19:25 |
|
|
|
sinuso karpyti niekam ir nereikia, tiesiog nesuprantu km tai keistai elgtis? jug viskas padaroma paprastai.
tolygiai neisdalinsi tokio dalyko, bet jei idelaiai nereikia tai galima ignoruoti ta liekana
tada bus matematika tokia,
50 /17 gaunam 2.9 savaime apvalinasi iki 2 kai naudoji int dalyvba
iseina kad reikia padavineti po 1 impulsa kas 2 pusperiodzius.
ir isvis per 50 pusperiodziu reikia paduoti 17 impulsu.
tai gausis toks nelabai geras isdalinimas kai kas pradzioje eina daug impulsu su vienodais tarpais paskui didesnis tarpas bet nelbai didelis.
nu dar galima panaudoti lentele bet cia jau per sudetinga bus tau. |
|
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 13, 00:52 |
|
|
|
Sveiki,
Susiinstaliavau FreePascal , kad galeciau ramiai pagalvot ir paprogramuot ..
Po keliu valandu stai kas gavosi.
00000000000000000000000000000000000000000000000001 1 2%
00000000000000000000000010000000000000000000000001 2 4%
00000000000000001000000000000000010000000000000001 3 6%
00000000000010000000000001000000000001000000000001 4 8%
00000000010000000001000000000100000000010000000001 5 10%
00000000100000000100000001000000010000000100000001 6 12%
00000001000000100000010000001000000100000010000001 7 14%
00000010000001000001000001000001000001000001000001 8 16%
00000100000100000100000100000100001000010000100001 9 18%
00001000010000100001000010000100001000010000100001 10 20%
00001000010000100001000010000100010001000100010001 11 22%
00001000010001000100010001000100010001000100010001 12 24%
00010001000100010001000100010001000100010001001001 13 26%
00010001000100010001000100010001001001001001001001 14 28%
00010001000100010001001001001001001001001001001001 15 30%
00010001001001001001001001001001001001001001001001 16 32%
00100100100100100100100100100100100100100100100101 17 34%
00100100100100100100100100100100100100100101010101 18 36%
00100100100100100100100100100100100101010101010101 19 38%
00100100100100100100100100100101010101010101010101 20 40%
00100100100100100100100101010101010101010101010101 21 42%
00100100100100100101010101010101010101010101010101 22 44%
00100100100101010101010101010101010101010101010101 23 46%
00100101010101010101010101010101010101010101010101 24 48%
01010101010101010101010101010101010101010101010101 25 50%
11011010101010101010101010101010101010101010101010 24 52%
11011011011010101010101010101010101010101010101010 23 54%
11011011011011011010101010101010101010101010101010 22 56%
11011011011011011011011010101010101010101010101010 21 58%
11011011011011011011011011011010101010101010101010 20 60%
11011011011011011011011011011011011010101010101010 19 62%
11011011011011011011011011011011011011011010101010 18 64%
11011011011011011011011011011011011011011011011010 17 66%
11101110110110110110110110110110110110110110110110 16 68%
11101110111011101110110110110110110110110110110110 15 70%
11101110111011101110111011101110110110110110110110 14 72%
11101110111011101110111011101110111011101110110110 13 74%
11110111101110111011101110111011101110111011101110 12 76%
11110111101111011110111101111011101110111011101110 11 78%
11110111101111011110111101111011110111101111011110 10 80%
11111011111011111011111011111011110111101111011110 9 82%
11111101111110111110111110111110111110111110111110 8 84%
11111110111111011111101111110111111011111101111110 7 86%
11111111011111111011111110111111101111111011111110 6 88%
11111111101111111110111111111011111111101111111110 5 90%
11111111111101111111111110111111111110111111111110 4 92%
11111111111111110111111111111111101111111111111110 3 94%
11111111111111111111111101111111111111111111111110 2 96%
11111111111111111111111111111111111111111111111110 1 98%
Pasidalinau seka i dvi dalis , nes iki puses didesni tarpai o antroje puseje viskas keiciasi vietomis. Dabar po kiekvieno vienetuko is naujo perskaiciuoju nuliuku kieki. Mano galva visai neblogai gavosi. Gal dar ir sita koda iseitu patobulinti . Reikes ryt ant C persirasyt
var a,b,c,q,o,t:integer;
begin
for t:= 1 to 49 do begin
if t>25 then a:=50-t else a:=t;
b:=49 div a ;
c:=0;
for q := 1 to 50 do begin
if b = 0 then
begin o:=1; c:=c+1; if (a-c)>0 then b:=(49-q) div (a-c); end
else
begin if b > 0 then begin o:=0; b:=b-1;end;
end;
if t>25 then
if o>0 then write ('0') else write ('1')
else
if o>0 then write ('1') else write ('0');
end;
write (' ',c,' ',t*2,'%');
writeln;
end;
readln;
end.
Nepykit , jei cia nesamoniu prirasiau , nes programuoju tik laisvalaikiu |
|
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 13, 19:43 |
|
|
|
Kazka panasaus buvau dares.Tik as valdziau sinuso pusperiodzius,kurie iseina is tiltelio. Svarbu impulsu sinhronizavimas,praktiskai visas valdymas vyksta interrupt funkcijoje. Nieko dalint nereikia,praleidi kas 100,kas 99 kas 98 ir t.t pusperiodi,ir taip iki puses,nuo kitos puses iskerpi pusperiodzius-kas 2,3 ir tt.. gaunasi tas pats ko tau reik.
Sinchro impulsams gauti naudojau hardvarini komparatoriu.
Kad butu aiskau programos kodas:
Kodas: |
//PIC16F628A
//PortA2 5V 100Hz
//PortA1 GND
//PortB7 isejimo imp
//PortB1,PortB2 +-var valdymo mgt
unsigned char read;
unsigned char syncro;
signed char var; // +/-100
void comparators_init();
void interrupt(){
if ( PIR1.CMIF== 1){//if zero detect
if (var<0) {PORTB.F7=1;};
read = CMCON;
PIR1.CMIF = 0;
syncro = ++syncro;
if (var>0 && syncro == var) {PORTB.F7=1;};
if (var<0 && syncro == abs (var)) {PORTB.F7=0;};
if (syncro == abs (var)) {syncro=0;};
};
}
void main() {
CMCON = 0b00000111;
VRCON = 0;
TRISB = 0b00000110;
PORTA=0;
PORTB=0;
var = 100;
comparators_init() ;
while(1){
INTCON.GIE =1;
while(PORTB.F1==0) {
INTCON.GIE =0;
syncro = 0;
--var;
delay_ms(400);
if(var == 1) {var = -2;};
if(var < -100) {var = -100; };
};
while(PORTB.F2==0){
INTCON.GIE =0;
syncro = 0;
++var;
delay_ms(400);
if(var == -1) {var = 2;};
if(var > 100) {var=100;};
};
delay_ms(1);
if (var>0 ){PORTB.F7=0;};
}
}
//////////////////////////////////
void comparators_init(){
INTCON.GIE =0;
INTCON.PEIE=0;
PORTA=0;
CMCON = 0b00000101;
TRISA = 0b00000110;
delay_ms(10);
read = CMCON;
PIR1.CMIF=0;
INTCON.GIE =1;
INTCON.PEIE=1;
PIE1.CMIE=1;
}
|
|
|
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 14, 00:26 |
|
|
|
Dėkui už pavyzdį. Pas mane jau valdymas padarytas ir veikia. Aš tik norėjau padaryti tolygų impulsų išmėtymą, kad tolygiau apkraučiau tinklą. Aš čia gal ir per daug stengiuosi , bet noriu padaryti kaip geriau : užtat išmetinėju po visą periodą , o ne kas pusperiodį. Dėl impulsų išmėtymo reguliuojant srovę , tai pasireiškė įdomus reiškinys su dienos šviesos lempomis . Turbūt dėl silpnos elektros instaliacijos , ar dar dėl kažko jos pradeda mirgėt prietaisui veikiant . Galia apie 400w . Ingo : ar nepastebėjai kažko panašaus ?
Ir dar klausimas: kaip paskaičiuot nominalę srovę , jei žinoma srovė sinuso viršūnėje ? Lyg ir konstanta kažkokia yra ... 0,3 *I ? |
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 14, 00:54 |
|
|
|
tai vadinama efektine ir amplitudine srove arba itampa
ta tavo konstanta yra 1.4 arba saknis is dvieju |
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 14, 07:32 |
|
|
|
Toks sinusoides iskarpymas nelabai tinka kintamos sroves tinklui,as naudojau vieno kaitinimo prietaiso reguliavimui su DC srove,siaip tai normaliai veike iki 50%,toliau didinat srove kazkaip nestabiliai pasidarydavo,nes kartais nespeja reikiamu momentu uzsidaryti tiristorius. |
|
|
|
|
|
Algoritmas su C Pic |
Parašytas: 2010 03 14, 10:28 |
|
|
|
Ingo rašo: |
Toks sinusoides iskarpymas nelabai tinka kintamos sroves tinklui,as naudojau vieno kaitinimo prietaiso reguliavimui su DC srove,siaip tai normaliai veike iki 50%,toliau didinat srove kazkaip nestabiliai pasidarydavo,nes kartais nespeja reikiamu momentu uzsidaryti tiristorius. |
Nenori papasakot kaip su tiristorium valdai DC? |
|
|
|
|
|
|
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 |
|
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 |
|
|
|