|
Szerző |
Üzenet |
nagyan
vas-tag
Csatlakozott: vas. ápr. 01, 2007 23:19 Hozzászólások: 8
|
Sziasztok!
Bocsi, vitatkoznom kell. Az RCIF bit read-only, magától törlődik ha nincs karakter a vételi bufferben. Tuzdom hogy a többi megszakítási flaget nekem kell törölni, ezt ahogy én látom nem. Ez van a PIC16F690 manuálban:
The RCIF interrupt flag bit of the PIR1 register is set
whenever the EUSART receiver is enabled and there is
an unread character in the receive FIFO. The RCIF
interrupt flag bit is read-only, it cannot be set or cleared
by software.
RCIF interrupts are enabled by setting the following
bits:
• RCIE interrupt enable bit of the PIE1 register
• PEIE peripheral interrupt enable bit of the
INTCON register
• GIE global interrupt enable bit of the INTCON
register
The RCIF interrupt flag bit will be set when there is an
unread character in the FIFO, regardless of the state of
interrupt enable bits.
De a programnak mennie kell, mert utasításról-utasításra lépkedve leellenőriztem PIC Simulator IDE-val.
Watt köszi a tippeket, assemblyben nem vagyok járatos...még.
|
hétf. ápr. 02, 2007 7:41 |
|
|
watt
gyémánt tag
Csatlakozott: szer. nov. 01, 2006 14:00 Hozzászólások: 3559 Tartózkodási hely: Régi nick .watt Hozzászólások: 3402
|
nagyan
Ha elfogadsz még egy kis segítséget, a karaktereket be lehet írni így is:
Meg lehet ilyen okosságokat is csinálni: Kód: RS_KÜLD MACRO KARAKTER MOVLW KARAKTER CALL RS232_KÜLD ENDM A szubrutin, ami a makróban van: Kód: RS232_KÜLD BTFSS PIR1,TXIF ; KÜLDÉS LEHETŐSÉGÉT JELZŐ BIT (HA LEHET, AKKOR A BIT = TRUE) GOTO RS232_KÜLD MOVWF TXREG ; KARAKTER KIVITELE RETURN Amit így lehet meghívni: Kód: RS_KÜLD 'A' RS_KÜLD 'N' RS_KÜLD 'D' RS_KÜLD 'R' RS_KÜLD 'Á' RS_KÜLD 'S'
Bocs a magyarért!
Természetesen ezt a megoldást csak akkor édemes használni, ha kevés és egyedi jeleket akarunk küldeni. Ha karakter láncot, vagy több adatot akarunk, akkor érdemes azokat a memóriában elhelyezni, és indirekt címzéssel egymás után elküldeni egy ciklusban. Ha van kérdésed, ne fogd vissza magad!
|
hétf. ápr. 02, 2007 5:21 |
|
|
watt
gyémánt tag
Csatlakozott: szer. nov. 01, 2006 14:00 Hozzászólások: 3559 Tartózkodási hely: Régi nick .watt Hozzászólások: 3402
|
potyo írta: A megszakítási rutin végéről hiányzik a BCF PIR1, RCIF utasítás, különben megdöglik ott a program.
Esetleg még a miértről annyit, hogy a megszakítás jelzők nem törlődnek maguktól és ha egy jelet nem törlök, akkor az természeténél fogva megszakítást okoz, rögtön a RETFIE után, azaz beragad a megszakításba a prog...
potyo
Egyébként Te szoktál aludni?
|
hétf. ápr. 02, 2007 5:06 |
|
|
potyo
gyémánt tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 3691 Tartózkodási hely: Ada
|
A megszakítási rutin végéről hiányzik a BCF PIR1, RCIF utasítás, különben megdöglik ott a program.
|
hétf. ápr. 02, 2007 0:33 |
|
|
nagyan
vas-tag
Csatlakozott: vas. ápr. 01, 2007 23:19 Hozzászólások: 8
|
Sziasztok!
A programkód (bocs, egy kicsit hosszú, meg bocs az angolért) :
Kód: #include <p16F690.inc> __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
cblock 0x20 Byte_to_send W_save STATUS_save Delay1 endc
org 0 nop goto Start org 4 ; Interrupt vector movwf W_save ; Save W reg movf STATUS,0 ; Save status reg movwf STATUS_save movf RCREG,W ; Receiving the byte what is arrived movwf Byte_to_send ; and put it into the register
movf STATUS_save,W ; Restore STATUS and WREG movwf STATUS movf W_save,W retfie
Start call Select_bank1 bsf OSCCON,6 ; Setting the internal oscillator to 2 MHz bcf OSCCON,5 ; Setting --""-- bsf OSCCON,4 ; Setting --""-- CLRF TRISC ; Port C all output CLRF TRISB ; Port B all output CLRF TRISA ; Port A all output bsf INTCON,GIE ; Enabling global interrupts bsf INTCON,PEIE ; Enabling peripherial interrupts bsf PIE1,RCIE ; Enabling the receiver interrupt CLRF SPBRGH ; Setting up baud_rate to 9600 at 2 MHz bsf TXSTA,BRGH ; Setting up baud rate bcf TXSTA,BRG16 ; Setting up baud rate bcf TXSTA,SYNC ; Setting up for asynchronous operation movlw d'12' movwf SPBRG ; Setting up baud rate... call Select_bank0 bsf RCSTA,SPEN ; Setting up USART bsf RCSTA,CREN ; Enabling the receiver call Select_bank1 bsf TXSTA,TXEN ; Enabling the transmitter call Select_bank0
call Delay_a_round movlw d'79' movwf TXREG ; Sending the char 'O' call Wait_for_TX movlw d'75' movwf TXREG ; Sending the char 'K' call Wait_for_TX movlw d'65' movwf TXREG call Wait_for_TX movlw d'78' movwf TXREG call Wait_for_TX movlw d'68' movwf TXREG call Wait_for_TX movlw d'82' movwf TXREG call Wait_for_TX movlw d'65' movwf TXREG call Wait_for_TX movlw d'83' movwf TXREG
Main_loop ; movf Byte_to_send,W ; Testing this register ; BTFSC STATUS,Z ; If the register is not zero then send it ; goto Main_loop ; movlw d'65' ; BTFSS PIE1,TXIF ; Waiting for send the previous byte ; goto $-1 ; movwf TXREG ; Sending the byte ; CLRF Byte_to_send goto Main_loop
; Subrutines
Select_bank0 ; Subrutin definitions bcf STATUS,RP0 bcf STATUS,RP1 return Select_bank1 bsf STATUS,RP0 bcf STATUS,RP1 return Select_bank2 bcf STATUS,RP0 bsf STATUS,RP1 return Select_bank3 bsf STATUS,RP0 bsf STATUS,RP1 return Wait_for_TX BTFSS PIE1,TXIF ; Waiting for send the previous byte goto $-1 nop return Delay_a_round movlw .250 movwf Delay1 DECFSZ Delay1,1 goto $-1 return end
Látjátok, kikommenteltem a régebbi részeket és most csak azt kéne elküldenie 1x hogy ANDRAS. Meg látjátok még egy 250 utasításnyi várakozást is beletettem annyira szenvedek...
|
vas. ápr. 01, 2007 23:56 |
|
|
potyo
gyémánt tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 3691 Tartózkodási hely: Ada
|
A programkódot mutasd meg A kondenzátor biztos nem probléma
|
vas. ápr. 01, 2007 23:49 |
|
|
nagyan
vas-tag
Csatlakozott: vas. ápr. 01, 2007 23:19 Hozzászólások: 8
|
Sziasztok!
Nem rég kezdtem el foglalkozni a PIC-ekkel. PIC 16F690-es típussal próbálkozom és támadt egy kis gondom.
Történetesen a számítógéppel szeretnék kommunikálni RS-232 vonalon. Namost írtam egy progit PC-re is meg PIC-re is hogy menjen a dolog. A PC-s progi megy, leteszteltem. 9600 8N1 no flow control. A PIC mellé építettem egy kis kapcsolást, csak ami kell: ST232A nevű IC-vel illesztem, 5 db kondi meg egy kis 5V-os stabil táp. Na dióhéjban ennyi a cucc.
A PIC program:
Annyit szerettem volna próbaképpen, hogy amit elküldök neki a PC-ről, azt visszadja nekem. Mindent a PIC doksija szerint csináltam. Miután ez nem működött, leegyszerűsítettem arra, hogy a PIC eszetlenül küldjön 'A' betűket.
Erre a "működés":
Bekapcsolom a PIC-et, a pc már várja az adatokat. Ha loop-ban folyamatosan küldöm vele az A betűket, akkor megy is, a PC-n megjönnek az A betűk. De ha annyit akarok, hogy küldje el 1x sorban az ANDRAS karaktereit és utánna végtelen üres ciklusba menjen, akkor nem kapok semmit a PC oldalon, csak egy timeout üzenetet. 400 ms-ra van állítva a timeout a pc progimban. Szóval nem hajlandó küldeni semmit, hacsak nem teszem bele ciklusban hogy mindig azt küldözgesse, persze tesztelem a megfelelő bitet hogy az előző byte elment-e már és várok amíg kell
Teszteltem a pic progit a 'PIC Simulator IDE' nevű programmal, biztos ismeritek. Tetszik az a szimulátor, a hardweres USART-ot meg mindent lehet vele szimulálni. Szóval azzal a progim tökéletesen működött. Még az is, hogy visszadja a kapott karaktert a soros vonalon. A valóságban azonban nem.
Szerintem mi a baj:
1. nem tudom
2. nem tudom
3. esetleg az lehet, hogy 1uF tantál kondik vannak az ST232A IC-hez, nem pedig az adatlapjában található 0.1uF-esek. Amelyik boltban vettem az alkatrészeket éppen nem volt 0.1 uF-es kondi, azt mondta az eladó hogy jó a nagyobb is, csak kisebb ne legyen. Úgy tűnt jobban ért hozzá mint én, ezért hittem neki.
Nagyon megköszönném ha tudna valaki segíteni, ötletetek van-e miért nem megy... A kondik lennének a baj okai?
cső
|
vas. ápr. 01, 2007 23:46 |
|
|
watt
gyémánt tag
Csatlakozott: szer. nov. 01, 2006 14:00 Hozzászólások: 3559 Tartózkodási hely: Régi nick .watt Hozzászólások: 3402
|
nyikozoli írta: Valaki tudna segiteni!!!!!!!!!!!!!!!!!!!!!!!!!
Pic16F870-ra kellene egy frekvencia merot tervezzek,es hat ........ meg kezdo vagyok ebben!!!
Minden segitseget szivesen fogadok!
Elore is koszi!
Zoli
Nézd meg a CCPx modulok működését. A lényeg, hogy két felfutó él - (ami megszakítást okozhat, ha megengeded neki)- közötti időt kell megmérned. Ezt a CCPx-hez rendelt számlálóval teheted meg.
|
vas. ápr. 01, 2007 21:53 |
|
|
watt
gyémánt tag
Csatlakozott: szer. nov. 01, 2006 14:00 Hozzászólások: 3559 Tartózkodási hely: Régi nick .watt Hozzászólások: 3402
|
potyo írta: Én tudom Utána egy B betűvel kezdődő utasítás következik.
Profiknak nem ér válaszolni!
|
vas. ápr. 01, 2007 21:50 |
|
|
nyikozoli
vas-tag
Csatlakozott: vas. ápr. 01, 2007 21:13 Hozzászólások: 1
|
Valaki tudna segiteni!!!!!!!!!!!!!!!!!!!!!!!!!
Pic16F870-ra kellene egy frekvencia merot tervezzek,es hat ........ meg kezdo vagyok ebben!!!
Minden segitseget szivesen fogadok!
Elore is koszi!
Zoli
|
vas. ápr. 01, 2007 21:27 |
|
|
potyo
gyémánt tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 3691 Tartózkodási hely: Ada
|
Én tudom Utána egy B betűvel kezdődő utasítás következik.
|
vas. ápr. 01, 2007 21:07 |
|
|
watt
gyémánt tag
Csatlakozott: szer. nov. 01, 2006 14:00 Hozzászólások: 3559 Tartózkodási hely: Régi nick .watt Hozzászólások: 3402
|
Gondoltam nem bánjátok, ha megint felteszek egy találóskérdést.
Mire jó ez a megoldás?
|
vas. ápr. 01, 2007 21:02 |
|
|
potyo
gyémánt tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 3691 Tartózkodási hely: Ada
|
scsi írta: Asszem itt az ideje építeni egy programozó készüléket... vagy venni egyet. Szerintem is. Jó dolog a bootloader, de megvannak a korlátai fejlesztéshez nem való.
Ha akarsz egyszerű égetőt, akkor ezt javaslom: http://wattmep.tvn.hu/pic_prog/PIC_pro_net_v03.html A gyakoribb chipeket támogatja a 12F-től a 18F sorozatig (többféle program van hozzá).
Ha mondjuk nincs párhuzamos portod, akkor a Pickit2-t ajánlom: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en023805Alul a Downloads résznél a PICkit 2 Microcontroller Programmer User's Guide fájlban van kapcsolási rajz.
Ha viszond akarsz debuggolni is, akkor pedig az ICD2 az ajánlott: http://potyo.uw.hu
|
vas. ápr. 01, 2007 18:44 |
|
|
scsi
ezüst tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 43
|
potyo írta: scsi írta: Tegnap előtt vettem egy 16F877A típusú PIC-et a Chipcad-nél bootloader progival feltöltve. Sajna már 1 napja küzdök, ugyanis nem egészen sikerül vele (és a PC oldali LDRKEY v1.3 használatával) betölteni az általam írt progit. Ezt a nem egészent úgy értem, hogy kísérletezgetéseim alapján úgy tűnik, hogy a felsőbb 2K-s (0x0800 címtől felfelé) tartományokba nem ír be semmit. Márpedig a progim szerkezete nagyjából úgy néz ki, hogy: Kód: ORG 0x0003 [itt kezdődik a felhasználói program, valahol 0x069F -nél van a vége ennek a szakasznak] Kód: ORG 0x0C00 [itt is van felhasználói program, 0x0E8F-nél végződik] Ezt a második részt nem akarja beírni. Aztán kísérletezgettem, kipróbáltam, hogy ha a második részt nem ORG-olom 0x0C00-ra, hanem folytatólagosan az első rész után írom, akkor hajlandó beírni. De, ha akár csak memóriahely "hézag"-ot kihagyok, akkor már nem írja be. Volt már vkinek hasonló problémája a Bootloader+LDRKEY programozással ? Arra gondoltam, hogy a progi a picben addig várja az adatokat, amít 0x3FFF-et nem kap, és amiatt szakad meg a letöltés, ha "hézag" van a programban. De nem találtam ilyet a letöltőben, amit sejtek, hogy neked van a picben (a chipcad honlapjáról töltöttem le). Ha jól sejtem, MPLAB-ot használsz. Próbáld meg, hogy File Export-al kimented a hex fájlt, és azt próbálod meg letölteni. Ekkor a hex fájl a teljes programmemória képét tartalmazza a nem használt területekkel együtt, és így folyamatosak a címek, nincs ugrás közben. A bootloader úgysem engedi önmagát felülírni.
Közben megoldottam a problémát úgy, hogy beraktam a két programrész közé egy WHILE ENDW cuccot, ami hézagmentesen feltöltni 'nop'-okkal a köztes részt.... és csodák csodájára így bevette elsőre, szépen villant 3-at a LED ) Igaz ezt csak 1x tette meg, az ezt követő próbálkozásoknál már nem villan 3-at, de nem is világít folyamatosan, a progi meg működik, amit betöltöttem, ebből arra következtetek, hogy betöltötte rendesen.
Kicsit hektikus ez a bootloader....
Asszem itt az ideje építeni egy programozó készüléket... vagy venni egyet.
|
vas. ápr. 01, 2007 16:55 |
|
|
potyo
gyémánt tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 3691 Tartózkodási hely: Ada
|
scsi írta: Tegnap előtt vettem egy 16F877A típusú PIC-et a Chipcad-nél bootloader progival feltöltve. Sajna már 1 napja küzdök, ugyanis nem egészen sikerül vele (és a PC oldali LDRKEY v1.3 használatával) betölteni az általam írt progit. Ezt a nem egészent úgy értem, hogy kísérletezgetéseim alapján úgy tűnik, hogy a felsőbb 2K-s (0x0800 címtől felfelé) tartományokba nem ír be semmit. Márpedig a progim szerkezete nagyjából úgy néz ki, hogy: Kód: ORG 0x0003 [itt kezdődik a felhasználói program, valahol 0x069F -nél van a vége ennek a szakasznak] Kód: ORG 0x0C00 [itt is van felhasználói program, 0x0E8F-nél végződik] Ezt a második részt nem akarja beírni. Aztán kísérletezgettem, kipróbáltam, hogy ha a második részt nem ORG-olom 0x0C00-ra, hanem folytatólagosan az első rész után írom, akkor hajlandó beírni. De, ha akár csak memóriahely "hézag"-ot kihagyok, akkor már nem írja be. Volt már vkinek hasonló problémája a Bootloader+LDRKEY programozással ? Arra gondoltam, hogy a progi a picben addig várja az adatokat, amít 0x3FFF-et nem kap, és amiatt szakad meg a letöltés, ha "hézag" van a programban. De nem találtam ilyet a letöltőben, amit sejtek, hogy neked van a picben (a chipcad honlapjáról töltöttem le).
Ha jól sejtem, MPLAB-ot használsz. Próbáld meg, hogy File Export-al kimented a hex fájlt, és azt próbálod meg letölteni. Ekkor a hex fájl a teljes programmemória képét tartalmazza a nem használt területekkel együtt, és így folyamatosak a címek, nincs ugrás közben. A bootloader úgysem engedi önmagát felülírni.
|
vas. ápr. 01, 2007 14:24 |
|
|
AZoli
arany tag
Csatlakozott: kedd nov. 30, 2004 20:13 Hozzászólások: 269
|
Ok Watt köszi.
Közben megrendeltem a PIC-eket, kipróbálom élőben is a CAN-t.
|
kedd márc. 27, 2007 9:31 |
|
|
watt
gyémánt tag
Csatlakozott: szer. nov. 01, 2006 14:00 Hozzászólások: 3559 Tartózkodási hely: Régi nick .watt Hozzászólások: 3402
|
AZoli
A CANSTAT Operation Mode Status bits(OPMODE2:OPMODE0) 100 esetén van Configuration módban az adatlap szerint, pont ahogy Te is értelmezed.
A kód viszont akkor lépne, ha Ez a 7.bit 0. Namost szerintem nem jó a kód. Hogy tévedhetnek e az adatlapban? Sajnos igen. Többször találtam komoly hibát, pl. PIC-ek azonosítóit elírták, ezért nem jól detektálta a WPB. Én azt gondolnám, hogy ez is egy hibás példa. Esetleg más forrást is kéne keresni... majd körülnézek én is...
|
kedd márc. 27, 2007 5:20 |
|
|
AZoli
arany tag
Csatlakozott: kedd nov. 30, 2004 20:13 Hozzászólások: 269
|
NickE írta: ja, már látom. Sajnos mint írtam, nincs CAN tapasztaltom, így nem tudok okosat mondani, de talán érdemes lenne megnézni, hogy egy C vagy BASIC compiler hogyan inicializálja a CAN buszt.
Azért köszi. Valaki igazán elkezdhetne CAN busszal foglalkozni.
Nekem a C olyan mint lónak az ABC..
|
hétf. márc. 26, 2007 21:58 |
|
|
NickE
platina tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 754
|
ja, már látom.
Sajnos mint írtam, nincs CAN tapasztaltom, így nem tudok okosat mondani, de talán érdemes lenne megnézni, hogy egy C vagy BASIC compiler hogyan inicializálja a CAN buszt.
|
hétf. márc. 26, 2007 21:49 |
|
|
AZoli
arany tag
Csatlakozott: kedd nov. 30, 2004 20:13 Hozzászólások: 269
|
NickE írta: én nem látok ellentmondást se
A példaprogiban ConfigWait azt várja h. CANSTAT,7 nulla legyen, holott (ahogy én értelmezem) 1-be kéne váltania ha sikerült config módba állni.
|
hétf. márc. 26, 2007 21:35 |
|
|
AZoli
arany tag
Csatlakozott: kedd nov. 30, 2004 20:13 Hozzászólások: 269
|
NickE írta: szerintem jól értelmezed nem tudom, hogy a CAN busz eseményeket hogy tudod szimulálni?
Még nem szimulálok CAN eseményeket, csak "Inic" -ig jutottam, itt elakad a szimuláció.
Azért vagyok értetlen és bizonytalan, mert ilyen hibát nem szoktak elkövetni Microchipék a doksikban. Ha igaz, itt nem egyszerü elírás van (0 helyett 1) hanem logikai hiba.
|
hétf. márc. 26, 2007 21:32 |
|
|
NickE
platina tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 754
|
én nem látok ellentmondást se
|
hétf. márc. 26, 2007 21:27 |
|
|
NickE
platina tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 754
|
szerintem jól értelmezed
nem tudom, hogy a CAN busz eseményeket hogy tudod szimulálni?
|
hétf. márc. 26, 2007 21:23 |
|
|
AZoli
arany tag
Csatlakozott: kedd nov. 30, 2004 20:13 Hozzászólások: 269
|
Ok, köszi, nagyjából én is így értelmeztem, csak ellentmondást látok:
A példaprogiban ConfigWait azt várja h. CANSTAT,7 nulla legyen, holott (ahogy én értelmezem) CANCON,7 -et 1-be kell állítani config mode -hoz.
Tehát szerintem:
CANCON,7 1-be állít
Megvárom hogy CANSTAT,7 is 1-re váltson... (ez egyébként MPLab szimulációban soha nem következik be)
és ekkor vagyok config módban.
|
hétf. márc. 26, 2007 21:17 |
|
|
NickE
platina tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 754
|
CAN buszt még nem használtam (pedig jó dolog) így konkrétumokat nem tudok mondani, de a szöveg alapján:
Kód: MOVLW B’10000000’ ; Set to Configuration Mode. MOVWF CANCON
Ez a CANCON 7-ik bitjét fogja 1-re állítani.
Ami gond lehet, az, hogy a "előfordulhat, hogy a configurációs módba kapcsolás igény nem kerül azonnal elfogadásra. A modul várni fog a CAN busz idle(tétlen, üres) állapotáig, mielőtt config módba kapcsol. Más igények, pl. Loopback, disable (letiltás) azonnal kiszolgálásra kerülhetnek. Mindig ajánlott várni és ellenőrizni folytatás előtt."
Nagyjából ezt írja.
A hozzászólást 1 alkalommal szerkesztették, utoljára NickE hétf. márc. 26, 2007 21:18-kor.
|
hétf. márc. 26, 2007 20:55 |
|
|
AZoli
arany tag
Csatlakozott: kedd nov. 30, 2004 20:13 Hozzászólások: 269
|
Nem vagyok jó angolból, és ez nekem nem akar működni:
18F2480 adatlap 280. oldal
Kód: ; Request Configuration mode. MOVLW B’10000000’ ; Set to Configuration Mode. MOVWF CANCON
; A request to switch to Configuration mode may not be immediately honored. ; Module will wait for CAN bus to be idle before switching to Configuration Mode. ; Request for other modes such as Loopback, Disable etc. may be honored immediately. ; It is always good practice to wait and verify before continuing.
ConfigWait: MOVF CANSTAT, W ; Read current mode state. ANDLW B’10000000’ ; Interested in OPMODE bits only. TSTFSZ WREG ; Is it Configuration mode yet? BRA ConfigWait ; No. Continue to wait...
; Module is in Configuration mode now. ; Modify configuration registers as required. ; Switch back to Normal mode to be able to communicate.
Nem értem. Azt írja hogy ez után van "confiuration mode" -ban, de CANSTAT regiszter részletezése szerint akkor van config mode ha CANSTAT 7. bitje 1
Vagy nem? Tud valaki segíteni?
Ja, és hiába törlöm CANCON 7. bitjét, ConfigWait ciklus örökké tart.
|
hétf. márc. 26, 2007 19:20 |
|
|
watt
gyémánt tag
Csatlakozott: szer. nov. 01, 2006 14:00 Hozzászólások: 3559 Tartózkodási hely: Régi nick .watt Hozzászólások: 3402
|
Ezért szeretek ide járni
Én régebben ezt nem így csináltam, de most fejtek vissza egy programot nyers hexből, amit valami C fordító kreált, és ilyenek vannak benne.
|
hétf. márc. 26, 2007 18:54 |
|
|
AZoli
arany tag
Csatlakozott: kedd nov. 30, 2004 20:13 Hozzászólások: 269
|
watt írta: Én is erre gondoltam. Miért jó ez nekünk?
Ahogy én próbálgattam azért jobb mint az INCF FSRL,f , mert ha FSRL = FFh , akkor FSRH is incrementálódik.
|
hétf. márc. 26, 2007 18:49 |
|
|
watt
gyémánt tag
Csatlakozott: szer. nov. 01, 2006 14:00 Hozzászólások: 3559 Tartózkodási hely: Régi nick .watt Hozzászólások: 3402
|
Én is erre gondoltam.
Miért jó ez nekünk?
|
hétf. márc. 26, 2007 18:40 |
|
|
NickE
platina tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 754
|
FSR1 regisztert léptetni?
|
hétf. márc. 26, 2007 18:22 |
|
|
watt
gyémánt tag
Csatlakozott: szer. nov. 01, 2006 14:00 Hozzászólások: 3559 Tartózkodási hely: Régi nick .watt Hozzászólások: 3402
|
Találós kérdés:
Mire jó ez?
MOVF POSTINC1, F ;
Nekem van ötletem, de nem vagyok benne biztos.
Lehet, hogy Ti jobbat mondtok...
|
hétf. márc. 26, 2007 17:50 |
|
|
stubiflex
arany tag
Csatlakozott: pén. ápr. 23, 2004 0:10 Hozzászólások: 463 Tartózkodási hely: Magyarorszag
|
Koszi szepen gozi.Itt volt a kutya elvermelve.
|
vas. márc. 25, 2007 20:01 |
|
|
gozi
arany tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 382
|
Azt hiszem, hogy 16F877-el dolgozol. Ha igen, akkor ki kell kapcsolni a komparátorokat. (CMCON:=7)
Illetve ha a 18F sorozat valamelyik tagjával dolgozol, akkor digitális üzemmódra kell kalcsolni az A (ill. B) portot. Ez pl. mindent digitálisra kapcsol: ADCON1:=15.
|
vas. márc. 25, 2007 18:01 |
|
|
potyo
gyémánt tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 3691 Tartózkodási hely: Ada
|
Ha a 18F4320-al kisérletezel, akkor az adatlap 10.1 fejezetben levő Note: rész és az Example 10-1 átnézését javaslom Ha nem 18F4320, akkor is az I/ PORTS PORTA-ról szóló részben találod a megoldást
|
szomb. márc. 24, 2007 20:24 |
|
|
stubiflex
arany tag
Csatlakozott: pén. ápr. 23, 2004 0:10 Hozzászólások: 463 Tartózkodási hely: Magyarorszag
|
Meggyult a bajom egy kodreszlettel.Egesz deltol kinlodok vele.Teszterrel merve megfeleloen valtozik a PORTA bemeneteken a feszultseg a nyomogombok lenyomasakor, a program megis csak akkor hajlando megfeleloen mukodni, ha a PORTA RA4-es labara konfigolom.ha masik lab figyelesere alitom a testbitet, akkor nem megy, pedig azokona labakon is valtozik a feszko, ha a megfelelo gombot lenyomom. Mutatom a kodot:
program kinlodas;
var test : byte;
begin
TRISA := %11111111;
PORTC := 0;
TRISC := 0;
test := 0;
repeat
if testbit(PORTA,4) then
test := 1
else
test := 0;
if test = 1 then
PORTC := %00001111
else
PORTC := %11110000;
delay_ms(1000);
until false;
end.
|
szomb. márc. 24, 2007 20:14 |
|
|
NickE
platina tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 754
|
Természetesen erre is jó a bootloader.
|
szomb. márc. 24, 2007 18:18 |
|
|
Achilles
ezüst tag
Csatlakozott: csüt. márc. 16, 2006 17:45 Hozzászólások: 10
|
De lehet,hogy elbeszélünk egymás mellet ám
Szóval lenne 1 db p16F877A chip, amibe mondjuk a behelyezés elött beírnám a "bootloader" programrészt.
A kész hardwaren lenne egy soros port.
Namármost, ha a user mondjuk bekapcsoláskor egy gombot nyomvatart
akkor aktiválódik a "betöltős" rész és akármit pl. új nyelvet az LCD-hez, vagy akár bugfixet feltölthetne a picbe. ezután reset, és nem nyomja a gombot, a feltöltött prog el kezd futni. lásd AN732 microchip tutorial.
El lehetne használni a ICSP stb. lábakat is. Nem bonyolitaná az áramkört annak a leválasztása sem."Userfriendly"-bb lenne.
|
szomb. márc. 24, 2007 15:30 |
|
|
Achilles
ezüst tag
Csatlakozott: csüt. márc. 16, 2006 17:45 Hozzászólások: 10
|
Nekem azért kéne bootloader, hogy utólag lehessen különböző nyelveket is feltölteni a PIC-be. (LCD-s projekt). Mivel a HEX-file tartalmazza hogy melyik cimre kell letárolni a küldött adatokat, elég utólag terjeszteni a különbözö nyelvet tartalmazó HEX-eket.
Esteleg bugfixeket is, lehetne így terjeszetni, és akkor userkének nem kell égetőt csinálnia, hanem elég csak 1 soros port,azt had szóljon.
Égető akkor kéne ha a bootloaderben kellett valamit piszkálni.
|
szomb. márc. 24, 2007 15:07 |
|
|
NickE
platina tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 754
|
Még 1 nagy terület van, ami az előbb kihagytam: ahol szeretnék, hogy nem csak a programozó, hanem a felhasználó is tudjon szoftvert frissíteni. Ilyenek pl.: mobiltelefon, digitális műholdvevők, DVD, ...
Szóval elég sok helyen használnak bootloadert.
|
szomb. márc. 24, 2007 11:14 |
|
|
NickE
platina tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 754
|
PIC18FXXXX vezérlőket ajánlom. Bár ezek közül sem mindegyik tudja írni a flasht, de többségük igen.
Bootloadert csak inkolt esetben ajánlott használni, szóval az esetek 95% -ban én se használom, de van eset, mikor nincs más alternatíva. Jó példa erre az ICD2. Az összes PIC algoritmusa nem fér bele a picbe, ezért mindig a kiválasztott pic kezeléséhez szükséges programot tölti be, az meg mégiscsak hülyén nézne ki, ha kettőt kellene venni belőle, hogy egyikkel lehessen írni a másikat.
Bootloaderrel a probléma megoldható.
Általában ott használnak bootloadert, ahol pl. sok kontroller van egy buszon, pl. autókban, ahol a kontrollerek nagy részét csak nagy bontással lehetne megközelíteni, vagy pl. épületgépészet, ahol szintén nagy mennyiségű vezérlő van egymástól távol, akkár többszáz méterre, viszont össze vannak kötve, pl. RS-485 -el. Egy komplex rendszernél nem mindegy, hogy egy PC előtt ülve 2 kattintással frissíthető egy rendszer, vagy egyenként minden egyes egységet végigjárva, (esetleg szétszerelve) kell frissítani a szoftvert.
|
szomb. márc. 24, 2007 10:50 |
|
|
watt
gyémánt tag
Csatlakozott: szer. nov. 01, 2006 14:00 Hozzászólások: 3559 Tartózkodási hely: Régi nick .watt Hozzászólások: 3402
|
Ha erről elmondhatom a véleményem, én borzasztóan nem szeretem a bootloadereket. Egyrészt csak úgy működik, ha már be van égetve, ezért ha már van mivel beégetni, akkor minek? Másrészt helyet foglal, ami mindig probléma. Harmadrészt problémát okoz, hogy hozzá idomítsam a programomat. Csak akkor kellhet, ha soros kommunikáción keresztül online kell programot, vagy adatot progizni, de ez már nem bootloader, hanem a program szerves része(még ha ugyanaz a boot program is ketyeg ).
Idézet: PIC18 azt eszik vagy isszák?
Én sem értem, hogy a C18-at ajánlja, vagy a 18F-eket. Én ez utóbbira tippelek.
|
szomb. márc. 24, 2007 9:39 |
|
|
Achilles
ezüst tag
Csatlakozott: csüt. márc. 16, 2006 17:45 Hozzászólások: 10
|
NickE:
Lehet megfogadom a tanácsod mert lehet tényleg feleslegesen bonyolítom csak a dolgot.
Arra gomdoltam, hogy ha már a boot részt égetni kell (akár prockivesz, akár ICSP) ,miért ne lehetne az egészet beégetettni. Kevesebb idő meg dugosgatás.
PIC18 azt eszik vagy isszák? hard assembly
Köszi a tanácsokat!
|
szomb. márc. 24, 2007 9:29 |
|
|
NickE
platina tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 754
|
Achilles:
Megoldható, amit írsz, hisz az ICD2 is így működik PIC16F877(A)-val, de én erősen javaslom, hogy most kezdj el PIC18-at tanulni.
Igen, linker scriptel be lehet állítani, hogy hova fordítsa a kódot. Pl. a boot loader esetén megadod, hogy csak a boot block legyen elérhető.
Achilles írta: Azt szeretném elérni, hogy tudjak olyan HEX- fájlt generálni, ami csak a bootloadert tartalmazza, ami a progot, és olyat ami a mind a kettőt
Attól tartok, rosszul közelíted meg a témát. Az alap séma úgy néz ki, hogy készítesz egy boot loadert, amit beégetsz a picbe. A rendes programot már a boot loader fogja betölteni, azt pl. soros porton, I2C, SPI -n keresztül fogod már átküldeni. Szóval olyan hex fájlod nem lesz, amiben "mindkettő" benne van.
A ram változóknál pedig ahogy azt írtad, a kettő együtt sose fut, így nem probléma, ha ugyanarra a címre kerül boot ill. prog változó.
|
szomb. márc. 24, 2007 9:12 |
|
|
Achilles
ezüst tag
Csatlakozott: csüt. márc. 16, 2006 17:45 Hozzászólások: 10
|
Sziasztok!
Amiért valójában erre tévedtem az az lenne,hogy esetleg valakinek volt
már bootloaderes projetje 16F87XA-k valamelyikével? help me kéne
Azt szeretném elérni, hogy tudjak olyan HEX- fájlt generálni, ami csak a bootloadert tartalmazza, ami a progot, és olyat ami a mind a kettőt.
A microchip bootloadere lenne egyébként az alap (AN732 tutorial).
Annyit már kiagyaltam, hogy "áthelyezhető" kódot kéne irnom (code), és
valamilyen linker scriptel a megfelelő object codokat a megfelelő helyre pakoltatom. A gondom a változókkal van.
Mivel a bootloader és a prog sosem fut egyszerre használhatnának, közös Ram regiszereket-eket.
Vagyis amikor kombinált hex kéne akkor, ne foglaljon le külön-külön mind a két projektnek ram helyeket. (udata_ovr de úgy, hogy a prg több darabból ál, saját regisztereit ne írja fölül)
Egyenlőre ennyi, mert már sűrűsödik. )
Köszi a segítséget.
|
pén. márc. 23, 2007 20:49 |
|
|
potyo
gyémánt tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 3691 Tartózkodási hely: Ada
|
Ezt a legjobb kipróbálni, hiába lessük itt az adatlapokat.
|
pén. márc. 23, 2007 20:08 |
|
|
Achilles
ezüst tag
Csatlakozott: csüt. márc. 16, 2006 17:45 Hozzászólások: 10
|
Valóban a 16F627X doksija és a 16F870/71 doksija nem fogalmaz olyan egyértelműen mint a 16F627A/628A/648A bibliája.
627A/628A azt mondja 1 értelműen:
1. TRISB<1> and TRISB<2> should both be set to
'1' to configure the RB1/RX/DT and RB2/TX/CK
pins as inputs. (75. oldal)
Míg a másik két doksi csak annyit mond, hogy:
Bit SPEN (RCSTA<7>) and bits TRISB<2:1> have to be
set in order to configure pins RB2/TX/CK and
RB1/RX/DT as the Universsal Syc.... (16F627x)
Lehet hogy a "set" itt nem azt jelenti, hogy 1-re kell állítani hanem, hogy
megfelelően valamire.....?
|
pén. márc. 23, 2007 19:51 |
|
|
watt
gyémánt tag
Csatlakozott: szer. nov. 01, 2006 14:00 Hozzászólások: 3559 Tartózkodási hely: Régi nick .watt Hozzászólások: 3402
|
Én is úgy szoktam, hogy TX ki, RX be.
|
pén. márc. 23, 2007 10:35 |
|
|
potyo
gyémánt tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 3691 Tartózkodási hely: Ada
|
A TX labat kimenetnek kell allitani a TRISB regiszterben, legalabbis 16F870-nel kellett, pedig nem irja az usart reszben.
|
pén. márc. 23, 2007 9:29 |
|
|
Achilles
ezüst tag
Csatlakozott: csüt. márc. 16, 2006 17:45 Hozzászólások: 10
|
GI írta: Sziasztok!
PIC kérdésem lenne (16F627). Eddig kommunikációval nem foglalkoztam és szeretnék összehozni egy kis progit. Namost kérdésem az lenne, hogy az rx és tx lábakat kell konfigolni a TRISB regiszterben ki és bemenetként? vagy ha belövöm az usartot akkor úgy müxik ahogy kell?
Szia GI!
Ha a 627 ua mint a 627A, akkor mind a kettőt inputra kell állítanod.
Csekkold a doksit. Lépésről lépésre leírja, hogyan kell a transmitet meg a Recivet kezelni. 78.oldal + a 82. Meg úgy az egész fejezet:)
(Ezt a 16F627A/628A/648A doksijából néztem.)628A-al már volt dolgom.
|
pén. márc. 23, 2007 7:25 |
|
|
GI
arany tag
Csatlakozott: csüt. jan. 20, 2005 3:04 Hozzászólások: 262
|
Sziasztok!
PIC kérdésem lenne (16F627). Eddig kommunikációval nem foglalkoztam és szeretnék összehozni egy kis progit.
Namost kérdésem az lenne, hogy az rx és tx lábakat kell konfigolni a TRISB regiszterben ki és bemenetként? vagy ha belövöm az usartot akkor úgy müxik ahogy kell?
|
csüt. márc. 22, 2007 20:03 |
|
|
Ki van itt |
Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 3 vendég |
|
Nem nyithatsz témákat ebben a fórumban. Nem válaszolhatsz egy témára ebben a fórumban. Nem szerkesztheted a hozzászólásaidat ebben a fórumban. Nem törölheted a hozzászólásaidat ebben a fórumban.
|
|
|