Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   672 / 1320
(#) Attila86 válasza roland0327 hozzászólására (») Feb 13, 2010 /
 
Ha ilyen kérdéseket teszel fel akkor egyetlen LED bekapcsolásától még elég messze vagy. Olvasni, olvasni... :yes:
(#) roland0327 válasza Attila86 hozzászólására (») Feb 13, 2010 /
 
Köszi, már van segítségem
(#) sucuka hozzászólása Feb 13, 2010 /
 
Üdv!

Szeretnék egy kis segítséget kérni, illetve inkább egy dologra fényt deríteni.

Egy PIC16F628A PORTB kivezetéseire LED-ek vannak kötve 1-1 db 1k-s ellenálláson keresztül.
Az alább lévő kódot beírva a PIC-be szépen villognak is a LED-ek, egyetlen egyet kivéve: a 10. (RB4) lábra kötött LED sötét marad mindvégig. Máshová kapcsolva világít az is.
Tehát a kód:
  1. processor 16F628A
  2.         #INCLUDE "P16F628A.INC"
  3.  __CONFIG _HS_OSC&_CP_OFF&_WDT_OFF
  4.  
  5.     CBLOCK 0x10
  6.         T1
  7.         T2
  8.         ENDC
  9.  
  10.         ORG     0x0000
  11. START  
  12.         BANKSEL TRISB    
  13.         MOVLW   B'00000000'
  14.         MOVWF   TRISB
  15.         BANKSEL PORTB
  16.        
  17. VISSZ
  18.         MOVLW   B'11111111'
  19.         MOVWF   PORTB
  20.         CALL    DELAY
  21.         CLRF    PORTB
  22.         CALL    DELAY
  23.         GOTO    VISSZ
  24.        
  25.  
  26. DELAY:   MOVLW    D'1000'
  27.          MOVWF    T1
  28. DEL:     MOVLW    D'1000'
  29.          MOVWF    T2
  30. DEL1:    NOP
  31.          NOP
  32.          NOP
  33.          NOP
  34.          NOP
  35.          NOP
  36.          NOP
  37.          NOP
  38.          DECFSZ   T2,F
  39.          GOTO     DEL1
  40.          DECFSZ   T1,F
  41.          GOTO     DEL
  42.          RETURN
  43.          END


Mit rontottam el? (A PIC vadi új, még ki sem volt fordítva )
(#) bbalazs_ válasza sucuka hozzászólására (») Feb 13, 2010 /
 
Most csak emlekeimbol, de az ORG az tutti, hogy a 0000-n kezdodik? Nem 0008? vagy 0004?
Mert akkor nem jo helyrol indul a progi es a TRISB mas lehet.
Adatlapban nezz utana vagy mas peldaprogiban.

Vegso esetben lehet rossz az a kimenet is. Ha korabban valamivel leegetted (nekem is sikerult kezdo koromban, bemenetkent jo volt, de kimenetkent tobbet nem. Masik pic-el jo lett...)
(#) sucuka válasza bbalazs_ hozzászólására (») Feb 13, 2010 /
 
A kezdést megnézem, lehet, hogy igazad van, viszont két tök egyforma, egy időben vásárolt vadiúj PIC nem hinném hogy rossz
Köszi!
(#) kissi válasza sucuka hozzászólására (») Feb 13, 2010 /
 
Biztos, hogy 1000-et be lehet rakni az akkumulátorba ? A CBLOCK 0x10 szándékos volt, vagy itt sem tudod mit teszel ? És a konfigurációs bitekkel vajon mi van?

Olvass egy kicsit és szimuláld a működést is, mielőtt programozol !

Steve
(#) trudnai válasza sucuka hozzászólására (») Feb 13, 2010 /
 
Az a gyanum, hogy esetleg az LVP be van kapcsolva a configban. Probaldd meg kikapcsolni.
(#) trudnai válasza bbalazs_ hozzászólására (») Feb 13, 2010 /
 
Az ORG az csak egy direktiva, amelyik megmondja melyik kod teruletre (cimre) akarod helyezni a kodot. A reset vector a 0-s cimen talalhato, igy az ORG 0-val helyesen allitotta be a program kezdo cimet...
(#) Hp41C válasza sucuka hozzászólására (») Feb 13, 2010 /
 
Szia!

A 6. sorban van egy hiba, az általános célú RAM a 16F628A-n a 0x20 címtől kezdődik... Furcsa dolgokat csinálhat a delay rutinod, ha a két ciklusváltozó a T1CON és a TMR2...

Kapcsold ki az alacsony feszültségű programozási funkciót - ekkor szabadul fel az RB4 láb...


Szia
(#) AM2k válasza sucuka hozzászólására (») Feb 13, 2010 /
 
@sucuka:
Ez meg mi?:
  1. MOVLW    D'1000'

  1. Syntax: [ label ]    MOVLW   k
  2. Operands: 0 ≤ k ≤ 255


Viszont nekem is lenne egy kérdésem:
Miért nem tölti fel értékkel a Delay1,Delay2 változókat?
Lefordítom és müxik így is. Tud erre vki magyarázatot adni?
  1. cblock 0x20
  2. Delay1                
  3. Delay2                
  4.      endc
  5.      
  6.      org 0
  7. Start:
  8.      bsf       STATUS,RP0
  9.      bcf       TRISC,0      
  10.      bcf       STATUS,RP0
  11. MainLoop:
  12.      bsf       PORTC,0    
  13. OndelayLoop:
  14.      decfsz    Delay1,f  
  15.      goto      OndelayLoop
  16.      decfsz    Delay2,f        
  17.      goto      OndelayLoop
  18.                                    
  19.      
  20.      bcf       PORTC,0    
  21. OffDelayLoop:
  22.      decfsz    Delay1,f  
  23.      goto      OffDelayLoop
  24.      decfsz    Delay2,f
  25.      goto      OffDelayLoop
  26.      goto      MainLoop
  27.      end
(#) kissi válasza AM2k hozzászólására (») Feb 13, 2010 /
 
A digitális technikában nincs olyan, hogy "nem tölti fel", ne felejtsd el, hogy mindig van benne valami, legfeljebb nem az, amit te szeretnél , így is működhet csak nem annyi ideig, vagy nem annyiszor, stb. --> vagyis a működés véletlenszerű (induláskor, később meg amennyi marad benne, pl. 0!) !

Steve
(#) trudnai válasza AM2k hozzászólására (») Feb 13, 2010 /
 
Idézet:
„Miért nem tölti fel értékkel a Delay1,Delay2 változókat?
Lefordítom és mü*ik így is. Tud erre vki magyarázatot adni?”


Azert, mert ugyis tul fog csordulni 0-ra, igy felesleges megint 0-t bele pakolni...

[OFF]Hmm, nekem nem kuldte el a valaszt, mert a csillag helyen egy X volt es emiatt a szo blokkolva volt -- Te hogyan kuldted el megis a kerdest?
(#) sucuka válasza AM2k hozzászólására (») Feb 13, 2010 /
 
Idézet:

@sucuka: Ez meg mi?:
  1. MOVLW    D'1000'


Valósznűleg egy lelkes kezdő hülyesége... bocsi
(#) sucuka válasza Hp41C hozzászólására (») Feb 13, 2010 /
 
Igazad van, köszi, javítottam!
(#) sucuka válasza kissi hozzászólására (») Feb 13, 2010 /
 
A konfigurációs bitekkel mi a gond? Így nem definiálhatóak:

  1. __CONFIG _HS_OSC&_CP_OFF&_WDT_OFF
(#) kissi válasza sucuka hozzászólására (») Feb 13, 2010 /
 
Én is az LVP-re akartam felhívni a figyelmedet, de lehet, hogy nagyon "virágnyelven" volt...

Steve
(#) sucuka válasza kissi hozzászólására (») Feb 13, 2010 /
 
Okés, már megvan, köszi.
De jobban szeretem, ha "nevén van nevezve a ...".
(#) AM2k válasza kissi hozzászólására (») Feb 13, 2010 /
 
Az a poén, hogy ezt PICkit2 tréning anyagaiból ollóztam ki. (kb 6 év után most kezdek újra neki a PIC-ezésnek, mondjuk annak idején is csak alapokat ismertem meg, de sokat felejtettem a kevésből is )
Akkor azt mondod ha túlcsordul akkor '11111111' lesz bent?

Még egy kérdés, MPLAB-ban be lehet állítani valahogy, hogy az editor mutassa a sorok számozását?

@trundai - nem tudom, hogyan sikerült
(#) trudnai válasza sucuka hozzászólására (») Feb 13, 2010 /
 
Idézet:
„De jobban szeretem, ha "nevén van nevezve a ...".”


En neven neveztem...

Amugy akkor attol megjavult?
(#) sucuka válasza trudnai hozzászólására (») Feb 13, 2010 /
 
Most próbálom, de előbb a szimulátor...
Nagyon jó lett, működik, bár lehetne lassabb is. Most ez következik....

@AM2k:
Jobbklikk az editor ablakban, Properties, majd 'ASM File types' és ott az első checkbox kapcsolja a sorszámozást.
(#) trudnai válasza AM2k hozzászólására (») Feb 13, 2010 /
 
Idézet:
„Akkor azt mondod ha túlcsordul akkor '11111111' lesz bent?”


Olvasd el az adatlapban a DECFSZ utasitast. Mikor 1-rol lecsokken 0-ra, akkor ugye mar nem fogja a mogotte levo utasitast vegrehajtani. Emiatt a valtozoban 0 lesz... Legkozelebb meg azzal kezdi ugye, hogy 0-t csokkenti, es akkor fog tulcsordulni B'11111111' -re, magyaran 256-ot szamol igy a ciklus minden esetben... Ill. nem minden esetben, mert nincs az elejen inicializalva, akkor meg nem garantalt, hogy 0 lesz ott -- igy az elejen lehet kevesebbet szamlal, es lesz egy kis hiba, de az meg kit erdekel, nem igaz?
(#) kissi válasza sucuka hozzászólására (») Feb 13, 2010 /
 
OK, de szerettem volna, ha elgondolkozol rajta ( akkor legközelebb újra eszedbe jut biztosan ) !

Steve
(#) sucuka válasza kissi hozzászólására (») Feb 13, 2010 /
 
Ne izgulj, így is egy életre megtanultam
(#) sucuka hozzászólása Feb 13, 2010 /
 
Ismét egy kérdés kedves urak!

Szintén LED-villogtatás, csak most másképp:

  1. processor       16F628A
  2. #INCLUDE        "P16F628A.INC" 
  3. __CONFIG        0x332A 
  4.  
  5. ;-------------------------------------
  6.         CBLOCK 0x20
  7.                 A
  8.         ENDC
  9.         ORG     0000                    ;kezdőcím ahonnan indul a program
  10.         GOTO    SETUP           ;címkéhez ugrás
  11. ;-------------------------------------
  12. SETUP
  13.         BANKSEL TRISB           ;TRISB regiszter kiválasztása
  14.         MOVLW   B'00000000'     ;bináris érték beírása W regiszterbe
  15.         MOVWF   TRISB           ;PORTB átállítása kimenetté
  16.         CLRF    PORTB           ;PORTB regiszter törlése
  17.         BANKSEL PORTB           ;PORTB regiszter kiválasztása
  18.         GOTO    PROGRAM         ;címkéhez ugrás
  19. ;-------------------------------------
  20. PROGRAM
  21.         MOVLW   B'11111111'     ;bináris érték beírása W regiszterbe
  22.         MOVWF   PORTB           ;W regiszter kiírása a PORTB-be
  23.         CALL    TIME            ;rutin hívása
  24.         MOVLW   B'00000000'     ;bináris érték beírása W regiszterbe
  25.         MOVWF   PORTB           ;W regiszter kiírása a PORTB-be
  26.         CALL    TIME            ;rutin hívása
  27.         GOTO    PROGRAM         ;címkéhez ugrás
  28. ;-------------------------------------
  29. TIME
  30.         MOVLW   D'255'          ;decimális érték beírása W-be
  31.         MOVWF   A                       ;W értékének írása "A"-ba
  32. X       DECFSZ  A,F                     ;csökkentjük az "A" értékét, ha 0 lesz, akkor ugrás
  33.         GOTO    X                       ;címkéhez ugrás
  34.         RETURN                          ;rutinból vissza
  35. ;-------------------------------------
  36.         END


Ez a kód a szimulátorban működik, élesben pedig minden LED világít folyamatosan, tán túl gyors lenne, és azért nem látom?
(#) Braf válasza sucuka hozzászólására (») Feb 13, 2010 /
 
Igen túl kevés időt vársz a TIME rutinban. Ha 4mhz-en járatod a pic et, akkor ez mindössze ~750uS.
A 17. és a 18. sor cseréljen helyet.
11. sor felesleges.
(#) sucuka válasza Braf hozzászólására (») Feb 13, 2010 /
 
Hát ez az... akkor már értem.
8Mhz-es quartz van ráakasztva, tehát ennek az időnek a fele.
Akkor megnyújtom az időzítést egy kicsit.
(#) zenetom válasza bodgabo hozzászólására (») Feb 14, 2010 /
 
Köszi, de messzebb lakok egy csöppet

Ez mindenkinek szól:
Watt kapcsolásán ez az egyszerű LPT-s égetővel akarom felprogramozni a 18F2550-et. A WinPIC800 progi támogatja is, a kérdésem: ez az egyszerű áramkör is fel tudja programozni?
(#) sucuka válasza zenetom hozzászólására (») Feb 14, 2010 /
 
Szia!

Igen, fel tudja, én pl. egy 18F4550-et programoztam vele.
(#) Amarton válasza sucuka hozzászólására (») Feb 14, 2010 /
 
Itt is van egy kis logikai hiba.
A 17. sorban először törlöd a PORTB-t, holott még másik bankban vagy, és ezután váltasz bankot.
(#) sucuka válasza Amarton hozzászólására (») Feb 14, 2010 /
 
Igen, már észrevettem, meg más is említette.
Ez így szokott lenni, ha az ember lusta írogatni, és kimásol-beilleszt módon ügyködik Főleg éjfél körül...
Következő: »»   672 / 1320
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