Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   244 / 1318
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Jó lesz!

Szöszölj vele, mert sokat segít, ha látod mi történik, ha változtatsz, megaztán könnyebb lesz továbblépni a gombos feladat felé. Próbálj valami képet csatolni a jelenlegi elakadásról, hátha az segít!
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Nah, végre sikerült megcsináljam a DEBUG-részt
Azt hiszem, hogy mostmár elkezdhetjük a továbblépést.

A gombot az RA0 lábra szeretném rakni.
A vizsgálat az így van, ha jól nézem az egyik példafájlt:
  1. BTFSS   PORTA,0

Én ezt az egészet úgy gondoltam, hogy egy változóba tárolja el, hogy éppen melyik funkciót hajtja végre.
Ehhez az elejére beraktem egy FENYPOZ változót.

Ennél tovább nemigazán jutottam, mert nem nagyon tudom, hogyan kellene rendesen megvalósítani a gomblenyomási részt
(#) szilva válasza Doncso hozzászólására (») Júl 16, 2008 /
 
Szia!

Az induktivitásnak jónak kell lennie, a D1 dióda helyett meg lehet használni pl. 1N5819-et, bár ez méretre kicsit nagyobb. Végső elkeseredésedben betehetsz 1N4148-at is, bár a Schottky szerencsésebb lenne

D2 helyét simán rövidre is lehet zárni, ezt talán írtam is a szövegben, annak a diódának igazából csak védelmi funkciója van a Vdd kimenet felől, viszont hátrányos lehet a rajta eső feszültség. Oda pont a kis feszültségesés miatt került szintén Schottky eredetileg.
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Ok!
Első körben nevezzük el a változóinkat, hogy könnyebb legyen olvasni a kódot. Tehát:
  1. #DEFINE    GOMB    PORTA,0
  2.  
  3. BTFSC   GOMB  ; JOBB, HA TESTRE ZÁR A GOMB!


Egy gombbal akarod léptetni az efekteket, vagy többel?
(#) acidum válasza szilva hozzászólására (») Júl 16, 2008 /
 
Aha.
Ha projektbe tettem, először mindig ezt fordította le, teli hibával.Nyilván, mert minden változó a másikban volt deklarálva.Belebiggyesztettem a gyári linker scriptet is, bár nem ugy tünt, mintha forditáskor hozzányúlt volna...
Még átirom org, és társait, MPLAB help böngész, próbál.
Köszönöm a segítséget, majd jövök a kisérletek eredményével.
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Egyetlen gomb elég, maximum lenne mégegy, ami visszafele lépteti, vagy valami, de az már annyira nem bonyolult, szóval jelenleg csak egy.
A BTFSC GOMB részt a MAIN részbe rakom, a CALL FUTOFENYJOBB elé
A #DEFINE-t gondolom az #INCLUDE köré kell
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Valamit nem értek. A GOMB-al mit akarsz csinálni? Minden nyomásra egyel lépjen tovább, vagy egy másik effekt kezdjen el futni?
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Minden gombnyomásra egy új effekt legyen
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Íme:

A programban vannak olyan részek, amiket másképpen kéne megírni, hogy tökéletes legyen, ezekre majd kitérünk, hogy melyek ezek, viszont működik, szimulálható.

Ha a GOMB bitjét át akarnád írni a szimulációhoz, akkor a TRISA,0-t írd át 0-ra a Watch ablakban, majd utána a PORTA,0-t tudod módosítani, mint ha a gombot nyomkodnád. Ez így egyelőre egyszerűbb, mint stimulusokat írni. A GOMB alacsony szintre aktív, azaz felhúzó ellenállást kell kötni igaziból a bemenetre és a gombot testre kell kötni.
(#) Doncso válasza szilva hozzászólására (») Júl 16, 2008 /
 
Szia.
Igazából van a közelben egy kis elektronikai bolt csak tényleg annyira kicsi, hogy a választék is szegényes. ezért kérdeztem, hogy mit lehet helyette, de ha jól értem annyira nem kényes a diódára, de majd kérek valami nagyon hasonlót, lényeg ,hogy Shottky legyen, a nehezebb dolog ugyis az lesz ,hogy egy JDM-mel kell felprogramoznom a 2550-est, van valahol egy ilyenem, anno megépitettem a Topi féle JDM-et, a nullától a robotokig cikében tette közzé, meglátjuk milyen sikerrel.
Köszi a választ.
Üdv: Doncso
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Értem, nagyon szépen köszi az eddigi segítségedet
(Ha tudom, majd valamivel igyekszem meghálálni )

A kapcsolási rajzban is tudsz kicsit segíteni?
Csináltam egyet, csak nem biztos, hogy alapból jó lenne.
Úgy szeretném, hogy, ha egyszer beraktam a PIC-et, ne kelljen kiszedegetnem, ezért csinálok külön kivezetést is a programozáshoz. A diódákat elé azért raktam, hogy védjem, nem tudom, hogy szükségesek-e.
Nem tudom igazából, de nekem van egy olyan érzésem, hogy az MCLR lábra önmagában kellene még kötni egy ellenállást (10kOhm), amivel összekötöm a +5V-tal. Jól sejtem?
Remélem nem felejtettem le róla semmit sem.


A PIC programjáról még annyit, hogy, ha olyat szeretnék, hogy pl. minden második LED világítson, ahhoz van-e valami olyan módszer, mint pl. a futófényhez?
Vagy azt csak azzal másik módszerrel lehet, amivel eredetileg próbálkoztam?

futofeny.jpg
    
(#) cpumaster válasza potyo hozzászólására (») Júl 16, 2008 /
 
Nemértem ebben a programrészben azt hogy ha tmr1flag-ot megadom változónak az if függvénynél akkor a progi honnan tudja hogy ez a feltétel csak akkor teljesülhet ha 1 lesz az értéke. Nemkellene odaírni hogy if (tmr1flag=1) { és akkor ugrik a kapcsos zárójelre tovább} Vagy ilyen esetben csak akkor megy tovább ha igaz értéket vesz fel a zárójel közötti változó? Meg azt értem sztem hogy miután teljesül az if akkor tmrfalgot stornozom egyből. És mikor = és mikor ==? Ezt nemértettem még? Meg akkor tmr1flagot is deklaráljam charként? Mert az unsigned szót sem értem h mit jelent. Meg a rele_be ill. ki változót is ugyanígy? Utóbbiak akár jelenthetnének egy-egy értékadó utasítást is egyik portra?

unsigned char szamlalo=0;
...
while (1)
{
if (tmr1flag)
{
tmr1flag=0;
szamlalo++;
if (szamlalo==59)
{
rele_be;
}
if (szamlalo==60)
{
szamlalo=0;
rele_ki;
}
}
}
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
A diódákat vedd ki, az MCLR-re tegyél egy 10nF-ot testre, és egy 10k-t plusz egy diódát anódjával 5V-ra.

A többi jónak tűnik, de érdemes megnézni az adatlapot, hogy 24db LED árama nem lépi e túl a PIC maximális áramfelvételét. Lehet, hogy a 330 ohm -okat nagyobb ellenállásre kell cserélni, hogy ez az áram csökkenjen a max érték alá!

Ja igen a kettesével lépés!
Ha kezdőértéknek mást adsz meg, akkor az fog lépegetni tovább. Csak a végén lesz gond, mikor kilép az utolsó portbiten, mert azonnal előről fogja kezdeni az effektet, nem várja meg, míg kiér az utolsó bit is. De ezt le lehet kezelni...
(#) vtnagy válasza cpumaster hozzászólására (») Júl 16, 2008 /
 
Ennyire értek a programozáshoz, szóval ennyit el tudok mondani:
Ha van egy feltételed, amibe feltételnek megadsz egy változót, és nem adsz meg neki értéket, csak akkor fog teljesülni, ha az adott változó igaz értéket ad vissza
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Egyszerre nem akarok túl sok LED-et használni vele, szerintem max 12-14.

Gondoltam még olyanra is, hogy netán tranzisztort rakok bele, de egyelőre azt az ötletet hanyagoltam.

Szétnézek az adatlapján,bár nem igazán tudom, mennyire fogom érteni, de igyekszem


Szerk:
Megcsináltam a módosításokat, az ellenállásokat átcseréltem 470Ohmra

futofeny.jpg
    
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Ha nem 330ohm ot teszel, akkor azzal lehet csökkenteni a terhelést. Nem hagyatkozhatsz arra, hogy úgysem fogod mind kigyújtani! Meg aztán miért is ne, ha mind ott van! Egyébként 250mA max, tehát 470ohm okkal jó lesz!
közben szerkesztettem az előző hsz-t is....
(#) watt válasza watt hozzászólására (») Júl 16, 2008 /
 
Korrigálok, csak 200mA a Portok együttes kivehető árama! De ettől függetlenül a 470ohm okkal jó lesz, mert kb. 190mA lesz az össz áram...
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Nos, én is épp módosítottban küldtem el

Értem a 2 ledes részt..
Nem tudom, hogy miket fogok beleépíteni a programba, de lehet, hogy inkább megcsinálom a parasztos módszerrel, mert akkor nem fárasztom le legalább az emberek nagy részét
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
A PIC táp lábaihoz közvetlenül tegyél 100nF-okat még, azon kívül jó lesz. Miről táplálod?
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Így mostmár jó? Vagy a GND-től vegyem le azt a 10nF-es kondit? (Bár az szerintem elférne ott)

Stabil 5Vról táplálnám, van hozzá 7805-öm, azzal fel tudok építeni egy stabil 5Vos tápegységet

futofeny.jpg
    
(#) kobold válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Remélem, csak a nagy kapkodásban rajzoltál a tápvonalakkal soros kondikat... Vdd(k), és Vss közé tegyél, több nem kell.
(#) vtnagy válasza kobold hozzászólására (») Júl 16, 2008 /
 
Ezt most nem értem
(#) watt válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Azok a kondik nem nagyon lesznek jól úgy!
(#) vtnagy válasza watt hozzászólására (») Júl 16, 2008 /
 
Arra sikerült rájönnöm, hogy elcsesztem
De hogyan javítsam?
(#) Braf válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Ne sorba kösd a kondenzátorokat hanem párhuzamosan! (mert most mind a 3 sorosan van a pic-kel) Ez így nem fog működni!

Itt egy jó kapcsolási rajz.

szerk: megelőztetek

rajz.jpg
    
(#) vtnagy válasza Braf hozzászólására (») Júl 16, 2008 /
 
Jaaa, mostmár értem
Teljesen más fele gondolkodtam

Köszi

Szerk: Nos, akkor itt a javított, remélem mostmár jó lesz

futofeny.jpg
    
(#) potyo válasza cpumaster hozzászólására (») Júl 16, 2008 /
 
Na akkor sorban:

A tmr1flag-ot nem adod meg változónak, hanem kinézed az adatlapból, hogy azt a bitet konkrétan hogy hívják, és a konkrét elnevezését írod a helyére (ami még attól is függhet, hogy milyen pic-et használsz, és melyik fordítót). De szerintem neked inkább a PIC alapjaival kellene kezdeni a dolgot, és asm-et használni, hogy meg is tanuld rendesen. Egyszerre C-t is tanulni és PIC-et is, az nem kis feladatat, és nemis ajánljuk senkinek.

C-ben nincs olyan, hogy hamis vagy igaz érték. Helyette az van, hogy vagy nulla vagy nem nulla. Szinte bármit be lehet írni egy feltételbe, mert C-ben minden kifejezésnek van értéke. Tehát önmagában elég a tmr1flag, mert annak az értéke vagy nulla, vagy nem nulla.

Az = az értékadás jele, az == az összehasonlítás jele. Tehát ha pl. azt írom, hogy if (d=7), akkor a d változó értéke 7 lesz, és belemegy az if-be, mert az egész kifejezés értéke is hét, vagyis nullától külömbözik. Ha viszont if (d==7), akkor csak ha d értéke 7, akkor megy be az if-be

Az unsigned azt jelenti, hogy az ezzel definiált változót előjel nélküliként kezelje a fordító.

A rele_be meg rele_ki pedig valami utasítás, ami a relét be illetve kikapcsolja. Ez tipikusan egy portláb egybe illetve nullába kapcsolása.
(#) trudnai válasza vtnagy hozzászólására (») Júl 16, 2008 /
 
Tudom menjek a fenebe, de en egyszeruen igy csinalnam

  1. FUTOFENYBAL                              
  2.         RLF          PORTD,W            ; egyenlore csak atmenetileg shiftelunk, csak a C kell nekunk
  3.         RLF          PORTC,F            ; ...hogy azt ide becsorgassuk
  4.         RLF          PORTB,F
  5.         RLF          PORTD,F            ; na most mar megvan a PORTB kilepoje, becsorgatjuk a PORTD-be
  6.         RETURN
(#) vtnagy válasza trudnai hozzászólására (») Júl 16, 2008 /
 
Ötletnek ez is jó szerintem, de én inkább maradok a másiknál, azt mostmár végre sikerült megértenem
De azért köszi
(#) trudnai válasza vtnagy hozzászólására (») Júl 17, 2008 /
 
Ez nem otlet volt, hanem egy eros kod optimalizalas amivel felere lehetett csokkenteni az eredeti kodmeretet Azonkivul ezek a dolgok arra kivaloak, hogy megertsd a PIC mukodeset, melyik utasitassal miket leet muvelni stb. De mindegy vegulis abban egyet ertunk, hogy az eredeti is csinalja a dolgat
Következő: »»   244 / 1318
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem