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:
Használtam már a közelmúltban legalább hatféle LCD-t, közülük két típust a ChipCAD EDT sorozatból ( EW162G0GR és EW20400GLY), de mindegyiknél alaphelyzetben alacsony szinten van az E és magasra húzásnál aktív.
Teljesen kizárt, hogy az EW162G0GLY-nál fordítva volna!
Kompatibilitással nincs gond, erre próbáltam figyelni. Mellesleg nem hinném, hogy a ChipCad nem kompatibilis kijelzőt árulna. (Egyébként ez is megtörténhetne)
Még annyi, hogy D1-D3-at nullára kötöttem. (4 bit)
Ez érdekes. Mert én a lentebb belinkelt kapcsolási móddal tudtam életre kelteni.
De biztosan igazad van. Át is dugdosom a panelon a vezetékeket, nagyon kíváncsi vagyok, hogy úgy működik-e. Egyébként a 20400 az hogy néz ki működés közben? Nagyon szemeztem vele, de képet működésekor nem láttam róla.
Ez mégsem működik.
Ha a kapcsolót úgy kötöm be, hogy az ad magas jelet, és egy ellenállással nullára húzom alapesetben az E lábat, akkor 1. probléma, hogy hiába csinálom végig az indítási procedúrát, nem vált kétsoros módba. 2. probléma, hogy a felső sorban azonnal kialakul a karaktersor, amit rákapcsolok, ha nem nyomom az EN gombot, ami felhúzza tápra a EN lábat. Ha a gombot nyomom, akkor tudok karaktert váltani (EN láb magason), de ahogy elengedem azonnal teleírja a felső sort az új karakterrel. Most már majdnem biztos vagyok benne, hogy ennél a típusnál ez fordítva működik... Ez azért is fura, mert EU-KS0066-ra hivatkoznak, abban meg az időzítéseknél magas jelű EN bit van, az enyém meg alacsony szintre működik. Namost a probléma, hogy idétlen ott mégegy tranyó a mikrochip mögött, de ha átírom a rutint, akkor lehet, hogy sok munkával elérem azt, hogy a következő kijelzőm nem fog működni. ![]() ![]() ![]()
Szia,
Lcd_Out(1,3,'1st row'); Lcd_Out(2,2,'2nd row'); Itt lesz a bibi mert dupla macskaköröm kéne, így másnak értelmezi a fordító. Lcd_Out(1, 3, "1st row"); Lcd_Out(2, 2, "2nd row"); Talán így menni fog.
Szia,
Köszi az észrevételt. A fordító ezt is szövegként értelmezi szerintem, legalábbis a színkódot úgy állította be. Sajnos az init() rész sem fut le, mert 1 soros marad a kijelző. De visszaépítem mindjárt a PIC-ket (most "kapcsolókon" lóg az LCD) és akkor kiderül a valóság.
Nekem gond nélkül megy így mindegyik lcd-m,
olyan viszont van amiben 1-2 láb fel van cserélve.
Nekem ez az első, így nincs mihez viszonyítanom.
Próbálkozom, és kiderül.
Ha jól látom a dolgokat, itt a hiba az LCDCON regiszter beállításának elmulasztása.
A vezérlő nélküli LCD hétszegmenses kijelzők működtetéséhez szükséges (ez a PIC ezt is tudja) az általad is használt RC2 láb, ami bekapcsolás után alapértelmezés szerint "LCD bias" funkciót látja el. A funkció kikapcsolásához elegendő a program elejére elhelyezett "LCDCON:=0;" .
Tehát ahhoz, hogy digitális inputként működjön az RC0, RC1 és az RC2, ki kell kapcsolni a beépített LCD modult az LCDCON regiszteren keresztül!
Idézet: A kapcsoló nem mérvadó, mert pereg a kontaktusa. „Ha a kapcsolót úgy kötöm be...”
Nyert!
Nagyon köszönöm. Már kismillió dolgot kipróbáltam, de ez elkerülte eddig a figyelmem. Mindjárt utána is olvasok, hogy mi is ez, hogy működik mire való! Bár egyenlőre úgy tűnik, hogy nem szeretnék hétszegmenses kijelzőt használni. Mellesleg érdekes, hogy kapcsolókkal használva negatívra húzva tudtam adatot beírni. De lehet, hogy ebben meg icserny -nek van igaza, hogy az meg pergett amíg nyomtam. Még egyszer köszi!!! ![]() Ha lehet még pontot adni, én kiutalnék neked párat! ![]()
Sziasztok!
Rengeteg google után most már megkérdezem, hogy hogyan lehet PT100 v 1000 hőmérőt a legegyszerűbben a PIC-re illeszteni. Nincs ilyen áramkör (IC) ami ezt élből tudja?
A méréshez külön IC nem is feltétlenül szükséges.
Pár passzív alkatrésszel is megoldható, de a pontossága nem lesz nagy. Capacitive method for RTD measurement Másik igen elterjedt megoldás, ha meghajtod egy precíz áramgenerátorról vagy feszültségreferenciáról és méred a feszültségesést (esetleg erősíted). Constant current method for RTD measurement Voltage divider method for RTD measurement A picit bonyolultabb, de talán az egyik legelterjedtebb megoldás, ha Wheatstone hidat alakítasz ki, és a maradék 3 ágba alacsony hőfokfüggésű, precíziós ellenállást teszel. Ilyenkor egy nagy bemeneti ellenállású differencia erősítő (instrumentális erősítő, pl. INA125, INA126 használható. Az utolsó megoldás egy RC oszcillátor építése, amiben a hőmérséklettől fog függeni a kimeneti frekvencia. Oscillator method for RTD measurement
Köszi a válasz, igazán kimerítő volt! Tulajdonképpen nekem egy fűtés vezérléshez kellene. Az első megoldásnál mit jelent az, hogy nem túl pontos?
A többihez (valamelyikhez) nincs véletlenül egy beszédes kapcs. rajzod hogy - ide az RTD-t, ezt meg az analóg lábra -, szintű amin el tudok indulni? Köszi T.
Sziasztok!
Egy 16f690 és egy 16f887 picet szeretnék 485-ös buszon összekötni. Nem működik. A 690 es ad, a 887-es fogad egyenlőre. SN75176 lenne a buszillesztő. Ott tartok, hogy az SN75176-ot kivettem egyenlőre és a két pic RX - TX lábait összekötöttem. Sajnos így sem megy át az adat. A master megszakításába raktam egy ledet ami felvillan, ha adat érkezik, a slave küldésekor is kigyújtok egy ledet. A slave küld, a slave-en a led kigyullad. Ebben a pillanatban a masteren is felvillan a led, mintha fogadná, de a dat[4] ami értéke sikeres fogadás esetén nagyobb mint nulla, állandóan nulla. Tehát nem megy át a küldött adat. Mi lehet a baj?
Sziasztok,
Tudna nekem valaki segíteni a megszakítások programozásában? Kellene egy timer általi megszakítás kezelés (mint óra impulzus), illetve egy külső impulzus (kapcsoló) általi megszakítás. (van ilyen bemenet 46K80) Csak lövésem sincs, hogy hogyan kell megírni egy megszakítást. (Egy önálló program számolással, méréssel, kijelzéssel sikerült, de megszakítások kellenének) Támpont, Leírás vagy Példaprogram van valakinek a tarsolyában? Nem lenne baj, ha magyarul lenne az sokkal könnyebb nekem. Örülnék minden segítségnek, nem tudom merre induljak...
Szia.
Most gyorsan kimasoltam egy regebbi programombol anelkul, hogy a te mikrovezerlod utan neztem volna. Eloszor mindent be kell allitani termeszetesen, majd a megszakitasban vizsgalod a megfelelo regiszter megfelelo bitjet. Itt pl. a Timer1 -et hasznaltam 100ms -os megszakitasra. Ez volt az alap utemido, ebbol majd barmilyen tobbszorose eloallithato ha szukseges, a megszakitasi rutinon belul.
Szia,
Köszönöm a gyors választ. "Eloszor mindent be kell allitani termeszetesen" ez mit is jelent? Mit kell beállítanom? Honnan fogja tudni a program, hogy mikor kell meghívnia az interrupt_low procedurát? Az én elképzelésemben a program fut, és mondjuk másodpercenként jön egy megszakítás. (legyen ez most a próba kedvéért egy digitális órajel megszakítása) Mikor olvassa-értelmezi ezt a procedurát a chip? Bocsi a buta kérdésekért, de eléggé kezdő vagyok.
Be kell allitani a Timerhez (kulso megszakitas labhoz) tartozo regisztereket. Adatlapban nezz utana.
Elooszto erteke, megszakitas forrasa, esetleg feltoltod kezdo ertekkel stb. En esetemben mindez a T1CON regiszterben volt. (Mindig amikor valamilyen periferiat szeretnel hasznalni, jelen esetben Timer1, a hozza tartozo reszt az adatlapban olvasd vegig.) Vegul a megszakitasokat engedelyezni kell, esetleg megszabni, hogy legyen-e prioritasos megszakitas stb. Akkor hivodik meg az Interrupt eljaras, ha bekovetkezik egy megszakitas. Jelen esetben a Timer1 szamlalo tulcsordul. (Elhelyezed az eljarasokat, fuggvenyeket. Mindent beallitasz a program elejen, engedelyezed a megszakitasokat, es belepsz a fociklusba.)
Sziasztok megint.
Kicsúsztam a 2k utasításból. Tud valaki okosságot az új PIC-es változathoz?
Ha az új dspic esre gondolsz abban 4k a korlát.
Egyébként nem illik fórumon nyíltan ilyet kérni.... megvannak erre a megfelelőbb csatornák. (google.ru)
Szia,
Próbálkozom, de nem sikerül. Most egy 16F917 chippel próbáltam. Beállítottam (ahogy adatlapból kivettem). 1 sec periódusonként szeretnék megszakítást, de nem lép be sose az interruptba :no:
Mit rontok el? Tud valaki segíteni? Berakom az adatlap szerinti T1con-t: Idézet: „ bit 7 T1GINV: Timer1 Gate Invert bit(1) 1 = Timer1 gate is active-high (Timer1 counts when gate is high) 0 = Timer1 gate is active-low (Timer1 counts when gate is low) bit 6 TMR1GE: Timer1 Gate Enable bit(2) If TMR1ON = 0: This bit is ignored If TMR1ON = 1: 1 = Timer1 counting is controlled by the Timer1 Gate function 0 = Timer1 is always counting bit 5-4 T1CKPS<1:0>: Timer1 Input Clock Prescale Select bits 11 = 1:8 Prescale Value 10 = 1:4 Prescale Value 01 = 1:2 Prescale Value 00 = 1:1 Prescale Value bit 3 T1OSCEN: LP Oscillator Enable Control bit If INTOSC without CLKOUT oscillator is active: 1 = LP oscillator is enabled for Timer1 clock 0 = LP oscillator is off Else: This bit is ignored. LP oscillator is disabled. bit 2 T1SYNC: Timer1 External Clock Input Synchronization Control bit TMR1CS = 1: 1 = Do not synchronize external clock input 0 = Synchronize external clock input TMR1CS = 0: This bit is ignored. Timer1 uses the internal clock. bit 1 TMR1CS: Timer1 Clock Source Select bit 1 = External clock from T1CKI pin (on the rising edge) 0 = Internal clock (FOSC/4) bit 0 TMR1ON: Timer1 On bit 1 = Enables Timer1 0 = Stops Timer1 ” Nagyon köszönöm, ha valaki segít, ez az első interruptom, és nem akar sikerülni.
Nem ismerem a uPascalt, de ugy altalaban minden nyelven illik a GIE-t 1-be billenteni, mert az maszkol minden megszakitast.
Amit vilmosd írt, azon kívül még az INTCON regiszter PEIE bitjét is 1-be kell tenni ahhoz, hogy a Timer1 megszakítást okozzon. Nézd meg a 16-7-es rajzot az adatlapban, ott látod a megszakítások logikáját.
Köszönöm a válaszokat!
A 16-7-es ábrából kiindulva 1 re állítottam TMR1IE, PEIE, GIE biteket és nullára a TMR1IF-et. De sajna nem megy így sem. Az ábrán van egy PEIF is, de arról semmit sem találtam az adatlapon. Mi hiányozhat még? Esetleg sorrendi probléma?
Hello
"procedure interrupt_low;" helyett "procedure interrupt;"-ot használj. Üdv.
Ugyan nekem 16F876A-val, de az alábbi működik:
Ebben annyit kellene változtani, hogy a PIR1.TMR1IF :=0; sort az if PIR1.TMR1IF then begin után kellene tenni, nem a begin-end blokkon kívülre.
|
Bejelentkezés
Hirdetés |