Fórum témák
» Több friss téma |
Köszönöm a válaszod, megint tanultam valamit. Ezt ki is fogom próbálni, mert van ithol tl-em de ha ezzel sikerül azt elérnem hogy 1-2 tizedet másszon el maximum akkor jó lesz nekem nem kell még pontosabb mcp.
Sziasztok!
MPlabba, hogy lehet mérni az időt? Azt szeretném tudni, hogy egyes programrészek lefutása kb. mennyi ideig tart ezt hol lehet megnézni?
Debugger / Select tool / MpLAB SIM. Debugger / Settings / Osc - Trace lapon a Processor frequency beállítása. Debugger / Stopwatch ablakban olvasható a szimulációs idő. Ha egy programrészlet előtt lenullázod, az alsó sorban a nullázástól eltelt idő olvasható.
Univerzális ICSP adaptert szeretnék készíteni Pickit3-hoz.
Jelenleg dugdosós próbapanelon csatlakoztatom egy karos IC-foglalat felhasználásával a PIC-et, és ha eltérő típust használok, akkor mindig újrahuzalozom. Ezen szeretnék egyszerűsíteni. Neten találtam többféle kapcsolást, de valahogy egyik sem tűnik "kereknek". Link 1 Link 2 Link 3 Link 4 Link 5 Link 6 A legtöbbnél az Mplab példában korrekt bekötésként ábrázolt 10k ellenállást hiányolom a VDD-VPP lábaknál. Tudnátok segíteni, hogy melyiket érdemes megépíteni, ami üzembiztos is lesz, vagy ajánlani hibamentesen működő áramkört? Nyákterv lenne a leg fontosabb. Érdekes, hogy Magyarországon nem találni gyári kivitelezésűt, külföldről pedig nem szeretnék rendelni.
Ez már többször volt téma, de mindig az a vége, hogy ha nem akarsz megmaradni egy típusnál akkor felejtős az ilyen univerzális eszköz. Vagy breadboard és 5 kábel vagy az áramkörökre ICSP csatit kell tervezni.
Többször leírtam már, hogy a "Univerzális ICSP adapter" korszaka lejárt. Egy nem teljeskörű ábrát szerkesztettem az ismertebb DIP tokozású típusokra... Csak 18 féle bekötés adódott a DIP tokokra.
Érdemesebb kiépíteni a tényleges In Circuit Serial Programming módszerrel programozni. Sokkal egyszerűbb, könnyebb, gyorsabb ... De ezt többször leírtuk teljesen hiába... (Egy kivételt tudok elképzelni, a másoknak eladott, átadott kontrollerek felprogramozása.) Egy kapcsolás és panel tervezésénél könnyen be lehet tervezni a 6 pólusú jumpert (furatfémezett technológia esetén 6 db furatot). Ettől kezdve nem kell kivenni a foglalatból az (át)programozáshoz. Csak rádugod a PICKit2 -t vagy PICKit3 -at a csatlakozóra és már mehet is a programozás. Sok típussal ezzen a csatlakozáson keresztül nyomkövetést is lehet végezni. Ha egy kicsit nagyobb kontroller kell (44, 64, 80, 120,... ), azok már csak SMD tokokban kaphatók... A 6 pólusú csatlakozással ezek is kezelhetők. Sok kontrollernél nem csak a Vdd, Vss, MCLR / Vpp, PGD, PGC lábat kell bekötni, hanem az összes Vdd és az összes AVdd, az összes Vss és az összes AVss, a ENVREG, DISVREG, Vcap, VBus stb. Ezeket sokkal egyszerűbb a cél áramkörben bekötni. A kölönböző családba tartozó de azonos tokozású kontrollerek kezelése az adapterrel megbízhatalan: A foglalat vonzza a nem bele való kontrollert. A programozás alatt a kontroller többször ki / be lép a programozási üzemmódból. Egy belső oszcillátoros, MCLR funkciót letiltó konfiguráció azonnal el is indulhat. Ha egyes lábai az adapterben - más típusok kezelése miatt - össze vannak kötve, kimeneteket kapcsolhatna egymással szembe. Az "Univerzális ICSP adapter" korszakában nem volt belső oszcillátoros kontroller, a mai típusokban már teljesen általános. A hozzászólás módosítva: Dec 25, 2013
Köszönöm mindkettőtöknek a részletes útmutatást. Ez megmagyarázza miért van ennyi féle megoldás a neten. Nem találkoztam még itt ezzel a témával.
Jobban utánakeresek. A hozzászólás módosítva: Dec 25, 2013
Én ezt használtam sokáig, amíg ki nem nőttem.
Sziasztok! Az Interruptokról szeretnék többet megtudni. Van kettő interruptom, egy UART meg egy Timer3 Overflow. Miért van az, hogy a kettő üti egymást? Arra már rájöttem, hogy az interrupt prioritásnak van köze hozzá, de nem értem, miért nem megy, mindig csak az egyik(attól függően, h melyiknek a nagyobb a prioritása). Adott példa: Timer3 villogtat egy ledet, közbe ha UART-on küldök egy adatot, akkor kapcsoljon be egy másik ledet. Ha a Timer3Overflow a HighPriority, akkor az UART teljesen kiesik. Ha az UART a high, akkor viszont, ha folyamatosan küldök adatot neki(lenyomva tartom a billentyűt), akkor a Timer3Overflow működik, de egyébként, ha nincs UART adat, akkor nem. Hogy tudnám ezt kiküszöbölni?
Szia! Adatátvitelt biztos hogy jóötlet félbeszakítani? Úgyemlékszem mintha átvitelkor a megszakításokat tiltani kellene.
Üdv: Balázs
Letiltottam az megszakításon belül a globális megszakításokat, majd mielőtt kilép, újra visszakapcsolom.
Meg van a gond. A TransmitInterruptFlag értéke 1 volt, és amikor küldtem az adatot, akkor nullázódott csak.
Sziasztok.
Van egy néhány ilyen: Pic17C756A-16/L PIC-em. A kérdésem az lenne, hogy ezek csak 1x írhatóak vagy többször is. Ha többször is akkor, PICKit 2-vel lehet kezelni?
A C jelűeket csak egyszer lehet írni. Hacsak nem ablakos a tokozása. Akkor törölhető UV-vel.
Meg kell nézni a PICkit2 által támogatott eszközök listáját. Tudtommal PIC17C nem programozható vele sem egyszer, sem többször.
Sziasztok!
Egy 16f684-es piccel próbálok egy fordulatszám mérőt/számlálót csinálni. Első problémám az, hogy konfigurálom az A és C portot digitálissá, de az A porttal van némi probléma már az mplabban. Az 5-ös számút nem lehet 1-re váltani, ha mindet kimenetnek állítom akkor sem, de ha mind bemenet akkor meg az 5.-en kívül mindegyik állítható. A programrészlet: CLRF PORTC ;Init PORTC MOVLW 0X07 ;comparators off MOVWF CMCON0 BSF STATUS,RP0 ;Bank 1 CLRF ANSEL ;digital I/O MOVLW 0X00 MOVWF TRISC ;set RC<5:0> as outputs BCF STATUS,RP0 ;Bank 0 CLRF PORTA ;Init PORTA MOVLW 0X07 ;comparators off MOVWF CMCON0 ;digital I/O BSF STATUS,RP0 ;Bank 1 ; CLRF ANSEL ;digital I/O MOVLW 0X00 MOVWF TRISA ;set RA<ALL> as outputs RA<> as Inputs BCF STATUS,RP0 ;Bank 0 CLRF PORTA CLRF PORTC BSF PORTA,0 BSF PORTA,1 BSF PORTA,2 BSF PORTA,3 BSF PORTA,4 BSF PORTA,5 Erre a porta redménye 1F, elvileg nem lehetne írni, de ugyan ez az eredmény ha mind kimenet. A másik problémám a timer0-val van: ;TIMER INI BCF STATUS,RP0 ;BANK0 CLRF INTCON CLRF TMR0 BSF STATUS,RP0 ;Bank 1 MOVLW B'00000101' ;Select TMR0, ; prescale, and ; ELŐOSZTÁS 1:64 MOVWF OPTION_REG BSF INTCON,GIE ;IT engedélyezés BSF INTCON,T0IE RETURN Ha kiveszem az intcon,gie globális it-t akkor nem okoz megszakítást a timer0, de így meg minden megszakítás engedélyezve van ami nem túl szerencsés, csak a timer0 megszakítását akarom bekapcsolni. Végül pedig nem tud valaki egy kis segítséget az lcd kezeléshez? Pl. egy példaprogram, hogy is lehetne egy konkrét számot kiírni az lcd-re. Eddig olyanba gondolkodtam, hogy 0-9-ig letárolom a megfelelő kódokat egy táblázatban, de például egy egyszerű értéknövelésnél pl. 6024 6025-re így léptetni az értéket nem túl egyszerű feladat sztem.
A RA5-el az lehet a gondod, hogy a konfigurációs biteknél nincs beállítva az INTOSCIO és emiatt RA5 helyett CLKIN a láb, ami bemenet.
A megszakításoknál mindig kell a GIE, mert nélküle nincs interrupt. A többi megszakítás nem fog ettől még elindulni, azokat egyenként be kell kapcsolni. Különben is szükséges minden megszakításnál megvizsgálni, hogy mi is jött. TMR0 esetén ez a T0IF bit, amit törölni is kell azonnal. Valahogy így kell több megszakításnál megállapítani, mi jött:
Ne felejtsd el minimum a W mentését az elején és visszaállítását! Az LCD-hez kicsit álmos vagyok már, talán holnap, ha addig nem fut be valaki, aki frissebb.
Kösz.
Ráér holnap is a válasz az lcd-re annyira azért nem sürgős.
Az adatlap tanulmanyozasa kozben elolvashatod, hogy az RA3 CSAK bemenet lehet.
Sziasztok!
Lenne egy problémám csinálok egy órát nagy 7 szegmenses kijelzővel, annyi gondba ütköztem hogy a 16F877 Rb0-5 lábai negativ feszt küld ki program szerint ez jó is lenne de többel szeretném terhelni mint amit a kimenete bír. Ezt hogy tudnám a legegyszerűbben megoldani? Tranzisztorokra gondoltam de annak plusz kellene nem igaz? Ha valaki tud segíteni azt megköszönném.
Ezt a negatív feszültséget fejtsd ki bővebben, lehetőleg rajzzal. A PIC mikrokontrollerek a földhöz képest pozitív tápfeszültséggel működnek.
A hozzászólás módosítva: Dec 27, 2013
Köszi oké egy pillanat, Csak így tudom. A tranzisztorokra +12 voltot adok, úgy jó az anódok hajtása, De a katódokat hogy oldjam meg?
A hozzászólás módosítva: Dec 27, 2013
Így csináld. Ha a kijelző szegmensében több LED van sorba kapcsolva, értelemszerűen a 820 Ohm-os ellenállást módosítani kell.
Köszönöm szépen!
Az anódok úgy jók lesznek ha a pnp tranzisztorokra +12 voltot adok?
Egy kis segítséget kérnék, nem feltétlen kell konkrét program elég lenne egy kis gondolkodásmenet is.
Tehát mint korábban említettem, hogy fordulatszámmérőt szeretnék csinálni és kicsit elakadtam, hogy is kéne az lcd-re kijeleztetni a számokat. Eddig úgy csináltam (gondoltam), hogy elindítom a timer1-et 100ms-ig számol (lényegében 500ms-ra gondoltam mivel az lcd-re írásnál ha jól tudom 2-3ms-t kell várni minden parancskiadás/karakterírás után így felesleges lenne 100ms-ként mindig írogatni az lcd-re, de végül is még később módosítható) így amikor megszakítást generál a timer1 mindig léptet egy változót, minden 5. megszakítás után fog csak kiírni a kijelzőre. Közbe a főprogram figyeli az egyik bemenetet és amikor az értéke 0-1-re és 1-0-ra vált akkor növel egyet egy másik változón. Amikor eltelik az 500ms (5. megszakítás következik) meghív egy függvényt ahol be kéne írni a kijelzőbe a megfelelő értéket abból amit addig összeszámolt. pl. 200-as értéknél másodpercenként 400-at fordulna percenként 24000-et. (Persze normál körülmények között nem igen lesz 24000 fordulatszám legalább is nem tudom mivel lehet előállítani, de a lényeg, hogy viszonylag nagy értéket is lehetne vele mérni, de ténylegesen még a 10000-se igen fogja elérni soha.) Szóval abban kérnék segítség, hogy az eddigi gondolkodásmenetem jó volt e illetve a példában megadott 200-as értéknek megfelelő 24000-et hogy lehet kiírni az lcdre. Egy táblázatban letárolom a számokat 0-9-ig eddig jutottam és itt elakadtam. Esetleg egy másik táblázatban lehetne tárolni valamit pl. egy 256 elemű táblázatban és az összeszámolt fordulatok függvényében meghívja a táblázatot és a megfelelő elem tartalmával tér vissza, de sajnos nem nagyon tudom letárolni egy ilyen táblázatban az összes szükséges kódot. Ráadásul ez egy 16f684 elég szűkös memóriával EEPROM 256bájt. (Azért is lenne jó használni ez a mikroprocit mert kimaradtak van 4-5db így másra nem igazán tudom használni, még egy ilyen viszonylag könnyebb feladat is érdekes lehet.)
A gondolatmenet nagyjából jó.
Azt nem értettem, hogy a bemenetnek miért mindkét állapotváltozásánál számolsz. Ha egy impulzust kap minden fordulatnál, akkor csak a 0-1 váltásoknál kell számolnod. A kiíratás között eltelt időn meghatározásánál nem csak az lcd írási idejét kell figyelembe venni, hanem a fordulatszám változás sebességét is. Ha túl gyorsan változik a fordulat, és eközben viszonylag gyorsan is íratod ki, akkor olyan mértékben fognak pörögni a számok, hogy az utolsó 2-3 számjegyet el sem lehet olvasni. Én másodpercenként jeleníteném meg az 1mp alatt mért fordulatszámot, ha ez elegendő a feladatodhoz. Fontos, hogy az 1mp az pontosan 1mp legyen, ugyanis ha 1mp alatt csak 1-2 impulzust is kihagysz a számolásból, mert gyorsabb a timer1 megszakítása, akkor az percenként 60-120-as eltérést is eredményezhet. Én mikropascalban írok programokat. Ott a kiíratáshoz szükséges szám-szöveg konvertálás egy egyszerű inttostr függvénnyel elvégezhető. A hozzászólás módosítva: Dec 27, 2013
Nem értem pontosan, mit szeretnél. A rajzban, amit küldtem, a katód és az anód is be van kötve. Anód kapja a + 12 V-ot, katód pedig megy egy ellenálláson keresztül a tranzisztorra.
Bocs, hogy beledumálok de én úgy csináltam fordulatszámmérőt, hogy a két impulzus közt eltelt időt mérem. Több mérés átlagát veszem és ebből számolom a fordulatot.
Ez talán pontosabb mérést ad.
Ha multiplexelt vezérlést akarsz, akkor ez így nem egészen jó.
Az anódokat, és a katódokat külön kell kapcsolni. Az anód 12V feszültségét érdemes PNP tranzisztorral kapcsolni, de a vezérlőjel csak a 0-5V tartományban lehet. Ezt valamilyen szintáttevővel kell megoldani. A hozzászólás módosítva: Dec 27, 2013
Az anód 5 voltot kap a rajz szerint oda 12 voltot kötök az oké, közös anódos kijelző. a szegmenseket közvetlenül a pic hajtja RB0-RB kimeneteivel. Innen kapják a negatívot a szegmensek. Ide akkor most jó az npn tranzisztor amit rajzoltál?
|
Bejelentkezés
Hirdetés |