Fórum témák
» Több friss téma |
Fórum
Kell hogy legyen, a back emf módszerrel a motor tekercseinek feszültsége leosztva komparátorokat kapcsolgat, ebből lehet tudni hol áll a forgórész és melyik tekercsre kell feszültséget kapcsolni.
Nem forog. A hdd motorokon nincs visszacsatolás.
Csak átmásolom ide is a teljes leírást: Idézet: „4 kivezetéses HDD motort szeretnék beüzemelni. Műszerrel kimértem a tekercsek közös pontját, majd egy ULN2003-as modulon keresztül próbálom meghajtani 16F628A PIC-el, melyen mikropascalban írt kód fut. A kódot 4 tekercsesre módosítva, teszteltem a modulhoz kapott 4 tekercses léptetőmotoron, mely mind a valóságban, mind proteuson tesztelve működik (bár hozzáteszem eléggé lassan). HDD motornál viszont csak lassú forgást, rángatódzást, ULN2003 melegedést sikerül elérnem. A mikropascal kódot próbáltam sokféleképpen variálni, netes leírásokra támaszkodva. (Egymás után léptetve a tekercseket, párosával léptetve a tekercseket, időzítéseken variálni, nyomógombbal csökkenteni az időközöket, ezzel gyorsítani folyamatában) A motor lábainak bekötése úgy gondolom rendben van, mivel a közös pontot kimértem, 3 tekecsnél pedig nem lehet sorrendet téveszteni. Vagy a modul gyenge a 12V-os motorhoz, vagy a kódban van a probléma...” ULN2003 modul A hozzászólás módosítva: Jan 24, 2018
Miért mit nem csinál? Ha nincs visszacsatolás a motor pozícióról (HALL, back EMF, enkóder) nem biztos hogy forogni fog.
Sziasztok!
HDD motor működtetésével kapcsolatban kértem segítséget az arra aktuális topicban, de mivel valószínűleg MikroPascal kód hiba állhat a sikertelenségem mögött, ezért ide is bemásolnál a topic hivatkozását: HDD motor beüzemelése mikropascal kóddal Az említett kód 16F628A PIC-hez, mely ULN2003-on keresztül vezérelné a motort:
Sziasztok!
Segítséget szeretnék kérni LCD-n menü megjelenítésére, illetve a menüpontok kiválasztásával, almenü megjelenítésére, a legkevesebb memória felhasználásával. Eddig úgy csináltam, hogy az egyes menüpontok között nyomógombokkal lépkedtem. Az aktuális menü pont pedig villogott. A megjelenítés while és case ciklussal történt, de zabálta a memóriát. Tudna valaki egy memória kímélőbb módszert?
Szia!
Köszi az infót. Ezt fogom alkalmazni, hogy ne kelljen megjegyezni, hogy melyik bitet milyen jelzésre állítottam be.
var
kerdes : byte; kerdes0 : sbit at kerdes.0; kerdes1 : sbit at kerdes.1; if kerdes1=0 then kerdes0:=1; vagy ha nincs definiálva a bit: if kerdes.1=0 then kerdes.0:=1;
if (kerdes and 2)=0 then kerdes:=kerdes or 1;
A help-ből:
function TestBit(register, rbit : byte) : byte; procedure SetBit(var register : byte; rbit : byte); Üdv!
Sziasztok!
Régen programoztam mikropascalban, sokat felejtettem. Kérek egy kis segítséget! Hivatkozhatok egy változó bitjére így pl: . . var kerdes:byte; kedes.0:=kerdes0; kerdes.1:=kerdes1; . . if kerdes1=0 then kerdes0:=1; Vagyis, ha a kerdes nevű változó első bitje 0, akkor a kerdes nevű változó nulladik bitje legyen 1.
Helló Mindenkinek!
Végül sikerült megtalálni a hibát, ami csak részben volt szoftveres. A TRISC teljesen kimenetre volt állítva, miután erre rájöttem, a kommunikáció elindult a fent leírtak szerint. Azonban a szervók még mindig rángatóztak, nem akartak pontosan beállni, ráadásul a 0. kimenet nem is csinált semmit. Végül itt lett a másik hiba, ugyanis ez és a táp között egy szabad szemmel nem is látható rövidzárlat volt. Ez zavarta be az egész IC-t, miután megszüntettem, tökéletesen működik . Sőt, mivel kezelése egyszerű, ajánlom is az IC-t, ha valaki több szervót kíván egyszerre vezérelni.Üdvözlettel: Egon
Helló!
Itt elvileg a zárójelben megadjuk az I2C kommunikáció sebességét frekvenciában (decimális számként), ami ebben az esetben 100kHz. Ez a már említett iránytűs programomban működött, szerintem máshol lesz a hiba. Üdv: Egon A hozzászólás módosítva: Feb 1, 2015
Szia!
Bár nincs tapasztalatom ennél a programnál de így biztosan jó az init? Idézet: „I2C1_Init(100000);” Ott a zárójelben mit adsz meg? Ha bináris formában adod meg, azt nem kéne valahogy jelölni, illetve mind a 8 bitet kiírni (még ha a legfelső 2 bit 0, akkor is)?
Helló Mindenkinek!
A következő probléma miatt szeretném a segítségetek kérni. Egy PIC16F886 és az alábbi szervo vezérlő IC Bővebben: Link között próbálok két napja I2C kommunikációt kialakítani, de az nem akar semmire sem reagálni. A dokumentációja alapján nem lenne bonyolult, hisz csak küldeni kell neki a megfelelő regiszterbe értékeket, de a leírtak alapján nem mozdulnak meg a szervo motorok. Az alábbi kóddal próbálkozom:
Leírom pontosan, hogy is néz ki az egész, és hogy eddig mivel próbálkoztam. Az IC címlábait egy 10kOhm-os ellenállással a GND-re kötöttem, így a címe 40(0x28) lett. Próbálkoztam ezzel a címmel először, de aztán rájöttem, hogy ebben nincs benne az írásra utasító bit, ezért ezt még hozzátettem, így lett belőle 80(0x50). A konfiguráláskor egy belső regiszter, a 60 értékét kell 1-re állítani, hogy megjelenjenek a jelek a kimeneten. A szervok regiszterei 0-11 ig vannak, az erre küldött értékek jelennek meg a megfelelő számú szervora kötött kimeneten. Végigpróbáltam ezeket a regisztereket, a 60-ra már küldtem 0x01 et, és 0xFF-et is, ennek a regiszter címét is megtoldottam már írásbittel, de semmi. Hiába foglalkoztam már egy iránytű modullal kapcsolatban ezzel a kommunikációval (és az könnyen, gyorsan, jól működött), itt nem tudom, mit ronthattam el, de az IC-re kötött szervók meg sem mozdulnak. Az IC valószínűleg működik, mert ha soros porton át, a PIC-en keresztül küldve a megfelelő bytokat bizonyos bytokat bizonyos sorrendbe bevesz, ha pedig nem a protokoll szerint járok el, akkor megáll a program a PIC-ben. A zavar ott van, hogy 40-es, és 80-as címen is beveszi ezeket a küldött értékeket. Egyszerűen tanácstalan vagyok, hogy hol a hiba. Valakinek valami ötlet esetleg, vagy valaki találkozott már hasonlóval? A válaszokat előre is köszönöm! Üdvözlettel: Egon
Elég furcsán csinálja ezeket a dolgokat. Az asm-be csak az általad írt részt fordítja be, a teljes programot az lst fájlban lehet megnézni, de abban mindenféle más is van. Gondolom nem akartak újrafeldolgozható asm forrást. Az lst-ből azonban egy szövegszerkesztővel és némi rabszolgamunkával ki lehet csalni.
Köszi a választ!
És fordításnál készít teljes asm fájlt a fordító? Csak mert az előbb buildoltam egy példaprogramot, de csak egy része volt az asm fájlban, amiből hiányoztak még pl. a rutinok deklarálása. Viszont a fordításnál nem találtam "emészthető" include fájlokat..
Maximálisan. Csak programkorlát van benne, egyébként full verzió.
Hali!
Letöltöttem az ingyenes verziót, amiben 2k program korlát van. Mennyire optimalizál a fordítója?
A stringet külön deklaráld változóként, ill, ha értéket nem ad vissza a funkció, akkor egy procedure is elegendő;
Sziasztok!
Szeretnék functiot írni, azzal a céllal, hogy a program különböző helyén keletkező szöveget, kiírassak lcd-re.
fordításnál kiakad a fordító: 61 343 Complex type parameter must be passed by reference proba.mpas 61 304 Syntax error: Expected ")" but "n1" found proba.mpas 61 304 Syntax error: Expected ":" but "," found proba.mpas 61 337 Unknown type "n2" proba.mpas 61 304 Syntax error: Expected ";" but ":" found proba.mpas 61 304 Syntax error: Expected "begin" but "byte" found proba.mpas 61 373 Routine 'kiir' is missing implementation proba.mpas 61 304 Syntax error: Expected ";" but "byte" found proba.mpas 61 304 Syntax error: Expected "." but ")" found proba.mpas 0 102 Finished (with errors): 12 okt. 2014, 17:49:24 proba.mpppi Hogy lehet ezt megoldani? A hozzászólás módosítva: Okt 12, 2014
Sziasztok!
Én rögtön az elején törlöm, mivel ha fontos az időzítés, akkor így pontosan egyformák lesznek az idők. Aztán rutánna jöhet a többi tendő, persze az inerrupt a lehető legrövidebb legyen. (Bocs, hogy én nem a PORTB IT flag-re adok példát, de szerintem ott is mükszik.)
A billentyü lekérdezést a főprogramba végezd:
Üdv:gapati
Azt kell erteni ezen, hogy mikor valtozas van a porton, es bebillen az IT flag (RBIF), elobb irni, vagy olvasni kell a portot, hogy torolhesd a flagot. mikropascal-ban nem programozok, tehat igy peldat sem tudok prezentalni. Viszont esetleg valami C forrast tudok feltenni holnap. Abbol lathato lesz hogyan is van ez. Talaltam egy peldat a mikroE oldalon:
A hozzászólás módosítva: Szept 12, 2014
A nyomógombok állapotát ne az interrupt-ban vizsgáld, hanem a fő programrészben, pergésmentesítéssel.
Egyébként nem látok porta.5 és porte.0 lábakra hivatkozást a kódodban.
Sziasztok!
Szeretném megkérdezni, hogy foglalkozott-e már valaki grafikus kijelzővel. Valamiért nem sikerül használni az xGLCD unit függvényeit. Köszönettel:gapati
Szia!
Ezen pontosan mit ertsek? Mit olvasok és mit torlok? Egy kis pelda jol jonne.
A port interrupt torleshez elobb egy port olvasast kell csinalni.
itt az a progi ami nem működik
A hozzászólás módosítva: Szept 10, 2014
Sziasztok!
18f4520-ra szeretnék több megszakítást csinálni. Az egyik a tmr0 1 sec megszakítással,ez adja az időzítéseknek a számlálandó impulzusokat. A másik, az ra5 és re0 lábakon levő nyomógombok együttes lenyomása adna egy megszakítást és belépne egy menübe, a harmadik az az rb0-rb1-rb2 lábakon létrejött szintváltozás adna megszakítást és attól függően, hogy melyik lábon történt változás (pl: zárlati esemény), az lcd-n megjelenik a kiváltó esemény. A timer megszakítás működik, de a menübe lépés megszakítása még nem. Így azt úgy oldottam meg, hogy a timer megszakításba tettem az ra5 és re0 lábak figyelését és az esemény egy regiszter egy bitjét állítja át és ezt a bitet main programban vizsgálva tudok a menübe lépni, de úgy érzem ez nem elegáns, a zárlat figyelésről nem is beszélve . |
Bejelentkezés
Hirdetés |



. Sőt, mivel kezelése egyszerű, ajánlom is az IC-t, ha valaki több szervót kíván egyszerre vezérelni.