Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1063 / 1319
(#) Soós Antal válasza icserny hozzászólására (») Ápr 2, 2012 /
 
Köszönöm szépen ez volt a jó megoldás!

Jó hogy írtad a te *.lkr milyen, ebből tudtam hogy nálam az én lkr be lévő nevet kell írni az udata után tehát nálam ennyi

DATABANK NAME=gpr1 START=0x100 END=0x1FF
ezért

#pragma udata gpr1
int a[100];

és megy.

Tehát összefoglalva a fordító nem jól ossza szét a változókat a különböző / feltételezem 256 bájtos bankokban / ezért ezt kézzel kell megtenni.

Abból gondolom hogy a fordító a hibás mert amikor 2 x 8 karaktert akartam tárolni a LCD nek akkor is ugyanez volt csak ott megtudtam úgy oldani hogy 8 -at a főprogramba deklaráltam 8 -at pedig egy alprogramban.

Összefoglalva másoknak is!
Akinek ilyen gondja van *.lkr kinézi a nevet és kézzel szét rakja a változókat a különböző szekcíókban! És tele tudja pakolni a teljes memóriát!

#pragma udata szekcíónév1
változók1

#pragma udata szekcíónév1
változók2
(#) Soós Antal válasza icserny hozzászólására (») Ápr 2, 2012 /
 
Nálad bank elvan nevezve szekcíóként is
SECTION NAME=GP0 RAM=gpr0

nálam az udata közvetlen megy a banknévvel is!

remélem ettől még jó
(#) watt válasza Soós Antal hozzászólására (») Ápr 2, 2012 /
 
Mi az, hogy reméled? Nézd meg jó helyre kerültek-e a változók!
(#) menyus hozzászólása Ápr 3, 2012 /
 
Sziasztok!

Kérdezni szeretném hogy véleményetek szerint az alábbi kód működőképes lehet? Az eredeti kódot innen szedtem le, és igazándiból azt szeretném hogy az ASCII hex értékeiből a felső digitet el szeretném tüntetni. Ha jól értelmezem akkor ez a kód pont erre való, két kimeneti változóba szétválogatja az alsó és a felső digiteket amiből nekem csak az alsó kell. A kód rendben lefordul csak éppen nem működik, de vajon miért nem? Egy az egyben használom, semmit nem változtattam rajtam csak feltöltöm a bemeneti váltózót (BUFFER), és az alsó digitet tartalmazó változó (ASCII_LSW) értékét az eeprom területre íratom, a 0x00 ba. (próbából, hogy lássam mit csinálok..) Hibás lenne a kód..?

  1. MOVLW  0X34    ;ASCII 34 = d4
  2. MOVWF  BUFFER
  3.  
  4. CLRF  ASCII_MSW     ;Clear output registers
  5. CLRF  ASCII_LSW
  6. SWAPF  BUFFER,W     ;Get upper nibble
  7. ANDLW  h'0F'     ;Mask off unwanted bits
  8. MOVWF  ASCII_MSW    ;Save
  9. MOVLW 10     ;For BCD lower nibble only (lower 4 bits)
  10. SUBWF ASCII_MSW,W
  11. MOVLW h'30'     ;If numerical add ascii value (-10)
  12. BTFSC StatusREG,C
  13. MOVLW h'37'    ;If alphabetical, then add a different ascii value (-10)
  14. ADDWF ASCII_MSW,1    ;save in output reg
  15. MOVF  BUFFER,W    ;get lower nibble of input byte
  16. ANDLW  h'0F'    ;mask off unwanted data
  17. MOVWF  ASCII_LSW
  18. MOVLW 10
  19. SUBWF ASCII_LSW,W
  20. MOVLW h'30'
  21. BTFSC StatusREG,C
  22. MOVLW h'37'
  23. ADDWF ASCII_LSW,1     ;and save in output reg
  24. retlw   0
  25.  
  26. MOVF  ASCII_LSW,W
  27. MOVWF  REF
  28.  
  29. BANK1  
  30. MOVLW  0X00
  31. MOVWF  EEADR    ;EEPROM TERÜLET CÍMZÉSE
  32.  
  33.  
  34. MOVF  REF,W    ;REF REGISZTER ÉRTÉKÉNEK MOZGATÁSA A W BE
  35. MOVWF  EEDATA    ;W BŐL AZ EEDATA REGISZTERBE
  36. CALL    EWRITE    ;EEPROM ÍRÁS RUTIN
  37.  
  38.  BANK0
  39.  
  40. BSF  PORTB,5
  41.  
  42. SLEEP
(#) menyus hozzászólása Ápr 3, 2012 /
 
Hát ez a kód beszúrása nem nagyon sikerült még nekem. Azért remélem a lényeg látható. Az eredeti forrás itt található.
(#) menyus válasza menyus hozzászólására (») Ápr 3, 2012 /
 
Meg is van a hiba...

"retlw 0"

kivettem a kódból és így már működik a dolog ...
(#) menyus válasza menyus hozzászólására (») Ápr 3, 2012 /
 
Viszont ez a kód mégsem azt csinálja amit én szerettem volna. Nehéz kenyér ez...
(#) _vl_ válasza menyus hozzászólására (») Ápr 3, 2012 /
 
Esetleg ha leírnád, hogy mit szeretnél...
(#) menyus válasza _vl_ hozzászólására (») Ápr 3, 2012 /
 
Azt szeretném megoldani hogy az ASCII számkódokat (0X00 - 0X09 / ASCII = 0X30 - 0X39) át szeretném konvertálni / alakítani ASCII értékének megfelelően. Tehát ASCII 0X35 = h 0X05 = d 5. Ennyi amit szeretnék....
(#) _vl_ válasza menyus hozzászólására (») Ápr 3, 2012 / 2
 
Tehát 0x30 -> 0x00, 0x39 -> 0x09?

; betöltöd az értéket a W-be
ANDLW 0x0f
; előállott a kívánt érték a W-ben
(#) menyus válasza _vl_ hozzászólására (») Ápr 3, 2012 /
 
Ennyi..? Ha működik isten vagy! Ezzel szenvedek egész délután...
(#) menyus válasza _vl_ hozzászólására (») Ápr 3, 2012 /
 
MŰKÖDIK..!! Hálás köszönetem érte!
(#) menyus válasza _vl_ hozzászólására (») Ápr 3, 2012 /
 
Volna még egy kérdésem.. Nekem múgy jönnek az adatok hogy minden karakter elfoglal egy bájt ot. Tehát nálam pl. a 100, az ASCII 0x31 - 0x30 - 0x30 formátumban jön. Hogyan tudok én ebből így 8 biten kifejezhető értéket képezni..? 0x64..?
(#) _vl_ válasza menyus hozzászólására (») Ápr 3, 2012 / 1
 
kell egy gyűjtő, amibe gyűjtöd az eredményt.
kinullázod az elején.

CLRF SUM

ezután minden karakter olvasása után:

beolvassuk az új karaktert, az alsó négy bitet kiszedjük:

MOVF INPUT,W
ANDLW 0x0f

megszorozzuk 10-zel az eddigieket, és hozzáadjuk az előző 4-bites számot: (ha van szorzóegység a PIC-ben, lehet azt is használni)

BCF STATUS,C
RLF SUM,F
ADDWF SUM,W
BCF STATUS,C
RLF SUM,F
BCF STATUS,C
RLF SUM,F
ADDWF SUM,F
(#) menyus válasza _vl_ hozzászólására (») Ápr 3, 2012 /
 
Köszönöm, holnap nekiállok megírni. Remélem össze tudom hozni mert kicsit sem látszik egyszerűnek. Ilyet se csináltam még. A kontrollerben nincs szorzó, 16F648 at használok.
(#) Hp41C válasza menyus hozzászólására (») Ápr 3, 2012 / 1
 
Szia!

X * 10 = X *(8 + 2) = (X * 2) * 5 = X * 2 * (4 + 1)

De ott a megoldás a hozzászólás végén.

Ha hosszabb szóra is kellene: BCD -> bináris, bináris -> BCD rutinok, melyeket tetszőleges bitszámra lehet bővíteni...
(#) menyus válasza menyus hozzászólására (») Ápr 3, 2012 /
 
Tényleg.. ha az eredmény már nem fér el 8 biten ? Lehet a SUM változó mondjuk 3 X 8 bit? 3 SUM változó, SUM 1, 2 , 3 tehát 24 bit...pl. Hűűű ez egyre csak bonyolódik.
(#) menyus válasza Hp41C hozzászólására (») Ápr 3, 2012 /
 
Szia!

Köszi, pont most kérdeztem rá erre is..
(#) _vl_ válasza menyus hozzászólására (») Ápr 3, 2012 / 1
 
Lehet bonyolítani, ha nem férsz el 1 byte-on, de akkor még hosszabb és bonyolultabb lesz, mert minden ADD és RLF parancs helyett több kell, hogy az átvitel továbbmenjen a felsőbb byte-okba.
Aztán lehet annyiban is bonyolítani a dolgot, hogy mondjuk ha túl nagy szám jön az inputon, akkor azt észrevesszük, és nem hülyeséget csinálunk, hanem hibajelzést adunk (mert ezek a lenti kódok valami eredményt fognak kiadni hibás input esetén, de annak köze nem lesz a valósághoz). Meg lehet nézni azt is, hogy tényleg számjegyek jönnek-e. Stb.

De szerintem valami netes kezdő assembly kurzust végig kéne rágni, mert amilyen dolgok nem mentek saját kútfőből (ANDLW 0x0f), az alapján azt gondolom, hogy nagyon hiányoznak az alapok.
(#) menyus válasza _vl_ hozzászólására (») Ápr 3, 2012 /
 
Így van ahogy írod (már ami a HSZ legvégét illeti..) teljesen igazad van, tehát ne bonyolítsuk tovább egyelőre... Van ami megy, egyszerűbb dolgok, de ha "komolyabban" számolni kell valamit, konvertálni..stb, a bináris alapműveletek egyelőre kifognak rajtam.

Köszönöm az eddigi segítséget.
(#) lidi válasza menyus hozzászólására (») Ápr 3, 2012 /
 
Nem akarok nagyon trollkodni, de C -ben ez a probléma:
szam=atoi("szoveg"); nem egyszerűbb egész kicsit ?
"szoveg" helyett persze lehet szöveget tároló változó is.
Egyszerűen nem értem azokat, aki ilyen szintű dolgokat asm ben szenvednek végig. Csak azért szólok, hátha nem tudod hogy van ám egyszerűbb nyelv is az asm -nél.
(#) menyus válasza lidi hozzászólására (») Ápr 4, 2012 /
 
Igen, teljesen megértem hogy nem érted.. Ezt már megkaptam párszor. Ami asm ben 30 sor az "C" ben 5...kb. Persze hogy egyszerűbb lenne, csak elég nagy nekifutást igényel. Legalábbis nekem. Eljutottam már a Kónya féle könyv "C" programozást ismertető kiadásáig is. Megvettem, belenéztem... aztán mély tisztelettel becsuktam. Mert egy két oldal elolvasása után úgy összekavart hogy aznap még asm ben sem tudtam portokat billegtetni... Új fordító is kellene gondolom (bár ezt a részét még át sem gondoltam..) mert az MPLAB fordítója úgy tudom nem kezel "C" forrást vagy igen..? Pl MPLAB ban lehet e egyáltalán C kódot írni, vagy más fejlesztő környezet is kell?...stb. Na, hát ilyen jellegű gondjaim vannak ezzel. Mindenesetre valóban nagyon jó lenne megtanulni. Ami eleve nem világos hogy "ez a C" ez már objektum orientált programozás? Mert JAVA val szenvedtem egy keveset, ( egy két tök egyszerű midletet java s mobilra, példák átírásával persze) de azt is abbahagytam mert nem voltam képes megérteni ezt az objektum orientált gondolkodásmódot...ha ez a C is olyan akkor esetemben felejtős. Vagy ez a "C" amit ti használtok ez is szekvenciálisan fut mint az asm..? Sorról sorra lefelé, esetleg ugrás, rutinhívás...stb.

Idézet:
„...hátha nem tudod hogy van ám egyszerűbb nyelv is az asm -nél.”


De tudom, csak mikor elkezdtem ezzel a PIC el játszani (kb 2 - 3 éve) akkor azt javasolták hogy ha semmiféle programozási előéletem/tapasztalatom nincs (mert nincs), akkor az asm el érdemes kezdeni...mert ha azt "bitszinten" megértem akkor a többi nyelvvel nem lesz gondom, könnyebben fogom megtanulni az egyéb programnyelveket is. Ezért maradtam az asm nél, de nálam úgy látszik ez a teória nem jön be...

Szoszo.. amikkel én eddig foglalkoztam ahhoz elég volt az a "tudás" amit magamra szedtem (főleg a Ti segítségetekkel + némi önképzéssel) 2 - 3 év alatt. De mára ez kevésnek bizonyul, itt az élő példa rá. 3 hete szenvedek ezzel a koordináta átváltással asm ben, most adtam át ezt a GPS es projectet olyannak aki meg is tudja oldani (nem tudom végül milyen nyelven..), mert én elvéreztem rajta. (Megjegyezném, mikor a projectet elvállaltam szó sem volt koordináta átváltásról, különben eleve nem nyúlok bele....Amit eredendően elvállaltam az hibátlanul működik csak megleptek pár + funkcióval, "még ez is kéne meg az is kéne"...stb. , ez gondolom ismerős... )
(#) potyo válasza menyus hozzászólására (») Ápr 4, 2012 /
 
A sima C-nek semmi köze az objektumokhoz, ugyanúgy szekvenciálisan fut, mint az asm. A C++, C#, stb. azok, amik már objektumokkal is tudnak dolgozni, de ez nem azt jelenti, hogy muszáj is (bár C#-t annyira nem ismerem). C nyelven is lehet asm stílusban programozni, akkor gyakorlatilag ugyanúgy billegteted a biteket, mint az asm-nél, csak pl. ilyesmiket, mint hogy megszakításkor a használt regiszterek mentése és matematikai műveletek, ezeket megoldja a fordító. A magasabb szintű stílus, hogy lehet a mindenféle könyvtári függvényeket hívogatni pl. a perifériák beállítására, de cserébe csökken a szabadságod, nem tudsz pl. olyasmit beállítani, hogy soros porton 9 bites adás legyen, de közben 8 bites vétel. Valamint ha valami könyvtári cuccban netán hiba van, akkor azzal jól el lehet szórakozni, ilyenkor jön jól az, ha az ember érti az asm listát, akkor ki tudja nézni, hogy mégis mit nem úgy csinál, ahogyan kellene.


Idézet:
„Megjegyezném, mikor a projectet elvállaltam szó sem volt koordináta átváltásról, különben eleve nem nyúlok bele....Amit eredendően elvállaltam az hibátlanul működik csak megleptek pár + funkcióval, "még ez is kéne meg az is kéne"...stb. , ez gondolom ismerős...”


Sajnos az. Nálunk is ez megy folyton (bár én webfejlesztéssel foglalkozok munkahelyen), főnök mindig kitalál valami újabb funkciót, változtat valamit, de persze minden tegnapra kellene. Ne tudd meg, hogy néznek ki a kódjaink az állandó foltozás miatt... Épp tegnap kaptam egyik ismerőstől ezt az idézetet:

Idézet:
„Walking on water and developing software from a specification are easy if both are frozen." - Edward V. Berard”
(#) menyus válasza potyo hozzászólására (») Ápr 4, 2012 /
 
Köszönöm ezeket az alap infókat a C ről, ha ez nem objektumorientált akkor lehet még van egy sanszom hogy megértem. Megpróbálok nekifutni ismét. Pár kérdés..:

Mi kell nekem az MPLAB mellé ha C ben akarok kódot írni?
Mi kell a fordításhoz?
Hol találok jól használható infót a C ről ahonnét el tudnék indulni? Lehetőleg az alapoktól, szájbarágósan (hülye gyerek szintű) és lehetőleg magyar nyelven. (tudom sokat kérek... )
Javasoltak valami "CCSC" t régebben. Az a C valami egyszerűsített változata? Érdemes e vele foglalkozni, vagy a sima C a jobb?

Sorry ha sok a kérdés így reggel 9 felé...

Ja, jégen még szaladgálni is lehet, végül is az is víz.. És nem is kell hozzá Jézus nak lenni.

Köszi
(#) Hp41C válasza menyus hozzászólására (») Ápr 4, 2012 /
 
Szia!
MpLab C azaz HighTech C fordítók. A rendes példány fizetős, az oktatási példány csak diákoknak, az ingyenes (egy idő múlva) elfelejt rendesen optimalizálni.
(#) icserny válasza menyus hozzászólására (») Ápr 4, 2012 /
 
Idézet:
„Hol találok jól használható infót a C ről ahonnét el tudnék indulni?”
BRIAN W. KERNIGHAN & DENNIS M. RITCHIE: A C programozási nyelv

Szerezz be egy PIC18F4550 mikrovezérlőt, s akkor használhatod a PICCOLO projekt mintapéldáit és a hozzájuk fűzött magyarázataimat (pillanatnyilag lehet, hogy épp nem érhető el, valami átalakítás folyik hálózatunkon). Ehhez az MPLAB mellél a C18 fordítót kell telepíteni.
(#) menyus hozzászólása Ápr 4, 2012 /
 
Köszönöm a válaszokat/ infókat. Körüljárom a témát, illetve beszerzem az említett kontroller típust is. Előbb utóbb úgyis össze kell valahogy barátkoznom a 18 as szériával.
(#) menyus válasza Hp41C hozzászólására (») Ápr 4, 2012 /
 
Hűűűű...ezek nem gyerekjáték árak ám! Azt hiszem meggondolom én ezt a C re váltást... Ráadásul ha jól látom a 16 os és a 18 as szériához külön compilert kell venni..? Vagy a 18 as hoz való az visszafelé kompatibilis a 16 os szériákkal? Hogy van ez..?
(#) pjg válasza menyus hozzászólására (») Ápr 4, 2012 /
 
Nem jó. Külön, külön másik kell.
(#) El_Pinyo válasza menyus hozzászólására (») Ápr 4, 2012 /
 
Miért érdekes, hogy mennyi az ára? Működnek azok ingyen módban is (Lite verziók). Picit nagyobb, picit lassabb kódot generál, mint a Full változatok, de annyira azért nem dráma!
Következő: »»   1063 / 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