Fórum témák
» Több friss téma |
Szia!
Így kell valahogyan?
A D0-D3-ig nem elég hogyha logikai alacsony szintnek definiálom a PIC lábát? Köszönöm Adrián A hozzászólás módosítva: Máj 17, 2014
Szeretnék egy fetet meghajtani pic-cel(kb 20kHz).Ez 24V ot és 2A-t kapcsolgatna.
Hogy ill mivel tudom illeszteni a fetet (pl egy irfz44n-t) hogy az is örüljön neki.
Ez egy biztos megoldas. A VG1 a meghajto 5 voltos jel. A meghajto tranzisztorok tapja 12-15 volt korul kell hogy legyen. Nekem mukodik sok ilyen meghajtas 1-10 kHz PWM jellel 20-40 amper arammal.
Jó felé haladsz...
Helyett ajánlottam volna a következőt: LATB ^= (LATB ^ LCD_Table[nibble & 0x0F]) & 0xF0; Ahol:
A hozzászólás módosítva: Máj 18, 2014
Srácok, Spontán fagyásokat mi okozhat? (P18F4550, 4x4matrix gombsor)
Van amikor nem fagy a program le, de van olyan, hogy pillanatok alatt kifagy. Legalább is a kijelző frissítése, mert a háttérben a LED tovább villog a hardveren. Proteusba, ha megfagy akkor a futást jelző LED is megáll. A matrixra gyanakszom: A 4x4-es matrix sorait kapcsolgatom magas szintre ami az A PORT 0:3 lábain van és B PORT 4:7 lábain olvasok ami testre van húzva 4.7K-os ellenállással. Minden PORT digitálisra van állítva. Előre is kösz..
MCLR nincs felhúzva, elégtelen tápszűrés, érintkezési hiba.
MCLR 10K-s ellenállással fel van húzva 5v-ra.
A tápom egy 12v-os kapcsolóüzemű táp. (Kínai) Az 5v-ot a hardveren egy LM7805-ös IC adja amely 100n kondival és egy 330n kondival van szűrve. Érintkezési hiba véleményem szerint nem lehet mert Proteus-ba is ugyan ezt produkálja.
Mégse vélem hogy elkötés lenne, hiszen jól kötöttem be és egy két karakter tisztán kivehető, majd a futás közepén már csak egy oszlopban scrollozza a szöveget. Gondolom ha elkötés lenne a ledpanelen, akkor össze vissza pontozna. Itt valami program hiba van úgy vélem.
Idézet: „Proteus-ba is ugyan ezt produkálja” Akkor egyértelműen programhiba! Watchdog? Oszci jól van beállítva?
Watchdog kikapcsolva, 20MHz Kristály jól van bekötve.
Legközelebb a PIC lábaihoz 22p-val GND-re lekötve.. Azt hiszem a 4x4 mátrix folyamatos figyelése okozhatja a hibát. Definíciók:
Futás pedig így:
A végén természetesen SOROK visszaáll és újra kezdődik a lépkedés. A hozzászólás módosítva: Máj 18, 2014
Még egy kérdés..
Ha bekapcsolom a Watchdog-ot akkor újraindulgat, resetel a cucc Hardveren is és Proteusba is.. Ez miért lehet? A hozzászólás módosítva: Máj 18, 2014
Sziasztok!
PIC16F628A-val dolgozok. Találkozott-e már valaki olyannal, hogy amíg nem teszek rá külső kvarcot addig felismeri a Pickit3, de miután csatlakoztatok rá kvarcot, már Target Device ID (00000000) does not match expected Device ID (00001060), hibát dobja, de nem mindig rögtön, van hogy rátöltök pár módosítást a pic-re és csak utána jelentkezik a hiba. Ez mitől lehet? Nagyon idegesítő.
Ezen a lapon nézd meg az utosó két bekezdést.
Mert annak az a dolga.
A beállításoktól függően bizonyos időközönként generál egy resetet. Ezt a programba iktatott CLRWDT utasítással lehet elkerülni, C-ben talán a CLRWDT() utasítás lesz. De ha ki van kapcsolva, akkor nem kell vele törődni. Írtad hogy 20MHz-en ketyeg. A konfignál HS módban van? 20MHz-es kavicshoz inkább 15pF javasolt.
icserny féle Piccolo projektes kapcsolás és beállítások alapján készítettem el a sajátomat így gondolom azoknak maximálisan jónak kell lenniük.
A Watchdog-nak utána néztem és inkább kikapcsolom. Nem jó nekem...most még. Esetleg változók nem megfelelő lezárásai nem okozhatnak ilyen hibát? A hozzászólás módosítva: Máj 18, 2014
HSPLL? A 20MHz-es kavics PLL-el egy kicsit sok lesz nem?
Nem lesz sok, mert a PLL bemenetén 4MHz kell legyen, így ha 20MHz-es a kvarc akkor le kell osztani 5-el, a PLL abbol a 4 megából csinál 96-ot, amit leoszt 2-vel, mert a maximum az 48 mega amit be lehet állítani, így a kvarcod lehet 4MHz-től 40MHz-ig bármi, mert bent úgy is más lesz. Gyakorlatilag így nem is számít milyen kvarcod van, mert úgy is olyan frekit állítasz elő amilyent akarsz (amilyent lehet a leosztásokból és szorzásokból)
Szerk: most látom, hogy don_peter beállításánál tényleg nagy lesz, mivel nincs leosztva ) A hozzászólás módosítva: Máj 18, 2014
Még ezekkel a freki beállításokkal nem vagyok tisztában így szívesen fogadnék egy linket vagy magyar leírást mely kifejti mi miért jó.
Bár lehet a Piccolo oldalon is fent van majd utána nézek. Épp itt lenne az ideje.. Más: Most Proteus-ba leszedtem a 4.75K-os ellenállásokat a bemenetről és nem fagy a program futás. Ha vissza teszem elég hamar lefagy. Na most vagy kicsi az ellenállás vagy nem tudom mi lenne nekem oda a megfelelő lehúzó. (gondolom nem lehet a bemenet lebegőn) Mi a véleményetek.
20 MHz-es kvarchoz PLLDIV = 5 kell, így lesz belőle 4 MHz.
Igen pont így használom.
Nem módosítottam a tiédet. Tegnap néztem át a konfigurációs beállításokat és jónak találtam amik be voltak állítva így nem nyúltam hozzá. 4x4 mátrix: Kipróbáltam 1K, 4.7K, 10K, 15K, 20K-s ellenállássokkal a gombsor bemeneti részét és mindegyikkel lefagy sajnos. Ha nincs rajta ellenállás akkor nem fagy ki a program. Készítettem egy képet is amit csatoltam a bekötésről.. (a kép a lefagyott állapotról készült) A hozzászólás módosítva: Máj 18, 2014
Szia!
Köszönöm szépen az eddigí segítségedet! Olyan kérdésem van, hogyha be van kötve mind a 8 adat lába az LCD kijelzőnek, és megpróbálom 4 bitesként használni, az úgy jó hogyha a PIC-en , földre húzom az RB0-RB3 lábakat? Nekem az Enable lábam a PIC E0 lábára kötöttem és az RS lábat pedig a PIC -F1 lábára. Ahozz hogy jól legyenek deffiniálva, meg kell adjam , vhol hogy Az E porton páldául b00000001 , F port pedig b00000010. A define parancsal mint a 8 lábat kel attól definiálni? #define LCD_DB4 LATDbits.LATD4 #define LCD_DB5 LATDbits.LATD3 #define LCD_DB6 LATDbits.LATD2 #define LCD_DB7 LATDbits.LATD1 #define LCD_DB0 LATDbits.LATE0 #define LCD_DB1 LATDbits.LATD7 #define LCD_DB2 LATDbits.LATD6 #define LCD_DB3 LATDbits.LATD5 itt pedig beállítom, hogy 4 bites legyen? short const LCD_INIT_STRING[4] = { 0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots 0xc, // Display on Amit irtál : LCD_Table[] = {0x00,0x10,0x08,0x18,0x04,0x14,0x0C,0x01C,0x02,0x12,0x0A,0x1A,0x06,0x16,0x0E,0x1E}; ezeket a Nibble parancsok helyett kellenek? void lcd_init(void) { short i; LATD |= 0x061F; TRISD &= 0xF9E0; Ennél a parancsnál , mit definiál, mivel nekem az LCD RB0 lába a PIC E0 lábán van, az RS és AZ Enable lábam is másk porton van mint a többi adatlába a PIC-nek ennél a parancsnál nekem ezt hogyan kell használni? Köszönöm szépen előre is a segítséget, remélem nem írtam sok hülyeséget, csak szeretném, hogy múködjön az kijelző.
Sajnos nem ismerem a C32 LCD könyvtárát. De nem olyan rémisztően nagy feladat, hogy nem lehessen megírni pár óra alatt...
- Az LCD D0..D7 lábaira kapcsolódó portbiteket állítsd kimenetnek és alacsony szintre. - A C/D és az E lábakra kapcsolódó portbiteket állítsd kimenetnek és alacsony szintre. - Inicializálás, ahogy fent próbáltad. Adat írása az LCD -re: - A kiírandó adat felső nibbléjét kiforgatva köld el az LCD D4..D7 lábaira kapcsolódó portbitekre. - A regiszter kiválasztást állítsd be az LCD C/D lábára kapcsolódó portbitre. - Várd ki az előkészítési időt. - Az LCD E lábára kapcsolódó portbitre magas szint. - Várd ki a minimális E magas szint idejét. - Az LCD E lábára kapcsolódó portbitre alacsony szint. - Várd ki a minimális adattartási időt. - A kiírandó adat alsó nibbléjét kiforgatva köld el az LCD D4..D7 lábaira kapcsolódó portbitekre. - Várd ki az előkészítési időt. - Az LCD E lábára kapcsolódó portbitre magas szint. - Várd ki a minimális E magas szint idejét. - Az LCD E lábára kapcsolódó portbitre alacsony szint. - Várd ki a minimális adattartási időt és a parancs végrehajtási időt. Ennyi..
"és mindegyikkel lefagy sajnos."
Mellőzni kellene az ilyen félrevezető megfogalmazásokat. Egy mikrovezérlő program vagy újraindul (Reset, Brown out reset, Watchdog timeout), vagy elakad egy végtelen ciklusban (például várakozik egy eseményre, ami nem következik be). Ha valahol elakad a program akkor nyomkövetéssel vagy nyomkövető kiíratásokkal ellenőrizhető, hogy meddig jut el, illetve hol van az a pont, amin nem jut túl.
Sajnos itt ez a kifejezés a legpontosabb amit megfogalmazhatok.
Nem akad el a ciklusban egyszerűen leakassza random pont úgy mint amikor a PC valamiért megfagy. Gombnyomáskor random még egyszer írom RANDOM módon, tehát minden esetben máshol, így a nyomon követés nem célra vezető. Az érdekes az mint már feljebb is leírtam, hogy gombnyomásnál ha nincs a bemeneteken ellenállás akkor nem fagy meg, ha van fent valamilyen 1-20K közt akkor random leakad a program úgy, hogy magas szinten marad az a bemenet amelyen a gombot olvassa. "lásd kép feljebb" A bemeneteket minden esetben le kell húznom testre? A hozzászólás módosítva: Máj 18, 2014
Ezt a lehúzást nem is értem... Inkább felhúzó ellenállásokat szoktak használni. A random dolog, csak látszólag random. Lehet az egy verem túlcsordulás is, ami látszólag random, de nem az. Na, erre jó a nyomkövetés.
Igaz, felhúzó.....
És amikor nyomok egy gombot a belső ciklus valahol beragad? Van egy ilyen pergés mentesítő ciklusom:
Ez lehet gond? ui: De miért van az, ha nincs felhúzó ellenállás a bemeneteken akkor nem akad le? A hozzászólás módosítva: Máj 18, 2014
Sziasztok!
Valaki tudna nekem segíteni egy asm fájl át írásában ami jelenleg közös anódos 7 szegmenses kijelzőhöz van és nekem közös katódoshoz kellene.....?
üdv.
PIC18f4550 kontrollerrel kellene 1-200hz közötti frekvencia mérését megoldanom. A PICOLO projekt segítségével megvalósítottam jó néhány feladatot I/O portok témakörben, de az időzítőkkel még nem foglalkoztam. Olvasgatom a projekt ezen fejezetét, ehhez kérek gyakorlati segítséget.
A kikuldes elott negald az erteket.
|
Bejelentkezés
Hirdetés |