A privát üzenet rendszerben karbantartásokat végzünk. Lassulások előfordulhatnak!
Fórum témák

» Több friss téma
Fórum » MikroPascal kérdések
 
Témaindító: bozsokiandras, idő: Máj 15, 2006
Témakörök:
Lapozás: OK   28 / 29
(#) zenetom válasza Prendick hozzászólására (») Jan 7, 2015 /
 
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..
(#) Prendick válasza zenetom hozzászólására (») Jan 7, 2015 / 1
 
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.
(#) egonka92 hozzászólása Feb 1, 2015 /
 
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:
  1. I2C1_Init(100000);                  
  2.  
  3. I2C1_Start();           // issue I2C start signal
  4. I2C1_Wr($50);          // szervo_cime 0-0 állásnál +W
  5. I2C1_Wr($3C);             // On/Off output kapcsoló On állás (60 as regiszter)
  6. I2C1_Wr($01);          // elozo erteke
  7. I2C1_Stop();            // issue I2C stop signal
  8.  
  9. I2C1_Start();           // issue I2C start signal
  10. I2C1_Wr($50);          // szervo_cime 0-0 állásnál +W
  11. I2C1_Wr($00);             // szervo cime
  12. I2C1_Wr($7F);          // szervo ciméhez tartozó érték
  13. I2C1_Stop();            // issue I2C stop signal
  14. delay_ms(2000);


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
(#) zenetom válasza egonka92 hozzászólására (») 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)?
(#) egonka92 válasza zenetom hozzászólására (») Feb 1, 2015 / 1
 
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
(#) egonka92 válasza egonka92 hozzászólására (») Feb 4, 2015 /
 
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
(#) glaci hozzászólása Szept 10, 2015 /
 
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.
(#) gthomas válasza glaci hozzászólására (») Szept 10, 2015 /
 
A help-ből:

function TestBit(register, rbit : byte) : byte;

procedure SetBit(var register : byte; rbit : byte);

Üdv!
(#) glaci válasza gthomas hozzászólására (») Szept 10, 2015 /
 
Köszi
(#) Hp41C válasza glaci hozzászólására (») Szept 10, 2015 /
 
if (kerdes and 2)=0 then kerdes:=kerdes or 1;
(#) ha1drp válasza glaci hozzászólására (») Szept 10, 2015 /
 
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;
(#) glaci válasza ha1drp hozzászólására (») Szept 10, 2015 /
 
Szia!
Köszi az infót. Ezt fogom alkalmazni, hogy ne kelljen megjegyezni, hogy melyik bitet milyen jelzésre állítottam be.
(#) glaci hozzászólása Máj 5, 2017 /
 
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?
  1. procedure beallit_leptet();  //------------------excel 2. kép  Beállítás
  2. begin
  3.    Lcd_Cmd(_LCD_CLEAR);
  4.    LCD_Out(1,1,'Be ll t s');Char_aa(1,3); Char_ii(1,6);Char_aa(1,8);
  5.    j:=1;
  6.    while porta.5=1 do
  7.      begin
  8.        case j of
  9.        1:begin teszt_uzem_blink;datum_unblink;uzemiert_unblink;fuggveny_unblink; end;
  10.        2:begin teszt_uzem_unblink;datum_blink;uzemiert_unblink;fuggveny_unblink; end;
  11.        3:begin teszt_uzem_unblink;datum_unblink;uzemiert_blink;fuggveny_unblink; end;
  12.        4:begin teszt_uzem_unblink;datum_unblink;uzemiert_unblink;fuggveny_blink; end;
  13.        end;
  14.        if Button(PORTB, 5, 15, 0) then j:=j+1;    //beallítás fel
  15.        if j>4 then j:=1;
  16.        if Button(PORTB, 4, 15, 0) then j:=j-1;   //beállítás le
  17.        if j<1 then j:=4;
  18.        if button(portb,7,15,0) then  //---kiléps select
  19.        begin
  20.          case j of
  21.            1:teszt_uzem();
  22.            2:datum_be();
  23.            3:uzemi_ert();
  24.            4:fuggveny();
  25.          end;
  26.        end;
  27.      end;
  28. end;

LCD kép.jpg
    
(#) progee hozzászólása Jan 24, 2018 /
 
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:

  1. program HDD_motor;
  2. begin
  3.   delay_ms(100);
  4.   cmcon := 0x07;
  5.  
  6.   trisb := 0;       //B lábak kimenetek
  7.   portb := 0;       //Minden B láb kikapcsol
  8.  
  9.   while true do
  10.   begin
  11.     portb.1 := 1;  //1. tekercs be
  12.     portb.3 := 0;
  13.     delay_ms(100);
  14.    
  15.     portb.2 := 1;  //2.tekercs be
  16.     portb.1 := 0;
  17.     delay_ms(100);
  18.  
  19.     portb.3 := 1;  //3.tekercs be
  20.     portb.2 := 0;
  21.     delay_ms(100);        
  22.   end;
  23. end.
(#) GPeti1977 válasza progee hozzászólására (») 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.
(#) progee válasza GPeti1977 hozzászólására (») Jan 24, 2018 /
 
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
(#) GPeti1977 válasza progee hozzászólására (») Jan 24, 2018 /
 
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.
(#) progee válasza GPeti1977 hozzászólására (») Jan 24, 2018 /
 
Akkor ez lényegesen bonyolultabb feladat mint ahogyan gondoltam.
Van bárkinek mikropascalban kódja ilyen vezérlésről?
(#) GPeti1977 válasza progee hozzászólására (») Jan 24, 2018 /
 
Nincsen de készítettem hasonlót, rakj fel rá 3 hall IC-t (nézz uána hogyan lesz 60 vagy 120 fokos elhelyezés felhúzóellenállás kell a táp felé kösd bemenetre, nézd meg az mc33035 ic hogyan forgatja a motort, a pdf jében van igazságtáblázat, de a kimeneteket nem kapcsolgatni kell hanem pwm-mel kell változtatni a kitöltést hogy tudd a fordulatszámot változtatni.
(#) progee válasza GPeti1977 hozzászólására (») Jan 24, 2018 /
 
Ez a project sem ma lesz készen
Hall szenzor nélkül is biztosan meg lehet oldani, mert a net tele van ilyen megoldásokkal, a PWM-ben viszont igazad lesz mert sok helyen említik, de egy kész áttekinthető megoldást nem találok.
Találtam viszont kész modult a feladatra kínában:

Hard Drive Controller
(#) GPeti1977 válasza progee hozzászólására (») Jan 24, 2018 /
 
Repülő modell "szabályzó", "ESC" néven is kapsz modellboltban, meg kell egy szervó teszter meghajtani, de ott már erős motort is kapsz.
(#) progee hozzászólása Feb 10, 2018 /
 
PIC kezdőknek topicban kértem segítséget egy 433MHz-es kapcsolással kapcsolatban.
Valószínűnek tartom, hogy szinkronizálási probléma van az adó és a vevő között.
Az alábbi áramkör került megépítésre: Manchester Code Library Demo
A probléma, hogy vezetékkel összekötve a két PIC-et rendben működik a program, viszont rádión, illetve a két PIC-et külön áramforrásról táplálva már csak hibakaraktereket kapok az LCD-n.
Szinkronizálási problémára gyanakszok.
Találkozott már valaki ezzel?
(#) Elektro.on válasza progee hozzászólására (») Feb 10, 2018 /
 
Szia!
Én is ki akarok próbálni egy ilyen modult. De azt olvastam az adatapján, hogy nem tud túl nagy adat sebességet. Én 2400 bps re emlékszem. Ja és a képen nem láttam rajta a 17cm körüli antennát.
A hozzászólás módosítva: Feb 10, 2018
(#) progee válasza Elektro.on hozzászólására (») Feb 10, 2018 /
 
Van rajta antenna. Kipróbáltam többféle netes leírást, és volt ahol feltekerték. Itt is épp úgy lett tesztelve, de azóta már kiegyenesítettem
Kisebbre kellene vennem a PIC sebességét?
(#) Elektro.on válasza progee hozzászólására (») Feb 10, 2018 /
 
Nem a PIC -ét, hanem a komunikáció sebeségét.
Még nem néztem meg, hogy a MikroPascal Manchasterex fügvényei miként működnek.
(#) jocc hozzászólása Okt 6, 2019 /
 
Sziasztok.

Leszedtem a mikroPascal for PIC legújabb fejlesztő környezetét.
Azt tapasztaltam, hogy a szögletes zárójel zárórészét, " ] " nem tudom írni.
Csak ebben a programban nem működik. Nem billentyű hiba.

Találkozott már valaki valami megoldással?
(#) SzilCsong hozzászólása Márc 2, 2021 /
 
Sziaszok

12F683-al próbálok egy nyomógombos bemenetet, de sehogy se reagál, nem érzékeli bemenetként, pedig be van állítva:
  1. trisio.4 :=1;  // nyomogomb
  2.  
  3.  
  4. if  gpio.4= 0 then
  5.  begin
  6.      gpio.2:=1;


Tehát a gpio 2 lenne a kimenet, a gpio4 pedig a bemenet.
nem történik reakció, bárhova kötöm a bemenetet.
(#) jefflynn válasza SzilCsong hozzászólására (») Márc 2, 2021 /
 
Alapból, reset után analógra áll be az összes portláb, ezért nem működik digitális bemenetként.
A hozzászólás módosítva: Márc 2, 2021
(#) SzilCsong válasza jefflynn hozzászólására (») Márc 2, 2021 /
 
Ezen kellene állítani?
  1. ansel:= 0;
  2.    CMCON0 := 7;
(#) jefflynn válasza SzilCsong hozzászólására (») Márc 2, 2021 /
 
Igen.
Következő: »»   28 / 29
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem