Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   384 / 1210
(#) vicsys válasza dave77 hozzászólására (») Márc 18, 2013 /
 
Ha más nem marad, szoftveres pwm-et is használhatsz. Lehet, hogy jobban járnál valami cél IC-vel, ebben az esetben.
(#) dave77 válasza (Felhasználó 15355) hozzászólására (») Márc 18, 2013 /
 
Igen, nekem is gyanus volt, hogy ez csak bonyolítaná a dolgot.
Akkor marad a ciklus + időzítés programból, végül is nem egy nagy dolgog, csak felmerült bennem, hogy esetleg hasznosak lehetnek a perifériák funkciói.
Köszönöm a válaszokat!
(#) store92 hozzászólása Márc 20, 2013 /
 
Sziasztok!

Hogy lehet PIC-nél regiszert jelzőbitnek beállítani? Az-az ha egy gombbal megszakítok, akkor vagy 1-be vagy 0-ba ugorjon, ezzel vezérelve valamit. köszi!!
(#) kissi válasza store92 hozzászólására (») Márc 20, 2013 /
 
A nyomógombos megszakítás hatására hardveres bit beállítási lehetőség van ( ha az adott típusnál létezik ! ), ha van lehetőség a használatára, akkor lehet, hogy nem kell másik bit, ill. ha mégis akarod, akkor neked kell a szoftverben beállítanod. Definiálsz egy regisztert és ettől kezdve a bitjeit ugyanúgy eléred, mint bármelyik másik regiszterét!
pl.:
  1. cblock 0
  2. valtozo
  3. endc
  4.  
  5. bsf  valtozo,3
  6. bcf  valtozo, 1
, stb.
Remélem segítettem, ha nem, akkor kicsit konkrétabban kérdezz !
(#) store92 válasza kissi hozzászólására (») Márc 20, 2013 /
 
Köszi a gyors választ!
Ez a része lesz az amit keresek: "Definiálsz egy regisztert és ettől kezdve a bitjeit ugyanúgy eléred, mint bármelyik másik regiszterét!"
ezt egy kicsit részletesebben letudnád írni? Pá hónapja tanulom a mikrovezérlőket és sok a homályos folt, pl. ez is. PicKit 2-vel gyakorlok abban PIC16F887 van.
(#) bbalazs_ válasza store92 hozzászólására (») Márc 20, 2013 / 1
 
Mondjuk az elejen odairod:
#define gombom PORTC,4

kesobb a programban igy ered el:

btfsc gombom
bra lenyomva (mondjuk ha egyes jelzi a lenyomast, ha a 0 akkor fent btfss gomb1)
nemlenyomott:
...progi
bra vegere
lenyomva:
...progi

vegere:
(#) store92 válasza bbalazs_ hozzászólására (») Márc 20, 2013 /
 
Jah* értem most már köszi! minden világos!
De akkor nem is muszáj definiálni elég ha PORTC,4-et írok: btfsc PORTC,4?
És akkor azt a portot bekapcsolja, persze, ha nincs rákapcsolva semmi pl. LED akkor nem világít de attól be van kapcsolva és tudom úgy használni mint egy "jelzőbitet".
KÖSZI!
A hozzászólás módosítva: Márc 20, 2013
(#) bbalazs_ válasza store92 hozzászólására (») Márc 20, 2013 /
 
Nem egeszen. Most arrol beszelunk, hogy mi van, ha bemenetnek van definialva az a bit a TRISC regiszterben. Akkor a btfsc
BitTestFileSkipifClear roviditese, tehat az vizsgalja es eszerint ugrik.


Ha kimenetet akarsz, akkor eloszor nullazod a TRISC megfelelo bitjet, aztan a PORTC,4 vagy LATC,4-el hivatkozhatsz ra.
Akkor bsf gombom vagy bcf gombom-mal tudod 1-be vagy 0-ba allitani

De ha jol tudom, az eredeti kerdes eppen arrol szolt, hogy hogyan tudsz egy bitet kulon definialni, nem? Tehat irhatsz ugyan TRISC,4-et a gombom helyett, de igy valoszinuleg egyszerubb.
(#) agressiv hozzászólása Márc 20, 2013 /
 
Olyan problémám lenne, hogy nem egészen világos az i2c buszon az adatfogadás. Van egy hangerőszabályzóm, ami i2c-n kommunikál egy hangerőszabályzó ic-vel és az működik is rendesen, de kiegészítettem a dolgot egy másik pikkel, aminek az lenne a feladata, hogy ledes kijelzőn kiírja az aktuális hangerőértéket. Az adatfogadás működik, mivel egyszer már vette a lapot de persze nem azt csinálta amit szerettem volna, de legalább az kiderült hogy működik a kommunikáció a két IC között.

Amivel gondban vagyok az egyszerűen a szintaxis, mivel nem nagyon szoktam piket programozni és csak akkor, ha nagyon muszály. A kérdés az, hogy miképpen tudom folyamatosan figyelni az i2c buszt és amikor adat érkezik azt egy változóba elmenteni. Azt értelmezni és a kijelzőre kiiratni nem gond, de még sosem "fogadtam" adatot i2c-n.

PIC C compilerrel írom a programot.
(#) agressiv válasza agressiv hozzászólására (») Márc 20, 2013 /
 
Addig eljutottam, hogy működik, de csak ritkán veszi az adatot és akkor írja ki az értéket amikor olyan kedve van. Hogy lehet azt megoldani, hogy folyamatosan figyelje az i2c-t, vagy mi nem jó?

  1. void main()
  2. {
  3.  
  4.    setup_adc_ports(NO_ANALOGS);
  5.    setup_adc(ADC_CLOCK_DIV_2);
  6.    setup_psp(PSP_DISABLED);
  7.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  8.    setup_timer_1(T1_DISABLED);
  9.    setup_timer_2(T2_DISABLED,0,1);
  10.    setup_comparator(NC_NC_NC_NC);
  11.    setup_vref(FALSE);
  12.    output_c(0b00000010);
  13.    output_d(0b00000010);
  14.    
  15. for(;;)
  16.  
  17.   {
  18.      i2c_start();
  19.      matek = i2c_read();
  20.      i2c_stop();
  21.    
  22.      if (matek==(0b11100000))
  23.      
  24.      {
  25.       output_d(0b11111100);
  26.      }
  27.      
  28.      if (matek==(0b11100001))
  29.      
  30.      {
  31.       output_d(0b01100000);
  32.      }


És így tovább a különböző értékek.
A hozzászólás módosítva: Márc 20, 2013
(#) agressiv válasza agressiv hozzászólására (») Márc 20, 2013 /
 
A program rendben van, a hiba oka hardveres. Ha rá van dugva a Kijelző PIC is a buszra akkor a másik IC sem tudja értlemezni az adatot. Amit lehet tenni ennek érdekében azt mindent megpróbáltam (kondi, ellenállás, rövidebb kábel stb). Nem tudom számít-e de nem az eredeti I2C lábakat használom (foglaltak), viszont próbáltam másikakkal is.

Ötlet?
(#) agressiv válasza agressiv hozzászólására (») Márc 21, 2013 /
 
A program volt a hibás, adatfogadásnál nem kell start stop.

Kérek egy modit, hogy törölje az utolsó négy hozzászólásomat.
(#) Csongi_ hozzászólása Márc 21, 2013 /
 
Sziasztok!
El szeretnek kezdeni PICet programozni.
Jelenleg a tudasom programozasbol 0. Van itthon egy 18F252-m, evel szeretnek elkezdeni tanulgamui, eloszor led villogtatast, majd tobbet, futofenyt, es igy tovabb. Hogyan kezdjem el? Honnan tanuljak?
(#) icserny válasza Csongi_ hozzászólására (») Márc 21, 2013 /
 
Szerintem kezdőként egyszerűbb egy olyan mikrovezérlőt venni, amihez találsz tananyagot, mint egy olyannal kínlódni kezdőként, amihez nem találsz útbaigazítást.
(#) janimester hozzászólása Márc 21, 2013 /
 
Sziasztok , most írok át MikroC-ben egy programot 16F688-ról 16F886-ra és a CMCON0= 0x07 parancsnál hibát ír ki a fordító próbálok rájönni mit kéne változtatni de nem akar összejönni sajnos. Az lcd lábakat és a konfig biteket már beállítottam előtte. Itt a program :

/*
Digital Voltmeter based on PIC16F688
Rajendra Bhatt, Oct 12, 2010
*/

// LCD module connections
sbit LCD_RS at RC2_bit;
sbit LCD_EN at RC3_bit;
sbit LCD_D4 at RC4_bit;
sbit LCD_D5 at RC5_bit;
sbit LCD_D6 at RC6_bit;
sbit LCD_D7 at RC7_bit;
sbit LCD_RS_Direction at TRISC2_bit;
sbit LCD_EN_Direction at TRISC3_bit;
sbit LCD_D4_Direction at TRISC4_bit;
sbit LCD_D5_Direction at TRISC5_bit;
sbit LCD_D6_Direction at TRISC6_bit;
sbit LCD_D7_Direction at TRISC7_bit;
// End LCD module connections

char Message1[] = "DVM Project";
unsigned int ADC_Value, DisplayVolt;
char *volt = "00.0";

void main() {
ANSEL = 0b00000100; // RA2/AN2 is analog input
ADCON0 = 0b00001000; // Analog channel select @ AN2
ADCON1 = 0x00;
CMCON0 = 0x07 ; // Disbale comparators
TRISC = 0b00000000; // PORTC All Outputs
TRISA = 0b00001100; // PORTA All Outputs, Except RA3 and RA2
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // CLEAR display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,1,Message1);
Lcd_Chr(2,10,'V');

do {

ADC_Value = ADC_Read(2);
DisplayVolt = ADC_Value * 2;
volt[0] = DisplayVolt/1000 + 48;
volt[1] = (DisplayVolt/100)%10 + 48;
volt[3] = (DisplayVolt/10)%10 + 48;
Lcd_Out(2,5,volt);
delay_ms(100);
} while(1);

}
(#) janimester hozzászólása Márc 21, 2013 /
 
Már megoldottam , ki kellett venni azt a sort és működött is. De ha már itt vagyok megkérdezném hogy kell egyszerre több különböző programot a MikroC-vel megírni a picre tehát ha ki akarom egészíteni egy másik funkcióval pl.: ds18b20-al hőmérést is végezzen a második sorba kiiratva hol és mit kell csinálnom hogy egyszerre fusson mind a két művelet?
(#) dave77 hozzászólása Márc 21, 2013 /
 
Sziasztok!

A VDI-t (Visual Device Initializert) keresném az MPLAB(v.8.9)-ban, de nincs a TOOLS menüben.
Egyáltalán, szürkén se jelenik meg.
Megnyitott project-nél, 18F4520-ra...

Van ötlete valakinek?
A hozzászólás módosítva: Márc 21, 2013
(#) Hp41C válasza dave77 hozzászólására (») Márc 21, 2013 /
 
Felhagytak vele....
(#) dave77 válasza Hp41C hozzászólására (») Márc 21, 2013 /
 
Vissza fejlesztés?
OK, köszönöm, akkor nem keresem...
(#) mrobi hozzászólása Márc 21, 2013 /
 
Sziasztok!

Mplab-ban az adc-t le lehet-e valahogy szimulálni?
(#) kissi válasza mrobi hozzászólására (») Márc 21, 2013 /
 
Szia!
Van regiszter injection ( remélem jól írtam emlékezetből !) !
(#) Hp41C válasza dave77 hozzászólására (») Márc 22, 2013 /
 
Szia!

Inkább úgy fogalmaznék, hogy annyira szétágazó lett a kontroller kínálatuk, hogy a karbantartása nagyon sok fejlesztői kapacitást kötne le...
(#) dave77 válasza Hp41C hozzászólására (») Márc 22, 2013 /
 
Felraktam a 8.5-öt, abban még benne van
(#) viktorio333 hozzászólása Márc 22, 2013 /
 
Sziasztok. Letöltöttem a PIC SIMULATOR IDE programot már a létező összeset amit a neten találtam és egyik sem indul. Mi lehet a probléma? Tudnátok segíteni fontos lenne. Windows 7 32bit az operációs rendszerem.Ezt az üzenetet dobja ki de semmi konkret hiba ok.
(#) mrobi válasza viktorio333 hozzászólására (») Márc 22, 2013 /
 
Jobb gombbal kattints rá az ikonra, és menj rá a tulajdonságokra. Ott állítsd be hogy rendszergazda ként futtassa.

Névtelen.png
    
(#) mrobi hozzászólása Márc 22, 2013 /
 
Sziasztok! Ha mérek ADC-vel akkor két mérés közt mennyi időt kell/szoktatok várni? Illetve a karakteres lcd-nél mennyi időt szokás várni a két karakter közt?
A hozzászólás módosítva: Márc 22, 2013
(#) viktorio333 válasza mrobi hozzászólására (») Márc 22, 2013 /
 
Nagyon szepen koszonom.
(#) potyo válasza mrobi hozzászólására (») Márc 22, 2013 /
 
Karakteres LCD esetén ha jól emlékszem, 37us-ot szokott az adatlap írni, mint parancsvégrehajtási időt. Ha ennyi vársz két karakter küldése között, akkor az elég.

ADC esetén meg attól függ, váltasz-e csatornát is vagy sem. Ha nem, akkor az előző mérés végetérésekor azonnal indíthatod a következőt, nincs minimális idő. Ha van csatornaváltás is, akkor meg az adatlapban meg kell nézni, mennyi a szükséges várakozási idő - aquisition time néven találod, tápfeszültség, analóg forrás impedancia és hőmérsékletfüggő is. Konkrétan 18F4550 esetén 85fok, 5V táp és 2,5kohm impedancia esetén 2,45us várakozási időt mutat csatornaváltás után minimális várakozásként. 21.1 fejezetben találod.
(#) mrobi válasza potyo hozzászólására (») Márc 22, 2013 /
 
Köszi. Sikerült megtalálnom.
(#) janimester hozzászólása Márc 23, 2013 /
 
Sziasztok a linkben látható egy 18f2550-re való fordulatszmmérő ami tökéletes is lenne nekem mivel mikroc-vel írták és a méréshatára is tág nem csak 9990-ig mér. A kérdésem az lenne hogy a timer résznél mit és hogyan kéne átírnom hogy 16F886-on is működjön? Ott akadtam el hogy a microc ugye felismeri hogy ehez a pichez a parancs nem jó és aláhúzza ezt : T0CON = 0b01101000; tehát ezt kéne egyszer átvariálnom a 16 nyelvére és ezt az IR TX kivételével

T0CON.TMR0ON = 1;
TMR0L = 0;
TMR0H = 0;
IR_Tx = 1;

és itt a TOCON-al kezdődő sor nem tetszik neki ha ezt át tudnám írni már működne is elvileg a 16-os procimon.

Delay_ms(1000); // Wait for 1 sec
IR_Tx = 0;
T0CON.TMR0ON = 0; // Stop the timer
RPM_Value = (256*TMR0H + TMR0L)*60;
Display_RPM(RPM_Value);
} while(1); // Infinite Loop
}

FORDMÉRŐ
Következő: »»   384 / 1210
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