Fórum témák

» Több friss téma
Fórum
Keresés
Lapozás: OK   4 / 29
(#) 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
(#) 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.
(#) 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
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 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 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
É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
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 17, 2013
Teszteld egy LCD-n a mért értékeket. UART-nál eléggé sok a hibalehetőség.
(#) 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
(#) 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
(#) 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
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 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
(#) 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.
(#) 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
(#) 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;
(#) progee válasza user hozzászólására (») Dec 15, 2013
Az UART1_Init(9600);-et az LCD_Init után hívd meg, és mindkét init után tegyél egy 100 ms-os várakoztatást.
(#) progee válasza user hozzászólására (») Dec 15, 2013
Nem HS-el, hanem belső oszcillátorral: INTOSC oscillator ...
(#) user válasza progee hozzászólására (») Dec 15, 2013
Kipróbáltam, HS-el is ugyanaz a helyzet sajnos.
Egy 16F877-est használok a "picplc6_ds1820.mpas"-ban, a kvarc a 13-14-es lábon van.
(#) progee válasza user hozzászólására (») Dec 15, 2013
Próbáld ki azért, hogy a belső kvarcal is ugyanezt csinálja-e.
Ha jól látom, a 16F886-nál a külső kvarcot a 9-10 (RA6-RA7) lábakra kell kötni, Te pedig a TRISA -t 255-re állítottad. Szerintem az nem jó, hogy mindkét láb bemenetre van állítva.
A hozzászólás módosítva: Dec 15, 2013
(#) user válasza progee hozzászólására (») Dec 15, 2013
szia

A mikropascalban XT külső oszcillátor van beállítva és egy 4megás külső kvarcot használok, szerintem ez jó.
Kipróbáltam,amit írtál de nem segít a Delay_ms(100); sem sajnos. Az lcd világít, és a felső sorban végig tömör fekete négyzetek jelennek meg, az alsó sorban semmi.
Azt nem értem hogy a "myproject"-ben meg jó.
(#) progee válasza progee hozzászólására (») Dec 15, 2013
" külső belső "
Korán van még. Tehát amikor belsőt szerettem volna használni.
(#) progee válasza user hozzászólására (») Dec 15, 2013
Nem olvastam végig az egész mpas fájlt, de ilyen nálam akkor fordult elő,amikor külső belső oszcillátort szerettem volna használni, de a mikropascal alapértelmezett, külső, HS oszcillátorával fordítottam le.
A másik ami még ilyet okozott, hogy az LCD_INIT(); után nem várakoztattam a programot egy delay_ms(100); -al, így nem volt idő az LCD inicializálásra, annak használatbavételéig.
(#) user hozzászólása Dec 14, 2013
Sziasztok!

Ebbe a hőmérős programba szeretném beleilleszteni az lcd kiiratást,de a kijelzőn semmi nem jelenik meg.Tudna segíteni valaki abban hogy hogyan kell konfigurálni az lcd kijelzőt?
A kód mikropascal pro 6.0.0-ban lett megírva, és a "picplc6_ds1820.mpas"-ban nem jelenik meg semmi az lcd-n, a "MyProject.mpas"-ban jól működik a kiiratás.

Köszönettel
user
(#) progee válasza Prendick hozzászólására (») Dec 11, 2013
A legelső próbálkozásaim egyike a portb lábak beállítása volt, de úgy sem működött. Most újra kipróbáltam és ismételten nem megy proteusban.
Próbapanelon összeállítva viszont az áramkört, a portb lábak állítgatása nélkül is működik szépen.
A hozzászólás módosítva: Dec 11, 2013
(#) Prendick válasza progee hozzászólására (») Dec 11, 2013
Azért nem megy a kvarc, mert nem állítottad be rendesen az RB6-7 portokat. Egy kvarc önmagában nem oszcillál, csak ha oszcillátor kapcsolásba van kötve. Lehet látni jól a rajzon, hogy az RB6 ebben a kapcsolásban T1OSO. Vagyis kimenet. Az RB7 meg T1OSI, bemenet. Ezek között rezeg majd a kvarc. Alapból a TRISB mindent bemenetre állít. Két bemenetttel meg nincs kvarc.
A TRISB6_bit-et 0-ra kell állítani, a TRISB7_bit-et meg 1-re.
Szerintem ezután a Proteus is felismeri a szándékot és szimulálja a kvarcot.
A hozzászólás módosítva: Dec 11, 2013
(#) Ktulu válasza progee hozzászólására (») Dec 9, 2013
Szívesen, örülök hogy sikerült.
A nyákon majd a lehető legközelebb tedd a kvarcot és a 2 kondit a mikrovezérlőhöz. (a vezetékek a testhez a kondenzátoroktól is a lehető legrövidebbek legyenek a nagyobb pontosság eléréséhez)
(#) progee válasza Ktulu hozzászólására (») Dec 9, 2013
Nagyon köszönöm a segítséget!
Sikerült pontosan beállítani.
(#) progee válasza Ktulu hozzászólására (») Dec 9, 2013
Biztosan nem. 32768 van ráírva.
Most szereztem még 4db használtat. Estére újra tesztelem ezekkel élőben.
Sajnos rendelésre 5-7 nap mire újhoz jutok.
A proteust viszont továbbra sem értem.
Következő: »»   4 / 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