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   23 / 29
(#) glaci hozzászólása Ápr 15, 2013 /
 
Sziasztok!Nem tudom találkozott e valaki olyan problémával, hogy a mikropascal egy pic-ben levő regisztert nem tud kezelni? A szóban forgó pic, 16f628. Szeretném egy port lábán, történetesen az RB0-án, feszültség élváltozás állapotát figyelni és megszakítást felhasználva jelzést produkálni. Az option regiszterben az intedg biten lehetne állítani, hogy milyen élre történjen megszakítás. Beírva
option.6:=1;-> option aláhúzva, Fordításkor

"12 303 Identifier "option" was not declared", vagyis ezt a regisztert nem lehet használni.

Tud valaki magyarázatot adni?
(#) Hp41C válasza glaci hozzászólására (») Ápr 15, 2013 /
 
Szia!
Régen a PIC -eknek volt egy option utasításuk, amivel az option regisztert lehetett beállítani bankváltás nélkül. A névütközést elkerülendő az option regisztert OPTION_REG -nek definiálta a Microchip.
(#) glaci válasza Hp41C hozzászólására (») Ápr 15, 2013 /
 
Hp41C köszönöm! Tényleg elmúlt a, hibajelzés.
A dolog így mindjárt másképp néz ki és most öröm van.
Az adatlapok ezt miért nem közlik? Ennek ellenére örülök, hogy ezt Te tudtad és megosztottad velem, illetve velünk. Remélem kikerültem a zsákutcából.
(#) gapati válasza glaci hozzászólására (») Ápr 16, 2013 /
 
Szia!

Ez a fajta élváltozás "figyelése" csak az RB4-RB7 lábakon működik.

Üdv: gapati
(#) Hp41C válasza glaci hozzászólására (») Ápr 16, 2013 /
 
Szia!
Örülök, hogy megoldódott a probléma.
Igen itt van egy kis kavarodás. A 16F627-628 adatlapjában (DS40300C) a memória kiosztásnál OPTION, a regiszter leírásánál OPTION REGISTER, a 16F627A628A-648A (DS4044F) a memória kiosztásnál OPTION, a regiszter leírásánál OPTION_REG szerepel...
(#) mikroferi hozzászólása Máj 12, 2013 /
 
Sziasztok!
Valaki tudna nekem segíteni abban ,hogy hogyan kell megoldani azt hogy egy 16f84a pic, figyelje a porta.1 et, és jel alapján egy fordulatszámmérőt kéne építsek.Tudom hogy már van ebből ezer mindenhol,de én saját programot szeretnék csak nem tudom hogy kell az időzítő részt megírni,az megvan hogy figyeli a portot, csak az idő méréssel és számolással vannak a problémák.Nagyon köszönöm a segítségeteket!!!
(#) glaci válasza mikroferi hozzászólására (») Máj 12, 2013 /
 
Szia! Ha mikropaskal-ban írod a programot, Találsz egy ikont az interrupt-ra. Az előállít neked egy megszakítási procedúrát és azt feltöltöd a saját adataiddal, amihez tudni kell a proci frekvenciájá és be kell állítani az előosztást. Be kell állítani a megszakítás engedélyezését. Tanulmányozd az option_reg regiszter bitjeit. Be kell állítani hogy a tmr0 mettől számoljon, hogy a tmr0 regiszter feltöltése utáni átbillenés milyen időközönként történjen. Ezt az átbillenést számlálod meg egy regiszterrel és ha megvan a kívánt 1 sec-es idő, akkor a másodperc rgiszter értékét növeled 1-el. 16f628 esetén így néz ki
  1. // Timer0 Registers:
  2. // Prescaler=1:128; TMR0 Preset=156; Freq=78,125Hz; Period=0,0128 s
  3.       OPTION_REG.T0CS :=0;// bit 5 TMR0 Clock Source Select bit:0=Internal Clock (CLKO) / 1=Transition on T0CKI pin
  4.       OPTION_REG.T0SE := 0;// bit 4 TMR0 Source Edge Select bit: 0=low/high / 1=high/low
  5.       OPTION_REG.PSA  := 0;// bit 3 Prescaler Assignment bit: 0=Prescaler is assigned to the Timer0
  6.       OPTION_REG.PS2  := 1;// bits 2-0  PS2S0: Prescaler Rate Select bits
  7.       OPTION_REG.PS1  := 1;
  8.       OPTION_REG.PS0  := 0;
  9.       TMR0 := 156;           // preset for timer register
  10. // ezt kell számoltatni egy regiszterrel. A regiszter kezdőértéke 178, tehát megszámol
  11. //78 megszakítást az lesz 1 másodperc. a hiba -0,0016 másodperc. 625 másodperc alatt késik 1 másodpercet.
  12. //tehát 10 perc és 25 másodperc után a másoperc értékéhez hozzá kell adni 1-et.
  13.        szamlalo:=178;
Ez a pic_init része, majd maga a megszakítás
  1. // 1 sec megszakítás
  2. procedure interrupt1(); iv 0x0004; ics ICS_AUTO;
  3. begin
  4.    if INTCON.T0IF=1 then
  5.    begin
  6.       INTCON.T0IF:=0;
  7.       szamlalo := szamlalo + 1;
  8.       TMR0 := 156;
  9.       if szamlalo=78 then
  10.       begin
  11.          szamlalo:=0;
  12.          mp:=mp+1;
  13.         // if portb.7=0 then portb.7:=1 else portb.7:=0;
  14.         if mp1=1 then mp1:=0 else mp1:=1;
  15.       end;
  16.       if mp=60 then
  17.       begin
  18.          perc:=perc+1;
  19.          mpkorr:=mpkorr+1;
  20.          mp:=0;
  21.          if perc=60 then
  22.          begin
  23.             ora:=ora+1;
  24.             perc:=0;
  25.          end;
  26.          if ora=24 then
  27.          begin
  28.             ora:=0;
  29.             nap:=nap+1;
  30.          end;
  31.          if nap=7 then nap:=0;
  32.          if (mpkorr=10) and (mp=25)then  //a megszakítás késése miatti sec korrekció
  33.          begin
  34.             mp:=mp+1;
  35.             mpkorr:=0;
  36.          end;
  37.       end;
  38.    end;


Remélem tudtam segíteni.

Van több segítség is a neten a timer0-ás megszakítás számolására.
(#) gthomas hozzászólása Máj 21, 2013 /
 
Sziasztok!
Készítettem egy termosztátot, 16F690 -el és egy ds16s20. Szépen működik, csak a fogyasztással van problémám. Három db AAA elemmel működik, de egy hétvége alatt lemerítette az elemeket.
Most rendeltem egy 16LF1829-es alacsony fogyasztású procit, ezzel szeretném kiváltani a 16F690-et. (sleep módban 20nA!) Viszont ez a PIC 1,8-3,6 V-ról működik, tehát 2 db AA elem elég lenne, csakhogy a ds18s20 min 3V-ról működik. Milyen hőmérséklet érzékelőt használjak, hogy az egy tizedes pontosság meg legyen, és a ilyen kis feszültségen is működjön?
(#) zsoltee0001 válasza gthomas hozzászólására (») Máj 21, 2013 /
 
Szia
DS620
1.7V to 3.5V
resolution is User-Selectable to 10-, 11-, 12-, or
13-Bits (0.5°C, 0.25°C, 0.125°C, and 0.0625°C

Üdv
(#) gthomas válasza zsoltee0001 hozzászólására (») Máj 21, 2013 /
 
Köszi, nézem!
Hol lehet kapni?
A hozzászólás módosítva: Máj 21, 2013
(#) gapati hozzászólása Máj 26, 2013 /
 
Sziasztok!

Tud Valaki megoldást a nagyobb programok fordítására? Sajnos nekem nem akarja lefordítani, mivel túllépné a "határt".....

Köszönettel: gapati
(#) FPeter hozzászólása Júl 3, 2013 /
 
sziasztok!

valaki foglalkozott már itt I2C slave móddal? egy openwrt-s gpio bitbang i2c master buszra lenne rádugva egy PIC, és az OS kérdezgetne tőle - pár változót kellene tudnia átadnia a masternek

eddig jutottam, ez már némi életjelet ad, de még mindig zavaros:

(PIC12F1840)

  1. program I2C_Slave;
  2.  
  3. procedure Interrupt();
  4. var tmp : char;
  5. begin
  6.   if(SSP1IF_bit) then
  7.   begin
  8.     SSP1IF_bit := 0;
  9.     tmp := SSP1BUF;
  10.  
  11.     if (R_NOT_W_bit) then
  12.       SSP1BUF:=tmp;
  13.  
  14.     CKP_bit := 1;
  15.   end;
  16. end;
  17.  
  18. begin
  19.  
  20.   IRCF3_bit := 1; IRCF2_bit := 1; IRCF1_bit := 1; IRCF0_bit := 1      ;
  21.   ANSELA := 0;                       // Configure pins as digial
  22.  
  23.   SSP1IF_bit := 0;                   // Reset I2C Interrupt flag
  24.   PEIE_bit   := 1;                   // Peripheral Interrupt Enable
  25.   SSP1IE_bit := 1;                   // MSSP1 Interrupt Enable
  26.   GIE_bit    := 1;                   // Global Interrupt Enable
  27.   SSP1MSK    := 0xF0;                // Define Mask for address
  28.                                      //   (ingnore lower nible of address)
  29.   SSP1ADD  := 0xE0;
  30.   SSP1CON1 := 0x36;                  // Configure I2C in Slave mode
  31.   PCIE_bit := 1;
  32.   SEN_bit := 1;
  33.  
  34.   while(TRUE) do
  35.   begin
  36.  
  37.   end;
  38.  
  39. end.


saját értelmezésem szerint ilyenkor a lekérdezett regiszter számát kéne visszadobnia a buszra, de nem az történik, hanem egy a regiszterrel párhuzamos értéket ad vissza. viszont nem csak az E0-on reagál, hanem az E0-tól EF-ig dobál vissza a címzett regisztertől független, a címmel párhuzamos értékeket, amiben logikát se tudtam felfedezni

sajnos eddig nem találtam olyan példaprogramot amitől megvilágosodtam volna, tudna valaki segíteni hogy hogyan faragjam tovább a programot?
(#) progee hozzászólása Okt 11, 2013 /
 
Sziasztok!

Segítségre lenne szükségem!
A lányaimnak tönkrement egy éjszakai fény játéka: alvo-pluss-teknos-ejszakai-feny-csillagkepek
Egy 16F628A pic-vel szeretném megjavítani.
A program megírásánál viszont van pár dolog amit nem tudok megoldani.
A játék 3, különböző színű ledet tartalmaz, és 4 nyomógombot.
A gombok funkciói:
- 1. gomb: ki-bekapcsolja a játékot (sleep), és az első ledet bekapcsolja.
- 2. gomb: második ledet bekapcsolja
- 3. gomb: harmadik ledet bekapcsolja
- 4. gomb: a három ledet felváltva kapcsolja be 5 másodpercenként (halványítással)

Az alábbi kódot állítottam eddig össze:

  1. program Teknos;
  2.  
  3. var oldstate : byte;
  4.  
  5. begin
  6.   oldstate := 0;
  7.   CMCON := 0x07;
  8.  
  9.   TRISA := 0xFF;        // A lábak legyenek bemenetek
  10.   PORTA := 0;           // A lábak kikapcsolt állapotban legyenek
  11.   TRISB := 0;           // B lábak legyenek kimenetek
  12.   PORTB := 0;           // B lábak kikapcsolása
  13.  
  14.   while TRUE do
  15.   begin
  16.     if porta.ra0 = 1 then oldstate := 0;
  17.     if porta.ra1 = 1 then oldstate := 1;
  18.     if porta.ra2 = 1 then oldstate := 2;
  19.     if porta.ra3 = 1 then oldstate := 3;
  20.  
  21.     portb := 0;
  22.     case oldstate of
  23.       0: portb.rb0 := 1;
  24.       1: portb.rb1 := 1;
  25.       2: portb.rb2 := 1;
  26.       3: begin
  27.            portb.rb0 := 1;
  28.            delay_ms(5000);
  29.            portb.rb0 := 0;
  30.            portb.rb1 := 1;
  31.            delay_ms(5000);
  32.            portb.rb1 := 0;
  33.            portb.rb2 := 1;
  34.            delay_ms(5000);
  35.          end;
  36.     end;
  37.   end;
  38. end.



Amiket nem sikerül megoldanom:

- Ugyanazzal a gombbal ki és be is kapcsoljon a készülék. Sleep-módba sikerül tenni, de ugyanazzal fel is éleszteni már nem megy. Próbáltam a 6-os lábra (INT) tenni egy nyomógombot, és annak megfelelően átkötni és átprogramozni, de nem működött.
Reset-el sikerül feléleszteni, csak az ugye már egy ötödik gomb lenne...

- Ha a színeket elkezdi átváltani, akkor nem sikerül a ciklusból kiléptetnem, csak ha folyamatosan nyomom a kettes, vagy hármas gombot. A működő játéknál alapból bármikor lehetett váltani, hogy folyamatos világítást kérek, vagy a színváltást.

Remélem túl tud lendíteni valaki a problémákon!
A hozzászólás módosítva: Okt 11, 2013
(#) gapati hozzászólása Okt 13, 2013 /
 
Sziasztok!

PIC16F689-es pic-nek szeretném kimenetként használni a RA portját. Valamit nem jól konfigurálok, de nem tudom hogy mit. Tudna valaki segíteni?
  1. OSCCON  := %01100000;              //4 MHz, internal clock
  2.  
  3.   ANSEL   := 0;                      // Configure AN pins as digital I/O
  4.   ANSELH  := 0;
  5.   C1ON_bit := 0;                     // Disable comparators
  6.   C2ON_bit := 0;
  7.  
  8.  
  9.   TRISA  := %00001000;               // Set RA0 pin as Output.
  10.  
  11.   TRISB  := %10100000;               //
  12.   TRISC  := %11000000;
  13.  
  14. //  SetBit(PORTA, 4);
  15. //  SetBit(PORTA, 5);


Valami még kellene, mert nem kapcsolja be az RA4-RA5-öt.
Köszönettel: gapati
(#) progee válasza gapati hozzászólására (») Okt 13, 2013 /
 
  1. TRISA := 0; //minden A-láb legyen bemenet
(#) progee válasza gapati hozzászólására (») Okt 13, 2013 /
 
hibás kommentet írtam. ha a trisa-t nullára állítod, akkor az összes A-láb kimenet lesz.
A hozzászólás módosítva: Okt 13, 2013
(#) gapati válasza progee hozzászólására (») Okt 13, 2013 /
 
Szia!

Ez még nem elég neki. a 9. sorban én is azt mondtam neki. (RA3 bemenet, a többi kimenet.)
(#) gapati válasza gapati hozzászólására (») Okt 13, 2013 /
 
Az RA4-RA5 az OSC1-OSC2 láb külső oszcillátornál. Valami itt nem OK! Én belső 4MHz-t használok.
(#) progee válasza gapati hozzászólására (») Okt 13, 2013 /
 
szerintem a ra4. lábat állítottad bemenetre.
A hozzászólás módosítva: Okt 13, 2013
(#) gozi válasza gapati hozzászólására (») Okt 14, 2013 /
 
Szerintem a konfigurációs bitek környékén van a probléma, konkrétan az oszcillátorra vonatkozó részen. Ha belső oszcillátort használsz, akkor az INTOSCIO üzemmód kell az RA4 és az RA5 I/O használatához.
(#) gapati válasza gozi hozzászólására (») Okt 15, 2013 /
 
Igen!

gozi megoldotta a "fura" jelenséget.

Köszönöm a segítséget, további szép estét mindenkinek!
(#) zbartalos hozzászólása Okt 25, 2013 /
 
Sziasztok!
Egy kis segítségre lenne szükségem. Adott egy 16F877A és 2db HD44780 kompatibilis LCD. Egy 2x20 és egy 4x20 charakteres. Összehoztam próbapanelon egy kis áramkört, hogy leteszteljem, de nem akar elindulni az kiíratás az LCD-re. Az LCD megjelennek az első sorban a kockák, de nem ír ki rá semmit sem. Oshon-os szimulátorban minden működik. Mikropascalban írtam rá progit. Először a B protra kötöttem az lcd-t a vezérlő és adatbiteket is (trisb:=0x00; lcd_init(portB); lcd_out(1,1, ' szöveg') utána megpróbáltam szétosztani az adat biteket a B és D port között, de így is semmi. Órajel 20MHz ezt ellenőriztem az osc2 kimeneten skóppal az szép tiszta. az MCLR lábat 10k-val felhúztam VDD-re. Program beírása után vissza olvastam a pic-ből a progit az ok. Tudna valaki segíteni, hogy mi lehet a hiba, amiért nem akar írni az LCD a PIC? A segítséget előre is köszönöm.
Üvd.: Zoli!
(#) proli007 válasza zbartalos hozzászólására (») Okt 26, 2013 /
 
Hello! Nekem nincs Pascal-om, de ha csak az első sorban kockák vannak, az azt jelenti, nem történt meg az LCD inicializálása. Vagy a program nem jó, vagy a hardver bekötés, vagy a bekötés nem felel meg a programnak. (4-8 bit üzemmód stb.) Általában az LCD-ről nincs visszaolvasás, így az RW vonalat fixen a GND-re kell kötni. üdv!
(#) zsoltee0001 válasza zbartalos hozzászólására (») Okt 27, 2013 /
 
Szia
Digitálisra át vannak állítva a lábak?
ADCON0 := 0x07;
Üdv
(#) zbartalos válasza proli007 hozzászólására (») Okt 27, 2013 /
 
Köszönöm a választ. Közben megoldódott a dolog. A próba panelban volt a hiba. Szakadás volt benne az egyik oldalon, amit nem láttam, mivel be van öntve és csak a jelöléseket figyeltem. Egyébként meg egy 8 zónás lakás riasztó prigiját írtam és előtte le akartam próbálni az lcd.

Üdv.: Zoli
(#) zbartalos válasza zsoltee0001 hozzászólására (») Okt 27, 2013 /
 
Hali! Nem állítottam át a portot az LCD miatt, mivel az adatlap szerint a B port alapból digitális, csak kimenetnek állítottam. Viszont közben akadt még1 kisebb gondom a beépített eeprommal. Kiolvasni az eeprom_read-del ki tudom az eeprom adott byte-ját viszont írni valahogy nem igazán akarja eeprom_write-al (eeprom_write($01, 0x04). Az adatlap szerint van benne 256byte eeprom. A segítséget előre is köszönöm.
Üdv.: Zoli
(#) zsoltee0001 válasza zbartalos hozzászólására (») Okt 27, 2013 /
 
Szia
Ha jól emlékszem nekem is volt hasonló problémám.
Próbálj betenni egy kis késleltetést az írás elé.
delay_ms(100);
Üdv
(#) zbartalos válasza zsoltee0001 hozzászólására (») Okt 27, 2013 /
 
Köszi a választ. Tettem be várakozást, mivel a mikropascal is írta, hogy 20ms-re szükség van írás előtt, de így csinálja meg az írás. Arra gondoltam még, hogy esetleg nem-e kell beállítani valami kapcsolót még a project elején és nem a default-ot kellene használni. Gondolok itt (WRT_ENABLE_ON vagy OFF).
Köszönöm a segítséget.
Üdv.
(#) progee hozzászólása Nov 7, 2013 /
 
Tudnátok segíteni?
Az alábbi kód egy 16F628A PIC-re küldene RS232-n karaktereket.
Adott karakternél, egy relét kellene behúzni a PIC RB4 lábán.
Ha a kikommenterezett részt engedélyezem, akkor az RA0 lábon lévő nyomógombbal tudom működtetni a relét. PC-ről küldött karakterrel viszont nem csinál semmit.
A PC-nek visszaküldött karakter (UART1_Write(uart_rd)) helyesen jelenik meg a monitoron.

  1. begin
  2.   CMCON := 0x07;                    
  3.   UART1_Init(9600);                        
  4.   Delay_ms(500);    
  5.                      
  6.   PORTA := 0;  
  7.   trisb.4 := 0;
  8.   portb.4 := 0;
  9.   uart_rd := 0;  
  10.  
  11.  
  12.   while (TRUE) do                          
  13.     begin    
  14.      
  15.       //if porta.0 = 1 then portb.4 := 1 else portb.4 := 0;
  16.  
  17.       if (UART1_Data_Ready() <> 0) then    
  18.         begin
  19.           uart_rd := UART1_Read();        
  20.           UART1_Write(uart_rd);            
  21.           if (uart_rd = 'A') then portb.4 := 1;
  22.         end;
  23.        
  24.     end;
  25. end.
A hozzászólás módosítva: Nov 7, 2013
(#) progee válasza progee hozzászólására (») Nov 7, 2013 /
 
Nem pascal kód volt a hiba oka. Egy elkötés miatt nem működött.
Következő: »»   23 / 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