Fórum témák

» Több friss téma
Fórum » PIC programozás
 
Témaindító: G-Lex, idő: Okt 24, 2005
Lapozás: OK   9 / 66
(#) novarobot válasza mgabesz hozzászólására (») Feb 9, 2009 /
 
Sajnos a program amit ajánlottál számomra teljesen érthetetlen, feltettem, de a demók megnézegetésén kívül nem tudtam semmit kezdeni vele.

Ma veszem meg a 16F628a picet (90huf+áfa ) és jönek az igazi pic gyakorlatok.

Lassan haladok a assembly kóddal (persze még csak ledeket kapcsolgatok a szimulátorban), van két problémám,
1. hogyan kell saját regisztert lefoglalni (2db 8 bites regisztere lenne szükségem, maincim és egy mainverem néven).
2. sikerült odáig eljutnom hogy kiválasztottam a pic melyik lába legyen bemenet és melyik kimenet, de a bemenetekről nem tudok adatokat beolvasni. Itt a kód amivel próbálom
  1. ORG     0               ;              
  2.         GOTO    START           ;
  3. START   banksel trisb           ;
  4.         MOVLW   B'00000000'     ;
  5.         movwf   trisb           ;
  6.         banksel portB           ;
  7. MAIN    MOVLW   PORTA           ;sort lecserélem movlw b'11111111're akkor felkapcsolja rendesen az őszes ledet.
  8.         MOVWF   PORTB           ;
  9.         GOTO    main;           ;
  10.         END

A MOVLW PORTA;Mindig a port cimét(00000101) adja vissza nem pedig a tartalmát akárhogyan próbálom
Kéne még egy kis help a profiktól Novarobot
(#) potyo válasza novarobot hozzászólására (») Feb 9, 2009 /
 
Amelyik utasítástban L szerepel, az mindig konstansal csinál valamit. Tehát ha azt írod, MOVLW PORTA, akkor az a PORTA címét tölti be, nem a tartalmát. A MOVF utasítások töltik a tartalmakat (L=literal, F=file).

Szerintem nézz meg egy programot, hogy hogyan épülnek fel. Pl. itt van az a program, amin én tanultam annakidején a piceket (ez ma is működik az áramkörben). Ebben még én is MOVFW-t használtam, de ilyen utasítás valójában nincs, hanem MOVF van, és annak a regisztercímen kívül vagy egy második paramétere, ami azt adja meg, hogy a W-be, vagy vissza a regiszterbe kerüljön a tartalom. Tehát MOVFW akarmi helyett MOVF akarmi, W utasítást kell írni. Persze az előzőt is elfogadja az MPLAB, lecserélni az utóbbira.

A portok gyakran tartalmaznak analóg perifériákat, amiket le kell kapcsolni ahhoz, hogy digitális célra tudjuk használni a lábakat. 16F628A-nál úgy emlékszem, csak komparátor van, de az adatlap IO Ports részében nézz utána, hogy mi van, és ott találsz kódmintát is, hogy hogyan kell azokat kikapcsolni a digitális működéshez.

main.asm
    
(#) novarobot válasza potyo hozzászólására (») Feb 9, 2009 /
 
Köszi most már jó az adatbekérés, de sajnos az a program amit te adtál nem fut le, a fordító amit használok azt írja hogy 340 hiba van benne.
Szerintem a c blokkal van a baja ezért nem megy (gondolom ezért csinálja azt is hogy a netten talált mintaprogramok közül is csak 100 ból egyet futtat le).
Mplab al biztos lelehetne futtatni, de azt nem tudom használni.
Nem tudod hogyan lehetne sima assembly ben lefoglalni a változókat, és hogyan lehetne megoldani a megszakítás vezérlést hogy ha a porta 0. bitje és a porta 1. bitje változik hajtson végre egy egy kódsort, egyébként meg legyen sleep ben?
Novarobot
(#) potyo válasza novarobot hozzászólására (») Feb 9, 2009 /
 
Ahhoz olyan láb kell, ami tud megszakítást generálni. INTx-el jelölik ezeket a lábakat.

Ezt a cikket olvastad már? http://www.hobbielektronika.hu/cikkek/nullarol_a_robotokig_-_pic_mi...z.html
(#) novarobot válasza potyo hozzászólására (») Feb 9, 2009 /
 
Pontosan erre volt szükségem :yes: !
Elkezdtem elmélyülni a dologban, és ugylátam egész jól leirja az mplab használatát is, ezért viszatérek arra ahol már c blokokal lehet változót deklarálni.
Csak kiváncsiság kedvéért tényleg nem lehet assemblyben 2db 8 bites regisztert lefoglalni, csak c kódal?
Novarobot
(#) icserny válasza novarobot hozzászólására (») Feb 9, 2009 /
 
Idézet:
„Csak kiváncsiság kedvéért tényleg nem lehet assemblyben 2db 8 bites regisztert lefoglalni, csak c kódal?”


Már hogyne lehetne! PIC12F675-nél 0x20 címen kezdődik a tárterület, ezért CBLOCK 0x20 állítja be a kezddőcímet:

  1. #include <p12F675.inc>
  2.      __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF )
  3.  
  4. ; Variable definitions
  5.      cblock 0x20
  6. DataHi                        ;  Input data register (16 bits)
  7. DataLo
  8. Bitcount                      ; bit counter
  9. TestMode                      ; 0: normal 1: test mode
  10.      endc
  11.  
  12.      org 0x00
  13. ; Program starts here after a Power On Reset
  14.     goto Main
  15.     .....
  16. stb.

(#) novarobot válasza icserny hozzászólására (») Feb 9, 2009 /
 
Csak ez sem jó, mplab szereti, de amit használok a grafikus pic tesztelésre az nem eszi meg.
Szerintem azért (bár lehet hogy tévedek). mert ez c kód, hisz ott van benne hogy c blok meg endc tehát a kettő közötti rész c ben van nem pedig assembly ben.

Én arra gondoltam meglehet-e? tisztán assemblyben csinálni és akkor nem kéne a mplabal szenvednem, bár már valószínűleg mindegy mert ha lesznek benne megszakítások úgyis szenvednem kell vele.
Lehet hogy megszakítások helyet rányomok egy végtelen ciklust és figyelem változott-e valamelyik bit aztán ha igen elküldöm a megfelelő szubrutinba.
A baj az hogy akkor kell 2db 8 bites regiszter amiben tárolom az előző értékeket, hogy mihez képest változott-e, aminek nem tudom a assembly kódját.
Így nem kéne mplabal szenvedni, persze az lenne a legjobb hogyha sima assemblybe megtudnám írni a megszakításokat is de az egy kezdőnek nagyon bonyolult.
Mplab ra meg nem szeretnék vissza térni, mert nagyon nem megy és az amit most használok (link) az szépen folyamatosan mutatja hogy melyik lábon milyen jelszint van.
Így sokkal könnyebb programozni, és van egy táblázatom melyik parancs mit csinál assemblyben amivel meg lehet írni ezt az egyszerű kis pogit ami elvégzi amit kell, ha picit lassabban is .

Novarobot
(#) potyo válasza novarobot hozzászólására (») Feb 9, 2009 /
 
Pedig hidd el, jobban járnál az MPLAB-al. Amit te csinálsz, pont az az, ami nem assembly. Amit mi ide beírtunk kódokat, az az assembly, és semmi közük a C-hez mint programozási nyelvhez. Az MPLAB által generált hex fájlt bele lehet tölteni az Oshon szimulátorába is, ha nagyon azzal akarod nézni, hogy mit csinál.
(#) novarobot válasza potyo hozzászólására (») Feb 9, 2009 /
 
Köszi, akkor marad az mplab, próbálkozok, az a leírás amit kaptam linkben jónak tűnik.
Még egy kérdés, akkor most milyen programozót használjak, jó az a számomra nagyon szimpatikus lpt-s vagy keresnem kell egy másikat .
(#) potyo válasza novarobot hozzászólására (») Feb 9, 2009 /
 
A 16F628A-hoz jó lesz ez, hogy most el birj kezdeni gyakorolni, de a 18F24K20-hoz már nem lesz jó. Így jó lenne, ha mindjárt rendelnél egy Pickit2-t is a chipcad-től. Azt később sem bánod meg.
(#) menyus hozzászólása Feb 9, 2009 /
 
SziasztokT

A másik PIC topik kihalt, ezért megpróbálom ide feltenni a kérdésemet. USART on próbálok adatot fogadni egy GSM modultól PIC16F628A val, de nem jön össze a dolog sehogysem. Egyelőre írtam egy teszt progit amit innen onnan ollóztam össze. Ránéznétek hogy jó e ez így? Mert bármit csinálok nem működik, pedig ha szkóppal nézem jön adat a modul felől.

INI BANK1

MOVLW B'00000000'
MOVWF TRISA
MOVLW B'00000010'
MOVWF TRISB

MOVLW B'00001000'
MOVWF PCON

MOVLW D'25' ;BAUD RATE (D'12'=19200) (D'25'=9600 )
MOVWF SPBRG
BSF TXSTA,2 ;"H" SEBESSÉG
BCF TXSTA,4 ;ASZINKRON ÁTVITEL
BCF TXSTA,6 ;8 BITES ADATKÜLDÉS
BCF TXSTA,5 ;TX TILTVA
BSF PIE1,RCIE ; USART VÉTEL MEGSZAKÍTÁS ENGEDÉLYEZÉS
MOVLW B'10000000'
MOVWF OPTION_REG
CLRF VRCON
BANK0
BSF RCSTA,SPEN ; SOROS PORT ENGEDÉLYEZÉSE
BCF RCSTA,RX9 ; 8-BITES VÉTELI MÓD
BSF RCSTA,CREN ; FOLYAMATOS VÉTELI MÓD ENGEDÉLYEZÉSE
BCF RCSTA,ADEN ; ADE NEM OKOZ MEGSZAKÍTÁST
MOVLW B'10000011' ;KÉT DB KOMPARÁTOR ÖSSZEKÖTÖTT/KÖZÖS REFERENCIÁVAL
MOVWF CMCON
BSF INTCON, ;MEGSZAKÍTÁSOK TILTÁSA (GIE)



USARTRX
BTFSS PIR1,RCIF ; USART MEGSZAKITAS FLAG VIZSGALATA
GOTO USARTRX
MOVF RCREG,W ; RCREG TARTALMA A "W" BE
MOVWF TSZ1 ; W TARTALMA A TSZ1 BE
BSF PORTB,3 ;ADAT A TSZ1 BEN KIJELZÉSE
CALL DELAY3
BCF PORTB,3
GOTO USARTRX

Köszönöm előre is.
(#) novarobot hozzászólása Feb 9, 2009 /
 
Sos Hogy a francba kell lefordítani a mblab ban hex re az asm filet ,
hex filet már bármilyen égetőprogrammal beégethetem?
(#) potyo válasza novarobot hozzászólására (») Feb 9, 2009 /
 
Project->Build, vagy valami ilyesmi, fejből nemtudom pontosan.
(#) novarobot válasza potyo hozzászólására (») Feb 9, 2009 /
 
Most akkor melyik, mert már végigpróbáltam az összeset (utálom az mplabot enyi menü meg izé és még a legegyszerüb dolog is iszonyat bonyolut számomra benne )

mplab.jpg
    
(#) potyo válasza novarobot hozzászólására (») Feb 9, 2009 /
 
A Build All és a Make is jó (nemtudom én sem, mi a különbség közöttük).
(#) icserny válasza novarobot hozzászólására (») Feb 9, 2009 /
 
Idézet:
„mert ez c kód, hisz ott van benne hogy c blok meg endc tehát a kettő közötti rész c ben van nem pedig assembly ben.”

Megnyugtatlak, hogy assembliben van! Lásd a tegnap már ajánlott dokumentációt az MPLAB telepítési könyvtárában...
(#) novarobot hozzászólása Feb 9, 2009 /
 
Ez mind jó csinálnak.make .akármi filet de hex et egyik sem.
(#) Markota hozzászólása Feb 9, 2009 /
 
Hello!

Eddig építettem már jópár vizirakétát, de olyat még sosem sikerült amin az ernyő, mindig kinyílna rendesen.
Most végre találtam egy leírást amivel végre meg lehet csinálni. Ezzel csak annyi a gondd, hogy a fedélzeti computer-ben van egy pic, amit sajnos nem tudok felprogramozni. Ezért szeretnék valakit megkérni, hogy égesse bele a programot a PIC-be. (PIC16F628A)
Előre is köszi a segítséget!
Van még egy dolog. Hol tudnék venni olcsó servo-motort hozzá? A lényeg, hogy minél kisebb legyen.
(#) MPi-c válasza menyus hozzászólására (») Feb 9, 2009 /
 
Üdv!
Biztos a másik topokban olvasta volna valaki...

Ránézve a programodra, csak hirtelenjében: a USART vétel megszakítása engedélyezett, vagy nem?
Az engedélyezéshez a PIE1 regiszter RCIE bitjén kívül 1-be állítani az INTCON regiszter PEIE és a GIE bitjeit is. Az utobbira azt írod "megszakítások tiltása" de előtte egy befejezetlen utasítássor van, melyben viszon valamelyik bitet egyre állítanál...

Az USARTRX cimkével jelzett rész meg így elég furcsa. Ha a megszakítást engedélyezve van, akkor azt nem így kellene kezelni.
Jó sokszor volt már szó az USART kezeléséről a másik topikban. Majd próbálok én is keresni...
(#) potyo válasza novarobot hozzászólására (») Feb 9, 2009 /
 
Az Output ablakban írja, hogy sikeres volt a fordítás vagy nem. Ha nem sikeres, akkor nincs hex fájl sem.
(#) icserny válasza novarobot hozzászólására (») Feb 9, 2009 /
 
Idézet:
„Még egy kérdés, akkor most milyen programozót használjak”

Fizikailag a VDD-t és Vpp-t kell, hogy adja a programozó, valamint a PGC, PGD logikai jelszinteknek is össze kell jönnie a PIC szintjeivel. Ezért mondtam, hogy az 5V-os keytere a 3,3 V-os PIC-ekhez nem használható....

Ezenkívül szoftveresen a beégető programnak ismernie kell az adott vezérlőt. Tehát pl. WinPIC800 (vagy az Oshonsoft programját) megnézve feltűnően árulkodik, hogy az adott PIC kiválasztható-e a listájából, vagy nem.

Az általad kinézet programozó a 16F és az 8V-os 18F PIC vezérlőkhöz jó.
(#) icserny válasza novarobot hozzászólására (») Feb 9, 2009 /
 
Idézet:
„Ez mind jó csinálnak.make .akármi filet de hex et egyik sem.”

Nyilván hibára futottak, lásd Output ablak.
(#) icserny válasza Markota hozzászólására (») Feb 9, 2009 /
 
Idézet:
„a fedélzeti computer-ben van egy pic, amit sajnos nem tudok felprogramozni”

Dehogynem! Ennek a leírásnak a segítségével te is meg tudod csinálni!
(#) novarobot válasza icserny hozzászólására (») Feb 9, 2009 /
 
Az otput ablakban szerintem azt irja hogy sikeres volt a fordítás (bár nemtudok angolul,)
  1. Release build of project `D:\Documents and Settings\Juhász Bálint Ig\Asztal\mplabproj\teszt.mcp' started.
  2. Mon Feb 09 15:39:27 2009
  3. ----------------------------------------------------------------------
  4. Make: The target "D:\Documents and Settings\Juhász Bálint Ig\Asztal\mplabproj\main.o" is up to date.
  5. Make: The target "D:\Documents and Settings\Juhász Bálint Ig\Asztal\mplabproj\teszt.cof" is up to date.
  6. Loaded D:\Documents and Settings\Juhász Bálint Ig\Asztal\mplabproj\teszt.cof.
  7. ----------------------------------------------------------------------
  8. Release build of project `D:\Documents and Settings\Juhász Bálint Ig\Asztal\mplabproj\teszt.mcp' succeeded.
  9. Mon Feb 09 15:39:30 2009
  10. ----------------------------------------------------------------------
  11. BUILD SUCCEEDED
(#) potyo válasza novarobot hozzászólására (») Feb 9, 2009 /
 
Csináld az egészet olyan helyen, ahol nincs szóköz, magyar betű, ilyesmi az elérési útban. Meg ne legyen az egész elérési út hosszabb 60 karakternél. Pl. c:\pic biztosan jó lesz.
(#) novarobot válasza potyo hozzászólására (») Feb 9, 2009 /
 
Én voltam a béna, csak másik mappába mentette, most már jó
(#) menyus válasza MPi-c hozzászólására (») Feb 10, 2009 /
 
Szia!

Az USART RX engedélyezve van a 13. sorban. (BSF PIE1,RCIE ) A befejezetlen sort véletlenül felejtettem benne a programban, már észrevettem és kivettem a felesleges sorokat. (nem használom a komparátorokat.) A GIE ÉS A PEIE bitet nem kapcsoltam be mert itt, ( az oldal alján ) azt írják : "A jelzőbitek a megszakításforrás engedélyezettségétől függetlenül működnek, tehát minden esetben jelzik az adott esemény létrejöttét. " Megszakítást nem használok, az RX flagjét pollozom. Ettől függetlenül most ki fogom próbálni hogy mégis bekapcsolom a megszakítást, és az INT et lekezelem egy szimpla RETFIE al. Kiváncsi leszek mit csinál.

Köszönöm a választ.
(#) potyo válasza menyus hozzászólására (») Feb 10, 2009 /
 
Nem biztos, de nem lehet, hogy az RCIF bitet törölni kellene?
(#) menyus válasza potyo hozzászólására (») Feb 10, 2009 /
 
Próbáltam úgy is, de nem megy akkor sem. A PORTB3 ra kötött LED nem világít, a program megakad az RCIF pollozásánál, nem jelez a flag. Ha jelezne és nem törölném a bitet, folyamatosan világítania kéne. Ezért tettem bele kínomban ezt a kijelzést hogy lássam mit csinál. (Igazság szerint a LED a flag állapot változását jelzi nem pedig azt hogy valóban a TSZ1 be került az adat...) Kezdek gyanakodni hogy valami hardveresen nem jó... A modul és a mikrovezérlő egy tápról járnak, a RX / TX lábak keresztbe vannak kötve direktben. Elvben a PIC és a modul közé nem kell semmi, a TX pedig működik.Lehet hogy hibás a PIC?
(#) menyus válasza menyus hozzászólására (») Feb 10, 2009 /
 
illetve villognia kéne ...
Következő: »»   9 / 66
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