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   17 / 29
(#) icserny válasza Szpidi hozzászólására (») Máj 30, 2011 /
 
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!
(#) Szpidi válasza bibiq hozzászólására (») Máj 30, 2011 /
 
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)
(#) Szpidi válasza icserny hozzászólására (») Máj 30, 2011 /
 
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.
(#) Szpidi válasza icserny hozzászólására (») Máj 30, 2011 /
 
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.
(#) Zozi85 válasza Szpidi hozzászólására (») Máj 30, 2011 /
 
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.
(#) Szpidi válasza Zozi85 hozzászólására (») Máj 30, 2011 /
 
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.
(#) Zozi85 válasza Szpidi hozzászólására (») Máj 30, 2011 /
 
Nekem gond nélkül megy így mindegyik lcd-m,
olyan viszont van amiben 1-2 láb fel van cserélve.
(#) Szpidi válasza Zozi85 hozzászólására (») Máj 30, 2011 /
 
Nekem ez az első, így nincs mihez viszonyítanom.

Próbálkozom, és kiderül.
(#) gozi válasza Szpidi hozzászólására (») Máj 31, 2011 /
 
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;" .
(#) gozi válasza gozi hozzászólására (») Máj 31, 2011 /
 
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!
(#) icserny válasza Szpidi hozzászólására (») Máj 31, 2011 /
 
Idézet:
„Ha a kapcsolót úgy kötöm be...”
A kapcsoló nem mérvadó, mert pereg a kontaktusa.
(#) Szpidi válasza gozi hozzászólására (») Máj 31, 2011 /
 
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!
(#) gthomas hozzászólása Jún 7, 2011 /
 
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?
(#) gozi válasza gthomas hozzászólására (») Jún 7, 2011 / 2
 
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
(#) gthomas válasza gozi hozzászólására (») Jún 9, 2011 /
 
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.
(#) gthomas hozzászólása Júl 2, 2011 /
 
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?
(#) alienco hozzászólása Aug 19, 2011 /
 
Sziasztok!
Egy PCF8583-at szeretnék összekötni egy PIC16F876A-val, de már a Soft_I2C_Config-nál megáll. Mikropascal 8-at használok.
Így próbáltam:
  1. program PCF8583;
  2. begin
  3. Lcd_Config(PORTB,7,6,5,4,PORTB,1,2,3);
  4. LCD_Out(1,1,'Elso sor');
  5. Soft_I2C_Config(PortC,4,3);
  6. LCD_Out(2,1,'Msodik sor');
  7. end.

A második sorba már nem ír ki semmit az LCD-n.

Próbáltam TRISC:=0; PORTC:=0; de nem változott.
Mi lehet a hiba?
(#) Szpidi hozzászólása Aug 23, 2011 /
 
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...
(#) Ktulu válasza Szpidi hozzászólására (») Aug 23, 2011 /
 
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.

  1. Procedure Interrupt_low;  // alacsony szintu int. (Procedure Interrupt; ha magas kell)
  2.  
  3. var                                  
  4.    . . . // valtozok, miegymas definealasa
  5.  
  6. begin
  7.  if PIR1.TMR1IF then         // timer 1 tulcsordult
  8.   begin
  9.       TMR1H := Timer1_High_byte;  // ujratoltod ha kell
  10.       TMR1L := Timer1_Low_byte;
  11.       PIR1.TMR1IF := 0;         // torlod az interrupt flaget
  12. . . .
  13.   end;
  14. end;
(#) Szpidi válasza Ktulu hozzászólására (») Aug 23, 2011 /
 
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.
(#) Ktulu válasza Szpidi hozzászólására (») Aug 23, 2011 /
 
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.)
(#) Szpidi hozzászólása Aug 24, 2011 /
 
Sziasztok megint.

Kicsúsztam a 2k utasításból. Tud valaki okosságot az új PIC-es változathoz?
(#) Zozi85 válasza Szpidi hozzászólására (») Aug 24, 2011 /
 
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)
(#) Szpidi válasza Ktulu hozzászólására (») Aug 29, 2011 /
 
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:
  1. TMR1H := 0xE1;
  2.     TMR1L := 0x7B;
  3.     T1Con :=%10110101;
  4.     PIE1 := PIE1 or %00000001;
  5.  
  6. procedure interrupt_low;
  7.     begin
  8.     if PIR1.TMR1IF then begin
  9.       TMR1H := 0xE1;
  10.       TMR1L := 0x7B;
  11.       PIR1.TMR1IF := 0;
  12.       ido();
  13.       end;
  14.     end;


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.
(#) vilmosd válasza Szpidi hozzászólására (») Aug 29, 2011 /
 
Nem ismerem a uPascalt, de ugy altalaban minden nyelven illik a GIE-t 1-be billenteni, mert az maszkol minden megszakitast.
(#) potyo válasza Szpidi hozzászólására (») Aug 29, 2011 /
 
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.
(#) Szpidi válasza potyo hozzászólására (») Aug 30, 2011 /
 
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?
(#) m.joco válasza Szpidi hozzászólására (») Aug 30, 2011 /
 
Hello
"procedure interrupt_low;" helyett "procedure interrupt;"-ot használj.
Üdv.
(#) alienco válasza Szpidi hozzászólására (») Aug 30, 2011 /
 
Ugyan nekem 16F876A-val, de az alábbi működik:
  1. procedure Interrupt;
  2. begin
  3.   if PIR1.TMR1IF then         // timer 1 overflow (~500 ms elapsed)
  4.   begin
  5.   ...
  6.   end;
  7. PIR1.TMR1IF      := 0;  // clear interrupt flag
  8. end;
  9.  
  10. begin
  11. // ---- Configure timer 1 ---- //
  12.   T1Con.TMR1CS     := 0; // Timer1 Clock Source Select bit, 0 = Internal clock (FOSC/4)
  13.   T1Con.NOT_T1SYNC := 1; // Do not synchronize external clock input
  14.   T1Con.T1CKPS1    := 1; // 1:8 prescaler  , TMR 1 overflow every 1.9 Hz (= 500 ms timebase)
  15.   T1Con.T1CKPS0    := 1; //
  16.   T1Con.T1OSCEN    := 0; // LP Oscillator Enable Control bit
  17.   T1Con.TMR1ON     := 1; // Timer 1 enabled
  18.   PIE1.TMR1IE      := 1; // TMR1 Overflow Interrupt Enable bit
  19.  
  20.   TMR1H := 0;
  21.   TMR1L := 0;
  22.   PIR1.TMR1IF      := 0;  // clear timer 1 interrupt flag
  23.  
  24. // --- enable interrupts and go! ---
  25.   IntCon.PEIE     := 1; // Peripheral Interrupt Enable bit
  26.   Intcon.GIE      := 1; // Global Interrupt Enable bit
  27. while true do begin
  28.     ...
  29.     end;
  30.   end.
(#) potyo válasza alienco hozzászólására (») Aug 30, 2011 /
 
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.
Következő: »»   17 / 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