Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Biztos, hogy ez ebbe a topikba illik?
Én úgy olvastam, hogy ennek a témának PIC-ekről kéne szólnia... ![]()
Üdv.
3,3V-ról próbálok működtetni, egy 16f877a-t, ami Nokia 3510 LCD-t hajtana meg, de sehogy sem indul el az oszcillátor. Próbáltam minden itthon előforduló értékű kvarcot xt és hs módban, de semmi. RC-vel is próbáltam, ugyanaz a helyzet... 5V-ról mindegyik elindul persze. ![]() Ez normális dolog lehet? Az adatlapon azt írták, hogy 2-5,5V tartományban működőképes.
Az F-es széria nem képes 2,5V-ról elindulni.
Erre kizárólag az LF széria tagjai képesek...
16f877a adatlap 176 oldal , itt azt ábrázolja a grafikon, hogy 2V-ról 4MHz-ig műxik, 3V-ról meg 10M-ig az LF, az F nem is megy 4V alatt...
Köszi a választ, jól elnéztem (csak a táblázat adatait futottam át kiválasztáskor...) ![]()
Akkor viszont felmerül a kérdés, hogy én 4.8-at adok neki mégsem indul el. Ez mitől van. Ha rárakok egy stabil 5V-ot akkor megy.
Sziasztok!
Nemrégen találtam rá az oldalra. A PIC-es fórumban már nagyon sok hozzászólás van. Már annyi, hogy több hét lenne végigolvasni, ezért kérdeznék. Elnézést, ha már ez a probléma felmerült. Szóval. A PIC-em egyik lábára jön egy analóg jel. Ezt 10bites A/D átalakító átalakítja nekem. Itt a felső 8 bitet használom. Ha lenyomok egy nyomógombot, akkor az aktuális érték eltárolódik. Azt szeretném megoldani, hogyha az eltárolt érték fölé megy az analóg jel, akkor jöjjön egy goto utasítás, egyébként fusson tovább a program. Megpróbáltam kivonással és a STATUS,C -t vizsgáltam. De ebben az esetben sajnos nem annál a feszültség értéknél ágazik el a program, hanem kb 1 V-al előbb. megpróbáltam a STAUS,Z vizsgálatával. Itt viszont csak egy pillanatig van elágazás (a beállított értéknél). Erre keresnék választ. Az sem lenne baj, ha mind a 10 bites értéket össze tudnám hasonlítani, mert ez pontosabb mérést tenne lehetővé.
Teljesen normális a jelenség, ha a BOREN konfigbit be van kapcsolva, ekkor ugyanis 4 V tápfesznél elindul a brown-out reset, és ha a tápfesz nem megy 4 V fölé nem is fog indulni a PIC. Újabb típusoknál már te határozhatod meg, hogy hány voltnál induljon ez a reset. Kapcsold ki és működni fog.
Annak pedig működnie kéne. Szimuláld le, hol rontod el!
Sziasztok! a segítségeteket kérném.
Most kezdtem el PICet programozgatni. Az lenne a gond hogy: Soros vonalon küldök ki karaktereket, eddig max 10-20 karaktert kellett ezért ugy csináltam: movlw 'K' call kuldes ezzel nincs is gond, de most kikéne küldenem vagy 200 karaktert, és ennyi parancs nem férne be az F84A-ba ![]() Hogy tudom megoldani hogy berakom egy stringbe a karaktersorozatot és lépésenként olvasva kiküldi nekem? Köszi előre is a segítséget. Üdv: MM
Pedig nem működik.
0,8V al előbb kezd el a LED villogni, mint amikor a nyomógombot megnyomom. Itt van a kódrészlet: ... btfss PORTB,0 ;nyomógomb lenyomva? call Tarol movf Doles_szog,w subwf ADRESH btfsc STATUS,C call LED_villog goto MainLoop Tarol: movf ADRESH,w movwf Doles_szog return Idézet: „btfss PORTB,0 ;nyomógomb lenyomva? call Tarol movf Doles_szog,w” Itt mit akarsz tulajdonképpen? Mert a movf Doles_szog,w mindenképpen végrehajtódik, azt tudod? (ha lenyomtad a gombot, ha nem.)
Nézz utána az indirekt címzésnek. (INDF, FSR, és az ezzel kapcsolatos részek), valamint a ciklusszervezést is meg kell vizsgálnod. (DECFSZ ciklusváltozó,F)
Tudom hogy végrehajtódik. Ez lenne a lényege.
Szóval nézek egy analóg jelet. Ha megnyomom a gombot, akkor eltárolja az értékét a Doles_szog változóba. Aztán folyamatosan nézi az A/D átalakítót, és ha ez az érték nagyobb vagy egyenlo, mint a Doles_szog valtozo, akkor megvezérel egy ledet. Valami miatt elérek egy dőlésszöget. A gombbal letárolom, és nem annál az értéknél villan ki a led, hanem kb 1V-al a beállított érték előtt. Ha a Status,Z változót vizsgálom, akkor pedig csak felvillan, és nem világít folyamatosan, ha az érték felette van, mint az eltárolt érték. Érthető, ahogy leírom?
Sziasztok!
Segítsetek legyetek szivesek a *.src filéből hogyan tudok valami pic-be égethető formátumot csinálni. Köszi! ![]()
sziasztok ! Ategnapi kérdésem is ez volt, amit most megszeretnék kérdezni, hogy a willem égetőmmel, hogy tudnám az award bios alaplapon pl: a dátumot, vagy a nevét megváltoztatni? 24 órája töltögetek le mindenféle progit, modbin, cbrom stb és nagyon nem akarok hozzá érteni. Kaptam pár jó tanácsot tegnap, de nem tudtam előrébb jutni. Segítene VALAKI? Akinek van egy kis ideje rám? Itt leszek folyamatossan. Előre köszönöm Nektek.
![]()
Valaki már szólt neked, hogy ez nem a megfelelő topic!
Érdemes lenne a témának megfelelő fórumot keresned(pl. prog.hu, terminal, stb.)
Próbálom a programod működését visszafejteni.
A leírásodat részben értem, de nem teljesen. Egyelőre nézd meg, hogy ezt szeretnéd-e, ami a programodból adódik. Idézet: „btfss PORTB,0 ;nyomógomb lenyomva?” A gomb lenyomása esetén milyen a szint? Idézet: „call Tarol” Ez a Tarol akkor kell végrehajtódjon, ha a a gomb le van nyomva?(PORTB,0 = 0(L szint))) Idézet: „movf Doles_szog,w” Ez meg akkor is, ha lenyomva, akkor is ha nincs lenyomva? Idézet: „subwf ADRESH” Itt azt akarod, hogy ADRESH-W->ADRESH? (jelölni illik, hogy W, vagy F a cél) Idézet: „btfsc STATUS,C” Akkor lesz C-0, ha alulcsordul, tehát Doles_szog nagyobb, mint ADRESH Idézet: „call LED_villog” Ez csak akkor hajtódik végre, ha nincs alulcsordulás Idézet: „goto MainLoop” Ez akkor is, ha alulcsordult, és akkor is ha nem Tarol: movf ADRESH,w movwf Doles_szog return
Igen, biztos hogy igazad van. Próbálok kb. 3-4 programból megírni egy olyat ami nekem megfelelne. Az egyik F877 re íródott, át kell írnom F690 re (ilyenem van itthon, meg a 877 es "ágyúval verébre", ráadásul túl nagy is...) a másik 4 bites interfészt használ, én 8 ra huzaloztam a próbapanelt...stb. 3 nap alatt odáig jutottam hogy egy feszültségosztót állító poti állásától függően kiír egy karaktert az LCD re tápráadás után. De ennyi... hol van még hogy ASCII ba konvertáljam, meg az sem tiszta hogyan frissítem az LCD t. Ha tekergetem a potit üzem közben nem változik semmi. Ha elállítom, táp ki/be akkor a poti állásának pillanatnyilag megfelelő értéket kiírja az LCD re de ennyi, nem több...Lehet ha nulláról kezdtem volna már készen is volna. De ebből is lehet tanulni.
![]()
Köszönöm az ASM et, majd ebből is merítek 5leteket! (hátha még jobban összezavarodom...)
![]()
Ez a frissítés nem egy súlyos dolog...goto az elejére
![]()
"A gomb lenyomása esetén milyen a szint?"
L szint van, ha lenyomom a gombot. "Ez a Tarol akkor kell végrehajtódjon, ha a a gomb le van nyomva?(PORTB,0 = 0(L szint)))" Igen "Itt azt akarod, hogy ADRESH-W->ADRESH? (jelölni illik, hogy W, vagy F a cél)" Ezt itt nem teljesen értem. Azt szeretném ha a W-ben lévő Doles_szog értékét kivonná az ADRESH-ból. A cél nekem mindegy. Ha nagyobb az ADRESH mint a dolesszog, akkor a STATUS,C csurduljon túl, és villogtassa a ledet.
Nincs azzal semmi gond, ha példákat használsz fel, csak nem árt, ha meg is érted mit miért csinál az összetákolt programod.
Aztán szükséges némi kreativitás is, ami majd jönni fog magától, minnél több példát látsz, és már tudod milyen építőkövekből lehet építkezni. A frissítést úgy lehet megoldani pl. hogy beállítasz egy Timert, ami megszakítást okoz időnként. Ekkor mindig kiviszed az LCD-re az kiviendő változód értékét. A változót pedig akkor állítod, amikor beolvasod a potid állapotát. A két dolog lehet egymás után a megszakításban. Idézet: „Azt szeretném ha a W-ben lévő Doles_szog értékét kivonná az ADRESH-ból.” Idézet: „Ha nagyobb az ADRESH mint a dolesszog, akkor a STATUS,C csurduljon túl, és villogtassa a ledet.” Ez ellentmondás! A SUBWF ADRESH az az ADRESH - W, azaz ADRESH - Dőlésszög műveletet végzi. Kivonásnál alulcsordulás esetén C=0!!! Ha ADRESH-ból vonod ki a Dőlésszöget, akkor miért vársz alulcsordulást ha ADRESH nagyobb? A SUBWF ADRESH,W a W-be teszi az eredményt A SUBWF ADRESH,F az ADRESH-ba vissza. Ha nem akarod, hogy elromoljon ADRESH tartalma, akkor W-be irányítsd az eredményt. Ha nem kell többé az értéke, akkor valóban mindegy...
Hát...próbálom megérteni.
![]() ![]()
Ja, így tényleg nem működhet. A 4 Mhz es órajel frekihez túl lassú a szemem ...
Marad az a TIMER es megszakításos módszer amit javasoltál, csak kicsit félek tőle mert még nem csináltam ilyet.
Tulajdonképpen a kivonás is összeadás.
A kivonandó komplementerét adja hozzá a kisebbítendőhöz. Túlcsordulás tehát abban az esetben történik, ha egy nagyobb számból kisebbet vonunk ki. pl.1: 3-1=3+(-1) de -1=FF így 3+FF=2 és túlcsordulás, tehát C=1 pl.2: 1-3=1+(-3) -3=FD 1+FD=FE, nincs túlcsordulás, tehát C=0
mplab-al próbáltam debugolni.
ICD2-es égető másik végén tesztáramkör, lefordul a progi, be is égeti, make-nél beállítva a debug a release helyett, de ha debugolni akarom akkor ilyenek jönnek Még mit kell beállítani, hogy menjen? Egy sima PIC16f877 van rajta Stepping Target ICD0083: Debug: Unable to enter debug mode. Please double click this message for more information. MPLAB ICD 2 Ready Resetting Target Resetting Target MPLAB ICD 2 Ready MPLAB ICD 2 Ready ICDWarn0015: Program memory has changed since last program operation? Continue with Debug operation? Stepping Target ICD0083: Debug: Unable to enter debug mode. Please double click this message for more information. MPLAB ICD 2 Ready
Jó, de ha SUB-ot írok, akkor nem öszeadást várok. És ha logikailag gondolok a műveletre, akkor pláne nem. Ettől függetlenül amit írsz rendben van természetesen.
|
Bejelentkezés
Hirdetés |