Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Többi kérdésre a válasz? (tápfesz mérés?, LED lábakon a feszültségek? Többi lábon a feszültség?)
Ha jol ertelmezem krisztian98 nem akar ECU-t csinalni, csak egy nagyon egyszeru interface-t a gazpedal es az ECU koze. Tehat neki az alapjarattal nem kell foglalkoznia, hanem pl egy digitalis potit vezerelni a PIC-kel, tehat az ECU azt hiszi a gazpedalt olvasgatja le. Ez persze nagyon leegyszerusiti a feladatot, nyilvan a vegkifejlet nem lesz tokeletes de hosszu egyenes utszakaszokon talan elfogadhato eredmenyt ad. Az nyilvan valo sokkal jobb lenne a sebessegmerore is raakaszkodni es annak fuggvenyeben szabalyozni.
[OFF] Az en automban a tempomathoz (cruise control) 3 gomb tarsul, az egyik bekapcsolja, ill annak folyamatos nyomsaval noveli a beallitott erteket, a masik kikapcsolja ill. csokkenti a folyamatos nyomasaval, a harmadik pedig a legutolso beallitasnak megfeleloen ujra bekapcsolja - tehat legutoljara 70-en mentem, valamiert kikapcsoltam pl megalltam egy benzinkutnal, utana nem kell megint felgyorstanom es ujra beallitanom, hanem csak megnyomom es az felgyorsitja az autot. Ehhez hozza tartozik, hogy eleg gagyi a dolog (opel omega amugy az auto), csak a feket figyeli biztonsagi kioldas vegett, ugye kupliung nincs mert automata de ha kilokom a valtot uresbe akkor elkezd ezerrel porogni a motor! Amikor vissza kapcsolom hogy ujra menjen 70-el es meg csak 40-el megyek, akkor erzekeli a nagy sebesseg kulonbseget, e kepes ra, hogy teli gazt adjon - aminek hatasara a valto vissza kapcsol es akkor ugy erzem magam mint egy repulon ami epp fel akar szallni (csak epp nekem kellene megallitani a jarmuvet ha gond van...). A sebesseg tartas viszonylag jol mukodik, +-5 km/h az atlag ami kozott mozog, kiveve ha hirtelen nagy emelkedo jon ahol lassan veszi eszre es aztan megint teligazzal felel az esemenyre, amire valto megintcsak vissza kapcsol... repulo effektus ujra
Én nem javasolnám, hogy az autót használd fel a PIC-ekkel való ismerkedésre! Még a végén balesetet okozol! Egy ilyen áramkör nagy bajt is tud okozni, 110%-os biztonsággal kell működnie! Egy rossz program ami úgy tűnik működik, csak jön egy olyan helyzet, amire nem gondoltál, és kész a baj. (mondjuk fogja magát csúcsforgalomban és egyesben odapakol!)
A PIC-et LED villogtatással kell kezdeni és szépen folyamatosan tanulni a buktatóit. És ami itt nem PIC téma, hogy hogyan kell egy autót vezérelni, nem biztos, hogy itt kell majd kifejteni, de ez csak egy megjegyzés.
Elismerem, meg kellett volna néznem
A LED-ek nem voltak jók Köszönöm a segítséget! Idézet: „nem akar ECU-t csinalni, csak egy nagyon egyszeru interface-t a gazpedal es az ECU koze.” amit megfogalmazott, abból én is ezt láttam. Amit viszont leírt, az ez: "Tempomatot szeretnék építeni a kocsiba"
Imádlak!
Igazad van, nem ECU-t akar, és ezt mi sem gondoltuk egy percig sem .
Pontosan úgy van ahogy mondod, bele akar tenni egy elektronikát a gázpedál "jelébe"! Ezt nem tartod kissé veszélyesnek egy kezdő számára? Mi van, ha az áramkör elektronikai, vagy szoftveres okból hibásan kezd működni? Idézet: „Mi van, ha az áramkör elektronikai, vagy szoftveres okból hibásan kezd működni?” Gubanc
Sziasztok! Az lenne a kérdésem, hogy ha egy RC távirányító vevőjéből kiérkező jeleket szeretném PIC-el feldolgozni, akkor milyen bemenetét és milyen tulajdonságát kell felhasználnom a PIC-nek? Amit a vevő csatlakozójáról tudok, az annyi, hogy három PIN-je van. Egy 4,8V-6V-ig 'TÁP' kimenet egy 'JEL' és a 'GND'.
Kép: Hivatkozás A fenti képen látható, hogy egy RC szervómotor hogyan működik a vevő kimenetére csatlakozva. Ha az impulzus 1ms ideig tart, akkor a servo az egyik végállásban van, ha 1,5ms akkor középen és ha 2ms akkor a másik végállásban van. A kettő között pedig proporcionális.
Én a Capture módot használom fel erre.
Úgy működik, hogy egy 16bites számláló számlál egy meghatározott frekin, jó gyorsan. A felfutó él megszakítást okoz a CCPx Compare moduljában,aminek a hatására a Timer értéke beíródik a CCpx modul regiszterébe. Ezt eltárolod, majd lefutó élre állítod a CCPx modul megszakítás érzékenységét. Ha megjön a megszakítás, akkor az előbb leírt dolgok történnek ismét. A korábban eltárol értéket kivonva a mostani eltárolt számláló értékéből előáll egy érték, ami fordítottan arányos az impulzus idejével. Feldolgoz, kiad a megfelelő vezérlőjel, működik, örül! Persze a kiadott vezérlőjelet lehet cizellálni némi táblázatból kinyert jól megtervezett értékekkel, hogy a vezérlő gomb állássa lineáris ill. az elvárt hatást váltsa ki a vezérelt járművön, vagy egyéb jelenségen.
Azt akarom megkérdezni még hogy kapcsolókat hogyan kössek be, és melyik portot ajánlod.
Úgy jó lenne ha GND-re 1kohm-al minden lába egy portnak, a láb pedig 10kohm-al kapcsolóval a Vdd-re. Így alaphelyzetben 0 a bemenet gombnyomásra meg 1. Ellenállások talán jók igy. Mátrixot nem igazán akarok. Köszi!
Hú, ez kicsit bonyolult így elsőre. De biztos csak azért, mert a capture-el nem is foglalkoztam még. Ez tök jó lenne, ha összejönne
Azt szeretném még megkérdezni, hogy ha include fájlként megadok olyan szösszenteket, mint pl. egy LCD modul kezelés, akkor egy másik fájlból lehet hivatkozni abban a fájlban található cimkére? Mert, mintha ilyesmi projektet látam volna. És így sokkal átláthatóbban tudnék programozni én is. ASM-ről van szó most.
Include file-t nem program kodok tarolasara kell hasznalni, hanem definiciok es makrok-ra. Program kodok szeletelesere tessek a relokacios modot hasznalni linker scriptekkel es tessek a linkerre bizni a projectbe agyazott forras kodokat, object kodokat es library-ket hova pakolassza majd a program memoriaban - es hogy a memoria valtozok vegleges helye mi legyen. Egyszer kell megtanulni es sokkal egyszerubb a vegkifejlet.
Olvasd el többször és meglátod nagyon egyszerű! Nézd meg hozzá az adatlapban az ide vonatkozó ábrát! Nézd meg az ide vonatkozó regisztereket, mit és mivel lehet beállítani. Ha valamelyiket nem érted kérdezd meg, ha tudunk válaszolunk.
Trudnainak igaza van az include-kkel kapcsolatban, de ettől föggetlenül simán meg lehet oldani így is a dolgot, csak arra kell ügyelni, hogy ahová teszed az #INCLUDE-t oda fog bemásolódni az a szöveg, ami a *.inc fájlban van. Egy dologra figyelj, hogy két inc között csak CALL-al tarts kapcslatot, soha ne ugrálj más módon közöttük, mert abból iszonyatos kalamajka lesz a végén! De ismétlem trudnainak igaza van, csak én is olyan lusta(és lehet, buta) vagyok, hogy még soha nem használtam a linkert. Nekem túl bonyolult. Tényleg trudnai, el lehet mondani a működését egyszerűen? Mert a leírásokból én nem értek semmit, csak ideges leszek tőle!
Bármelyik port megfelel, ha a bemenetnek konfigolod.
Én jobbnak tartom a felhúzó ellenállásokat és amikor a gomb testre zár. Ennek az az oka, hogy a PIC bemenete 2...2.5V felett gondolja azt, hogy a szint H, viszont kb. 0,8V alatt, hogy L. Ezért stabilabb a felhúzás. Az 1K az jó érték, de lehet 4k7-val is próbálkozni, ha sok a gomb és nem akarod hogy sokat fogyasszon az áramkör. Ez egyébként elemes táplálásnál lehet érdekes inkább, mert a felhúzón csak a gomb lenyomásakor folyik áram. A programnak egyébként mindegy, hogy BTFSS, vagy BTFSC...
Miért cserélgeti az MPLab és a PicKit2 saját programja a firmware-t a PicKit2-ben, ha felváltva használom őket?
Nem ez a mániám, csak néha napján rámjön, hogy az MPLab-ot tanulgassam.
Mert valamelyikben nem jó firmware van. Olvasd el a PICKit2 cikkemben az ide vonatkozó részt!
Sziasztok!
Ismeri-e valaki közületek a PIC12F683-at? Elakadtam az AD átalakítónál... Alant bemásoltam a konverziós rutint; valamiért nem indul. MPLAB-bal is végigléptettem, semmi eredmény. Ott a hiba: nem megy a konverzió, mert nem megfelelő az "Acquisition Delay". Később leírják példával, hogy ez 1..5 mikrosec közötti (1 órajel?). Üdv: fejesg adc0 ; banksel TRISIO bsf TRISIO,0 banksel ANSEL movlw b'01110001' iorwf ANSEL banksel ADCON0 movlw b'10000001' movwf ADCON0 ; MINTAVÉTELI IDŐ bsf ADCON0,GO btfsc ADCON0,GO goto $-1 ; banksel ADRESH movf ADRESH,W movwf adfelso banksel ADRESL movf ADRESL,W movwf adalso ; return
Kezdem érteni ezt a "kepcsör fánksön-t" Kép: Hivatkozás
Üdv.
????????????????????? Milyen Capture Function-ra gondolsz? fejesg
Mennyi az órajeled(kvarc, vagy a belső oszci ?MHz)?
Neked sajnos nem tudok segíteni. Igazából 'Watt'-hoz szóltam, és ez a fejlécből kiderül.
Watt: Közösíteni kell a PIC-em GND-jét az RC-vevőm földjével? Vagy ez evidens minden áramkör részletre nézve, amik együtt dolgoznak? Azért kérdezem, hogy elég-e bekötni a 'signal' nevű TTL jelet a PIC-re?
Szia googa & watt!
Bocsi, figyelmetlen voltam. A miki belső 4 MHz oszciját használom (ebből következtettem az 1 mikrosec-ra). Bemásolom a beállításokat: Bár a PWM-et is használni szeretném, egyelőre kikapcsoltam, komparátorokat letiltottam. GP0 AD bemenet, GP1-2-4-5 kimenet, GP3 bemenet. LIST P=12F683, R=DEC #include "P12F683.INC" __config _FCMEN_OFF & _IESO_OFF & _PWRTE_OFF & _BOD_OFF & _MCLRE_OFF & _WDT_OFF & _CP_OFF & _CPD_OFF & _INTOSCIO ; CBLOCK 0x20 adfelso, adalso ENDC ; ORG 0x00 BSF STATUS,RP0 CLRF INTCON movlw b'11001001' movwf TRISIO CLRF PIE1 CLRF ANSEL ; clrf ADRESL BCF STATUS,RP0 CLRF GPIO CLRF PIR1 CLRF TMR2 CLRF T2CON CLRF CCPR1L CLRF CCP1CON CLRF ADCON0 movlw b'00000111' movwf CMCON0 fejesg Idézet: „A miki belső 4 MHz oszciját használom” Úgy érted 4MHz-et állítottál be? Nem látom hol? (max. 8MHz állítható be egyébként...) Használd a Kód gomb asm lehetőségét(code=asm) Idézet: „Ott a hiba: nem megy a konverzió, mert nem megfelelő az "Acquisition Delay".” 1. Az ADON bit bebillentése és a konverzió indítása (GO bit bebillentése) közé tegyél néhány NOP-ot. Ha 4 MHz az oszcillátor, akkor egy NOP = 1 us. Ha 4-5 db-ot teszel, az szerintem elég. 2. Ugyancsak hagyj minden konverzió után néhány us időt a következő indításáig. Ehhez nem kell NOP, elég, ha a program közben csinál valamit ("feldolgozza" az adatot). 3. ANSEL felső bitjeiben a 0111 szerintem rossz választás! A 12F675-nél az pl. írják, hogy max.500 kHz-ig választható. Neked meg, gondolom, 4 MHz-en ketyeg az oszcillátor. Válaszd ezért inkább a Fosc/8 vagy Fosc/16 lehetőséget.
Idézet: „Azt akarom megkérdezni még hogy kapcsolókat hogyan kössek be...” Úgy, ahogy a tegnap neked küldött Olimex-es kapcsoláson látható. Vagy ahogy a Microchip demókártyáinak kapcsolási rajzain láthatod. Pl. 10 kohmos felhúzás, a nyomógomb pedig a föld felé zárjon, közvetlenül. A PIC lába és a nyomógomb közé pedig egy védőellenállást érdemes beiktatni (470 ohm). Ez azért kell, hogy nehogy egy kimenetnek beállított lábat köss le közvetlenül a földre.
Hi.
Köszi a választ. Az a helyzet, hogy 1:1 bemásoltam az user manual PDF-ből a rutint, abban így van az ANSEL beállítása, de megpróbálom Fosc/16-tal, ahogy írtad. Egyébként én is így értelmeztem a 4-5 mikrosecundumot, hogy a konverzió elé meg utána berámoltam 6-8 NOP-ot. fejesg Idézet: „Tényleg trudnai, el lehet mondani a működését egyszerűen?” Vegulis egyszeru az eset Csak a beteg idokozben meghalt Szoval project ablakban jobb kikk, add new file, processzorhoz tartozo LKR file-t fel kell venni - ugye ezek az MPASM konyvtaraban vannak. Ezenkivul ami gond nekem szokott lenni, hogy a friss MPLAB installban valamiert nincsenek beallitva az utvonalak megfeleloen. Tehat a Project / Language Tool Locations -nel be kell allitani az LKR utvonalat (Pl nekem az LKR: "C:\Program Files\Microchip\MPASM Suite\LKR"). Utana Project / Build options / Project -nel a Directries fulnel ellenorizni kell, hogy ezek az utvonalak be vannak-e alliva - ha nincs akkor katt a Suite Defaults gombra... Ezekutan mar keszen all a project a linker scriptelesre, szoval mar csak hasznalni kell. Alapertelmezesben ha a standard linker scriptet hasznaljuk (amit fent felvettunk a projectunkbe), akkor nincs tul sok teendonk. Ami lenyeg: 1. Valtozo definialas: Tobbfele modon definialhatunk valtozot, a legegyszerubb, hogy az udata szekcioba foglalunk neki helyet:
Ez az un inicializalatlan valtozo (Uninitialised DATA --> UDATA). Ez kb a CBLOCK-nak felel meg, azzal az elteressel, hogy ez valoban valtozot foglal a memoriaban. Hogy mit jelent ez? A CBLOCK az csupan egy konstans definialasara szolgalo block, azaz semmire sem figyel, megadunk neki egy kezdo erteket es a konstansok sorban kapjak a novekvo sorszamokat. Ezzel szemben az UDATA az egesz projecunkre vonatkozik es figyelembe veszi a linker scriptben definialt RAM teruletet, tehat ha kifutunk belole sikit a linker, azonkivul nem engedi, hogy ket valtozo ugyanarra a teruletre keruljon, mig CLOCK-kal el lehet ezt a hibat kovetni... 2. Kod terulet definialas
Ez a legegyszerubb modja a kod elhelyezesenek, egyszeruen megmondjuk, hogy a 'code' teruletre kivanjuk helyezni a kodunkat. Nem kell semmivel sem foglalkozni, a linker majd szepen elhelyezi a kodot oda ahova kell. Ha valami miatt megis meg szeretnenk admi, hogy hova keruljon a kod, az sem gond:
Nos, a 0x000 -lal megadjuk a cimet, elotte a nev az egy logikai hivatkozas lesz erre a szekciora. Na jo, mara ennyit, ezzel mar el lehet indulni szerintem. Lehet inkabb egy cikket fogok irni, meg hatra lenne par dolog: - overlay RAM terulet hasznalata - shared RAM terulet hasznalata - inicializalt RAM hasznalata - es ami a lenyeg: tobb forras, objektum file-ok ill konyvtarak hasznalata / keszitese |
Bejelentkezés
Hirdetés |