Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   555 / 1319
(#) frecsko válasza icserny hozzászólására (») Aug 26, 2009 /
 
Hát most végignéztem a T3-at kiírkáltam az órajelciklusokat. Nekem az előkészítő utasításokkal együtt 22-lett.
Kezdem nem látni a fától az erdőt
(#) littlejoe hozzászólása Aug 26, 2009 /
 
Összeollóztam egy programot lm75-ös hőszenzor 16f628-as pic és két hétszegmenses kijelző meghajtására.Az áramkör működik is csak meghatározatlan időnként lefagy a kijelzés (ilyenkor a hőfok helyett 10-et ír ki) és csak resetre működik megint.Kérdésem hogy a megszakításban a w-n kívül mit kellene elmenteni illetve érdemes lenne wdt-beleírni a progiba.Az eredeti áramkör:Bővebben: Link
Illetve az átírt program:

74seg.asm
    
(#) potyo válasza littlejoe hozzászólására (») Aug 26, 2009 /
 
A STATUS regisztert is el kell menteni. Az adatlapban Context saving during interrupts részben találsz rá mintakódot és a szövegben pedig leírást, hogy hová kell a mentésre használt regisztereknek a helyet lefoglalni. Kövesd pontosan azt a kódot, amit ott ír.
(#) littlejoe válasza potyo hozzászólására (») Aug 26, 2009 /
 
Köszi,megtaláltam,beleírom.
(#) gulasoft válasza icserny hozzászólására (») Aug 26, 2009 /
 
30 mp alatt kb. 8-szor világít, ami 2 mp hiszen 7-8 szor nem 7+8 az 15*2 az a 30mp.
Rövid a kód berakom ide:
Idézet:

#include
_CONFIG1(JTAGEN_OFF & FWDTEN_OFF)
_CONFIG2(FNOSC_FRCPLL & POSCMOD_NONE)

int dSec = 0;
int Sec = 0;
int Min = 0;
int Led = 0;
// 1. Timer1 interrupt service routine

void _ISR _T1Interrupt( void)
{
// 1.1 your code here
dSec++; // increment the tens of a second counter
if ( dSec > 9) // 10 tens in a second
{
dSec = 0;
Sec++; // increment the seconds counter
if (Led == 0)
{
Led = 1;
}
else
{
Led = 0;
}
if ( Sec > 59) // 60 seconds make a minute
{

Min++; // increment the minute counter

if ( Min > 59)// 59 minutes in an hour
Min = 0;
} // minutes
} // seconds

// 1.2 clear the interrupt flag
_T1IF = 0;

} //T1Interrupt

int main()
{
TRISD=0xFFFE; // PORTD 0-ás lába kimenet

// 2. init Timer 1, T1ON, 1:1 prescaler, internal clock source
_T1IP = 4; // this is the default value anyway
TMR1 = 0; // clear the timer
PR1 = 25000; // set the period register


// 2.1 configure Timer1 module
T1CON = 0x8020; // enabled, prescaler 1:64, internal clock

// 2.2 init the Timer 1 Interrupt, clear the flag, enable the source
_T1IF = 0;
_T1IE = 1;

// 2.3 init the processor priority level
_IPL = 0; // this is the default value anyway

// 3. main loop
while( 1)
{
// your main code here
PORTDbits.RD0 = Led;

} // main loop
}
(#) webinas hozzászólása Aug 26, 2009 /
 
Sziasztok!
Nincs véletlen valakinek egy egyszerű led villogtató asm-je ki kommentezve?

Olvastam, olvastam, és azt hittem értek valamit, míg neki nem fogtam.

Hálám örökké üldözni fogja.
(#) watt válasza gulasoft hozzászólására (») Aug 26, 2009 /
 
Már elnézést, de nem igaz, hogy ennyi idő alatt nem tanultad meg, hogy hogyan kell kódot beilleszteni, nem beszélve arról, hogy milyen hossz az, amit már nem illik, mert széttöröd a topicot! Ide a fájlt kellett volna becsatolnod, neked is egyszerűbb és nekünk is!
(#) potyo válasza webinas hozzászólására (») Aug 26, 2009 /
 
Mintha nemrég tett volna fel valaki ide egyet. De én is tettem már fel régebben, nézd végig a csatolásaimat a témában. Hogy mennyire volt kommentezve, arra nem emlékszem...
(#) potyo válasza watt hozzászólására (») Aug 26, 2009 /
 
Nem akartam semmit írni rá, de úgy tűnik, hogy ő is csak akkor jön ide, amikor kérdése van, és más hozzászólásokat el sem olvas... Csak tudnám, hogy mi miért segítünk itt...
(#) icserny válasza frecsko hozzászólására (») Aug 26, 2009 /
 
Idézet:
„Nekem az előkészítő utasításokkal együtt 22-lett.”

Már majdnem jó, csak ott tévedtél, hogy a legvégén nincs GOTO (átugorjuk!), a DECFSZ utasítás pedig nem 1, hanem 2 ciklus, amikor teljesül a feltétele. Tehát 21 az, ahogy délelőtt írtam.

Na, a középső ciklusban mindez a 21 utasításciklus is benne van minden iterációban, továbbá az a néhány utasítás, ami a középső ciklus szervezésével jár. És így tovább...
(#) icserny válasza gulasoft hozzászólására (») Aug 26, 2009 /
 
Én úgy tanultam, hogy TxCON-ban csak a legvégén szabad 1-be billenteni a TON bitet (bár az adatlapban épp az ellenkezőjét olvasom).

Próbáld meg tehát így:
  1. T1CON = 0x0020;
  2.    _T1IP = 4;          // T1 interrupt prioritása
  3.      PR1 = 25000; // set the period register
  4.     TMR1 = 0;         // clear the timer
  5.    _T1IF = 0;
  6.    _T1IE = 1;
  7. T1CONbits.TON = 1;


Bővebben: Link
(#) gulasoft válasza watt hozzászólására (») Aug 26, 2009 /
 
Jó kódot kellet volna nyomni nem idézetet, szedd le fejem ezért. Legközelebb majd belinkelem.
(#) gulasoft válasza potyo hozzászólására (») Aug 26, 2009 /
 
A nyákos fórumban meg az eagle-sben ha tudok segítek, itt csak segítséget tudok kérni. Egy fórum általában erről szól valaki kérdez, és ha valaki tudja a választ segít. Én sem azért járok az előbb említett két fórumra, hogy kérdezzek, hanem hogy segítsek ha tudok.
Ha neked ez terhes akkor ne segíts, bár eddig is segítettél. Ezért nem akartam a kódot betenni, mert feleslegesnek éreztem, az meg hogy rosszul raktam be csak azt jelzi, hogy azért annyi kódot mégsem raktam még be hogy jaj segítsetek már mert ez vagy az nem megy. Most kezdtem a cnc-mhez motorok vezérlését megcsinálni, eddig az elektronikával kínlódtam, most az kész van tudom őket léptetni előre hátra, mikrosteppre váltani gombokkal gyorsítani lassítani, de ehhez elég volt egy 18f452-es ami egy saját demó boardon csücsült. 3 motor van mindegyik 5 vezérlőjelet vár (enable, reset, dir, step, mikro/full step), ez 15 jel+ mindegyikhez kéne végállás kapcsoló az még 6, plusz kommunikáció a pc-vel +4, kezdtem kifutni a szabad lábakból, és ez még csak legminimálisabb ami kell.
Ezért gondoltam, hogy egy 24fj128ga008 elég lesz, a fene se hitte, hogy két napja nem jövök rá mitől 2mp az ami a leírások szerint 1 lenne.
Megtaláltam a hibát a panelon (nem hiba volt, csak a pickit2-es tüskesora valahogy vékonyabb kivitel lett mint eddig volt, és az nem érintkezett rendesen)
Minden kondit felraktam amit javasoltatok, most már tudom mi kell a 24-es sorozathoz, a következő kártyára rátervezem.
És igen olyan hozzászólásokat nem olvasok el, amiben assemblyben számolják az utasításhosszokat, mert tudom hogy nem szereted ugyan de ezt a 24-est nem akarom assemblyben programozni, mert ez elég nagy és gyors a c-hez is, és a konfig biteknek nem sok közük van egyébként sem a c hez, a timer interruptnak is menni kéne, ha a roszul belinkelt kódban valaki rájön miért 2mp-enként villog a led, mikor a 8MHz-es belső oszcillátor pll-el négyszerezve van, és képlet alapján 1mp-nek kéne lenni, akkor annak örülök és megköszönöm, de ha belegondolsz, eddig csak icserny foglalkozott az én problémámmal, tőletek csak a hardverre kaptam tanácsot (amit megköszönök), de most nem a hardverrel van gondom.
Legközelebb majd linkelek és nem beszúrok egy 70 soros forrást.
(#) gulasoft válasza icserny hozzászólására (») Aug 26, 2009 /
 
Nincs változás 2mp ég a led, 2 mp-ig nem ég. Ha ezzel a nyomorult alap interruptal nem tudok zöldágra vergődni gáz lesz a soros kommunikációnál.
(#) kisszee válasza gulasoft hozzászólására (») Aug 26, 2009 /
 
Egyet még megpróbálhatnál, a CLKDIV regiszter FRCDIV<2:0> (Internal Fast RC Oscillator Postscaler bits) biteket állítsd nullába, bár az adatlap szerint ez alapból 1 -es osztóra áll be, de ki tudja.. Tényleg mást már nem tudok elképzelni. Keress rá a headerben, hogy ezekre a szimbólumokra pontosan hogy kell hivatkozni. (Lehet csak RCDIV)
(#) potyo válasza gulasoft hozzászólására (») Aug 26, 2009 /
 
Én ráakasztanék próbára egy kvarcot, hogy azzal mit mutat. Annál nincs olyan sok állítási lehetőség. Aztán lehet tovább találgatni, hogy valami a timernél van rosszul beállítva, vagy a belső oszcillátornál.
(#) gulasoft válasza potyo hozzászólására (») Aug 27, 2009 /
 
Majd ma kipróbálom őket, már raktam egy rá egy 20MHz-s oszcillátort, de most bedőlök az ágyba. Köszi a késői válaszokat lesz mivel szórakoznom reggel.
(#) watt válasza gulasoft hozzászólására (») Aug 27, 2009 /
 
Állítsd be az OSCCON-t. (pl. tegél bele 0x1100) Valamint meg kell nézni az FCKSM1:FCKSM0 bitek hogy állnak a konfigban. Ez összefügg a Clock Switching Operation funkcióval, ami, ha jól értem az adatlapot a boot után oszcit tud váltani a beállításoknak megfelelően.
(#) icserny válasza gulasoft hozzászólására (») Aug 27, 2009 /
 
Idézet:
„Nincs változás 2mp ég a led, 2 mp-ig nem ég.”


Végszükség esetén az adatlapot is el lehet olvasni...
Az adatlap Register 7-2. táblázata szerint a CLKDIV regiszter RCDIV0 bitje 1-be íródik RESET-kor!!! Ez a Fast RC oszcillátor utóosztója, s kettes osztást állít be (4 MHz jut a PLL bemenetére).
(#) frecsko válasza webinas hozzászólására (») Aug 27, 2009 /
 
Szia,
itt van kettő. Az első pic16f877-esre a másik 16f84-esre van.
(#) frecsko válasza icserny hozzászólására (») Aug 27, 2009 /
 
Ahha!! Tehát mikor teljesül a DECFSZ akkor az 2 órajelciklus, akkor ez kavarhatott be. Tehát az adatlapon zárójelben feltüntetett ciklus csak akkor igaz amikor teljesül a feltétel.
Mi az az iteráció?
(#) icserny válasza frecsko hozzászólására (») Aug 27, 2009 /
 
Idézet:
„Mi az az iteráció?”

Ismétlési szerkezet, a programciklus egyszeri lefutása. A T3-as ciklusodban például egy NOP+DECFSZ+GOTO
(#) frecsko válasza icserny hozzászólására (») Aug 27, 2009 /
 
most végigzongoráztam az egész időzítést. A következőt kaptam : T3-21 , T2-41 , T1-43 óraciklus. Akkor ezeket összeadom és elosztom 4Mhz-el? Vagy összeszorzom és úgy osztom 4Mhz-el?
(#) watt válasza icserny hozzászólására (») Aug 27, 2009 /
 
A rajz szerint (fig7-1) a CLKDIV nem befolyásolja a PLL-re jutó frekit, az csak a FRCDIV-re menőt állítja.
Én inkább arra gondolok, hogy a reset után módosul az oszci beállítás sima Fast RC-re(FCR-re), de majd meglátjuk...
(#) icserny válasza watt hozzászólására (») Aug 27, 2009 /
 
Lehet, hogy nem ugyanazt az adatlapot nézzük?
Én a DS39747D-page 91 ábráján azt látom, hogy vagy a külső oszcillátor megy a PLL-re, vagy az FRCDIV kimenet, s oda is van írva, hogy 8 MHz/4 MHz.

Az eddigi adatok szerint a PLL megy, csak egy kettes szorzó hibádzik, ezért gondolom, hogy most 4 MHz megy a PLL-re, s az adatlap alapján RESET után pont ez várható.
(#) icserny válasza frecsko hozzászólására (») Aug 27, 2009 /
 
Idézet:
„A következőt kaptam : T3-21 , T2-41 , T1-43 óraciklus.”

Ez így biztosan nem jó, mert a T2 ciklusban 10-szer lefut T3 is, így vastagon 10x21 = 210 fölött kell, hogy legyen.
(#) gulasoft válasza icserny hozzászólására (») Aug 27, 2009 /
 
Az én adatlapomon ilyen nincs a 7.2-nél. Sőtt az egész doksiban 3 helyen van rcdiv0 említve ebből 2 találat ezen a lapon egy meg 3.xx -ben felsorolásként.
Olyan hogy reset után az rcdiiv0 egyere áll nincs, de most oktatásra megyek, majd szünetben megnézem, jó lenne ha csak ennyi lenne a baj. Ezt a program futása közben bárhol át lehet írni? NEm áll ettől fejre a vezérlő, hogy menet közben állítom az oszcillátor frekit?
(#) watt válasza icserny hozzászólására (») Aug 27, 2009 /
 
Idézet:
„Lehet, hogy nem ugyanazt az adatlapot nézzük?”

Az lehet! Én a DS39747A (2005-ös) Ebből csatoltam a képet is korábban, ott más a bekötés!

Akkor most melyik rajz a jó? És ha mindkettő a maga idejében jó volt, akkor mikortól változott?
(#) watt válasza gulasoft hozzászólására (») Aug 27, 2009 /
 
Ha minden igaz, jelenleg ez az adatlap a jó:
39747D
Csatolom még a két eltérő rajzot.
(#) lidi válasza watt hozzászólására (») Aug 27, 2009 /
 
Az nem lehet hogy mindkét rajz jó, de más PIC re vonatkoznak ? Mert az egyiknek GA a vége, a másiknak meg GA010.
Következő: »»   555 / 1319
Bejelentkezés

Belépés

Hirdetés
XDT.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