Hírek:

Fontos tudnivalók a migrációval kapcsolatban, kérlek olvasd el:

A régi fórumról áthozott hozzászólásoknál a felhasználó neve adatvédelmi megfontolásokból véletlenszerűen generált értékekre lett  lecserélve. Ez akkor tud a valódi értékre visszaállni, ha az adott felhasználó a régi fórumon nyilatkozik, hogy beleegyezik az adatainak az új fórumra továbbításához, majd ezután itt a régi felhasználónevével és email címével regisztrál.
8~20 óra között, 1~30 percen belül megtörténik a jóváhagyás, 30 percenként ellenőrizd email fiókodat (SPAM-ot is) mindenképp kapsz mail-t, a sikeres regisztrácioról, vagy a hibáról és, hogy mi a teendőd.
Nézd meg  "A régi fórumról, az új fórumra költözés útmutatót."
A régi fórumon használt email címmel de más felhasználói azonosítóval érkező regisztrációs kérelmek törlésre kerűlnek.

Main Menu

Elektronika

Indította gaben, 2025 február 03, 18:18

Előző téma - Következő téma

keri

Igen, a step jelre megszakít, és a dir alapján hozzáad vagy levon egyet a pozíció változóból, ami megcímez egy programsort, ami a megfelelő kimeneteket kapcsolja.
Elég egyszerű.
Aztán ha egy adott ideig nincs léptetés, akkor elkezdi ki be kapcsolni 20% PWM-el a kimenetet, hogy ne melegedjen álló helyzetben a motor.

keri

régebben olyan pic volt benne amin nem volt megszakítás, ott pedig egy ciklusban figyeltem a bemeneteket és kapcsolgattam a kimeneteket.

jv7pu3a5p

Igen dettó u.a mint nálam.  
Nekem van még a bemeneten egy 10mbites optó is. Nem volt felesleges megszakításod? Mert nálam
a megszakítás vonalra olyan zavaró jelek ültek rá, hogy össze vissza lépkedett még magában is nemhogy amikor küdtem neki a lépésjeleket. Küldtem neki 100 lépést majd lépett 2xx. Aztán úgy sikerült kompenzálnom, hogy került az optó kimenetére egy 4.7n kondi, a megszakításban pedig kénytelen vagyok várni 5us és utána törölni a megszakítás flaget. Így elfogadhatóan működik, többször is leszámoltam a lépéseket amiket kapott és kiirattam magamnak. Eddig jó, de valahogy félek tőle, nehogymá meló közben találja ki hogy többet vagy kevesebbet lép.

keri

Ha üresen lóg a levegőben akkor nekem is mozog össze vissza, de ha rajta van a számítógép az stabilan tartja. Mondjuk ha a printerkábelt a motor vezetékeivel keverem akkor néha bejönnek fals lépések, de ez üzem szerűen nem fordul elő.
 
Nekem felfutó élre azonnal megszakít, viszont a PIC egyetlen megszakítás vonallal rendelkezik ezért muszáj ellenőrizni hogy melyik esemény okozta a megszakítást ez időbe telik. Ha a tranziensnek vége mire ellenőrzöm a step jelet, akkor nem történik semmi csak visszatér. Szerintem ez önmagában is elég jó zavarszűrés.
 
De mint mondtam nem érzékeny a PIC. Csináltam egy számlálót ami a radarunk encoderének az impulzusait számolja megszakítással fordulatonként, mert az volt a gyanúja az egyik kollégának hogy téveszt az enkóder. 2 hétig atom stabilan 4096-on állt a számláló (raktam bele szélsőérték memóriát) pedig ott direkt kiiktattam mindent ami a tranzienseket elnyomhatja.

jv7pu3a5p

Nagyrészt az optó szed össze valami rosszt. Tápot is kell neki adni valószínű onnan. (TLP113)
De anélkül direktben hajtva is voltak gondok ha jól emlékszem, már annyi mindent végigzongoráztam. De ez a kondi meg digit szűrés lett a megoldás. Nálam az is nagy probléma, hogy egy panelon van minden, betáppont ugyanaz. Egyedül az optó bemenet megy külön az lpt-re. Nehéz tökéletesen szűrni a motorzavarokat, de egész jól lehet csökkenteni őket.

crgs7u9wg

 
 
 
kerem a gyakorlo/profi programozokat, hogy stilszeru legyek, ugorjanak a *** bekezdeshez :)
 
 
sokat tortem a fejemet azon, hogy a most kovetkezo reszbe erdemes e belemenni, de vegulis ugy dontottem,
hogy mivel olyan egyszeru fogalmak fognak szobakerulni, hogy nem erne meg nem megtenni, arrol mar nem is
beszelve, hogy az itt megismerteket ha masra nem is, de egy alap eligazodashoz mindenki fel fogja tudni hasznalni
 
ha eddig nem lett volna vilagos, a programozasrol lesz szo, ugy fogjuk megkozeliteni a dolog, hogy sorravesszuk,
hogy milyen reszekbol/fogalmakbol all a programozas:
 
1.utasitas: ez egy elemi egyseg ami megmondja a cpu -nak (processzor/feldolgozo egyseg), hogy mit kell csinaljon
pl: a+b, egy kutyanak is lehet adni utasitast: gyere ide!
 
2.memoria: egysegesen felosztott tarolo hely, pl. egy kockas fuzetlap, nyilvan azt jo tudni, hogy mi hol van
a memoriaban, tehat szuksegesek a memoria cimek is, a postas is igy tudja, hogy hova hozza nekunk a leveleket
 
3.program-memoria: itt van eltarolva maga a programunk, azaz az utasitasok amiket szeretnenk, hogy a cpu
megcsinaljon, pl. ha lekuldenek valakit vasarolni, akkor a bevasarlo cetlit lehet tekinteni program-memorianak
vagy pl. egy hataridonaplot, hogy az elet ne legyen tul bonyolult, az egyes utasitasokat szepen egymas utan
szoktak elhelyezni a program-memoriaban, tehat amikor az egyik dolgot megcsinaltuk, megyunk a masikra
 
4.munka-memoria: ez semmi tobb mint a programunknak adott munkaterulet, ahol o tetszolegesen tarolhat, torolhet
modosithat, megnezhet dolgokat
 
5.valtozo: ez egy nevvel ellatott munka-memoria cim es meret, pl. a kutya nevu valtozo ezek utan a fuzet 3 -dik
oldalan belul az 5 -os sor 12db kockaja lesz, szoval ez arra jo csupan, hogy ne kelljen ilyen hulyen beszelni,
hogy itt meg ott meg hol mennyi helyen, hanem csak azt mondom, hogy irjal 3 x-et a kutyaba, vagy na mi van
a kutyaban?
 
6.aritmetika: a matematikaban szereplo muveletek, tobbnyire alap muveletek, pl. osszeadas, kivonas, osztas, szorzas
gyokvonas, hatvanyozas
 
7.feltetel: valami vagy igaz vagy hamis, pl. ha azt mondom, hogy a feltetelem az, hogy "alma es korte", ami nyilvan
csak akkor lesz igaz, ha mind az alma es mind a korte valtozo igaz, minden mas esetben a feltetelem hamis
eleg sok feltetel lehetseges, pl. az un. relaciok is feltetelek, tehat, hogy valami egyenlo valamivel, valami
nem egyenlo valamivel, valami kisebb valaminel, nagyobb, nagyobb es egyenlo stb.
nem art megjegyezni, hogy egyes utasitasok vegrehajtasat lehet kotni feltetelekhez, szoval valamelyik utasitas
csak akkor hajtodik vegre, ha egy feltetel igaz
 
8.kulvilag-kapcsolat: nyilvanvaloan a programunknak szuksege lesz arra, hogy a kulvilagtol kapjon, ill. a annak
kikuldjon dolgokat, ilyenekre gondolok, hogy merevlemez, file, monitor, billentyuzet, printerport
 
9.programfutas vezerles: ez egy nagyon egyszeru es nagyon fontos dolog, fentiekben mar volt rola szo, hogy
a program utasitasaink szepen sorban helyezkednek el a program-memoriaban, sajnos egy ilyen merev szerkezettel
nem tul hatekonyan tudnank dolgozni, kepzeljunk el egy peldat: minden nap be kell menni dolgozni, szepen sorban
nap, naputan, igen am, de mi van akkor, ha hetvege van, vagy valamilyen unnep, vagy betegek vagyunk???
nos a merev szerkezet, erre nincsen tekintettel! szoval meg kell engednunk, hogy a programfutas flexibilis legyen
mint ahogyan ezt mindjart lathatjuk, es ami a lenyeg, hogy ezek utan mar keszen is vagyunk :)
 
10.direkt ugras: ez egyszeru dolog, a cpu egyszercsak rafut egy olyan utasitasra, hogy ugorjunk a 123 -as sorra
es akkor a kovetkezo utasitast mar onnan veszi szepen sorban, ameg nem tortenik megint egy programfutas vezerles
az milyen jo moka mikor pl. a 42-es sorban levo utasitasnak azt adom meg, hogy ugrojon a 42-es sorra :)
hazi feladat, hogy egy ilyen szituaciobol hogyan tud kikeveredni a cpu, ugy ertem ha egy ilyen megtortent, hogyan
tudunk megis feladatokat elvegezni
 
11.felteteles ugras: nos itt az, van, hogy csak abban az esetben ugrunk, hogyha valamilyen feltetel igaz, pl.
fut a programunk es kozben egy valtozo csokken, majd e programresz aljan az van, ha a valtozo nem nulla, akkor
ugorjon a programresz elejere, belathato, hogy igy lehet iranyitani, a valtozo segitsegevel, hogy egy
programreszlet hanyszor fusson le, nem akartam de megis irok ide egy peldat:
 
221: ....
222: csokkenteni a macska valtozot 1-el
223: kiirni a kepernyore a macska valtozo ketszereset
224: ha a macska nem egyenlo nullaval akkor ugrani a 222 -es sorra
225: ....
 
(azert nem akartam ilyesmiket irni, mert velemenyem szerint egy ilyen huzas melysegesen megserti az olvaso
onerzetet, mert hulyenek van nezve, mert akarmennyire is az elejen legyen a programozasi ismereteknek azt
egybol kitalalja, hogy a cpu-ban nem ilyen szep-fogalmazasos modon mennek a dolgok)
 
12.fuggveny hivas: ennek is a matematikabol kolcsonvett alapjai vannak, tipikusan van egy elkulonitett
program reszlet aminek van egy cime nyilvan, namost fut a foprogram, majd mikor szuksegunk van az elkulonitett
reszre, akkor annyit mondunk, hogy eltaroljuk azt a cimet ahol vagyunk (jobban mondva a kovetkezot) es elugrunk
az elkulonitett programreszhez, ott lefutnak szepen egymas utan az utasitasok, majd a vegen az van, hogy ugorj
vissza az eltarolt cimre (most mar lathato, hogy miert a kovetkezo cimet kellett eltarolni :)
ez ilyen egyszeru, szoktak meg valamilyen adatot/parametert adni az elkulonitett programresznek, ill. az
elkulonitett szokott meg vissza adni erteket, pl. a fuggvenyem az, hogy a bejovo valtozo erteket megszorozza
kettovel es ezt adja vissza, akkor ha a foprogrambol meghivom ezt a fuggvenyt egy 10-es parameterrel, akkor
20-al jon vissza mint visszateresi ertek
 
13.megszakitas: ennek szerencsere csak a neve furcsa, amugy egy remek jo szolgalatot nyujto cuccos :)
itt arrol van szo, hogy nem nekem kell hivni egy elore meghatarozott fuggvenyt, hanem az automatikusan meghivodik,
ha egy szinten elore beprogramozott feltetel teljesul (igaz lesz), gondoljuk meg mifele kavarodas volna, ha nem
lehetne igy elore beprogramozni a fuggvenyt vagy a vegrehajtodasi feltetelet :)
 
milyen feltetelek lehetnek ezek? pl. egy vonal lehuzodik a foldre, megnyomnak egy gombot, eltelt egy adott ido,
minden egyes millisec -nel meghivodik egy fuggveny, a marha program nullaval akart osztani :)
 
 
*** igen, igen, ide ugrottak a profi programozok, na most, ha az un. state-machine is a mindennapi programozas
resze, akkor arra kernem meg oket, hogy megy egyszer, de mostmar utoljara :) legyenek szivesek ugrani a ****
reszhez, ahol a tenyleges iranyvaltos pwm algoritmus kerul ismertetesre
 
 
szoval akkor mi is ez a state-machine, nos ez egy programozasi trukk, amivel idot es energiat takarithatunk meg
magunknak, az algoritmusok igen nagy resze pontosan azert van kitalalva, hogy ne kelljen sokat dolgozni, vagy
tul sok mindenre figyelni, tul sok minden fejben tartani, a masik reszukkel a vegrehajtas hatekonysagat tudjuk
novelni (a harmadik tipusnal szellemi perverzioinkat eljuk ki :)
 
a state-machine eseteben kulonallo programreszek vannak, amik kozul mindig csak az egyikben vagyunk, ott futnak
a programsorok, ezekre a kulonallo programreszekre igaz egy allapot (state) azaz azert vagyok az egyikben mert
egy jol definialt allapot van ervenyben, hetkoznapi pelda: "lefekveses allapot" "reggelizo allapot" "tv nezo allapot"
"bevasarlos allapot" "dolgozo allapot" tehat ha a tv nezo allapotban vagyok akkor nyilvan nem vasrolok be, nem
dolgozok, hanem ulok a fotelban es nezem a musort, erre a tevekenysegre pontosan ez jellemzo, a masik fontos dolog,
hogy tudjak mozogni az egyes allapotok kozott, most kepzeljuk el, ha orokre beragadna valaki a bevasarlos allapotba
:) nos pontosan ugy mint a hetkoznapi eletunkben ezekhez az allapot-valtasokhoz (mozgasokhoz) egy nagyon jol
meghatarozott feltetel tartozik: ha mar keso este van es faradt vagyok, akkor a tv nezos allapotbol atmegyek a  
lefekveses allapotba, de nyilvan olyat nem lehet csinalni (vagy nem erdemes) hogy a bevasarlos allapotbol atmegyek
csak ugy hirtelen ott a boltban a lefekvesesbe :) de olyan azert van, hogy a bevasarlosnal ha mar bevasaroltam
vagy tul sokan voltak a boltban es feladtam, akkor atmegyek a hazamenos allapotba, majd ha mar otthon vagyok akkor
ha faradt vagyok akkor atmegyek a lefekvesesbe, vagy a tv nezosbe ha meg nem vagyok faradt
 
szoval a lenyeg, hogy jol meghatarozott helyek vannak, jol meghatarozott atmenesi feltetelekkel a jol meghatarozott
atlepesi helyekre
 
maga az implementalasa a state-machine -nak ugy tortenik, hogy van egy valtozonk a state_num, ez mutatja, hogy melyik
allapotban vagyunk es egy fociklusbol allandoan megnezzuk, hogy milyen allapothoz, milyen programreszek szuksegesek,
tulajdonkeppen azt biztositjuk, hogy ha a state_num egyenlo 3-al akkor a 3-as programreszlet fusson le, de a tobbi
ne, termeszetesen az atmenetekre figyelni kell, tehat, ha a 3-asban vagyunk akkor kell figyelni, hogy nem e teljesult
egy atmenesi feltetel ami mondjuk atvisz minket az 5-os programreszbe, valahogy igy:
 
 
program itt indul:
   .....
   .....
   state_num legyen egyenlo 2-vel
   .....
   .....
 
fociklus:
 
 
ha state_num egyenlo 1 -el akkor ezeket csinald:
   .....
   .....
   ha ez akkor state_num legyen egyenlo 2-vel
   .....
   ha az akkor state_num legyen egyenlo 3-al
   .....
   ugorj a kozos-sorra
 
 
ha state_num egyenlo 2 -vel akkor ezeket csinald:
   .....
   .....
   ha akarmi akkor state_num legyen egyenlo 3-al
   .....
   ugorj a kozos-sorra
 
 
ha state_num egyenlo 3 -al akkor ezeket csinald:
   .....
   .....
   ha ez meg az, akkor state_num legyen egyenlo 1-el
   .....
   .....
   .....
   ugorj a kozos-sorra
 
 
kozos-sor:
   .....
   .....
   .....
   akar tv-t nezek akar alszok, lelegeznem azert kell!!!
   .....
   .....
   ugorj a fociklus-sorra
 
 
 
 
**** iranyvaltos pwm algoritmus itt kezdodik:
 
 
magyarazo abra a konfiguraciorol:
 
 
http://i50.tinypic.com/xfalv6.gif" border=0>
 
 
 
 
 
ezekre a a program hivatkozik es hogy mi tortenik ilyenkor:
 
 
A_OFF      kikapcsolja az A kapcsolot
B_OFF      kikapcsolja a B kapcsolot
C_OFF      kikapcsolja a C kapcsolot
D_OFF      kikapcsolja a D kapcsolot
 
A_ON      bekapcsolja az A kapcsolot
B_ON      bekapcsolja a B kapcsolot
C_ON      bekapcsolja a C kapcsolot
D_ON      bekapcsolja a D kapcsolot
 
W_A_ON      varakozas, hogy az A kapcsolo bekapcsolodjon
W_B_ON      varakozas, hogy a B kapcsolo bekapcsolodjon
W_C_ON      varakozas, hogy a C kapcsolo bekapcsolodjon
W_D_ON      varakozas, hogy a D kapcsolo bekapcsolodjon
W_CD_ON      varakozas, hogy a C es a D kapcsolo bekapcsolodjon
 
W_PWM_ON   a pwm magas/aktive idejet kivarja
 
W_A_OFF      varakozas, hogy az A kapcsolo kikapcsolodjon
W_B_OFF      varakozas, hogy a B kapcsolo kikapcsolodjon
W_C_OFF      varakozas, hogy a B kapcsolo kikapcsolodjon
W_D_OFF      varakozas, hogy a B kapcsolo kikapcsolodjon
W_CD_OFF   varakozas, hogy a C es a D kapcsolo kikapcsolodjon
 
W_PWM_OFF   a pwm alacsony/passzive idejet kivarja
 
 
 
es akkor a program:
 
 
inicializalas:
 
   K_MIN=0;
   K_KOZ=200;
   K_MAX=400;
 
   A_OFF
   B_OFF
   C_OFF
   D_OFF
 
   kar=kar_old=K_KOZ;
 
   state=0;
 
vissza:
      if(state==0)
         {   //itt egyik fet sincsen bekapcsolva
         if(kar==K_MIN)
            {
            state=11;
            goto kozos;
            }
         if(kar==K_MAX)
            {
            state=8;
            goto kozos;
            }
         if(kar==K_KOZ)
            {
            state=1;
            goto kozos;
            }
         if((kar>K_MIN)&&(kar<K_KOZ))
            {   //hatra
            t_on=  T_ON[K_KOZ-kar];
            t_off=T_OFF[K_KOZ-kar];
            state=6;
            goto kozos;
            }
         if((kar>K_KOZ)&&(kar<K_MAX))
            {   //elore
            t_on=  T_ON[kar-K_KOZ];
            t_off=T_OFF[kar-K_KOZ];
            state=4;
            goto kozos;
            }
         goto kozos;
         }
      if(state==1)
         {   //state 0 -> full stop
         C_ON
         D_ON
         W_CD_ON
         state=2;
         goto kozos;
         }
      if(state==2)
         {   //full stop C-D bekapcsolva
         if(kar!=kar_old) state=3;
         goto kozos;
         }
      if(state==3)
         {   //full stop -> state 0
         C_OFF
         D_OFF
         W_CD_OFF
         state=0;
         goto kozos;
         }
      if(state==4)
         {   //normal elore
         if(kar!=kar_old) state=5;
         A_ON
         W_A_ON
         D_ON
         W_PWM_ON
         A_OFF
         W_A_OFF
         C_ON
         W_PWM_OFF
         C_OFF
         D_OFF
         W_CD_OFF
         goto kozos;
         }
      if(state==5)
         {   //normal elore -> state 0
         state=0;
         goto kozos;
         }
      if(state==6)
         {   //normal hatra
         if(kar!=kar_old) state=7;
         B_ON
         W_B_ON
         C_ON
         W_PWM_ON
         B_OFF
         W_B_OFF
         D_ON
         W_PWM_OFF
         C_OFF
         D_OFF
         W_CD_OFF
         goto kozos;
         }
      if(state==7)
         {   //normal hatra -> state 0
         state=0;
         goto kozos;
         }
      if(state==8)
         {   //state 0 -> full elore
         D_ON
         W_D_ON
         A_ON
         W_A_ON
         state=9;
         goto kozos;
         }
      if(state==9)
         {   //full elore A-D bekapcsolva
         if(kar!=kar_old) state=10;
         goto kozos;
         }
      if(state==10)
         {   //full elore -> state 0
         D_OFF
         W_D_OFF
         A_OFF
         W_A_OFF
         state=0;
         goto kozos;
         }
      if(state==11)
         {   //state 0 -> full hatra
         B_ON
         W_B_ON
         C_ON
         W_C_ON
         state=12;
         goto kozos;
         }
      if(state==12)
         {   //full hatra B-C bekapcsolva
         if(kar!=kar_old) state=13;
         goto kozos;
         }
      if(state==13)
         {   //full hatra -> state 0
         C_OFF
         W_C_OFF
         B_OFF
         W_B_OFF
         state=0;
         goto kozos;
         }
kozos:      kar_old=kar;
      //itt lehet frissiteni a kar erteket
      if(kbhit())
         {
         c=getch();
         if(c==Ƌ') kar=K_MAX;
         if(c==Ɗ') if(kar<K_MAX) kar++;
         if(c==Ɖ') kar=K_KOZ;
         if(c==ƈ') if(kar>K_MIN) kar--;
         if(c==Ƈ') kar=K_MIN;
         }
 
      goto vissza;
 
 
 
 
a magyarazat a kovetkezo reszben fog szerepelni, de addig is, akik meg csak most ismerkednek a programozassal
nezzek meg, hogy milyen sok mindent mar siman meg tudnak erteni a programbol!!! (termeszetesen minden egyes
betu/jel el lesz magyarazva, szoval nem kell felni :)
 
akiket pedig a konkret pwm vezerles erdekli elsosorban, azok magat a kapcsolok kapcsolgatasat tanulmanyozzak
a kovetkezokben errol is lesz szo reszletesen
 
minden esetre az mar lathato, hogy egy ilyen masszive vezerlo azert nem olyan tul egyszeru dolog, na ugy ertem,
hogy oda kell figyelni, ha korrekt vagy egy megoldashoz, akkor a megoldas is korrekt lesz hozzad
 
a kovetkezokben, ha nem huzodik el nagyon az ismertetes, gozerovel elkezdjuk novelni a teljesitmenyt
ez abban fog megnyilvanulni, hogy egyreszrol kidobaljuk a p-feteket, masreszrol a tapfeszultseggel felmegyunk
ameddig csak tudunk :)
 
 

crgs7u9wg

kernem egy operatort, hogy az elozot torolje, mert nem ment at a tabulator, most probalom fix space -el, koszonom :)
 
 
 
 
 
 
kerem a gyakorlo/profi programozokat, hogy stilszeru legyek, ugorjanak a *** bekezdeshez :)
 
 
sokat tortem a fejemet azon, hogy a most kovetkezo reszbe erdemes e belemenni, de vegulis ugy dontottem,
hogy mivel olyan egyszeru fogalmak fognak szobakerulni, hogy nem erne meg nem megtenni, arrol mar nem is
beszelve, hogy az itt megismerteket ha masra nem is, de egy alap eligazodashoz mindenki fel fogja tudni hasznalni
 
ha eddig nem lett volna vilagos, a programozasrol lesz szo, ugy fogjuk megkozeliteni a dolog, hogy sorravesszuk,
hogy milyen reszekbol/fogalmakbol all a programozas:
 
1.utasitas: ez egy elemi egyseg ami megmondja a cpu -nak (processzor/feldolgozo egyseg), hogy mit kell csinaljon
pl: a+b, egy kutyanak is lehet adni utasitast: gyere ide!
 
2.memoria: egysegesen felosztott tarolo hely, pl. egy kockas fuzetlap, nyilvan azt jo tudni, hogy mi hol van
a memoriaban, tehat szuksegesek a memoria cimek is, a postas is igy tudja, hogy hova hozza nekunk a leveleket
 
3.program-memoria: itt van eltarolva maga a programunk, azaz az utasitasok amiket szeretnenk, hogy a cpu
megcsinaljon, pl. ha lekuldenek valakit vasarolni, akkor a bevasarlo cetlit lehet tekinteni program-memorianak
vagy pl. egy hataridonaplot, hogy az elet ne legyen tul bonyolult, az egyes utasitasokat szepen egymas utan
szoktak elhelyezni a program-memoriaban, tehat amikor az egyik dolgot megcsinaltuk, megyunk a masikra
 
4.munka-memoria: ez semmi tobb mint a programunknak adott munkaterulet, ahol o tetszolegesen tarolhat, torolhet
modosithat, megnezhet dolgokat
 
5.valtozo: ez egy nevvel ellatott munka-memoria cim es meret, pl. a kutya nevu valtozo ezek utan a fuzet 3 -dik
oldalan belul az 5 -os sor 12db kockaja lesz, szoval ez arra jo csupan, hogy ne kelljen ilyen hulyen beszelni,
hogy itt meg ott meg hol mennyi helyen, hanem csak azt mondom, hogy irjal 3 x-et a kutyaba, vagy na mi van
a kutyaban?
 
6.aritmetika: a matematikaban szereplo muveletek, tobbnyire alap muveletek, pl. osszeadas, kivonas, osztas, szorzas
gyokvonas, hatvanyozas
 
7.feltetel: valami vagy igaz vagy hamis, pl. ha azt mondom, hogy a feltetelem az, hogy "alma es korte", ami nyilvan
csak akkor lesz igaz, ha mind az alma es mind a korte valtozo igaz, minden mas esetben a feltetelem hamis
eleg sok feltetel lehetseges, pl. az un. relaciok is feltetelek, tehat, hogy valami egyenlo valamivel, valami
nem egyenlo valamivel, valami kisebb valaminel, nagyobb, nagyobb es egyenlo stb.
nem art megjegyezni, hogy egyes utasitasok vegrehajtasat lehet kotni feltetelekhez, szoval valamelyik utasitas
csak akkor hajtodik vegre, ha egy feltetel igaz
 
8.kulvilag-kapcsolat: nyilvanvaloan a programunknak szuksege lesz arra, hogy a kulvilagtol kapjon, ill. a annak
kikuldjon dolgokat, ilyenekre gondolok, hogy merevlemez, file, monitor, billentyuzet, printerport
 
9.programfutas vezerles: ez egy nagyon egyszeru es nagyon fontos dolog, fentiekben mar volt rola szo, hogy
a program utasitasaink szepen sorban helyezkednek el a program-memoriaban, sajnos egy ilyen merev szerkezettel
nem tul hatekonyan tudnank dolgozni, kepzeljunk el egy peldat: minden nap be kell menni dolgozni, szepen sorban
nap, naputan, igen am, de mi van akkor, ha hetvege van, vagy valamilyen unnep, vagy betegek vagyunk???
nos a merev szerkezet, erre nincsen tekintettel! szoval meg kell engednunk, hogy a programfutas flexibilis legyen
mint ahogyan ezt mindjart lathatjuk, es ami a lenyeg, hogy ezek utan mar keszen is vagyunk :)
 
10.direkt ugras: ez egyszeru dolog, a cpu egyszercsak rafut egy olyan utasitasra, hogy ugorjunk a 123 -as sorra
es akkor a kovetkezo utasitast mar onnan veszi szepen sorban, ameg nem tortenik megint egy programfutas vezerles
az milyen jo moka mikor pl. a 42-es sorban levo utasitasnak azt adom meg, hogy ugrojon a 42-es sorra :)
hazi feladat, hogy egy ilyen szituaciobol hogyan tud kikeveredni a cpu, ugy ertem ha egy ilyen megtortent, hogyan
tudunk megis feladatokat elvegezni
 
11.felteteles ugras: nos itt az, van, hogy csak abban az esetben ugrunk, hogyha valamilyen feltetel igaz, pl.
fut a programunk es kozben egy valtozo csokken, majd e programresz aljan az van, ha a valtozo nem nulla, akkor
ugorjon a programresz elejere, belathato, hogy igy lehet iranyitani, a valtozo segitsegevel, hogy egy
programreszlet hanyszor fusson le, nem akartam de megis irok ide egy peldat:
 
221: ....
222: csokkenteni a macska valtozot 1-el
223: kiirni a kepernyore a macska valtozo ketszereset
224: ha a macska nem egyenlo nullaval akkor ugrani a 222 -es sorra
225: ....
 
(azert nem akartam ilyesmiket irni, mert velemenyem szerint egy ilyen huzas melysegesen megserti az olvaso
onerzetet, mert hulyenek van nezve, mert akarmennyire is az elejen legyen a programozasi ismereteknek azt
egybol kitalalja, hogy a cpu-ban nem ilyen szep-fogalmazasos modon mennek a dolgok)
 
12.fuggveny hivas: ennek is a matematikabol kolcsonvett alapjai vannak, tipikusan van egy elkulonitett
program reszlet aminek van egy cime nyilvan, namost fut a foprogram, majd mikor szuksegunk van az elkulonitett
reszre, akkor annyit mondunk, hogy eltaroljuk azt a cimet ahol vagyunk (jobban mondva a kovetkezot) es elugrunk
az elkulonitett programreszhez, ott lefutnak szepen egymas utan az utasitasok, majd a vegen az van, hogy ugorj
vissza az eltarolt cimre (most mar lathato, hogy miert a kovetkezo cimet kellett eltarolni :)
ez ilyen egyszeru, szoktak meg valamilyen adatot/parametert adni az elkulonitett programresznek, ill. az
elkulonitett szokott meg vissza adni erteket, pl. a fuggvenyem az, hogy a bejovo valtozo erteket megszorozza
kettovel es ezt adja vissza, akkor ha a foprogrambol meghivom ezt a fuggvenyt egy 10-es parameterrel, akkor
20-al jon vissza mint visszateresi ertek
 
13.megszakitas: ennek szerencsere csak a neve furcsa, amugy egy remek jo szolgalatot nyujto cuccos :)
itt arrol van szo, hogy nem nekem kell hivni egy elore meghatarozott fuggvenyt, hanem az automatikusan meghivodik,
ha egy szinten elore beprogramozott feltetel teljesul (igaz lesz), gondoljuk meg mifele kavarodas volna, ha nem
lehetne igy elore beprogramozni a fuggvenyt vagy a vegrehajtodasi feltetelet :)
 
milyen feltetelek lehetnek ezek? pl. egy vonal lehuzodik a foldre, megnyomnak egy gombot, eltelt egy adott ido,
minden egyes millisec -nel meghivodik egy fuggveny, a marha program nullaval akart osztani :)
 
 
*** igen, igen, ide ugrottak a profi programozok, na most, ha az un. state-machine is a mindennapi programozas
resze, akkor arra kernem meg oket, hogy megy egyszer, de mostmar utoljara :) legyenek szivesek ugrani a ****
reszhez, ahol a tenyleges iranyvaltos pwm algoritmus kerul ismertetesre
 
 
szoval akkor mi is ez a state-machine, nos ez egy programozasi trukk, amivel idot es energiat takarithatunk meg
magunknak, az algoritmusok igen nagy resze pontosan azert van kitalalva, hogy ne kelljen sokat dolgozni, vagy
tul sok mindenre figyelni, tul sok minden fejben tartani, a masik reszukkel a vegrehajtas hatekonysagat tudjuk
novelni (a harmadik tipusnal szellemi perverzioinkat eljuk ki :)
 
a state-machine eseteben kulonallo programreszek vannak, amik kozul mindig csak az egyikben vagyunk, ott futnak
a programsorok, ezekre a kulonallo programreszekre igaz egy allapot (state) azaz azert vagyok az egyikben mert
egy jol definialt allapot van ervenyben, hetkoznapi pelda: "lefekveses allapot" "reggelizo allapot" "tv nezo allapot"
"bevasarlos allapot" "dolgozo allapot" tehat ha a tv nezo allapotban vagyok akkor nyilvan nem vasrolok be, nem
dolgozok, hanem ulok a fotelban es nezem a musort, erre a tevekenysegre pontosan ez jellemzo, a masik fontos dolog,
hogy tudjak mozogni az egyes allapotok kozott, most kepzeljuk el, ha orokre beragadna valaki a bevasarlos allapotba
:) nos pontosan ugy mint a hetkoznapi eletunkben ezekhez az allapot-valtasokhoz (mozgasokhoz) egy nagyon jol
meghatarozott feltetel tartozik: ha mar keso este van es faradt vagyok, akkor a tv nezos allapotbol atmegyek a
lefekveses allapotba, de nyilvan olyat nem lehet csinalni (vagy nem erdemes) hogy a bevasarlos allapotbol atmegyek
csak ugy hirtelen ott a boltban a lefekvesesbe :) de olyan azert van, hogy a bevasarlosnal ha mar bevasaroltam
vagy tul sokan voltak a boltban es feladtam, akkor atmegyek a hazamenos allapotba, majd ha mar otthon vagyok akkor
ha faradt vagyok akkor atmegyek a lefekvesesbe, vagy a tv nezosbe ha meg nem vagyok faradt
 
szoval a lenyeg, hogy jol meghatarozott helyek vannak, jol meghatarozott atmenesi feltetelekkel a jol meghatarozott
atlepesi helyekre
 
maga az implementalasa a state-machine -nak ugy tortenik, hogy van egy valtozonk a state_num, ez mutatja, hogy melyik
allapotban vagyunk es egy fociklusbol allandoan megnezzuk, hogy milyen allapothoz, milyen programreszek szuksegesek,
tulajdonkeppen azt biztositjuk, hogy ha a state_num egyenlo 3-al akkor a 3-as programreszlet fusson le, de a tobbi
ne, termeszetesen az atmenetekre figyelni kell, tehat, ha a 3-asban vagyunk akkor kell figyelni, hogy nem e teljesult
egy atmenesi feltetel ami mondjuk atvisz minket az 5-os programreszbe, valahogy igy:
 
 
program itt indul:
    .....
    .....
    state_num legyen egyenlo 2-vel
    .....
    .....
 
fociklus:
 
 
ha state_num egyenlo 1 -el akkor ezeket csinald:
    .....
    .....
    ha ez akkor state_num legyen egyenlo 2-vel
    .....
    ha az akkor state_num legyen egyenlo 3-al
    .....
    ugorj a kozos-sorra
 
 
ha state_num egyenlo 2 -vel akkor ezeket csinald:
    .....
    .....
    ha akarmi akkor state_num legyen egyenlo 3-al
    .....
    ugorj a kozos-sorra
 
 
ha state_num egyenlo 3 -al akkor ezeket csinald:
    .....
    .....
    ha ez meg az, akkor state_num legyen egyenlo 1-el
    .....
    .....
    .....
    ugorj a kozos-sorra
 
 
kozos-sor:
    .....
    .....
    .....
    akar tv-t nezek akar alszok, lelegeznem azert kell!!!
    .....
    .....
    ugorj a fociklus-sorra
 
 
 
 
**** iranyvaltos pwm algoritmus itt kezdodik:
 
 
magyarazo abra a konfiguraciorol:
 
 
http://i50.tinypic.com/xfalv6.gif" border=0>
 
 
 
 
 
ezekre a a program hivatkozik es hogy mi tortenik ilyenkor:
 
 
A_OFF        kikapcsolja az A kapcsolot
B_OFF        kikapcsolja a B kapcsolot
C_OFF        kikapcsolja a C kapcsolot
D_OFF        kikapcsolja a D kapcsolot
 
A_ON        bekapcsolja az A kapcsolot
B_ON        bekapcsolja a B kapcsolot
C_ON        bekapcsolja a C kapcsolot
D_ON        bekapcsolja a D kapcsolot
 
W_A_ON        varakozas, hogy az A kapcsolo bekapcsolodjon
W_B_ON        varakozas, hogy a B kapcsolo bekapcsolodjon
W_C_ON        varakozas, hogy a C kapcsolo bekapcsolodjon
W_D_ON        varakozas, hogy a D kapcsolo bekapcsolodjon
W_CD_ON        varakozas, hogy a C es a D kapcsolo bekapcsolodjon
 
W_PWM_ON    a pwm magas/aktive idejet kivarja
 
W_A_OFF        varakozas, hogy az A kapcsolo kikapcsolodjon
W_B_OFF        varakozas, hogy a B kapcsolo kikapcsolodjon
W_C_OFF        varakozas, hogy a B kapcsolo kikapcsolodjon
W_D_OFF        varakozas, hogy a B kapcsolo kikapcsolodjon
W_CD_OFF    varakozas, hogy a C es a D kapcsolo kikapcsolodjon
 
W_PWM_OFF    a pwm alacsony/passzive idejet kivarja
 
 
 
es akkor a program:
 
 
inicializalas:
 
    K_MIN=0;
    K_KOZ=200;
    K_MAX=400;
 
    A_OFF
    B_OFF
    C_OFF
    D_OFF
 
    kar=kar_old=K_KOZ;
 
    state=0;
 
vissza:
        if(state==0)
            {    //itt egyik fet sincsen bekapcsolva
            if(kar==K_MIN)
                {
                state=11;
                goto kozos;
                }
            if(kar==K_MAX)
                {
                state=8;
                goto kozos;
                }
            if(kar==K_KOZ)
                {
                state=1;
                goto kozos;
                }
            if((kar>K_MIN)&&(kar<K_KOZ))
                {    //hatra
                t_on=  T_ON[K_KOZ-kar];
                t_off=T_OFF[K_KOZ-kar];
                state=6;
                goto kozos;
                }
            if((kar>K_KOZ)&&(kar<K_MAX))
                {    //elore
                t_on=  T_ON[kar-K_KOZ];
                t_off=T_OFF[kar-K_KOZ];
                state=4;
                goto kozos;
                }
            goto kozos;
            }
        if(state==1)
            {    //state 0 -> full stop
            C_ON
            D_ON
            W_CD_ON
            state=2;
            goto kozos;
            }
        if(state==2)
            {    //full stop C-D bekapcsolva
            if(kar!=kar_old) state=3;
            goto kozos;
            }
        if(state==3)
            {    //full stop -> state 0
            C_OFF
            D_OFF
            W_CD_OFF
            state=0;
            goto kozos;
            }
        if(state==4)
            {    //normal elore
            if(kar!=kar_old) state=5;
            A_ON
            W_A_ON
            D_ON
            W_PWM_ON
            A_OFF
            W_A_OFF
            C_ON
            W_PWM_OFF
            C_OFF
            D_OFF
            W_CD_OFF
            goto kozos;
            }
        if(state==5)
            {    //normal elore -> state 0
            state=0;
            goto kozos;
            }
        if(state==6)
            {    //normal hatra
            if(kar!=kar_old) state=7;
            B_ON
            W_B_ON
            C_ON
            W_PWM_ON
            B_OFF
            W_B_OFF
            D_ON
            W_PWM_OFF
            C_OFF
            D_OFF
            W_CD_OFF
            goto kozos;
            }
        if(state==7)
            {    //normal hatra -> state 0
            state=0;
            goto kozos;
            }
        if(state==8)
            {    //state 0 -> full elore
            D_ON
            W_D_ON
            A_ON
            W_A_ON
            state=9;
            goto kozos;
            }
        if(state==9)
            {    //full elore A-D bekapcsolva
            if(kar!=kar_old) state=10;
            goto kozos;
            }
        if(state==10)
            {    //full elore -> state 0
            D_OFF
            W_D_OFF
            A_OFF
            W_A_OFF
            state=0;
            goto kozos;
            }
        if(state==11)
            {    //state 0 -> full hatra
            B_ON
            W_B_ON
            C_ON
            W_C_ON
            state=12;
            goto kozos;
            }
        if(state==12)
            {    //full hatra B-C bekapcsolva
            if(kar!=kar_old) state=13;
            goto kozos;
            }
        if(state==13)
            {    //full hatra -> state 0
            C_OFF
            W_C_OFF
            B_OFF
            W_B_OFF
            state=0;
            goto kozos;
            }
kozos:        kar_old=kar;
        //itt lehet frissiteni a kar erteket
        if(kbhit())
            {
            c=getch();
            if(c==Ƌ') kar=K_MAX;
            if(c==Ɗ') if(kar<K_MAX) kar++;
            if(c==Ɖ') kar=K_KOZ;
            if(c==ƈ') if(kar>K_MIN) kar--;
            if(c==Ƈ') kar=K_MIN;
            }
 
        goto vissza;
 
 
 
 
a magyarazat a kovetkezo reszben fog szerepelni, de addig is, akik meg csak most ismerkednek a programozassal
nezzek meg, hogy milyen sok mindent mar siman meg tudnak erteni a programbol!!! (termeszetesen minden egyes
betu/jel el lesz magyarazva, szoval nem kell felni :)
 
akiket pedig a konkret pwm vezerles erdekli elsosorban, azok magat a kapcsolok kapcsolgatasat tanulmanyozzak
a kovetkezokben errol is lesz szo reszletesen
 
minden esetre az mar lathato, hogy egy ilyen masszive vezerlo azert nem olyan tul egyszeru dolog, na ugy ertem,
hogy oda kell figyelni, ha korrekt vagy egy megoldashoz, akkor a megoldas is korrekt lesz hozzad
 
a kovetkezokben, ha nem huzodik el nagyon az ismertetes, gozerovel elkezdjuk novelni a teljesitmenyt
ez abban fog megnyilvanulni, hogy egyreszrol kidobaljuk a p-feteket, masreszrol a tapfeszultseggel felmegyunk
ameddig csak tudunk :)
 
 

crgs7u9wg

elnezest igy sem mukodik :( ha valakit nagyon zavar, hogy a programnal nincsenek meg a tabulatorok, akkor maganban atkuldom neki a txt file -t, vagy valami tanacsot elfogadnek ezugyben :)

000000000

Javaslat: készíts printscreent az editorról és szúrd be,vagy linkeld a képet.

keri

Én megírtam Wordben szerkesztve, és csak a linket raktam fel.
Bár igaz hogy úgy könnyebben elsikkad de áttekinthető, lementhető, nyomtatható.
Valahogy így: http://cid-a35d444abee610b6.skydrive.live.com/self.aspx/CNC%20dolgok/T%C3%A1rgyfot%C3%B3z%C3%A1s.doc" TARGET=_fnew>Fotózás alapjai

Szalai György

Én is másolom ezt az egész © alfcoder attrakciót Word-be és fordítom programozó-Magyarról  bevásárlós-Magyarra.
De már lefutott ez a programrész, most ugrok a TV nézősre, mert annak teljesültek a feltételei.

s7manbs8

Végálláshoz csináltam egy kis paneltervet, opto réshez jó, és a rés tranzisztora, mint kapcsoló funkcionál, sorosan kötött végállásra jó.
 
http://belaworld.extra.hu/anyagok/schema.jpg" border=0>
 
http://belaworld.extra.hu/anyagok/board.jpg" border=0>

s7manbs8

Azt hiszem ez olyan egyszerű hogy kaparós technikával csinálom meg, mert csak egy kell most hirtelen, már látni szeretném, a 4. forgó tengelyt végállásra beállni.

s7manbs8

KisKZ !
 
Csináltam egy ARDUINO shieldet.
 
 
http://belaworld.extra.hu/anyagok/board2.jpg" border=0>

43pbwjg8s

Szuper!!!!
Kérek belőle! :)
Egyet rendelek tőled!
 
Ez soros ha jól látom?