A privát üzenet rendszerben karbantartásokat végzünk. Lassulások előfordulhatnak!
Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   192 / 1319
(#) Norberto válasza Csaplar hozzászólására (») Ápr 21, 2008 /
 
Idézet:
„Mennyire működőképes az a dolog, hogy a program futása alatt dugom rá a készülékre az I2C-n kommunikáló eepromot és másolom rá az adatokat?
Persze valami masszív csatlakozón keresztül...

Lehetséges ez, vagy megfagy az egész?”


Lehetséges szerintem, csak megfelelően le kell kezelni az adott helyzetet. Tehát ha véletlenül olyan részre fut a program, ahol az I2C eszközzel kommunikálnia kellene a PIC-nek, akkor ezt a helyzetet valahogy érzékelni kell, tehát hogy ne várjon a PIC a külső eszköz elérésére/válaszára végtelen ideig.
(#) potyo válasza Csaplar hozzászólására (») Ápr 21, 2008 /
 
Idézet:
„Mennyire működőképes az a dolog, hogy a program futása alatt dugom rá a készülékre az I2C-n kommunikáló eepromot és másolom rá az adatokat?”

Működőképes, amennyiben a kontrollerben futó program képes rá. Hogy az képes-e rá, az már rajtad múlik.

Idézet:
„Valamint azt is szeretném megkérdezni, hogy mekkora a maximum sebesség, amivel kommunikálhat a p18f4520-as RS232-őn a PC-vel? Most 9600 baudon megy, és én nem láttam sehol a datasheet-ben korlátot. Ez azt jelenti, hogy nyugodtan emelhetem?”


A legtöbb PC oldali vevő szabványos sebességeken hajlandó csak kommunikálni. Ha be tudod állítani a pic-ben úgy, hogy 2-3% pontossággal egyezzen a szabványos sebességgel, akkor mehet annyin.

Idézet:
„Mekkora a maximum, amin még érdemes kommunikálni?”


A lehető legkisebb, ami még elég a feladathoz. Nem kell csak azért 115200bps sebességet használni, mert lehet, ha a feladathoz elég a 9600bps is.
(#) hasutas22 válasza potyo hozzászólására (») Ápr 21, 2008 /
 
És a Pickit2 programmal is be lehes égeni a .HEX és .ASM fájlokat? Egyébként melyik mi (.ASM, .HEX)? Azthiszem a .HEX az a program. A .ASM az valamilyen programnyelven megírt program amit .HEX-é fordítanak le haxa kódba?
(#) potyo válasza hasutas22 hozzászólására (») Ápr 21, 2008 /
 
Idézet:
„És a Pickit2 programmal is be lehes égeni a .HEX és .ASM fájlokat?”

Mivel arra van kitalálva...

Idézet:
„Egyébként melyik mi (.ASM, .HEX)?”

A .hex fájl a lefordított program, ami a kontrollerbe kerül. A .asm az a forráskód asm nyelven, ebből csinál a fordító hex fájlt.
(#) kobold válasza hasutas22 hozzászólására (») Ápr 21, 2008 /
 
Potyo megelőzött, de a lényeget leírta. Az asm emberi nyelven van, azért, hogy a programozó könnyebben megértse, mit csinál (forráskódnak is hívható, kommenteket tartalmazhat). A hex állomány a forráskód fordítása gép kódra; ezt a kódot a processzor a saját logikája szerint értelmezi, és végrehajtja, emberi értelmezésre nem igazán alkalmas. Ebből következően beégetni csak a hex kódot tudod, amit az asm-ből a fordítóprogram (pl. MPASMWIN) hoz létre.
Egy példa 16F-hez: asm-ben azt írod, BCF STATUS, C; ennek a hexa megfelelője 0x10 0x03 lesz, persze 14 biten ábrázolva.
(#) hasutas22 válasza kobold hozzászólására (») Ápr 21, 2008 /
 
Nagyjából értem, de ezt nagyon nem értem "Egy példa 16F-hez: asm-ben azt írod, BCF STATUS, C; ennek a hexa megfelelője 0x10 0x03 lesz, persze 14 biten ábrázolva." Igaz hogy kb félig ismerek 3-4 programozási nyelvet, de ezt nem értem.
(#) trudnai válasza hasutas22 hozzászólására (») Ápr 21, 2008 /
 
Melyik reszet nem erted? Azt gondolom erted, hogy egy elektronikai alkatresz, legyen az CPU vagy MCU vagy ASIC vagy barmi az nem fogja neked megerteni mire gondoltal, ezert egy szamara ertheto formatumban, binaris szamokban kell megmondani mit csinaljon?

Amugy Szilvat kerdezd meg, epp ma fejtette ki, hogy igazi programozo .HEX-ben programozik
(#) potyo válasza trudnai hozzászólására (») Ápr 21, 2008 /
 
Idézet:
„Amugy Szilvat kerdezd meg, epp ma fejtette ki, hogy igazi programozo .HEX-ben programozik”


Ez engem is érdekel. Hol fejtette ki?
(#) kobold válasza hasutas22 hozzászólására (») Ápr 21, 2008 /
 
Lapozz fel egy adatlapot, az utasításkészletet összefoglaló táblázatot keresd. Minden utasításnak ott a bináris "leírója", a bitpozíciók magyarázatával.
Az előbbi példánál maradva:
BCF f, b --> 01 00bb bfff ffff, ahol b a bitet, f a regisztert címzi meg.
A regisztereknél visszakeresve STATUS címe a 0x03 (bár mindegyik bankban megvan, de a fordító ezt szokta behelyettesíteni), a C bit a 0. bitje, innen a parancs: 01 0000 0000 0011 binárisan.
(#) trudnai válasza potyo hozzászólására (») Ápr 21, 2008 /
 
Idézet:
„Ez engem is érdekel. Hol fejtette ki?”


MSN-en, benti gepemen el van mentve az utokor szamara , de ne egy magas szintu tudomanys fejtegetest kepzelj el, csak hulyeskedtunk, meg vissza sirta a Z80-ast mikor meg hexaban programozott meg en is a 6502-t hasonlo okokbol.
(#) Sendi hozzászólása Ápr 21, 2008 /
 
Helló Mindenkinek.

Nagyon primitiv kérdésem van, de órák óta nem tudom a választ. Irtam egy egyszerű multiplexelős programocskát tanulás céljából. De a PORTB-t nem kezeli.
Most teljesen leegyszerűsítettem a programot, és csak 1-ket akarok kiírni a B és D portokra. A D-re kiírja a B-re nem. És nem jövök rá hogy miért nem. MPLAB-t használok.
Bocs a primitiv kérdésért.

Köszönettel

proba.asm
    
(#) trudnai válasza Sendi hozzászólására (») Ápr 21, 2008 /
 
ANSELH-t is inicializalni kell hogy digitalis legyen, masik meg hogy a program vegen nincs semmi igy ujra es ujra elindul a programod... kellene ode egy vegtelen ciklus hogy lasd az eredmenyt normalisan...
(#) potyo válasza Sendi hozzászólására (») Ápr 21, 2008 /
 
Hiányzik a végéről a végtelen ciklus, a többit jónak nézem:
  1. VISSZA GOTO VISSZA


Illetve az ANSELH regiszter alapján az RB0-RB5 lábak analóg bemenetként vannak indulás után beállítva, de ezek elvileg nem számítanak, ha a TRISB regiszterben átváltod kimenetté a lábat. De azért töröld az ANSELH regisztert is, hogy a későbbiekben amikor csak a PORTB egyes bitjeit akarod változtatni, akkor az RMW problémát megelőzd.
(#) trudnai válasza potyo hozzászólására (») Ápr 21, 2008 /
 
En is ezt olvasom a datasheeten, de erdekes modon ha szimulatorban kiprobalom akkor a bitek nem allnak be magasba a PORTB-n...

Errataban sem talaltam utalast arra vonatkozoan, hogy ez rosszu szerepel a doksiban, es most nincs keznel 887-em, hogy leteszteljem, de ha Sendinek igy viselkedik valosagban(?) akkor a szimulacio jo. Sendi, szimulatoron probaltad csak vagy a valosagban is?
(#) szilva válasza trudnai hozzászólására (») Ápr 21, 2008 /
 
OFF

Hát igen, annak idején 8085-tel kezdtem, majd jöttek a Z80-nal szerelt gépek. Mivel akkoriban nem volt túl egyszerű assemblerhez jutni, internet meg még egyáltalán nem létezett, kénytelen voltam papírokból megtanulni a proci programozását.

Később került valahonnan egy Z80 információs kártya, ami rendkívül népszerű lett, szinte kötelező segédeszközévé vált minden programozással foglalkozó embernek. A Z80 teljes utasításkészle rajta volt táblázatosan, meg mindenféle hasonló jók. Kb. egy A4-es méret volt, de 3 felé hajtva harmonikaszerűen, talán láttak mások is ilyet akkoriban.

Szóval én elég sokáig vidáman programoztam hexában Z80 alapú gépeket, ha kellene, kis gyakorlás után még ma is menne. PC-s procikat meg Atmeleket, PIC-eket már nem tudnék hexában programozni, de még nem késő megtanulni

ON
(#) nemgyuri válasza watt hozzászólására (») Ápr 21, 2008 /
 
Pill. úgy tűnik, hogy egy nagyon egyszerü megoldás van a "leállásra"
eredeti:
DS_FF: ;várj mig FF-től elt‚rő jön
call dsread
addlw 0x1
btfsc STATUS,Z
goto DS_FF
return
változat:
DS_FF: ;várj mig FF-től elt‚rő jön
movf Tcs,w ;ha a Tcs=0 megszakitásból jött - adatforgalomhiba!!
btfsc STATUS,Z
return
call dsread
addlw 0x1
btfsc STATUS,Z
goto DS_FF
return
Tudom, ez így nem szép, de hibakereséshez jó. Ezzel még nem sikerült lefagyasztani a rendszert.
A kábelem 4 eres lapos telefonkábel és a jelvezeték a föld és a táp között megy, szerintem ezért lehet viszonylag zavarvédett.
A hosszú vezetéken történő adattovábbitásről van egy feltevésemjól gondolom???):
Mivel egyszerre csak 1 irányba van adattovábbitás a vezeték hullámellenálása miatt jelkésleltetés kialakul ugyan, de ennek ilyen sebességek mellett nincs hatása.
Mivel mellette nincs másik jelvezeték ami rászórhatna nem okoz problémát.
Gondolatébresztőnek: sima telefonvezetéken 10Mbit/s több km hosszan.
(#) szilva válasza trudnai hozzászólására (») Ápr 21, 2008 /
 
Most nincs előttem 887 doksi, mert nem a saját gépemnél ülök, de abban nincs valami konfigbit, ami bizonyos portbitek indulási állapotát állítja be? Vagy ilyesmi csak 18F-esekben van?
(#) watt válasza nemgyuri hozzászólására (») Ápr 21, 2008 /
 
A lényeg az, hogy ne ragadjon bele egy adatra várva, a szépség nem számít. Ha jól értem egy Timer megszakítást indítasz ami ha lejár az adat beérkezte előtt, akkor törli a Tcs változót? Ide elég lenne egy bit is, de a lényeg megvan most is..
(#) Sendi válasza trudnai hozzászólására (») Ápr 21, 2008 /
 
Helló Trudnai
Igen a szimulátoron próbálom (PicKIt2 és 16F887)
Csináltam egy multiplexert, szépen végig megy az adatokon, ki is írja őket a PORTD-re (a watch ablakban)
de a tranzisztor vezérlő PORTB-n semmi változás.
Ha a PORTB-t átírom PORTC-re akkor mutatja a digitléptetést.
CSak szerettem volna tudni, hogy C-vel miért megy, és B-vel meg miért nem. Hiszen tanulni szeretnék.

És a PORTB-t az előző kis programban sem tudom írni.
(mintha nem is látná)

Köszönöm az ötleteket, és ha megtaláljátok a megoldást akkor azt is.

Köszönettel.
(#) watt válasza Sendi hozzászólására (») Ápr 21, 2008 /
 
PortB-ről le van tiltva az A/D átalakító?
(#) trudnai válasza Sendi hozzászólására (») Ápr 21, 2008 /
 
Szoval a

BANKSEL ANSELH
CLRF ANSELH

nem segit?
(#) kobold válasza Sendi hozzászólására (») Ápr 21, 2008 /
 
Ez fut:
  1. #include <p16F887.inc>
  2.         __CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
  3.         __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V
  4.  
  5. ;------------------------------------------------------------------
  6.        ORG      0
  7.                        
  8.  
  9.         BANKSEL TRISB           ;ABBA A BANKBA LÉPÉS AHOL A TRISB REGISZTER VAN (BANK1)
  10.          CLRF   TRISB                   ;B-PORT IRÁNYAINAK MEGADÁSA
  11.          CLRF   TRISD                   ;D-PORT IRÁNYAINAK MEGADÁSA
  12.         BANKSEL ANSELH
  13.         CLRF    ANSELH
  14.     BANKSEL PORTB
  15.     CLRF        PORTB
  16.         CLRF    PORTD
  17.         MOVLW   B'11111111'
  18.         MOVWF   PORTD
  19.  
  20.         MOVLW   B'11111111'
  21.         MOVWF   PORTB
  22. LOOP    GOTO    LOOP
  23.  
  24.         END                             ;PROGRAM VÉGE

ANSELH törlése nélkül nem ment.
(#) potyo válasza nemgyuri hozzászólására (») Ápr 21, 2008 /
 
Idézet:
„Gondolatébresztőnek: sima telefonvezetéken 10Mbit/s több km hosszan.”

De az szimmetrikus jelvezeték és csavart érpár.
(#) Sendi válasza trudnai hozzászólására (») Ápr 21, 2008 /
 
Helló trudnai

Megcsináltam amit javasoltatok.
Ha PORTB vel futtatom semmi nem történik (nem írható)
Ha átírom PORTC re akkor tökéletes.

proba.asm
    
(#) Sendi válasza kobold hozzászólására (») Ápr 21, 2008 /
 
Helló kobold

Ez valóban működik, köszönöm.
Megint tanultam.
És elnézést az "egyszerű" kérdéseimért.

Köszönettel.
(#) trudnai válasza Sendi hozzászólására (») Ápr 21, 2008 /
 
Szia Sendi,

Hat igen, a BANKSEL nem art ha ott van

Amugy elmeletileg portot ugy kell inicializalni, hogy meg mielott a TRISx-t piszkalod a megfelelo portot beallitod alapallapotra - ez legtobbszor 0. Ez azert kell, mert mikor kiadod a TRISx inicializalast akkor a PORTx azonnal beall arra az allapotra ami a latch registereben eppen van, ha ez csupa 1 akkor magasra valt, majd te leteszed 0-ra de egy tuske azert megjelenik egy pillanatra ami nem biztos, hogy kivanatos. Van olyan modszer amugy amikor nem is a PORTx regsztereket hanem a TRISx-eket piszkalva all elo a kivant kimenetet.

Tehat esetedben a CLRF PORTB es CLRF PORTD a TRISB ill TRISD beallitasok elott kellene legyen nem pedig utana - termeszetesen a megfelelo BANKSEL-ekkel ugyelve, hogy mielott a PORTx-et piszkalod BANKSEL PORTx legyen ill mielott TRISx akkor BANKSEL TRISx, majd mielott megint PORTx-et irsz ujfent BANKSEL PORTx...
(#) Sendi válasza trudnai hozzászólására (») Ápr 22, 2008 /
 
Helló trudnai

Köszönöm. Lassan de haladok.
Mint a mondás szerint: Szerencse, hogy lassan megyek, mert nem tudom, hogy jó irányba-e.

Köszönettel.
(#) Kacsavadasz hozzászólása Ápr 22, 2008 /
 
helló!

Kezdő PICes vagyok és megpróbálkoztam az időzíttésel, de nem akar működni a program a próbapanelon.
ledeket kellene neki bekapcsolnia 1sec időzítéssel majd 3
mulva megint.ha segíteni udna valaki megköszöszönném.
íme a program:



list p=pic16f84, r=dec, l=0

include "p16f84.inc"

;***** CONFIG ************************************************************

__CONFIG _XT_OSC&_CP_OFF&_WDT_OFF ;Kvarc oszcillátor, kódvédelem ki, wdt ki


;***** DEFINES ************************************************************
INTCON_VAL EQU B'10100000'
OPTION_VAL EQU B'10000111'

ORG 0
GOTO START
ORG 4

CBLOCK 0X0C
TAR
OVF
ENDC


START
BANKSEL TRISA ;Váltsunk a TRISA
MOVLW B'11111111'
MOVWF TRISA ;PORTA INPUT LESZ
MOVLW B'00000000'
MOVWF TRISB ;PORTA OUTPUT LESZ
BANKSEL PORTB ;Váltsunk a PORTB

BCF STATUS,RP0
movlw INTCON_VAL
movwf INTCON ; set INTCON

BSF STATUS,RP0
movlw OPTION_VAL
movwf OPTION_REG ; set OPTION_REG

REAL

CALL ZOLD
CALL PIROS

GOTO REAL

ZOLD MOVLW B'01010101'
MOVWF PORTB

movlw .15 ;a 1 mp-hez 1tulcsorulas
;eloszor W-be

movwf TAR ;majd W-t a tar-be

CALL VAR ;most hivom meg a varakozo rutint

PIROS MOVLW B'10101010'
MOVWF PORTB

movlw .45 ;a 3 mp-hez 45

movwf TAR ;majd W-t a tar-be

CALL VAR



VAR btfss INTCON,T0IF ;TMR0 tulcsordult-e ?

goto VAR ; ha nem akkor var-ra

bcf INTCON,T0IF ; ha igen torolni kell a T0IF

incf OVF,F ; ovf novelese minden
;tulcsordulasnal, ovf regiszterbe
movf TAR,W ;varakozas addig, mig
ovf-tar=0
subwf OVF,W

btfss STATUS,Z ;a zero-flag akkor 1, ha x
ovf-tar=0
goto VAR ; meg nem tar-szor csordult tul
(tar<>ovf)
clrf VAR ; (most tar=ovf) ovf torlese a
kovetkezo idoziteshez
RETURN ; vege, letelt az idozites

END
(#) menyus hozzászólása Ápr 22, 2008 /
 
Sziasztok!

Kérdezni szeretném hogyan lehet megoldani hogy egy adott címen lévő programrészt többször futtasson le a mikrovezérlő? Mintha láttam volna valahol hogy

GOTO "X" §3

vagy valami ilyesmit.

De lehet hogy rosszul emlékszem. Vagy írjam meg rutinban és hívjam meg (CALL) "X" szer? Hogyan lehet ezt megoldani?

(#) kobold válasza menyus hozzászólására (») Ápr 22, 2008 /
 
Egy regiszterben megadhatod a végrehajtási számot, a programrészt szubrutinba teszed, és nulláig leszámolgatva hívogatod. Pl.:
  1. MOVLW 0x05
  2. MOVWF COUNTER
  3. CALL SUBRUTIN
  4. DECFSZ COUNTER, F
  5. GOTO $-2
  6. ; és innentől, öt végrehajtás után folytatódik
Következő: »»   192 / 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