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:
Szia!
Ugyan nem mikropascal, de pont most találtam egy cikket a hackaday oldalon, ami ezzel a kérdéssel foglalkozik.
Szia,
Én hónapokkal ezelőtt nézegettem, de akkor belső Vref-et használtam és nem érdekelt. Ha jól emlékszem, akkor van egy javított A/D könyvtár, amivel lehet külső referenciát használni. De most nem találom, pedig nekem is kellene...
Sziasztok! Egy rádiós hőmérőt építek, TX-4MSIL adóval és BC-NBK vevővel. Az adó és vevő nélkül az adó out-ját a vevő in -jével összekötve tökéletesen működik a kapcsolás. Ha berakom az adót és a vevőt, nem jönnek a korrekt adatok. Szerintem a szinkronizálással lehet a baj. Készített már valaki ilyet? Esetleg egy példa program nincs nektek? Régebben már készítettem egy ilyet, akkor csak próbapanelen. Akkor a man_synchro -t kellett addig hívogatni, amíg egy megfelelő értékkel tér vissza. Ez akkor 62 volt. De most az akkor írt program sem működik. Beszúrom ide:[code=c] begin
ErrorCount := 0; ANSEL := 0; // Configure AN pins as digital I/O ANSELH := 0; C1ON_bit := 0; // Disable comparators C2ON_bit := 0; Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // Clear LCD display Lcd_Out(1,1,'Start'); delay_ms(200); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); sync:=5; Man_Receive_Init(); while TRUE do // Endless loop begin Lcd_Cmd(_LCD_FIRST_ROW); // Move cursor to the 1st row while sync<>62 do begin delay_ms(200); sync:=man_synchro; bytetostr(sync,st); lcd_out(1,1,st); // Initialize Receiver end; Lcd_Cmd(_LCD_CLEAR); while TRUE do // Wait for the "start" byte begin temp := Man_Receive(error); // Attempt byte receive if (temp = 0x0B) then // "Start" byte, see Transmitter example break; // We got the starting sequence //if (error <> 0) then // Exit so we do not loop forever // break; end; repeat begin temp := Man_Receive(error); // Attempt byte receive if (error <> 0) then // If error occured begin Lcd_Chr_CP('?'); // Write question mark on LCD Inc(ErrorCount); // Update error counter if (ErrorCount > 20) then // In case of multiple errors begin while temp<>62 do temp := Man_Synchro(); // Try to synchronize again //Man_Receive_Init(); // Alternative, try to Initialize Receiver again ErrorCount := 0; // Reset error counter end; end else // No error occured begin if (temp <> 0x0E) then // If "End" byte was received(see Transmitter example) Lcd_Chr_CP(temp); // do not write received byte on LCD end; Delay_ms(10); end; until ( temp = 0x0E ); end; // If "End" byte was received exit do loop end. -------------------------------------------------------------- MI lehet a gond?
Valahogy így nem?
Így már sokkal jobb, de a lényegen mit sem változtat!
![]()
Hello!
Így igaz. De ha olvashatatlan a program formátuma, akkor kevésbé lesz valaki lelkes, ha segíteni akar.. üdv! proli007
sziasztok
Ha nyomógombként deklarálom az egyik bemenetet
Viszont a nyomógomb pont minuszt kapcsol, hogy tudnám a programmal megértetni, hogy a Low érték tulajdonképpen az 1? Üdv
A programodban beolvasod a portbitet, es negalod a beolvasott bit erteket. Es maris ott az "1" ertek, ha a bemenet "0".
ok, de ez hogy néz ki a gyakorlatba?
próbálkoztam mindennel.
nyomogomb := not(nyomogomb); de nem segít, az a gáz, hogy erre a problémára még csak rá se tudok guglizni, holott szerintem egy pofonegyszerű dolog (annak aki csinált ilyet)
Nem vagyok pascalos, de esetleg a mintapeldakbol leshetnel egy kicsit. C-ben igy csinalom
Esetleg a telepitett mintapeldakba kellene belelesni, vagy a Mikroe oldalon szetnezni a nem keves irodalomban. A C-re pl van egy igen komoly leiras, gondolom basicra, es pascalra szinten irtak valami par soros ismertetot (par szaz oldal).
sajnos ez uPascalba nem működik, már próbáltam.
Szoval....
1.: Ha elkezdesz egy programnyelvvel programozni eloszor is meg kell ismerni a sajatossagai, operatorait, adattipusait, es ugy altalanosan mindent. E-nelkul ez nem programozas, hanem kinlodas, es a tobbiek molesztalasa. 2.:A MikroE oldalan talalhato egy 586 oldalas "User Manual" , kb 2.5 MB mintapeldat. Ezek letoltese es reszletes tanulmanyozasa nagyban fog segiteni az elorehaladasban.
Hello
Valahol a programodban nyilván vizsgálod a nyomogomb változó értékét. Nem értem, hogy miért gond a nyomogomb nullás értékét venni "megnyomott" állapotnak: pl. if nyomogomb = 0 then ... Egyébként a nyomogomb változót nem tudod invertálni, mert az egy bemenet (macro). Ha viszont neked mégis fontos, hogy 1 legyen a gomb állapotát jelző változó értéke megnyomáskor, akkor ezt tudom elképzelni megoldásnak: gomb:= not nyomogomb; A gomb pedig egy bit típusú változó, és a programban ennek az értékét vizsgáld. Üdv.
Szia
Nem rossz módszer, csak az a gond, hogy a ciklus elején meg kell értetni , hogy gomb:= not nyomogomb. Én meg pont ezt akartam elkerülni, de azért köszi. Üdv
Szia.
Miért nem használod a beépített "Button" függvényt?
Az oldalamon találsz rá példát.
Szia
Szoktam használni, úgy tudom csak pergésmentesítésre használatos, ráadásul ennél nem lehet elnevezni a portot, csakis a gpio-val lehet rá hivatkozni. Apropó, olyan függvényt nem tudsz véletlen, ami ennek gyakorlatilag az ellentettje, szóval x időn belül érkezik-e jel? Üdv
Sziasztok
Sípoltatni akarok piezzot. Valami jobb megoldás kellene, mert ez:
Brutálisan nyeli a memóriát. Üdv
Sziasztok!
3x4-es (matrix) keypad kezelésében tudna valaki segíteni? Egész pontosan a lenyomott gombot kéne kideríteni, de sajnos a mP beépített library-je nem jó, mert az külön porton lévő oszlop/sort nem kezeli, nekem meg a PORTC-n és D-n vannak ![]()
Szia
Valami hasonló módszer létezhet, mint az lcd lábkiosztásának deklarációjánál, bár példát én se láttam rá. Próbálgatni kell
a keypadport magának a keypad-nek a portját adja meg, ahová a sorok és oszlopok lábai vannak kötve, külön külön nem lehet megadni, hogy 1-es sor RB.3, 2-es sor RB.5..
![]() ![]()
Hello
Szerintem muszáj lesz saját keypad-szkennelő rutint írnod. A dolog úgy működik, hogy ha keypad-en pl. megnyomod a 7-es gombot, akkor keypad összeköti az 1-es és C lábát. Nos, a PIC 28:30 lábának bemenetnek kell lennie jelen esetben, a 23:26 -nak pedig kimenetnek. A PIC 23:26 lábait 0-ra állítod. Ezután a keypad A lábára magasat kapcsolsz és megnézed, hogy a keypad 1, 2, 3 lába közül melyik van alacsony, vagy magas szinten. Amelyik magas szinten van, ott az a gomb van megnyomva. Így megtudod, hogy az első sorban melyik gombok vannak megnyomva. Ezután ugyanígy végigmész az összes soron. Ha már érzékeled, hogy meg van nyomva az egyik gomb, akkor a függvényed adja vissza az annak a gombnak megfelelő számot. Ilyen keypad-del csak egyszerre egy gomb lehet megnyomva. Egyébként megkérdezhetem, hogy milyen programmal rajzoltad ezt a kapcsolási rajzot? Üdv.
Szia!
Köszönöm, én is kb ez alapján a logika alapján próbáltam megírni, a szkennelő rutint, csak nem sikerült, de neki esek mindjárt megpróbálom újból. A rajzot a "ISIS Professional" programmal csináltam, ezzel kompletten le lehet szimulálni a pic-be égetett program működését is.
Ha nem működne, akkor tedd fel ide a kódot és meglesem.
Üdv.
Szia!
Nos sikerült végül nagy nehezen megcsinálni, de a kód az gusztustalan lett, mindenesetre megosztom veled/veletek. Egyelőre ez így működik, de ha valaki le tudná ezt egyszerűsíteni, nagyon hálás lennék érte! Tehát íme a kód:
Kis változás: Szimulációban működött jól, a valóságban csak az első oszlop (1,4,7,*) működik...
![]()
sziasztok!
16f pic után elkezdtem foglalkozni 12f675 pic-vel. sajnos nem sikerült sok próbálkozás után sem megoldani egy darab led villogtatását gpio-n keresztül. így próbálkoztam:
korábbi hozzászólásokban olvastam, hogy a CMCON:=7; sorral még ki kell egészítenem az elején, de sajnos azzal sem működik. tudnátok segíteni?
Ha jól látom, a lábak nincsenek átállítva digit. I/O-ba.
már ezt is próbáltam. trisio elé és után is.
sajnos nem segített.
érdekesség, hogy a 3-as lábára rakott led, folyamatosan világít, bármilyen kódot is írok a pic-re. nem tudom ezt mi okozhatja.
3. láb világítása miatt, mi van beállítva oszcillátorként?
A project/edit menüpontban: Internal rc no clock legyen beállítva oszcillátornak. Üdv |
Bejelentkezés
Hirdetés |