Terminál Fórum
https://forum.technokrata.hu/forum/

PIC kérdések
https://forum.technokrata.hu/forum/viewtopic.php?f=5&t=4546
Oldal: 1 / 136

Szerző:  Elektromann [ szer. jún. 22, 2016 20:09 ]
Hozzászólás témája:  Re: PIC kérdések

Itt tanultam a PIC programozását: http://kapcsolasok.hu/pic-iskola
Ez nagyon jó néhány egyszerű programhoz, de most már szeretnék egy RGB LED vezérlőt is készíteni. Ezen felől zavar, hogy csak akkor tudom használni a gombot, ha lement egy programrész. Szeretném megtudni, hogy lehet-e valami módon szabályozni a LED-ek fényerejét, és hogy van-e megoldás arra, hogy bármikor használhassam a gombot?

Szerző:  Hertz [ kedd ápr. 15, 2014 22:46 ]
Hozzászólás témája:  Re: PIC kérdések

Értem, akkor majd arrafelé keresgélek szükség esetén. Kösz mégegyszer!

Szerző:  potyo [ hétf. ápr. 14, 2014 18:22 ]
Hozzászólás témája:  Re: PIC kérdések

Tényleg, nemis figyeltem a dátumot :mrgreen: Csak jött értesítés valami hozzászólásról, aztán láttam, hogy van itt is olvasatlan.

Amúgy valami olyan volt, hogy egy jó ideig nem működött a fórum, aztán átkerült ehhez a wikitech-hez, és újraindult, de a társaság nem jött vissza. Hobbielektronika.hu-n vagyunk aktívak elég sokan, akik itt voltunk.

Szerző:  Hertz [ hétf. ápr. 14, 2014 17:08 ]
Hozzászólás témája:  Re: PIC kérdések

Köszi szépen, közben sikerült megoldani, de igen, így, ahogy írtad. Azt hiszem a következő napon összejött végre. Azóta eltelt 8 hónap. :) Mi történt, régen olyan nagy élet volt itt? Emlékszem, hogy Watt és Te segítettetek a legtöbbet nekem...

Azóta nem foglalkoztam PIC-el, de holnap érkezik egy 12F683-as példány. Ezt még sosem használtam, remélem menni fog de, ha elakadok lehet, hogy kérdezek is. Köszönöm előre is, ha ide nézel néha! :)

Szerző:  potyo [ hétf. ápr. 14, 2014 7:55 ]
Hozzászólás témája:  Re: PIC kérdések

Teszel a kód elejére egy ORG 0x08-t, és utána teszed a megszakítási rutint.
Kód:
  ORG 0x00  ;  reset után itt indul a program
  GOTO FOPROGRAM

  ORG 0x08  ; itt kezdődik a megszakítási rutin
  ; magas szintű megszakításnál nem kell menteni a WREG, STATUS és BSR regisztereket, azok mentve vannak hardveresen
  ; egyéb regiszterek mentése (FSRx, PRODH, PRODL, stb.), amennyiben kell

  BTFSS INTCON, T0IF
  BRA ISR_VEGE
  BCF INTCON, T0IF
  ; itt csinálod, amit akarsz

ISR_VEGE
  ; regiszterek visszaállítása itt, amennyiben kell
  RETFIE FAST  ; WREG, STATUS és BSR hardveres visszaállítása, és visszatérés a főprogramba

FOPROGRAM
  ;  ide kerül a főprogram


Ezt most csak fejből írtam, de valami ilyesmi

Szerző:  Hertz [ kedd aug. 06, 2013 7:47 ]
Hozzászólás témája:  Re: PIC kérdések

Sziasztok!
Jó rég jártam itt...
18f2320-as PIC-et használok és az a célom, hogy Timer0-val hozzak létre megszakítást. A Timer0-át sikerült beállítanom, legalábbis a T0if állapotát lekérdezgetve működik. A globális megszakítást és a Timer0 megszakítást engedélyeztem (a GIE és a TMR0IE 1-re van állítva).
Kérdésem az, hogy most hogyan, hová kell elhelyeznem azt a programrészt, amit a megszakításkor szeretnék futtatni? Sajnos eddig nem jöttem rá, pedig tegnap szinte egész nap ezzel próbálkoztam... :oops:
Esetleg egy néhány soros példát tudnátok írni?

Köszönöm előre is, ha segítetek!

Ja, ASM-ben írom.

Szerző:  világos [ hétf. júl. 29, 2013 16:55 ]
Hozzászólás témája:  Re: PIC kérdések

Tisztelt Fórumtársak!
Segítségeteket szeretném kérni (olvastam van itt olyan aki tanít is) hogy érdemes-e belefogni ennek a projektnek a megvalósításába , működhet-e mi a véleményetek?! Kiváltképen a negatív feszültségmérésre.
ezt találtam: http://www.goldpaka.atw.hu
Köszönöm.

Szerző:  stubiflex [ kedd márc. 26, 2013 21:21 ]
Hozzászólás témája:  Re: PIC kérdések

Pár soros program. Mégsem akar működni megfelelően.
Mindig újraindul a PIC. Hol a hiba szerintetek?

program Usart_Test;

var
txt, delim : string[10];

begin


TRISB := %11111110;
PORTB := %00000001;
Usart_Init(4800);
delay_ms(100);
delim := 'OK';

while TRUE do

begin

if Usart_Data_Ready() = 1 then

begin
Usart_Read_Text(txt, delim);

if (txt[0] = 'K') and (txt[1] = 'B') and (txt[2] = 'e') and (txt[3] = ' ') then

begin
Usart_Write_Text('Kazan Be');
SetBit(PORTB, 0);
end;
if (txt[0] = 'K') and (txt[1] = 'K') and (txt[2] = 'i') and (txt[3] = ' ') then

begin
Usart_Write_Text('Kazan Ki');
ClearBit(PORTB, 0);
end;

if (txt[0] = 'H') and (txt[1] = 'M') and (txt[2] = '?') and (txt[3] = ' ') then
Usart_Write_Text('Homerseklet');
end;
end;

end.

Lehet, hogy a 16F877A-n nem működik az Usart_Read_Text?

Szerző:  YZ7PA [ vas. dec. 11, 2011 9:26 ]
Hozzászólás témája:  Re: PIC kérdések

Kellemes napot minden kedves fórumozónak!

Én is hasonló (de lehet hogy semmi köze sincs hozzá) gondal találoztam. Töltögettem egy progit 12f675-ös PIC-ekbe. Egyszer az egyik megmakacsolta magát és bár a Willemet használom az IC-Proggal eggyütt, felismeri a tipusát, kiolvasható a pic meg minden de beirni azt már nem lehet. Ahogy indul a beirás az első cimnél azonnal leáll mert nem azt olvassa vissza amit beiirt. A Bandgap értékét még beirja, megváltoztatja de amikor a memóriába kellene irni csak elszáll, persze a Konfiget már nem is irja be. Utána még találtam hármat ami ugyanigy viselkedik. Eyeken felül ketőt viszönt tökéletesen beirt, visszaellenőrzött. Átnéztem a programozó vasat és nem találok benne semmi hibát, reszettáltam a számitógépet és mindent ami eszembe jutott. Azóta sem tudom azokat az MCU-kat irni. Találkozott valalki hasonló hibával, mert most nem tudom eldönteni elszáltak a pic-ek, vagy csak bezáródtam valami módon vagy mi van. Segitsen aki tud de az is aki nem.

További jó elfoglaltságot és szórakozást!

Szerző:  totya334 [ szer. jan. 05, 2011 14:05 ]
Hozzászólás témája:  Pickit2 probléma

Üdv
Még nem jártam itt de kezdek ismerkedni a pic el van egy pickit2 programozóm amit eddig sikeresen használtam most jelentkezett egy kis gond vele.
Sajnos a szoftveres részéhez nem nagyon értek a dolognak inkább hardveres vagyok.
A gondom a következő lenne,16f628A szeretnék égetni a csip külön panelon van semmi nincs körülötte a 10 láb földre kötve olvasás törlés rendben írni viszont nem hajlandó.
Végső elkeseredésemben kerestem a netten pár hex et ami 628a ra van írva és elkezdtem kísérletezni a tapasztalat hogy ameik hex kb 8-10 sor volt azt hibátlanul beírja akár többször is
viszont ha a hex hosszabb tehát nagyobb a program akkor egyáltalán nem írja be és hibával leáll.
Találkozott e valaki hasonló gonddal?
A program 2.61 a firmware 2.32 device file 1.62.03

Szerző:  tubybb [ csüt. dec. 30, 2010 5:02 ]
Hozzászólás témája:  Re: PIC kérdések

Koszonom szepen. Minden vilagos mar a c nyelvi megszakitassal kapcsolatban.
Masik kerdesem lenne:
Van egy szenzorom ami egy fizikai mennyiseget mer, es a kimeneten a mennyisegnek megfelelo (aranyos) frekvencia jelenik meg(7kHz...9,5kHz), allando amplitudoju negyszogjel formajaban.
Ahhoz hogy egy szabalyozast felepitsek, ki kell ertekelnem a jelet.
Ugy keszitettem el hogy a jelado kimenetet osszekotottem a PIC RB0-as labaval es a jelek detektalasat a megszakitasi rendszerrel inteztem oly modon, hogy elmenti a TMR1 16bites szamlalo allasat, majd megszamol 4db felfuto elt, majd megint elmenti a TMR1 allasat. Ekkor kivonja egymasbol a ket idot, igy megkapom mennyi ido kellett a negy impulzusnak. Ebbol mar tudok kovetkeztetni a vett fizikai mennyisegre.
A 16 bites kivonast egy nemet oldalrol koppintottam, ugy csinaltak meg,hogy a kisebb helyierteken ha atvitel keletkezikmakkor a nagyobb helyierteken a kissebbitendobol (amibol kivonunk) kivon egyet, kozben jelezve, hogy atvitel tortent... (erdekes, hogy mi altalanos iskolabon mi a kivonandohoz adtunk egyet, vegulis az ugyanez)
Szoval a problemam az, hogy a nagyobb helyierteken kapott eredmeny "ugral", neha eggyel tobb, neha jo, neha eggyel kevesebb mint a varhato ertek, de a legnagyobb baj az, hogy fogalmam sincs mi okozza.
Megvaltoztattam a szamolt impulzusok szamat 4-rol 8-ra, de tovabbra is 1-gyel +-ba vagy minuszba teved. Eszerint az impulzusokat jol szamolja, a Tmr1 sem tevedhet, akkor csak a 16bites kivonassal van a baj.
Pedig meg egy osszehasonlito utasitas reszt is tettem a rutin ele,hogy ha carry gyanus (mert a kivonando szam nagyobb es minusz lesz az eredmeny - hisz adodhat az a specialis eset, hogy pont akkor csordult tul a timer ) akkor ne is kezdjen szamolni vele, igy csak a legkedvezobb eseteket nezi. Sajnos ennek ellenere is jelentkezik a hiba.
Megint probalkozhatok majd orakon keresztul annak kitalalasaval, hogy vajon mi hiusithatta meg a pontos eredmenyt a felso helyierteken.

Szerző:  atta [ kedd dec. 21, 2010 20:14 ]
Hozzászólás témája:  Re: PIC kérdések

tubybb írta:
Kezembe került egy C nyelven írt pic projekt. Az a baj, hogy ilyet még sosem láttam, és alapvető dolgokat nem tudom hogy hol keressek. Eddig csak assemblyben programoztam PIC-et, C nyelven pedig PC-t, de a kettőt együtt soha. (Na jó assemblyben sem programoztam PC-t)

Már ott kezdődik a gondom, hogy nem találom a megszakítási rutint. Nincs külön jelezve. Assemblyben könnyű mert Org 4h-nál van, de itt, egy olyan programnyelvben, ahol igazából nincs külön címzési rendszer, mert "magasabb" szinten van annál mint hogy ő memóriacímeket használjon...
Halvány lila gőzöm sincs egyáltalán miként lehet egy C nyelvben megszakítási rutint elhelyezni.


Szia,

Hi-TECH C esetében:

void interrupt intHandler(void)
{
//ide kell írni a megszakítás rutint
}

"The function qualifier interrupt may be applied to C function definitions to allow
them to be called directly from the hardware interrupts. The compiler will process the
interrupt function differently to any other functions, generating code to save and
restore any registers used and return using a special instruction."

"An interrupt function must be declared as type void interrupt and may not have
parameters. This is the only function prototype that makes sense for an interrupt function
since they are never directly called in the source code."

Forrás: Microchip HI-TECH C® for PIC10/12/16 User’s Guide DS51865A

"ahol igazából nincs külön címzési rendszer, mert "magasabb" szinten van annál mint hogy ő memóriacímeket használjon" - a valóságnak nincs alapja....

atta

Szerző:  tubybb [ csüt. dec. 16, 2010 16:13 ]
Hozzászólás témája:  Re: PIC kérdések

Kezembe került egy C nyelven írt pic projekt. Az a baj, hogy ilyet még sosem láttam, és alapvető dolgokat nem tudom hogy hol keressek. Eddig csak assemblyben programoztam PIC-et, C nyelven pedig PC-t, de a kettőt együtt soha. (Na jó assemblyben sem programoztam PC-t)

Már ott kezdődik a gondom, hogy nem találom a megszakítási rutint. Nincs külön jelezve. Assemblyben könnyű mert Org 4h-nál van, de itt, egy olyan programnyelvben, ahol igazából nincs külön címzési rendszer, mert "magasabb" szinten van annál mint hogy ő memóriacímeket használjon...
Halvány lila gőzöm sincs egyáltalán miként lehet egy C nyelvben megszakítási rutint elhelyezni.

Szerző:  optikus [ kedd nov. 23, 2010 22:25 ]
Hozzászólás témája:  Re: PIC kérdések

udv mesterek! de reg jartam erre... lenne egy apro kerdesem. biztos volt mar vagy van ra topic de ennyi hozzaszolasban tu a szenakazalban esete.
szoval 16f87x-el szeretnek egyszeru lcd kijelzot meghajtani. eleg a sima karakteres (pl 16x4 v hasonlo). melyik a legegyszerubben vezerelheto? no persze kaphato is? total tajekozatlan vagyok lcd temaban. a conrad honlapjan leltem egy jopar anag vision tipust. de eleg sok labat igenyelnek (ha jol latom 10-et). mondjuk nem gond de legalabb egyszeru legyen a progizasa es illesztese. mit javasoltok?

Szerző:  dekszter [ pén. szept. 03, 2010 20:31 ]
Hozzászólás témája:  Re: PIC kérdések

Régen írtam ide, "csak olvasaás" módban üzemeltem. :)
Viszont most lenne nekem is egy kérdésem.

Nézegetem az újabb PIC-kekben lévő CTMU modult, amivel érintésérzékelést lehet detektálni. Ezt az AD-val kell együtt használni vhogy. Megnéztem a MC-s példákat, stb., de mégsem értem egészen pontosan, hogy ez hogy a francba működik. Azt értem, hogy vmi kondenzátort tölt konstans árammal, mégse világos a működése.
Használta ezt már vki? Ha igen, le tudná írni röviden, hogy működik, hogyan kell inicializálni? Ill. az analóg bemenetre csak magát az érzékelő felületet kell kötni, más passzív, aktív elemre nincs szükség?

Szerző:  lindermen [ szer. júl. 07, 2010 11:21 ]
Hozzászólás témája:  Re: PIC kérdések

Köszi!!

Szerző:  potyo [ pén. júl. 02, 2010 19:11 ]
Hozzászólás témája:  Re: PIC kérdések

lindermen írta:
sziasztok!

Alapvetően közöm nincs a témához, egy ismerős kért meg hogy segítsek neki.
A problémája a következő:
Van egy PIC 16C 711-04/P-je, és ezt kellene helyettesíteni. Mely PIC alkalmas erre, illetve hol lehet ilyesmit beszerezni? Kecskemét lenne a legjobb helyileg, aki esetleg ismerős errefelé, talán tud ajánlani valamit.

Előre is köszönöm!

Microchip a 16F716-ot ajánlja helyette. De kétlem, hogy direktben bemenne a helyére, valószínűleg valamit kell módosítani a firmware-en is. Beszerzés: chipcad.hu

Szerző:  lindermen [ pén. júl. 02, 2010 18:58 ]
Hozzászólás témája:  Re: PIC kérdések

sziasztok!

Alapvetően közöm nincs a témához, egy ismerős kért meg hogy segítsek neki.
A problémája a következő:
Van egy PIC 16C 711-04/P-je, és ezt kellene helyettesíteni. Mely PIC alkalmas erre, illetve hol lehet ilyesmit beszerezni? Kecskemét lenne a legjobb helyileg, aki esetleg ismerős errefelé, talán tud ajánlani valamit.

Előre is köszönöm!

Szerző:  laci3041 [ vas. máj. 09, 2010 22:41 ]
Hozzászólás témája: 

Szia T68m !

Köszönöm a segítséget. Az adattábla megoldása tényleg egyszerűbb a Te módszereddel. Alkalmazni fogom.
Ez a lapozás dolog fog még nekem egy-két kellemetlen percet okozni, abban biztos vagyok.
Tehát valószínűleg járok még erre a jövőben a kérdéseimmel...

Üdv.: Laci.

Szerző:  T68m [ pén. máj. 07, 2010 11:40 ]
Hozzászólás témája: 

laci3041 írta:
Szia !

Köszönöm a választ. Miután átgondoltam, már világos.
Most nézem, nemrég hasonló dolgokról volt itt szó. Olvasnom kellett volna...
Olvastam valahol egy kimerítõ írást a PCLATH mõködésérõl, ott ez volt az utolsó mondat:
"Tehát a PCLATH segítségével válthatunk a memórialapok között"
Ez zavart meg. Most nem találom a fájlt, de az idézett mondatra szó szerint emlékszem.
Gondoltam, mivel végig a 0-dik lapon vagyok, a PCLATH-val még nincs dolgom. Tévedtem...


ne keverd össze az adat és a programmemória lapozást! Az adatmemóriában a status regiszter RP bitjeivel lapozhatsz direkt címzés esetén. Indirekt címzésnél az IRP használandó!!!!!!!!!!!

De a te esetedben a PROGRAMMEMÓRIÁBAN kell lapozni, erre a pclath való úgy, hogy számított ugrás esetén a pclath 8.-tõl felfele hatáozza meg a címet, normál goto és call esetén pedig 11.bittõl. Ez utóbbi csak akkor játszik (mint nálam), ha nem fér el az program+adattábla az alsó 2k-ban.

Szerző:  T68m [ pén. máj. 07, 2010 11:32 ]
Hozzászólás témája: 

én nem szeretek számolgatni, ezt rábízom a programomra, ezért úgy szoktam megoldani, hogy pl.:

org 700
adattabla movwf PCL
ch_level_meter dt "LEVEL METER",0
ch_bass_level dt "BASS LEVEL",0
.
.
.

így a kezdõcímet nem kell számolgatni, hanem a
movlw low ch_bass_level utasítással töltöm be, és a hosszt se kell számolgatni, mivel a 0-ig tart a string.

Szerző:  laci3041 [ pén. máj. 07, 2010 10:38 ]
Hozzászólás témája: 

Szia !

Köszönöm a választ. Miután átgondoltam, már világos.
Most nézem, nemrég hasonló dolgokról volt itt szó. Olvasnom kellett volna...
Olvastam valahol egy kimerítő írást a PCLATH mőködéséről, ott ez volt az utolsó mondat:
"Tehát a PCLATH segítségével válthatunk a memórialapok között"
Ez zavart meg. Most nem találom a fájlt, de az idézett mondatra szó szerint emlékszem.
Gondoltam, mivel végig a 0-dik lapon vagyok, a PCLATH-val még nincs dolgom. Tévedtem...

Válasz a kérdésedre: Ha valamit ki akarok írni a táblából,
W-be a kiírandó szöveg első karakterének táblabeli sorszámát írom.
A BASS LEVEL esetében ez a decimális 11. Mivel a tábla gyakorlatilag RETLW-k egymásutánja.
A kiírandó karakterek számát pedig úgy határozom meg,
hogy egy regisztert feltöltök a kiírandó karakterek számával (itt dec. 10),
és minden visszatérés után csökkentem eggyel. Ha 0-ra csökken megállok és továbbmegyek.
Laci.

Szerző:  T68m [ csüt. máj. 06, 2010 23:54 ]
Hozzászólás témája: 

ha megnézed, akkor az addwf utasítás 8bites, ahogy a PCL is az. Nyolc biten 255-ig lehet elszámolni, a te 264 soros programod eleve hosszabb + az adattábla hossza.

Azt tanácsolom, hogy az adattáblát helyezd $300-ra vagy $400-ra, stb. (de $800-nál kevesebbre!!!) és a PClath-ot még a program elején állítsd be ennek megfelelõen. Valahogy így: (a tábla így sem haladhatja meg a 256 byte-ot!!!)

;program eleje
movlw high LCD_Tabla
movwf PClath
.
.
.
org 300 vagy 400, 500, 600, 700...
LCD_Tabla movwf PCL, f; (én a movwf-t használom)
.
.


Egyébként, ha a "BASS LEVEL"-t ki akarod írni, akkor honnan tudod, hogy mennyit kell a W-be tölteni? És honnan tudod, hogy a milyen hosszú a stringed?

Szerző:  laci3041 [ csüt. máj. 06, 2010 21:52 ]
Hozzászólás témája: 

Sziasztok!

Most ismerkedem a PIC-ek programozásával, és volna egy kérdésem.
Rengeteg elmélet átrágása után elkezdtem írni egy programot assemblyben.
Egy LCD-s kivezérlés mérő lesz, + egy-két extra.
Jelenleg úgy a felénél tarthatok (kb. 260 sor), de elakadtam.
Egy adattáblából írok ki szöveget az LCD-re, az aktuálisan kijelzett paraméter nevét.
Működik is szépen, de csak akkor, ha az említett adattáblát a program elejére írom.
Ha a főprogram végére (a szubrutinok elé) akkor csak bizonyos dolgokat nem csinál meg a szoftver,
ha teljesen a végére írom, akkor pedig teljesen meghal.
Kérdésem: miért nem mindegy, hová írom a programon belül az adattáblát?
Ennyi az adattábla:
LCD_Tabla addwf PCL,1
dt "LEVEL METER"
dt "BASS LEVEL"
dt "HIGH LEVEL"
dt "SUBWOOFER LEVEL"
Elvileg még annyira kicsi a program (264 sor), hogy végig a 0-s memórialapon marad a szoftver.
Így lapozási probléma nem lehet. Jól gondolom ?
Biztos, hogy valamit rosszul tudok, csak nem tudom mi az :(...
10 regisztert foglalok le az elején, a 0x20 címtől kezdve.
Elvileg ezek mind a 0-s bankba kerülnek, tehát nem sokszor kell bankot váltanom.
Szeretném megtudni mi a gond, különben később nagy gáz lesz...
Ja, 16F877A-ról van szó.
Légyszi' segítsetek ! Köszönöm !
Laci.

Szerző:  icserny [ hétf. ápr. 26, 2010 12:08 ]
Hozzászólás témája: 

aszasza írta:
:D köszi! Megoldottam már.
PIC12F683-mal lett volna az igazi...

Szerző:  aszasza [ pén. ápr. 23, 2010 0:15 ]
Hozzászólás témája: 

:D köszi! Megoldottam már.

Szerző:  T68m [ csüt. ápr. 22, 2010 13:40 ]
Hozzászólás témája: 

aszasza írta:
Sziasztok.

Építeni szeretnék egy PWM generátort 12f675 el, de nem tudom hogy álljak neki. 2 poti állását szeretném figyelni és a PWM frekvenciát szabályozni 5-100 hz ig, illetve a kitöltést 0-100% ig. Tudnátok segíteni ebben?
Azért ezt a picet választottam mert ez van kéznél.
Elõre is köszi.


ne mondd, hogy senki se segít, itt az adatlap:
http://ww1.microchip.com/downloads/en/D ... 41190F.pdf

Szerző:  aszasza [ szer. ápr. 21, 2010 10:32 ]
Hozzászólás témája: 

Sziasztok.

Építeni szeretnék egy PWM generátort 12f675 el, de nem tudom hogy álljak neki. 2 poti állását szeretném figyelni és a PWM frekvenciát szabályozni 5-100 hz ig, illetve a kitöltést 0-100% ig. Tudnátok segíteni ebben?
Azért ezt a picet választottam mert ez van kéznél.
Előre is köszi.

Szerző:  Ktulu [ szomb. ápr. 17, 2010 20:40 ]
Hozzászólás témája: 

Idézet:
Köszi a választ. A PICKit 3-nak milyen hátránya van? Vagy csak felesleges egy kezdőnek?

A PICkit3 elegge gyengere sikerult. Sok minden hianyzik belole, ami a 2-ben megvan, nem beszelve, hogy az ara is magasabb. Igaz, hogy a kozeljovoben valoszinuleg megszunik a tamogatottsaga, de ettol nem igazan erdemes tartani.

Szerző:  T68m [ szomb. ápr. 17, 2010 18:08 ]
Hozzászólás témája: 

fenti okok miatt hibás a microchip mintpéldája is:
http://ww1.microchip.com/downloads/en/A ... 00556e.pdf

Kód:
"The code in Example 5 will allow the user to place and
access a table anywhere in program memory."

EXAMPLE 5:

   org 0x80
   movlw LOW Table;   get low 8 bits of address
   addwf offset,F    do an 8-bit add operation
   movlw HIGH Table;   get high 5 bits of address
   btfsc status,c;   page crossed?
   addlw 1;      yes then increment high address
   movwf PCLATH;   load high address in latch
   movf offset,w;   load computed offset in w reg
   call Table
.
.
   org 0x9FD
Table:   movwf PCL,F;   load computed offset in PCL
   retlw ’A’;      return the ASCII char A
   retlw ’B’;      return the ASCII char B
   retlw ’C’;      return the ASCII char C
.
.
.


1. ha a lekérdezni kívánt lookup elem másik 8lapon van, mint a lekérdezõ rutin, akkor a call Table után a PClath-ot helyre kell állítani, különben a következõ call/goto utasításnál elszáll a program!

2. ha a lookup tábla átnyúlik a 8lapos határon (pl. 0x800), akkor a 8lapos határon túlnyúló elemek lekérdezése esetén már a call Table-nál elszáll a program. A program helyesen: a kiszámolt PClath értéket el kell menteni, a call Table elõtt a PClath-ot a Table magas bitjeivel kell beállítani, majd a movwf PCL elõtt a kiszámolt és elmentett PClath értéket kell a PClath-ba tölteni.

Szerző:  Kerka [ szomb. ápr. 17, 2010 12:08 ]
Hozzászólás témája: 

Ktulu írta:


Köszi a választ. A PICKit 3-nak milyen hátránya van? Vagy csak felesleges egy kezdőnek?

Szerző:  T68m [ szomb. ápr. 17, 2010 11:12 ]
Hozzászólás témája: 

Tehát a megoldás ez lett:

Kód:
   movlw high mGetChar
   andlw b'111'
   movwf PClath_reg
...
   org 7f0
GetChar   bsf PClath_reg, 3
   call mGetChar
   bcf PClath_reg, 3
   return
   org 800
mGetChar   movwf PCL_reg
LCDInitSt   dt ...
...
   org 0xc00
LCDNevek   dt ...
...


tehát a PClath-ba csak az alsó három bitet töltöm fel fixen. Mikor le akarok kérdezni egy karaktert, akkor meghívom a még elérhetõ címen, 0x7f0-án lévõ GetChar rutint, amely bekapcsolja a 11.bitet, majd meghívja a tényleges mûveletet végzõ, felsõ memóriában (0x800-tól) elhelyezkedõ mGetChar rutint, majd annak végeztével törli a 11.bitet.

Ezzel a megoldással a szövegkonstansokat 0x800 fölé helyeztem, 2k szót biztosítva számukra és az alsó memórián felszabadítottam 1,5k szót a program számára. Viszont hátrányai:

1. minden GetChar mûvelet 6 órajelciklussal hosszabb lett!
2. minden GetChar mûvelet eggyel mélyebb, tehát 2 vermet igényel. Ami miatt legfeljebb hat mélységbõl lehet meghívni.

Van ötleted fenti hibák mérséklésére?

Szerző:  T68m [ szomb. ápr. 17, 2010 4:16 ]
Hozzászólás témája: 

Igen, ez volt a gond. Tehát mivel pclath-ot elõre beállítom arra az értékre, ahonnan a lookup táblát használni akarom, (hogy ne kelljen minden táblamûvelet elõtt közvetlenül állítgatni), ezét a $800-as cím fölé állítása után az elsõ goto vagy call-nál már elszáll a progi. Tehát $800-as cím fölé csak közvetlen a lookup tábla használata elõtt szabad beállítani a pclath-ot, majd használat után törölni kell belõle a 11. és afeletti biteket. (mert azok már nem csak a computed goto-ra, hanem minden goto és call-ra hatnak.)

Szerző:  potyo [ pén. ápr. 16, 2010 15:08 ]
Hozzászólás témája: 

Hm. ebből még nem teljesen látom, hogy használod. Azt figyelembe vetted, hogy a CALL és GOTO utasítás mellé is csak 11 címbit fér el a kódmemóriába, és a maradék két bitet ezek is a PCLATH-ból veszik az ugrásnál? Tehát ha te feltöltötted a PCLATH-t 0x08-al, elmentél a táblához, onnan egy RETLW visszaküldött pl. a 0x0052 című utasításra, majd itt kiadsz egy CALL (GOTO) utasítást, ami pl. a 0x0147 címet hívná meg, akkor az előzőleg beállított PCLATH 11 és 12. bitek miatt valójában a 0x0947 címre fog ugorni a kontroller a CALL (GOTO) hatására? Miután a táblából a RETLW visszaküldött, ott ismét be kell állítani a PCLATH 11 és 12. bitjét arra a lapra, amin a továbbiakban ugrálni akarsz. Van valami PAGESEL nevű makró, sosem használtam, de ennek a valamilyen szintű automatizálására való. Illetve a Figure 2-3-at nézd meg az adatlapban, az mutatja be ezt a lapozás dolgot. Esetleg vannak még további makrók, LGOTO, LCALL, ezeket is nézd meg, hátha hasznukat veszed.

Mondjuk 16F877 adatlapjában értelmesebben le van rajzolva a programmemóriatérkép...

Szerző:  T68m [ pén. ápr. 16, 2010 14:54 ]
Hozzászólás témája: 

potyo írta:
T68m írta:
2048($800) és feletti lookup táblába való ugrásnál vagy visszatérésnél elszáll a progi. 16f688.

Van valakinek valami ötlet? Nem elég csak a pclath-ba 0x8-at tölteni, mint alatta?
Tudsz mutatni kódot?


persze! (Köszi, hogy foglalkozol a kérdéssel)

Kód:
      org 300
GetChar      movwf PCL_reg
LCDInitSt      dt ...
LCDInitSor1   dt ...
...
      org 400
hGetChar
hLCDMerre   dt ...
hLCDFelfele   dt ...
...
      org 700
LCDNevek      dt ...
      dt ...
...


meghívás:
      movlw high GetChar
      movwf PClath_reg
...
      movlw high LCDNevek
      movwf PClath_reg

jó, ha org 700-ig használom. Ha org 800-ra kerül az LCDNevek, akkor pclath_reg 11. bitjebe is értékes jegy kerül, és ez a legközelebbi - bármilyen - call-t vagy goto-t elb*a!  :twisted:  :twisted:  :twisted:

ez az oka, a k. életbe! és org 300 alatt már csak 50 szó helyem maradt a programnak és még kéne bõvíteni. Tehát mindenképp org 800 fölé (is) kell tennem szövegkonstansokat. De pclath-ot nem állíthatom oda fixen - mint kiderült -, mert a 11. bittõl kezdve a (z egyéb, programban lévõ) call és goto utasításokra is hatással van. Na, ezen még gondolkodnom kell.

Szerző:  potyo [ pén. ápr. 16, 2010 11:57 ]
Hozzászólás témája: 

T68m írta:
2048($800) és feletti lookup táblába való ugrásnál vagy visszatérésnél elszáll a progi. 16f688.

Van valakinek valami ötlet? Nem elég csak a pclath-ba 0x8-at tölteni, mint alatta?
Tudsz mutatni kódot?

Szerző:  T68m [ pén. ápr. 16, 2010 11:45 ]
Hozzászólás témája: 

2048($800) és feletti lookup táblába való ugrásnál vagy visszatérésnél elszáll a progi. 16f688.

Van valakinek valami ötlet? Nem elég csak a pclath-ba 0x8-at tölteni, mint alatta?

Szerző:  Ktulu [ pén. ápr. 16, 2010 9:43 ]
Hozzászólás témája: 

PICKit 2 programozó:
http://www2.chipcad.hu/www/arak.aspx?group=030113

Szerző:  Kerka [ pén. ápr. 16, 2010 9:18 ]
Hozzászólás témája: 

Sziasztok,

Milyen készen kapható PIC égetőt érdemes venni? Szeretnék elkezdeni PIC-el foglalkozni, van egy régi 16F84-es égetőm darabokban. Nincs kedvem forrasztgatni, meg az már butuska is. Ezért gondoltam beruházok valami modernebbe. Tudnátok küldeni valami linket? Jó lenne ha égetni is tudna, meg ott a helyén lehetne próbálgatni is a beleégetett progit. Olyan 15-20 rongyig gondoltam.

Előre is köszönöm

Szerző:  elektro25 [ vas. ápr. 04, 2010 15:04 ]
Hozzászólás témája: 

sziasztok.

Nincs valakinek PIC16-hoz 1wire search algoritmusa leprogramozva ASM-ben? A maxim honlapján csak C nyelvűt találtam, és néhány dolog nem tiszta. De lehet az is inkább megcsinálom magam, csak haladjak vele.

Szerző:  T68m [ hétf. márc. 22, 2010 15:31 ]
Hozzászólás témája: 

Potyo: írtam neked e-mail-t, megkaptad?

Szerző:  HiMen [ hétf. márc. 22, 2010 15:13 ]
Hozzászólás témája: 

Ahogyan más belsőkvarcos RTC-nél is. Az OSCO-n kijön az IC saját rezegése... Az OSCI-n pedig rezeghetek neki ha úgy akarom... :roll:

Szerző:  potyo [ hétf. márc. 22, 2010 15:11 ]
Hozzászólás témája: 

HiMen írta:
Az adatlapján jelezve van hogy van benne kristály:
Tisztál logikai alapon: ha lenne benne kvarc, akkor minek vezettek volna ki OSCI és OSCO lábat?

Szerző:  HiMen [ hétf. márc. 22, 2010 15:10 ]
Hozzászólás témája: 

Az Oscillator 32,768 KHz nekem azt jelenti hogy rezeg. Akkor rezegjen... :lol:

Informatikus a tanult szakmám, az elektronikát kényszerből művelem, hogy legyen mit programoznia a kontrollernek. De ez érezhető is :oops:

Az R2025 nem tud századmásodpercet, az meg éppen kell. Ráadásul nincs belőle DIP tokozású. A radirgumira ragasztott felületszerelt cucc bekötésekor majd kifolik a szemem, ráadásul bűn ronda... :lol:

Szerző:  T68m [ hétf. márc. 22, 2010 14:15 ]
Hozzászólás témája: 

HiMen írta:
Az adatlapján jelezve van hogy van benne kristály:

Adatlap, 4. oldal, Fig. 1 Block Diagram

Abból jön ki az OSCO és abba megy be az OSCI
Szépen az egész körbekeretezve mint az IC belseje


Lehet, hogy neked inkább költészettel kéne foglalkoznod? Oda csak annyi van írva, hogy OSCILLATOR! Semmi kvarc.
22. oldal, Fig. 22, világosan oda van rajzolva a külsõ kvarc! Ráadásul egy trimmer kondi a Vdd felé. Szerintem a kondi nélkül is elmegy, illetve lehet azt a Vss felé is kötni. De kvarc az kell.

Különben meg nem értem: miért választottad ezt a tipust, ha egy másikkal már boldogultál???

Szerző:  HiMen [ hétf. márc. 22, 2010 13:59 ]
Hozzászólás témája: 

Az adatlapján jelezve van hogy van benne kristály:

Adatlap, 4. oldal, Fig. 1 Block Diagram

Abból jön ki az OSCO és abba megy be az OSCI
Szépen az egész körbekeretezve mint az IC belseje

Szerző:  potyo [ hétf. márc. 22, 2010 10:59 ]
Hozzászólás témája: 

HiMen írta:
De hiszen van neki sajátja...!
Nincs :!:

Szerző:  T68m [ hétf. márc. 22, 2010 10:53 ]
Hozzászólás témája: 

HiMen írta:
De hiszen van neki sajátja...!


Mi?

Szerző:  HiMen [ hétf. márc. 22, 2010 8:12 ]
Hozzászólás témája: 

De hiszen van neki sajátja...!

Szerző:  T68m [ hétf. márc. 22, 2010 0:16 ]
Hozzászólás témája: 

mert az osci és az osco közé egy 32k-s kristályt kell benyomni.

Oldal: 1 / 136 Időzóna: UTC + 1 óra
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/