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   26 / 29
(#) gozi válasza user hozzászólására (») Dec 15, 2013 /
 
Hirtelen ránézve, a két program között alapvetően az LCD-hez tartozó PORTD inicializálása különbözik, a csatolt "jó" programban a PORTD így van inicializálva:
  1. TRISD := 0;
  2. PORTD := 0xFF;
  3. TRISD := 0xFF;

A másik, nem működő programban pedig így:
  1. PORTD  :=   0;
  2. TRISD  :=   0;
(#) gthomas hozzászólása Dec 17, 2013 /
 
Sziasztok, egy 16LF1829 -en szeretném a ADC-t beállítani. A Pic RC0 lábát egyenlőre felhúztam vdd-re, így 10 biten 1024-et kellene mérni. De meg sem szólal, folyamatosan 0-át mér.
  1. procedure ADCinit;
  2. begin
  3.      //-- ADC OFF
  4.      ADCON0.ADON:=0;
  5.      //-- PORTC.0 Analóg bemenet
  6.      TRISC.0:=1;
  7.      ANSELC.0:=1;
  8.      OPTION_REG.WPUC0_bit:=0;
  9.      
  10.  
  11.      //-- Referencia fesz. beállítása
  12.      //FVRCON:=$C1;
  13.  
  14.      //-- VSS negatív referencia
  15.      ADCON1.ADNREF:=0;
  16.      //-- VDD pozitív referencia
  17.      ADCON1.ADPREF0:=0;
  18.  
  19.      //-- AN4
  20.  
  21.      ADCON0.CHS0_bit:=0;
  22.      ADCON0.CHS1_bit:=0;
  23.      ADCON0.CHS2_bit:=1;
  24.      ADCON0.CHS3_bit:=0;
  25.      ADCON0.CHS4_bit:=0;
  26.  
  27.      //-- jobbra igazítás
  28.      ADCON1.ADFM_bit:=1;
  29.  
  30.  
  31.      //-- ADC Clock period
  32.      ADCON1.ADCS0:=0;
  33.      ADCON1.ADCS1:=1;
  34.      ADCON1.ADCS2:=1;
  35.  
  36.      //-- ADC bekapcsolása
  37.      ADCON0.ADON:=1;
  38. end;


A mérés pedig így zajlik:

  1. procedure BatteryMeasure;
  2. var adc_val: word;
  3. begin
  4.  
  5.    ADCON0.ADON:=1;
  6.    delay_ms(20);
  7.  
  8.    adc_val:=0;
  9.    ADCON0.GO:=1;
  10.    while (ADCON0.GO=1) do;
  11.    
  12.    adc_val:=0;
  13.    adc_val := ADRESH;    // Store the result in adc_val
  14.    adc_val:=adc_val shl 8;
  15.    adc_val:= adc_val + ADRESL;
  16.    
  17.    VDD:=adc_val;
  18.  
  19.      (*
  20.    VDD:= (8192 / adc_val) * 1024;
  21.    VDD:=VDD  div 8;
  22.       *)
  23.    ADCON0.ADON:=0;
  24.  
  25. end;


Tulajdonképpen majd az elem feszültségét akarom mérni, de egyenlőre egy 3,3V-ot sem tudok megmérni, a VDD mindig nulla. Ötlet?
A hozzászólás módosítva: Dec 17, 2013
(#) Prendick válasza gthomas hozzászólására (») Dec 17, 2013 /
 
Vigyázz, mert az ADPREF két bites ennél a pic-nél. Tehát az ADCON1.ADPREF0 és az ADCON1.ADPREF1 is legyen 0, ha a Vdd a ref. feszültség.
Nem biztos, hogy ez a probléma, de én már egyszer belefutottam ilyesmibe.
(#) Prendick válasza Prendick hozzászólására (») Dec 17, 2013 /
 
Ez valami furcsaság: OPTION_REG.WPUC0_bit:=0;
Biztos nem jó. Ha felhúzást akarsz, akkor így kell:
OPTION_REG.NOT_WPUEN_bit :=0
WPUC.WPUC0_bit:=1
(#) gthomas válasza Prendick hozzászólására (») Dec 17, 2013 /
 
Javítottam:
ADCON1.ADPREF0_bit:=0;
ADCON1.ADPREF1_bit:=0;
Ezt a sort pedig kivettem:
OPTION_REG.WPUC0_bit:=0;

...de a helyzet változatlan.
(#) Prendick válasza gthomas hozzászólására (») Dec 17, 2013 /
 
Külső ellenállással húzod fel az RC0-t?
Mert ha nem, akkor a WPUC-t is állítsd be, ahogy írtam.
(#) gthomas válasza Prendick hozzászólására (») Dec 17, 2013 /
 
Nem, de egyenlőre fixen 3,3V-on van, de így is nullát mér.
A hozzászólás módosítva: Dec 17, 2013
(#) gthomas válasza gthomas hozzászólására (») Dec 17, 2013 /
 
Az lesz itt a baj, hogy UART-on küldöm az adatokat, azaz a mért értéket. Eddig szoftveres UART volt, most a sajátját használom a PIC-nek. Ha bekapcsolom a BatteryMeasure eljárást, az UART szórja az adatokat folyamatosan, pedig csak másodpercenként kellene egyet.
???
A hozzászólás módosítva: Dec 17, 2013
(#) progee válasza gthomas hozzászólására (») Dec 17, 2013 /
 
Teszteld egy LCD-n a mért értékeket. UART-nál eléggé sok a hibalehetőség.
(#) gthomas válasza progee hozzászólására (») Dec 18, 2013 /
 
az LCD-n is nulla. 8Mhz kristály a osc1-2 lábakon. Ez jó?
(#) progee válasza gthomas hozzászólására (») Dec 18, 2013 /
 
Én is kezdő vagyok még PIC-ben. A kristályt jó helyre tetted, de tesztnél kipróbálhatod belső kristállyal is a kódot. Minimalizálva a hibalehetőségeket.
Nekem ez eddig jól működött 16F886 PIC-nél:

  1. ANSEL := 0;       //Minden AN láb digitális I/O
  2. ANSELH := 0;
  3. ANSEL.ANS3 := 1;  //AN3 analóg bemenet
  4. trisa.3 := 1;           //Hőmérő AN3
  5. porta.3 := 0;
  6.  
  7. adc_init;
  8.  
  9. .
  10. .
  11. .
  12.  
  13. while true do
  14.   begin
  15.      C := adc_read(3);
  16.      wordtostr(C, s);
  17.      LCD_OUT(1, 1, s);
  18.   end;


A leírás végén van ADC példa
A hozzászólás módosítva: Dec 18, 2013
(#) gthomas válasza progee hozzászólására (») Dec 18, 2013 /
 
Ez így működik, de nekem nem jó, mert nem tudom beadni neki a belső ref. feszültséget. Az elsőnek is kellene mennie. Nincs meg valahol a adc_init és adc_read -nek a forrása?
(#) progee válasza gthomas hozzászólására (») Dec 18, 2013 /
 
A 16LF1825-el megegyezik az adatlapja a 1829PIC-nek.
Annak ezek az ADCON1 bitjei vannak:

  1. // ADCON1 bits
  2.     const ADPREF0 = 0; register;    
  3.     const ADPREF1 = 1; register;    
  4.     const ADNREF = 2; register;  
  5.     const ADCS0 = 4; register;
  6.     const ADCS1 = 5; register;  
  7.     const ADCS2 = 6; register;  
  8.     const ADFM = 7; register;


Az ADREF0 és ADREF1 biteket kell szerintem 1-re állítanod, hogy az RA0 és RA1 lábakon kaphassa meg a referencia feszültséget. Az ANDREF bit meg valószínűleg ki-be kapcsolja ezt az opciót. De ez csak tipp a részemről!!
Itt van a bitekről rövid komment.
(#) gthomas válasza progee hozzászólására (») Dec 19, 2013 /
 
Nem tudom megmagyarázni, de ha az ADCON0, ADCON1 biteket nem külön-külön állítom akkor megy:

TRISC.0:=1;
ANSELC.0:=1;
ADCON0:=%0010000;
ADCON1:=%11010000;

ennyi az inicializálás, és tökéletes. Ugyan ez volt a ADCinit eljárásban is, csak bitenként.
Lehet hogy valami MikroPascal bug?
(#) progee válasza gthomas hozzászólására (») Dec 19, 2013 /
 
Amikor bitenként állítod be akkor minden bitnek adj értéket, mert lehet, hogy az alapértelmezett beállítása neked nem megfelelő.
Ezek az ADCON0 bitjei:

  1. // ADCON0 bits
  2. const ADON = 0; register;  
  3. const GO_NOT_DONE = 1; register;    
  4. const CHS0 = 2; register;    
  5. const CHS1 = 3; register;
  6. const CHS2 = 4; register;
  7. const CHS3 = 5; register;
  8. const CHS4 = 6; register;
A hozzászólás módosítva: Dec 19, 2013
(#) gthomas válasza progee hozzászólására (») Dec 19, 2013 /
 
Nekem ez így jó, szépen méri az elem feszültségét is. Köszi a segítséget.
(#) glaci hozzászólása Dec 21, 2013 /
 
Sziasztok!
Szeretnék eepromba adatokat írni és abból visszaolvasni. A tárolandó adatok egy függvény együtthatói, amik valós számok.A változónak amit tárolni akarok real adattípust adtam ami így néz ki: viz_bea:real;. Fordításnál figyelmeztetést kaptam mely így szól: 145 1509 Warning: Implicit typecast performed from "byte" to "real" és amire vonatkozik:
eeprom_write(41,viz_bea);

Segítsetek megfejteni és javítani !
A hozzászólás módosítva: Dec 21, 2013
(#) progee válasza glaci hozzászólására (») Dec 21, 2013 /
 
Az eeprom 41. byte-jába akartál tizedes törtet írni.
Vagy kerekítsd a kapott eredményt 0 és 255 közötti kerek egész számra (floor - lefelé kerekít; ceil - felfelé kerekít), vagy 2 byte-ba írd be a mentendő adatot (modf - szétbontja az egész és a tizedes részére a törtet). Természetesen utóbbi esetben is mindkét byte 0..255 közötti szám lehet. Súgóban találsz részletes leírást a kapcsolódó függvényekről.
A hozzászólás módosítva: Dec 21, 2013
(#) glaci válasza progee hozzászólására (») Dec 21, 2013 /
 
Köszönöm a segítséget, én is gondoltam, hogy valami ilyesmi miatt figyelmeztetett a rendszer.
(#) miki144 hozzászólása Jan 27, 2014 /
 
Sziasztok.

Segítséget szeretnék kérni PIC16F84A programozásában.
Lépésről lépésre. ASM-ben azért megyeget a dolog.

Most MIKROPASCAL-ban szeretnék programot írni.

MIKROPASCAL-BAN ctrl+d és ez jön ki. Lásd TXT

gondolom ezekkel tudok majd dolgozni. Borland delphi7-ben már kreáltam pár szoftvert,
de ez nem az .




Ebben kérném a segítségeteket.
PIC RA PIN -bemenet
PIC RB PIN -kimenet



Ide hogyan kell helyesen megadni a paramétereket.
{ Declarations section }

begin

RB0-pin bekapcsol
TIMER-késleltetésnek
RB0-pin kikapcsol stb





end.


Példaprogramok is jöhetnek, minden mennyiségben.
Köszönöm.
Hali
A hozzászólás módosítva: Jan 27, 2014

fontos.txt
    
(#) gthomas válasza miki144 hozzászólására (») Jan 28, 2014 /
 
Szia!

A mikropascal-ban van néhány példaprogram, azokból el tudsz indulni.
pl:

MikroPascal\Examples\Development Systems\BIGPIC5\Led Blinking
(#) progee válasza miki144 hozzászólására (») Jan 28, 2014 /
 
Tele a net példákkal, használati útmutatókkal, szakdolgozatokkal, és ahogyan gthomas mondta, a pascal könyvtárában is vannak demok.

  1. program LED_Blinking;
  2. begin
  3.   trisa := 11111111;
  4.   trisb := 0;
  5.   while true do
  6.   begin
  7.     portb.0 := 1;
  8.     delay_ms(1000);
  9.     portb.0 := 0;
  10.     delay_ms(1000);
  11.   end;  
  12. end.
(#) gthomas hozzászólása Jan 29, 2014 /
 
Sziasztok!

Tud abban valaki segíteni, hogy hogyan kell egy 18F67j60 Pic-et rávenni hogy a külső (OSC1/OSC2) lábakra kötött 25MHz - es osc.körről vegye a belső órajelet?
Átolvastam a doksit, de nekem mindig (függetlenül attól hogy mit állítok) 31 kHz-en működik:

Így próbáltam:

T1CON.T1RUN_bit:=0;

OSCCON.3:=0;
OSCCON.1:=1;
OSCCON.0:=0;
OSCTUNE:=$40;

Köszi!
(#) progee válasza gthomas hozzászólására (») Jan 29, 2014 /
 
A "Project\Edit project" menüre felbukkanó ablakban állítsd az "Oscillator Selection"-t "HS oscillator"-ra, az "Oscillator Frequency"-t pedig 25.0 értékre.
A hozzászólás módosítva: Jan 29, 2014
(#) gthomas válasza progee hozzászólására (») Jan 29, 2014 /
 
Igen, így kezdtem, mint minden eddigi PIC-nél, amivel foglalkoztam.

A teszt program 1 másodpercig felvillant egy ledet, majd 1 másodpercig elalszik.
Így kellene működnie. De ha HS vagy HS+PLL osc-t használok, és a Freq 25 MHz, kb. fél percig ég és fél percig elalszik. Nem mértem, de hosszú idő.
Ha a frekvencia 0.316..... akkor működik jól, másodperces ciklussal. Innen gondolom, hogy 31 kHz-cel megy.
A hozzászólás módosítva: Jan 29, 2014
(#) miki144 válasza progee hozzászólására (») Jan 29, 2014 /
 
Üdv.

A példaprogit beillesztettem a MikroPascal6.0-ba

Hibaüzenetet kaptam.

Argument is out of range "11111111"to'byte"
A többi a jpg-fájlban látszik.
Pálda progi, igen sok van benne ,de nem teljesen jók,

Hiányosak illetve nem műnködnek.

Küldjetek légyszives zip-ben, kompletten leforditott fájlokat amik üzemképesek.

PIC16F84A-hoz.

Hali

Capture 1.jpg
    
(#) miki144 válasza progee hozzászólására (») Jan 29, 2014 /
 
A TXT-ben vannak a declaration.

Gondolom én ebből kéne dolgozni. (CTRL+D gomb.)

fontos.txt
    
(#) progee válasza miki144 hozzászólására (») Jan 30, 2014 /
 
Valóban! A % karaktert kihagytam a bináris szám elől.
Tehát helyesen: trisa := %11111111;
De megadhatod 16-os számrendszerben is: trisa := $FF;
A hozzászólás módosítva: Jan 30, 2014
(#) miki144 válasza progee hozzászólására (») Feb 1, 2014 /
 
Köszi a segitséget.

Most már üzemel a villogó.

Igaz az integrált A1-változóval megszenvedtem amire elfogadta.

const A1 = 30; // idözitési változó

Én ezt még úgy ismertem hogy ( integer : ; )

Most már tudok tovább haladni.

Üzemképes példaprogram a ZIP-ben

Hali
(#) miki144 hozzászólása Márc 16, 2014 /
 
Sziasztok. ( PIC16F887 )

Feltétel iráshoz kérnék némi segitséget.

A gomb a PORTA0-ra kerül. ( RA0)

RB7,RB6,RB5,RB4 led világit alapjáraton.
RB3,RB2,RB1.RB0 nem világit a led alapjáraton.

Amikor a gomb lenyomásra kerül (PORTA0) , akkor
RB7,RB6,RB5,RB4 nem világit a led, de a RB3,RB2,RB1.RB0 világit.

a többi a fájl-ban.



Hali.
Következő: »»   26 / 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