Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   679 / 1320
(#) dolfin válasza icserny hozzászólására (») Feb 19, 2010 /
 
Üdv

Igen const -al lehet állandót beírni és byte[x][y]-al lehet többdimenziós tömböt declarálni, csak én mindig féltem hogy nem fér bele ennyi adat a PIC-be, mert például egy 8x8-as ledmátrix egy képéhez 64 bit kell vagy 8x8x8 és akkor 8x8 a LED-ek állapota és az utolsó 8 a kép száma, ekkor 255 kép fér bele, ami 64x256bit = 2048 bájt + programkód és az ottnani változók tárolása, ami már egy 16f628a-ba nem fér bele... Mindegy, max kevesebb képet kell beleírni.
(#) watt válasza vaszil29 hozzászólására (») Feb 19, 2010 /
 
Meg van bocsátva!

Hol találtad a CNC áramkört(link?), nem volt ott hex állomány?
(#) watt válasza dolfin hozzászólására (») Feb 19, 2010 /
 
Hát lehet, hogy nem 628-at kell ilyen célra használni. Jobb ha körülnézel a 18F-es családban, azok között vannak elég nagy flash területü példányok.
(#) vicsys válasza watt hozzászólására (») Feb 19, 2010 /
 
Jól mondod! Pl.:18F2685. Külső memória alkalmazása (24LC256-24LC1025)...?
(#) szilva válasza vicsys hozzászólására (») Feb 19, 2010 /
 
A külső memóriának még tán az az előnye is megvan, hogy viszonylag könnyen cserélhető, vagy oldható meg, hogy több chip közül jumperekkel lehessen választani, így más megjelenítendő képeket betenni a program alá. A PIC-ben lévő programhoz meg nem is kell hozzányúlni.
(#) vicsys válasza szilva hozzászólására (») Feb 19, 2010 /
 
Sőt! Több darab is összefűzhető és nem kell jumper sem, mert címezhető...
(#) steev hozzászólása Feb 19, 2010 /
 
Sziasztok

Vettem két 64128F LCD kijelzőz 128x64es. Ez az adatlapja: Bővebben: Link

De nem akar életrekelni sehogy sem, a régebbi kijelőzmmel még elboldogultam (az is 124x64es volt), de ez nagyon szivat. Már több napja próbálgatom de egyik sem indul el. Az egész kijelzőn az összes pont világít, ha a kontraszt maxon van. Az E jel időzítését próbáltam már többfélekppen, 5ms-30ms ig, de semmi. Vagy az LCD meghajtófesz bekötésem nem jó (a Vout és a V0 közzé egy potméter, ahogy az adatlap mutatja) vagy időzítés vagy már fogalmam sincs...

Én kifogytam az 5letekből, a bekötés biztos jó, 5x átnéztem, de holnap tiszta fejjel nekifutok mégegyszer.

Esetleg nincs ötlete valakinek?
(#) gydanee hozzászólása Feb 19, 2010 /
 
Sziasztok!
Fel merült bennem egy-két nagyon kezdő kérdés, miközben a 44pin demo board példáit nézegettem.
A kód:
  1. cblock 0x20
  2. Delay1           ; Assign an address to label Delay1
  3. Delay2
  4. Display          ; define a variable to hold the diplay
  5.      endc
  6.      
  7.      org 0
  8. Start:
  9.      bsf       STATUS,RP0     ; select Register Bank 1
  10.      clrf      TRISD,0          ; make IO PortD all output
  11.      bcf       STATUS,RP0     ; back to Register Bank 0
  12.      movlw     0x80
  13.      movwf     Display
  14. MainLoop:
  15.      movf      Display,w      ; Copy the display to the LEDs
  16.      movwf     PORTD
  17. OndelayLoop:
  18.      decfsz    Delay1,f       ; Waste time.  
  19.      goto      OndelayLoop    ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
  20.      decfsz    Delay2,f       ; The outer loop takes and additional 3 instructions per lap * 256 loops
  21.      goto      OndelayLoop    ; (768+3) * 256 = 197376 instructions / 1M instructions per second = 0.197 sec.
  22.                               ; call it two-tenths of a second.
  23.      
  24.      bcf       STATUS,C       ; ensure the carry bit is clear
  25.      rrf       Display,f
  26.      btfsc     STATUS,C       ; Did the bit rotate into the carry?
  27.      bsf       Display,7      ; yes, put it into bit 7.
  28.      goto      MainLoop
  29.      end


Kezdeném is:
1. Delay1, Delay2 az mi szerint késleltet? Nincs meg adva sehol a kódban, a késleltetés értéke. Legalábbis én ezek után keresném.
2. A Display-t sem értem, hogy miért van az csak úgy ki írva az elejére, ráadásul semmi sincs utána.
A többi "részt" nagyjából értem.
Még az érdekelne, hogy ha már bemásoltam ebben a kódban, hogy hogy lehetne megoldani azt hogy ne az egész portD legyen használva, hanem mondjuk csak az első 4bit? Szóval 8 helyett, egy 4 LED-es futófényt kapjak.
Bocsi az amatőr kérdések miatt!
(#) potyo válasza gydanee hozzászólására (») Feb 19, 2010 /
 
Pont ugyanazekről volt szó itt a témában nemrég. Olvass vissza néhány oldalt vagy használd a keresőt.
(#) gydanee válasza potyo hozzászólására (») Feb 19, 2010 /
 
Tényleg volt róla szó, kerestem is. De nem kifejezetten az alapoktól, hanem inkább az alkalmazásáról. Igazam van hogy a Delay1 1ms-et késleltet? Vagy ez nem így működik?
(#) icserny válasza gydanee hozzászólására (») Feb 19, 2010 /
 
A CBLOCK utáni címkék egy-egy egybájtos változó részére rezerválnak helyet az adatmemóriában. Delay1 és Delay2 értéke azért nincs beállítva, mert az első használattól eltekintve nullától nulláig pörögnek körbe, azaz egy-egy 256 ciklust leszámláló programhurok ciklusváltozói lesznek.
Idézet:
„Igazam van hogy a Delay1 1ms-et késleltet?”
Nem, de oda van írva a ciklus mellé a megoldás: amíg Delay1 "körbefordul, 256 ciklus történik, s mindegyik három utasításciklust igényel. Ha 4 MHz-en fut a CPU, akkor ez 768 us, azaz 0,768 ms.
(#) trudnai válasza icserny hozzászólására (») Feb 19, 2010 /
 
Idézet:
„A CBLOCK utáni címkék egy-egy egybájtos változó részére rezerválnak helyet az adatmemóriában.”


Tenyleg tavol alljon tolem, hogy beleszoljak, de hadd jegyezzem meg, hogy a CBLOCK-kal epp a legnagyobb problemam, hogy az nem foglal le semmit a memoriaban. Az csupan egy konstans deklaralo direktiva (Constant Block --> CBlock), amit mellesleg szoktunk hasznalni a RAM cimek kiosztasara is. Ez ugyan megkonnyiti, de egyaltalan nem garantalja, hogy a generalt konstans ertekek valos RAM cimeket fognak kijelolni.
(#) watt válasza trudnai hozzászólására (») Feb 19, 2010 /
 
Az asm-ban nem lehet lefoglalni semmit, ezért nem értem miért emeled ezt ki. Itt nem árt, ha az ember tudja mit csinál, de ez benne a szép.
(#) gydanee válasza icserny hozzászólására (») Feb 19, 2010 /
 
Aha, most már világos! Köszönöm!
(#) trudnai válasza watt hozzászólására (») Feb 19, 2010 /
 
Linker scripttel lehet Tulajdonkepp az az egyetlen modja ennek. (Tudom, hagyjak mar fel ezzel mindorokre, de hat ez van )
(#) szilva válasza watt hozzászólására (») Feb 19, 2010 /
 
Lehet lefoglalni, ha linker scriptes módon írod a programodat. Ott majd a linker adja a címet a változóknak, és sikít, ha esetleg többet akarnál foglalni, mint amennyi hely van.
(#) potyo válasza trudnai hozzászólására (») Feb 19, 2010 /
 
Nekem egy dolog nem világos még. Hogyan kezeli le a linker az olyan dolgot, hogy ha a változó mondjuk bank2 területre kerül, akkor a kód előtte kiválassza a bank2-t, mielőtt hozzá akar férni?
(#) watt válasza trudnai hozzászólására (») Feb 19, 2010 /
 
Csak C-ben használom a linkert, ott se szívesen. Jobban szeretem, ha minden ott van ahol én akarom.
(#) trudnai válasza potyo hozzászólására (») Feb 19, 2010 /
 
Egyreszt BANKSEL makrot kell hasznalni, masreszt egy-egy data szekcioban garantalni lehet, hogy az egyetlen bankra fog esni. Tehat:
  1. TST_DATA    udata
  2. Counter     res    1
  3. adjust      res    1
  4.  
  5. TEMP_DATA   udata
  6. temp1       res    1
  7. temp2       res    1
  8. dLay200ms   res    1

Itt garantalt, hogy 'Counter' es 'adjust' mindig ugyanarra bankra fog kerulni, es az is, hogy 'temp1' ugyanarra amire 'temp2' illeve 'dLay200ms'.
(#) trudnai válasza watt hozzászólására (») Feb 19, 2010 /
 
Engem egyre kevesbe erdekel Ha sehol sem hasznalom ki, hogy kikenyszeritett cimre keruljon valami, akkor nem lehet baj -- ill ha igen akkor meg ott van a lehetoseg protected teruletek es szekciok letrehozasara.
(#) potyo válasza trudnai hozzászólására (») Feb 19, 2010 /
 
Ettől féltem, hogy muszáj BANKSEL. Csak az meg több kódot csinál, mint amit muszáj. Gondolom valamit valamiért...
(#) trudnai válasza potyo hozzászólására (») Feb 19, 2010 /
 
Az MPLAB helpjeben igy van a pelda program:

Idézet:
„This program demonstrates the udata directive, which declares the beginning of a section of uninitialized data. udata does not set (initialize) the starting value of the variables; you must do this in code.”

  1. #include p16f877a.inc  ;Include standard header file
  2.                          ;for the selected device.
  3. group1  udata  0x20      ;group1 data stored at locations
  4.                          ;starting at 0x20.
  5.   group1_var1  res  1    ;group1_var1 located at 0x20.
  6.   group1_var2  res  1    ;group1_var2 located at 0x21.
  7. group2  udata            ;Declaration of group2 data. The
  8.                          ;addresses for variables under
  9.   group2_var1  res  1    ;this data section are allocated
  10.   group2_var2  res  1    ;automatically by the linker.
  11. RST     CODE     0x0      ;The code section named RST
  12.                           ;is placed at program memory
  13.                           ;location 0x0. The next two
  14.                           ;instructions are placed in
  15.                           ;code section RST.
  16.      pagesel  start       ;Jumps to the location labelled
  17.      goto     start       ;'start'.
  18. PGM     CODE              ;This is the begining of the
  19.                           ;code section named PGM. It is
  20.                           ;a relocatable code section
  21.                           ;since no absolute address is
  22.                           ;given along with directive CODE.
  23. start
  24.   banksel  group1_var1
  25.   clrf  group1_var1    
  26.   clrf  group1_var2
  27.   banksel  group2_var1
  28.   clrf  group2_var1
  29.   clrf  group2_var2
  30.   goto  $                ;Go to current line (loop here)
  31.   end

UI: Watt, nezd meg hogyan kenyszeriti ki a group1-nel, hogy a 0x20-as cimre keruljon a csoport -- mint CBLOCK...
(#) icserny válasza trudnai hozzászólására (») Feb 19, 2010 /
 
Idézet:
„a CBLOCK-kal epp a legnagyobb problemam, hogy az nem foglal le semmit a memoriaban.”

Abban az értelemben "lefoglal", hogy ha elkezded, hogy CBLOCK 0x20, és egymás után írogatod a címkéket, akkor automatikusan növeli a címeket, és nem fogja három változónak is ugyanazt a címet kiosztani (ami az EQU-val történő definiálásnál figyelmetlenségből megeshet).

Ennél többet nem is várok tőle, s a három-négybájtnyi változóterületet használó LED villogtató assembly programok megértéséhez ennyi talán elég is.

A linker script tényleg jó dolog, csak annak az átlátásához nagyobb tudás, vagy több tapasztalat kell. Főleg, amikor testre kell szabni egy linker scriptet...
(#) trudnai válasza icserny hozzászólására (») Feb 19, 2010 /
 
Igazad van ilyen ertelemben, egyszeru dolgokhoz egyszerubb egy CBLOCK -- bar en ugy latom az egyszeruseget inkabb az okozza, hogy a forras file-on kivul nem kell mas, mig egy linker script eseteben kell a szkript file is.

A problemak a CBLOCK-kal amik igy hirtelen eszembe jutnak:

- CBLOCK kezdo cimet el lehet szurni (bar ugyanigy a linker szkript eseteben is lehet hibazni persze)
- Ha tul sok valtozot teszel oda, akkor nem veszi eszre, hogy a RAM teruletnek mar vege (pl. atnyulsz az overlay teruletre, ill 18F eseten epp kiesel belole, a fordito nem jelez hibat, azonaban a szoftver hibasan fog mukodni, vagy ami meg rosszabb latszolag helyesen)
- Ha tobb CBLOCK is van, akkor mar egyaltalan nem garantalhato, hogy a teruletek jol lesznek kiosztva (magyaran a kezdo erteket nehez jol beallitani, mindig figyelni kell ra az elozo CBLOCK hol ert veget)
- Tobb bank eseten nehez atlatni, hogy melyik CBLOCK tartozik mihez (legalabbis szerintem)
- Nehez overlay teruleteket definialni es azokat karban tartani
(#) Hp41C válasza gydanee hozzászólására (») Feb 19, 2010 /
 
Szia!

  1. CBLOCK 0x40
  2.  Buffer: .16
  3.  ReadPrt
  4.  WritePtr
  5.  Num
  6.  Last_Bank0:
  7. ENDC
  8.  if (Last_Bank0>0x70)
  9.   error "Túl sok változó van a 0. bankban"
  10.  endif


A fenti egy 16 byte-os buffert és három byte-os változót definiál ...

Szia
(#) vaszil29 hozzászólása Feb 20, 2010 /
 
Sziasztok!

Watt!
A kapcsolásom a neten találtam, de nem volt melette a PIC vezérlés codja.
A nyákot már 3/4-ig megterveztem aztán szitázom és marom.
Az alkatrészeket, már félig meddig beszereztem, de mitsem ér a kari a PIC vezérlés nélkül.
ebben a "pdf" ben van a kapcsi rajz.

Segítséged előre is köszi.

Üdv szabolcs
(#) vaszil29 hozzászólása Feb 20, 2010 /
 
Sziasztok!

Lehet,hogy baromságot kérdezek, de az iménti códot
nem lehet egy logikai változóval manipulálni?!
"mint a java-ban"
Ez alatt a "Boolean"- ra gondolok ami lehet "true" vagy "fals"
és mindig telyes értéket ad vissza
illetve, hogy tuti legyen a cód használaható e esetleg
setter, getter lekérdező és beálitó
ami utalhat egy osztályra "Class", vagy egy csomagra" is.
üdv szabolcs
(#) vicsys válasza vaszil29 hozzászólására (») Feb 20, 2010 /
 
WTF..? :wilting:
(#) watt válasza vaszil29 hozzászólására (») Feb 20, 2010 /
 
Idézet:
„Lehet,hogy baromságot kérdezek, de az iménti códot nem lehet egy logikai változóval manipulálni?!”

Egy szavadat sem értjük, ha nem használod a Válasz gombot, hogy tudjuk kinek és melyik írására válaszoltál.
(#) watt válasza vaszil29 hozzászólására (») Feb 20, 2010 /
 
Ha jól látom a rajz fejlécében a www.hobbycnc.hu oldalra hivatkoznak. Ott kell kódot keresned, mert mi nem tudunk adni nagy valószínűséggel, hacsak valaki meg nem építette ezt a kapcsolást közülünk, aminek kicsi az esélye.

Közben keresgéltem és ezt találtam:
Bővebben: Link
Itt elvileg minden megvan...
Következő: »»   679 / 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