Fórum témák
» Több friss téma |
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.
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!
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!!
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.:
Remélem segítettem, ha nem, akkor kicsit konkrétabban kérdezz !
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.
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:
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
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.
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.
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ó?
És így tovább a különböző értékek. A hozzászólás módosítva: 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?
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.
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?
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.
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); }
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?
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
Vissza fejlesztés?
OK, köszönöm, akkor nem keresem...
Sziasztok!
Mplab-ban az adc-t le lehet-e valahogy szimulálni?
Szia!
Van regiszter injection ( remélem jól írtam emlékezetből !) !
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...
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.
Jobb gombbal kattints rá az ikonra, és menj rá a tulajdonságokra. Ott állítsd be hogy rendszergazda ként futtassa.
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
Nagyon szepen koszonom.
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.
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Ő |
Bejelentkezés
Hirdetés |