Léptetőmotor vezérlést szeretnék építeni piccel (pic16f84-re gondoltam). Először csak egy sima step/dir vezérlést akarok, majd később bővíteni pwm-mel meg egyéb dolgokkal.
Az előre és hátra léptető eljárást már megírtam mikropascalban, csak az a probléma, hogy nem tudom hogy kell megoldani a bemenetről történő vezérlést. Addig oké, hogy a porta lesz a bemenet (trisa:=255), de utána hogy kell beolvasni az adatokat róla és hogy oldjam meg, hogy csak akkor lépjen a motor ha jelet kap a step lábon?
Simán elég if port a=1; vagy megszakítást is kell kezelni és ha kell akkor hogyan?
jaja, simán elég az if porta... megszakítást úgy sem kezel minden lábán a pic. egyébként meg sztem használj 16f628a-t vagy 16f627a-t. 99,8% ua. mint a 16f84 csak fele annyiba kerül, meg van benne belső oszci, +néhány cucc.
mikropaszkalhoz nem értek, de gondolom úgy kell megadni melyik láb, hogy porta.X=1 X helyén a portnak az a lába amelyiket lekérdezed, hogy milyen logikai állapot van rajta.
progi:
kell egy folyamatosan pörgő progi ami nézi a 2db bemeneti lábat: (ez most sima egy lépéses megoldás, de ha féllépésesre akarod akkor 8 állapot kell)
eleje:
if porta.0=1 then
if porta.1=1 then valami=valami-1
if valami=0 then valami=4
endif
if porta.1=0 then valami=valami+1
if valami=4 then valami=0
endif
endif
if valami=0 then kimenet=121 (kimenet helyett ihatsz portb-t is és akkor a uccso elötti elötti sor nem kell, gondolom van select case v hasonló utasitás amivel "szebbé" lehet tenni és nem ilyen if-es.)
if valami=1 then kimenet=82
if valami=2 then kimenet=423
if valami=3 then kimenet=121
portb=kimenet
pause 13
goto eleje
eléteszel egy 74ls191-est, ez lekezeli a lépések számlálását és az irányt, ezzel sem kell a picnek szenvedni. Kapcsolási rajz bővebben a hobbycnc oldalon: pdf
Ha megnézed a rajzot, akkor láthatod, hogy a pwm simán megoldható, mint ahogy meg is van benne oldva. Ez egy hobby cnc vezérlő kapcsolási rajza, ami léptetőmotorokat használ és pwm-ben hajtja őket.
A féllépés is megoldahtó.
Sziasztok
Nem akartam új topikot nyitni ezért ide írok.
Most kezdtem el foglalkozni mikropascal-al, ebbe kérném a segítséget.
Nem tudom hogy tudok olvasni bemenetet.
Írtam egy ilyet de nem akar működni
program pp;
begin
trisa:=1;
trisb:=0;
repeat
begin
if porta.0=1 then PORTB := 128
else portb:=0;
end;
until 0 = 1;
end.
az volt a tervem hogy az RA.0 portról olvasok ha az értéke 1 akkor az RB.7 -et bekapcsolja, de nem akar működni.
Köszönöm a választ, de sajnos még most se akarja azt csinálni amit én szeretnék.
Úgy néz ki nem akarja olvasni a portot, már póbáltam másikra tenni de ott se olvas.
Akkor próbáld nagy betűkkel. Már vagy egy éve nem foglalkoztam pascal nyelvel, és ezzel a programmal sem, de megkerestem egy régebbi programom, és ott nagybetüket használtam.
TRISA
TRISB
PORTA
PORTB
stb....
Ok
Megpróbálom remélem működni fog. Sajnos most már vége a munkaidőmnek, most már nem tudom kipróbálni. Ha kipróbálom jelezni fogom hogy működik vagy nem.
Köszi a segítséget
Itt inkább az lesz a probléma, hogy nem gondoltatok a többi periféria beállítására. Mivel a PIC típusa nincs leírva ezért általánosságban írom le a dolgokat:
16F-eknél a legtöbbször hiba a komparátor kikapcsolásának elmulasztása (CMCON regiszter).
18F-eknél pedig a portokat át kell kapcsolni digitálissá (ADCON1 regiszter).
A mikropascal nem adott ki hibát a "trisa:=1;" utasításra hiba nélkül fordította, a pic tipusát igaz nem írtam mivel ezt egy menübe kell beállítani, egyébként 16F628-ról van szó.
A kimenetet szépen tudom kapcsolgatni ahogy akarom, csak adatot nem tudok beolvasni vele. Most ismerkedem a mikropascal-al, és próbálok rájönni hogy is működik.
Sajnos most az elején már elakadtam egy ilyen egyszerű dolognál, mint az adat beolvasás valamelyik lábról.
Ok egy kicsit tényleg sántít, arra akartam rámutatni, hogy egy 8bites regiszternek adott értéket 1 bittel (csak egy kicsit furcsán jött ki ).
Viszont az F628 tartalmaz komparátort az A porton (mint ahogy arra gozi kollega is utalt)
Az ADCON0 regiszterben lehet kikapcsolni, ha jól emlékszem az alsó 3 bit aktív állapotában van kikapcsolva.
Azzal az utasítással, hogy trisa:=1; decimálisan írtuk be az értéket a regiszerbe. Ez megfelel 0x01-nek vagy 0000 0001-nek! Értelemszerűen, mivel nyolcbites regiszterről van szó, ezért deximálisan a legnagyobb kiküldhető érték 255(d)=1111 1111(b)=FF(h). Vagyis minden érték, amit nem definiálunk, hogy milyen számrendszerben van, mindig decimálisként lesz kezelve! Ez minden "normális" fodítónál így van.
Ha nem a RA portokra akarok digitális bemenetet csinálni 16F877-re hanem pl: RC-re akkor gondolom nem kell "ADCON1:=6" utasítás, vagy ott is kell?
Bocs ha kicsit hülyeségeket kérdezek, de szertném megtanulni, nem tudom ezeket a PIC adatlapjában meglehet találni mikor mit kell csinálni?