Fórum témák
- • Számítógép hiba, de mi a probléma?
- • Érdekességek
- • Elektromos távirányítós kapunyitó
- • Li-Ion saját akkucsomag készítése
- • Analóg oszcilloszkóp javítása
- • Kaputelefon
- • Transzformátor készítés, méretezés
- • LED szalag
- • Villanypásztor
- • CNC építése házi alkatrészekből az alapoktól
- • Kondenzátor
- • Arduino
- • Videomagnó problémák
- • Sprint-Layout NYÁK-tervező
- • IMI villanymotor
- • Digitális adatátvitel
- • Mosogatógép hiba
- • Nagyfeszültségű tápegység
- • 3-fázisú Modbus-os teljesítményszabályzó (SCR power controller)
- • Rádióamatőrök topikja
- • Elfogadnám, ha ingyen elvihető
- • Erősítő mindig és mindig
- • Villanyszerelés
- • TDA7294 végerősítő
- • Klíma szervizelés, javítás
- • Klíma beszerelése, fűtés-hűtés házilag
- • Kombikazán működési hiba
- • Általános antennás kérdések, válaszok
- • Dobozolási technikák, műszerdobozok
- • Elektronikai témájú könyvek újságok
- • Elektromos vezérlésű pneumatika
- • Hangszórójavítás (otthon)
- • Internetes rádióvevő
- • Alternativ HE találkozó(k)
- • 3D nyomtatás
- • Felajánlás, azaz ingyen elvihető
- • Akkumulátor töltő
- • Háromfázisú aggregátor
- • Szintetizátor javítás
- • Boombox javítás
- • Sütő javítás
- • Mosógép vezérlők és általános problémáik
- • Laptop javítás, tuning
- • Autós erősítős kérdések, problémák
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • Villanymotor
- • Vegyes barkácsfogások
- • Digitális óra
- • Hűtőgép probléma
- • TV hiba, mi a megoldás?
- • Szünetmentes táp javítása, élesztése
- • Erősítő építése elejétől a végéig
- • Műhelyünk felszerelése, szerszámai
- • Függvénygenerátor építése
- • SMD, mi a típusa?
» Több friss téma
|
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Bizony..
Gondolom ha ASM-ben programozik, akkor az if feltételt át tudja forgatni.
Nem kész kódot kért, hanem segítséget, van még kérdésed? A hozzászólás módosítva: Júl 11, 2016
Nem egészen mindegy, melyik kontrollerre írnád programot. A hozzászólás módosítva: Júl 11, 2016
Köszönöm mindenkinek a segítőkészséget, végül levonásokkal megoldottam, bár így egy kicsit hosszabb lett a program.
Hát azért az nem annyira egyszerű, de ha megtennéd, hogy ezt a részletet lefordítod, kíváncsi lennék, hogy mire fordul.
Parancsolj: (ez a kód lefordítva) if(valtozo>1 && valtozo<10) { //2-9-ig 1. port aktív,
}else if(valtozo>9 && valtozo<20) { //10-19ig 2. port is aktív,
}else if(valtozo>19 && valtozo<25) { //20-24ig 3. port is aktív,
}else if(valtozo>24 && valtozo<31) { //25-30ig 4. port is aktív,
}
14: if(valtozo>1 && valtozo<10) { //2-9-ig 1. port aktív,
7EA 3002 MOVLW 0x2
7EB 0270 SUBWF 0x70, W
7EC 300A MOVLW 0xa
7ED 1C03 BTFSS 0x3, 0
7EE 2FF3 GOTO 0x7f3
7EF 0270 SUBWF 0x70, W
7F0 1C03 BTFSS 0x3, 0
7F1 2FEA GOTO 0x7ea
15: }else if(valtozo>9 && valtozo<20) { //10-19ig 2. port is aktív,
7F2 300A MOVLW 0xa
7F3 0270 SUBWF 0x70, W
7F4 3014 MOVLW 0x14
7F5 1C03 BTFSS 0x3, 0
7F6 2FFB GOTO 0x7fb
7F7 0270 SUBWF 0x70, W
7F8 1C03 BTFSS 0x3, 0
7F9 2FEA GOTO 0x7ea
16: }else if(valtozo>19 && valtozo<25) { //20-24ig 3. port is aktív,
7FA 3014 MOVLW 0x14
Hát jó kis maszlag lett belőle...köszi!
Ehhez mit szóltok?
clrf outbits ; Minden kimenet törlése. Az alsó 4 biten keletkezik az eredmény
movlw .230 ; bit3: Excellent, bit2: Good, bit1: OK, bit0: Marginal
addwf valtozo,f; A 25 értéket 0 -ra konvertáljuk. C csak akkor 1, ha a változó a 25..30 tarományban van
movlw 0x0F
btfsc STATUS,C ; A C jelzőbit szerint beállítjuk mind a 4 kimenetet
iorwf outbits,f
movlw 5; A 20 (akarom mondeni -5) értéket 0 -ra konvertáljuk. C csak akkor 1, ha a változó a 20..24 tarományban van, hiszen a 0 .. 5 esetén nincs átvitel
addvf valtozo,f
movlw 0x07
btfsc STATUS,C
iorwf outbits,f ; A C jelzőbit szerint beállítjuk az alsó 3 kimenetet
movlw .10
addwf valtozo,f ; stb...
movlw 0x03
btfsc STATUS,C
iorwf outbits,f
movlw 8
addwf valtozo,f
movlw 0x01
btfsc STATUS,C
iorwf outbits,f
Ebből is látszik, hogy felesleges tartományt vizsgálni . De tényleg nem mindegy, hogy 4 vagy 30 ledet szeretnék használni.
CLRF Aktív
MOVLW .10
SUBWF Változó, W
BTFSS STATUS,C
BSF Aktív,0
MOVLW .20
SUBWF Változó, W
BTFSS STATUS,C
BSF Aktív,1
......
Használj dekódoló táblázatot! (Adott értéknél milyen állapotúak a portok.)
Egyszerű és gyors. 4*29 Byte kell hozzá.
Szia!
PIC18-ra én igy oldanám meg:
MAIN
MOVLW 0x1
CPFSGT ERTEK
GOTO KI1
BSF LATB,4
MOVLW 0x9
CPFSGT ERTEK
GOTO KI2
BSF LATB,5
MOVLW 0x13
CPFSGT ERTEK
GOTO KI3
BSF LATB,6
MOVLW 0x18
CPFSGT ERTEK
GOTO KI4
BSF LATB,7
GOTO MAIN
KI1 BCF LATB,4
KI2 BCF LATB,5
KI3 BCF LATB,6
KI4 BCF LATB,7
GOTO MAIN
Csak ugye arra nem kaptunk választ, hogy a 4 port az most hány bitet is jelent.. Ha csak 4-et akkor rendben van, de ha a 4 port 4×8 bitet akkor kicist más a leányzó fekvése. Az, hogy azt írta 2-30 közti értéket akar megjeleníteni, nekem az utóbbi tűnik sanszosnak.
Akkor mi értelme 4 mezőre osztani?
Ebben az esetben minden egyes értéknövekedésre újabb bitet kellene bekapcsolni.
A 4 változót előbb kinullázzuk és a bsf valtozó,x utasítások helyett a decf valtozo+i,f (ahol i: 0 ..3) utasítással lehet a kívánt változó minden bitjét 1 -re állítani.
Azért kell 4 mezőre osztani, mert a 8 bites PIC-ek portjai csak 8 bitesek. Egybként ha végiggondoljuk egy 2-től 30-ig terjedő értéket 4 biten kijelezni elég nehézkes.... Nekem ezért kézenfekvő ha 4×8 bitet használunk akkor pontosan meg lehet jeleníteni az adatokat.
Én itt csak 4 különböző állapotot látok.
Idézet: „2 -109 Marginal
3 -107 Marginal
4 -105 Marginal
5 -103 Marginal
6 -101 Marginal
7 -99 Marginal
8 -97 Marginal
9 -95 Marginal
10 -93 OK
11 -91 OK
12 -89 OK
13 -87 OK
14 -85 OK
15 -83 Good
16 -81 Good
17 -79 Good
18 -77 Good
19 -75 Good
20 -73 Excellent
21 -71 Excellent
22 -69 Excellent
23 -67 Excellent
24 -65 Excellent
25 -63 Excellent
26 -61 Excellent
27 -59 Excellent
28 -57 Excellent
29 -55 Excellent
30 -53 Excellent”
Amúgy meg nem lenne egy hátrány, ha a kérdező válaszolna a hozzá intézett kérdésekre, és nem mi próbálnánk meg kitalálni, hogy ő mit akar. Részemről off a téma. A hozzászólás módosítva: Júl 12, 2016
Ez igaz, de akkor én úgy írtam volna, hogy ha 2-9 1. állapot, ha 10-14 2. állapot stb. De ha lényeges az érték is akkor....
Üdvözletek!
Én szúrok el valamit, vagy a fordító, vagy ez normális jelenség?:
18f26k22, B Porton: B0 OUT, B1 ÜRES, B2 DIGIT INPUT,B3 DIGIT INPUT,B4 DIGIT INPUT,B5 ANALOG IN(ez a problémás),B6 OUT,B7 OUT.
a gondom, hogy ha engedélyezem a B5-ön a mérést, akkor a B0 0-ra vált (lehet, hogy a többi kimenet is, nem néztem. Mérés előtt teszem 1-be a B0 -t.... A hozzászólás módosítva: Júl 12, 2016
Ez milyen programnyelv?
Kódot mutass, anélkül tippelhetünk napestig.
Nem lehetséges, hogy valamelyik B porton történő analóg olvasás automatikusan analóg bemenetté kapcsolja át az analóg képes B portokat egyszerre?
De mégis, milyen mikrovezérlőről van szó?
Idézet: „2-9-ig 1. port aktív,
10-19ig 2. port is aktív,” Ez 18 bit, így ehhez 16-bites portok kellenek.
Idézet: „ASM-ben programozni” Olyan nyelv nincs, csak olyan hogy Assembly.
Továbbra is azt mondom hogy a dekodolótáblázat a legegyszerűbb és legrugalmasabb megoldás. Az egyes bitek ill. kimenetek (29 db) bármilyen sorrendben és elrendezésben lehetnek, ami megkönnyíti a vezetékezést. A 4 porthoz 4*29 byte (szó) kell, plusz 4 byte (szó) a maszkoláshoz, ha a portokat másra is használod. A hozzászólás módosítva: Júl 12, 2016
Mutass már nekem egy példát erre a dekódoló táblázatra, érdekelne a dolog, hátha másra is fel tudnám használni.
Ez egy sima tömb, aminek az X. eleme (bemeneti minta) megadja a hozzá tartozó kimeneti mintát. Pofon egyszerű, pl.:
1: 10000000
2: 11000000
3: 11100000
4: 11110000
5: 11111000
6: 11111100
7: 11111110
8: 11111111
„ASM-ben programozni”
"Olyan nyelv nincs, csak olyan hogy Assembly."
Nem kéne ennyire szőrözni.
Gyakorlatilag olyan nyelv sincs, hogy: assembly. A hozzászólás módosítva: Júl 12, 2016
Én szeretek szőrszálat hasogatni - fejszével.
Egy nyelv alapvető tulajdonsága, hogy a szintaxisa kötött.
Az assembly egy gyűjtő fogalom a gépi kódok helyett a mnemonikok használatára.
És azt nem kell ecsetelnem , hogy procitól függően hányfajta szintaxis lehet.
Az ASM pedig az Assembly rövidítése, nem?
A példa átültetve PIC24 Assembly nyelvre:
;---------------------------------------
dekod: mov RSSI,wreg
mov #psvoffset(tabla),w1
mov #psvoffset(maszk),w2
sl w0,#2,w3 ;*4
add w1,w3,w1
;-----------
mov [w1++],w3
and w3,[w2],w3
com [w2++],w0
and LATA,wreg
ior w0,w3,w0
mov w0,LATA
;-----------
mov [w1++],w3
and w3,[w2],w3
com [w2++],w0
and LATB,wreg
ior w0,w3,w0
mov w0,LATB
;-----------
mov [w1++],w3
and w3,[w2],w3
com [w2++],w0
and LATC,wreg
ior w0,w3,w0
mov w0,LATC
;-----------
mov [w1++],w3
and w3,[w2],w3
com [w2++],w0
and LATD,wreg
ior w0,w3,w0
mov w0,LATD
;-----------
return
;---------------------------------------
.section .const,psv
tabla: .word 0x0000,0x0000,0x0000,0x0030
.word 0x0000,0x0000,0x0000,0x00f0
.word 0x0000,0x0000,0x0000,0x03f0
.word 0x0000,0x0000,0x0000,0x0ff0
.word 0x0000,0x0000,0x0030,0x0030
.word 0x0000,0x0000,0x00f0,0x00f0
.word 0x0000,0x0000,0x03f0,0x03f0
.word 0x0000,0x0000,0x0ff0,0x0ff0
.word 0x0000,0x0030,0x0030,0x0030
.word 0x0000,0x00f0,0x00f0,0x00f0
.word 0x0000,0x03f0,0x03f0,0x03f0
.word 0x0000,0x0ff0,0x0ff0,0x0ff0
.word 0x0030,0x0030,0x0030,0x0030
.word 0x00f0,0x00f0,0x00f0,0x00f0
.word 0x03f0,0x03f0,0x03f0,0x03f0
.word 0x0ff0,0x0ff0,0x0ff0,0x0ff0
;---------------------------------------
maszk: .word 0x0ff0,0x0ff0,0x0ff0,0x0ff0
;---------------------------------------
A hozzászólás módosítva: Júl 12, 2016
A fenti kódot szándékosan írtam terjengősre, hogy jobban látszódjon a logika. Ha a táblázat értékei eleve maszkoltak (márpedig itt azok), és a maszkot az előző inverzére választjuk, akkor portonként 2 utasítás megspórolható:
;---------------------------------------
dekod: mov RSSI,w0
mov #psvoffset(tabla),w1
mov #psvoffset(maszk),w2
sl w0,#2,w0 ;*4
add w1,w0,w1
;-----------
mov LATA,w0
and w0,[w2++],w0
ior w0,[w1++],w0
mov w0,LATA
;-----------
mov LATB,w0
and w0,[w2++],w0
ior w0,[w1++],w0
mov w0,LATB
;-----------
mov LATC,w0
and w0,[w2++],w0
ior w0,[w1++],w0
mov w0,LATC
;-----------
mov LATD,w0
and w0,[w2++],w0
ior w0,[w1++],w0
mov w0,LATD
return
;---------------------------------------
.section .const,psv
tabla: .word 0x0000,0x0000,0x0000,0x0030
.word 0x0000,0x0000,0x0000,0x00f0
.word 0x0000,0x0000,0x0000,0x03f0
.word 0x0000,0x0000,0x0000,0x0ff0
.word 0x0000,0x0000,0x0030,0x0030
.word 0x0000,0x0000,0x00f0,0x00f0
.word 0x0000,0x0000,0x03f0,0x03f0
.word 0x0000,0x0000,0x0ff0,0x0ff0
.word 0x0000,0x0030,0x0030,0x0030
.word 0x0000,0x00f0,0x00f0,0x00f0
.word 0x0000,0x03f0,0x03f0,0x03f0
.word 0x0000,0x0ff0,0x0ff0,0x0ff0
.word 0x0030,0x0030,0x0030,0x0030
.word 0x00f0,0x00f0,0x00f0,0x00f0
.word 0x03f0,0x03f0,0x03f0,0x03f0
.word 0x0ff0,0x0ff0,0x0ff0,0x0ff0
;---------------------------------------
maszk: .word 0xf00f,0xf00f,0xf00f,0xf00f
;---------------------------------------
A hozzászólás módosítva: Júl 13, 2016
Idézet: „Egy nyelv alapvető tulajdonsága, hogy a szintaxisa kötött.”
Minden programnyelvre és beszélt nyelvre is igaz.
Idézet: „Az assembly egy gyűjtő fogalom a gépi kódok helyett a mnemonikok használatára.”
A mnemonikok használata csak egy dolog abból amit az assembly nyelv tud:
Direktívák használata a kód és a változók elhelyezésére, helyfoglalásra. Szimbólumok definiálási lehetősége, a szimlólumokkal műveletet végezhetők fordítási időben. Makro -k használata.
Ha elkészítenél egy ilyen fordító programot, a mnemonik - kód átalakítás lecserélésével át tudnád alakítani más kontrollerre, mikroprocesszorra.
Elég a makrok kihasználása, hogy a MpLab Assembler -ével más kontrollerre fordíts. A hozzászólás módosítva: Júl 13, 2016
Kicsit talán látványosabb példa a klasszikus BCD -> 7 szegmens dekódolás:
; BCD 7 szegmens dekódolás
LedTable
andlw 0x0f
addwf PCL, F ;add to PC low
;Szegmensek kbafgedc
retlw B'01110111' ;led drive for 0
retlw B'01000001' ;led drive for 1
retlw B'01101110' ;led drive for 2
retlw B'01101011' ;led drive for 3
retlw B'01011001' ;led drive for 4
retlw B'00111011' ;led drive for 5
retlw B'00111111' ;led drive for 6
retlw B'01100001' ;led drive for 7
retlw B'01111111' ;led drive for 8
retlw B'01111011' ;led drive for 9
retlw B'00000000' ;led drive for space
retlw B'00011111' ;led drive for b
retlw B'00110110' ;led drive for c
retlw B'01001111' ;led drive for d
retlw B'00111110' ;led drive for E
retlw B'00111100' ;led drive for F
Esetleg:
; BCD 7 szegmens dekódolás
;
LedTable
BRW
DT 0x11,0xB7,0xC1,0x83,0x27,0x0B,0x09,0x97,0x01,0x03,0x05,0x29,0x59,0xA1,0x49,0x4D
|
|