Megválaszolatlan hozzászólások | Aktív témák Pontos idő: csüt. máj. 23, 2024 11:27



Hozzászólás a témához  [ 6770 hozzászólás ]  Oldal Előző  1 ... 39, 40, 41, 42, 43, 44, 45 ... 136  Következő
PIC kérdések 
Szerző Üzenet
vas-tag

Csatlakozott: vas. ápr. 01, 2007 23:19
Hozzászólások: 8
Hozzászólás 
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
Profil Privát üzenet küldése
gyémánt tag
Avatar

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
Hozzászólás 
nagyan
Ha elfogadsz még egy kis segítséget, a karaktereket be lehet írni így is:
Kód:
     MOVLW 'A'


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
Profil Privát üzenet küldése Honlap
gyémánt tag
Avatar

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
Hozzászólás 
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
Profil Privát üzenet küldése Honlap
gyémánt tag
Avatar

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 3691
Tartózkodási hely: Ada
Hozzászólás 
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
Profil Privát üzenet küldése Honlap
vas-tag

Csatlakozott: vas. ápr. 01, 2007 23:19
Hozzászólások: 8
Hozzászólás 
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
Profil Privát üzenet küldése
gyémánt tag
Avatar

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 3691
Tartózkodási hely: Ada
Hozzászólás 
A programkódot mutasd meg :idea: A kondenzátor biztos nem probléma :!:


vas. ápr. 01, 2007 23:49
Profil Privát üzenet küldése Honlap
vas-tag

Csatlakozott: vas. ápr. 01, 2007 23:19
Hozzászólások: 8
Hozzászólás 
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
Profil Privát üzenet küldése
gyémánt tag
Avatar

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
Hozzászólás 
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
Profil Privát üzenet küldése Honlap
gyémánt tag
Avatar

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
Hozzászólás 
potyo írta:
Én tudom 8) Utána egy B betűvel kezdődő utasítás következik. :D

Profiknak nem ér válaszolni! :)


vas. ápr. 01, 2007 21:50
Profil Privát üzenet küldése Honlap
vas-tag

Csatlakozott: vas. ápr. 01, 2007 21:13
Hozzászólások: 1
Hozzászólás 
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
Profil Privát üzenet küldése YIM
gyémánt tag
Avatar

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 3691
Tartózkodási hely: Ada
Hozzászólás 
Én tudom 8) Utána egy B betűvel kezdődő utasítás következik. :D


vas. ápr. 01, 2007 21:07
Profil Privát üzenet küldése Honlap
gyémánt tag
Avatar

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
Hozzászólás 
Gondoltam nem bánjátok, ha megint felteszek egy találóskérdést.
Mire jó ez a megoldás?
Kód:
MOVF   RAM_A5,F

:idea: :?:


vas. ápr. 01, 2007 21:02
Profil Privát üzenet küldése Honlap
gyémánt tag
Avatar

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 3691
Tartózkodási hely: Ada
Hozzászólás 
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 :arrow: 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
Profil Privát üzenet küldése Honlap
ezüst tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 43
Hozzászólás 
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 :arrow: 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
Profil Privát üzenet küldése
gyémánt tag
Avatar

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 3691
Tartózkodási hely: Ada
Hozzászólás 
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 :arrow: 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
Profil Privát üzenet küldése Honlap
arany tag

Csatlakozott: kedd nov. 30, 2004 20:13
Hozzászólások: 269
Hozzászólás 
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
Profil Privát üzenet küldése
gyémánt tag
Avatar

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
Hozzászólás 
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
Profil Privát üzenet küldése Honlap
arany tag

Csatlakozott: kedd nov. 30, 2004 20:13
Hozzászólások: 269
Hozzászólás 
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. :D
Nekem a C olyan mint lónak az ABC.. :oops:


hétf. márc. 26, 2007 21:58
Profil Privát üzenet küldése
platina tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 754
Hozzászólás 
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
Profil Privát üzenet küldése
arany tag

Csatlakozott: kedd nov. 30, 2004 20:13
Hozzászólások: 269
Hozzászólás 
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
Profil Privát üzenet küldése
arany tag

Csatlakozott: kedd nov. 30, 2004 20:13
Hozzászólások: 269
Hozzászólás 
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
Profil Privát üzenet küldése
platina tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 754
Hozzászólás 
én nem látok ellentmondást se


hétf. márc. 26, 2007 21:27
Profil Privát üzenet küldése
platina tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 754
Hozzászólás 
szerintem jól értelmezed
nem tudom, hogy a CAN busz eseményeket hogy tudod szimulálni?


hétf. márc. 26, 2007 21:23
Profil Privát üzenet küldése
arany tag

Csatlakozott: kedd nov. 30, 2004 20:13
Hozzászólások: 269
Hozzászólás 
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
Profil Privát üzenet küldése
platina tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 754
Hozzászólás 
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
Profil Privát üzenet küldése
arany tag

Csatlakozott: kedd nov. 30, 2004 20:13
Hozzászólások: 269
Hozzászólás 
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
Profil Privát üzenet küldése
gyémánt tag
Avatar

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
Hozzászólás 
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
Profil Privát üzenet küldése Honlap
arany tag

Csatlakozott: kedd nov. 30, 2004 20:13
Hozzászólások: 269
Hozzászólás 
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
Profil Privát üzenet küldése
gyémánt tag
Avatar

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
Hozzászólás 
Én is erre gondoltam.
Miért jó ez nekünk?


hétf. márc. 26, 2007 18:40
Profil Privát üzenet küldése Honlap
platina tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 754
Hozzászólás 
FSR1 regisztert léptetni?


hétf. márc. 26, 2007 18:22
Profil Privát üzenet küldése
gyémánt tag
Avatar

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
Hozzászólás 
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...
:idea: :?:


hétf. márc. 26, 2007 17:50
Profil Privát üzenet küldése Honlap
arany tag
Avatar

Csatlakozott: pén. ápr. 23, 2004 0:10
Hozzászólások: 463
Tartózkodási hely: Magyarorszag
Hozzászólás 
Koszi szepen gozi.Itt volt a kutya elvermelve. :D


vas. márc. 25, 2007 20:01
Profil Privát üzenet küldése YIM Honlap
arany tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 382
Hozzászólás 
stubiflex írta:
...
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
Profil Privát üzenet küldése Honlap
gyémánt tag
Avatar

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 3691
Tartózkodási hely: Ada
Hozzászólás 
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 :idea:


szomb. márc. 24, 2007 20:24
Profil Privát üzenet küldése Honlap
arany tag
Avatar

Csatlakozott: pén. ápr. 23, 2004 0:10
Hozzászólások: 463
Tartózkodási hely: Magyarorszag
Hozzászólás 
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
Profil Privát üzenet küldése YIM Honlap
platina tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 754
Hozzászólás 
Természetesen erre is jó a bootloader.


szomb. márc. 24, 2007 18:18
Profil Privát üzenet küldése
ezüst tag
Avatar

Csatlakozott: csüt. márc. 16, 2006 17:45
Hozzászólások: 10
Hozzászólás 
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
Profil Privát üzenet küldése
ezüst tag
Avatar

Csatlakozott: csüt. márc. 16, 2006 17:45
Hozzászólások: 10
Hozzászólás 
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. :hihi:
Égető akkor kéne ha a bootloaderben kellett valamit piszkálni.


szomb. márc. 24, 2007 15:07
Profil Privát üzenet küldése
platina tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 754
Hozzászólás 
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
Profil Privát üzenet küldése
platina tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 754
Hozzászólás 
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. :D
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
Profil Privát üzenet küldése
gyémánt tag
Avatar

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
Hozzászólás 
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
Profil Privát üzenet küldése Honlap
ezüst tag
Avatar

Csatlakozott: csüt. márc. 16, 2006 17:45
Hozzászólások: 10
Hozzászólás 
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. :idea: Kevesebb idő meg dugosgatás. :!:

PIC18 azt eszik vagy isszák? :) hard assembly :rulez:
Köszi a tanácsokat!


szomb. márc. 24, 2007 9:29
Profil Privát üzenet küldése
platina tag

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 754
Hozzászólás 
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
Profil Privát üzenet küldése
ezüst tag
Avatar

Csatlakozott: csüt. márc. 16, 2006 17:45
Hozzászólások: 10
Hozzászólás 
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
Profil Privát üzenet küldése
gyémánt tag
Avatar

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 3691
Tartózkodási hely: Ada
Hozzászólás 
Ezt a legjobb kipróbálni, hiába lessük itt az adatlapokat.


pén. márc. 23, 2007 20:08
Profil Privát üzenet küldése Honlap
ezüst tag
Avatar

Csatlakozott: csüt. márc. 16, 2006 17:45
Hozzászólások: 10
Hozzászólás 
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
Profil Privát üzenet küldése
gyémánt tag
Avatar

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
Hozzászólás 
Én is úgy szoktam, hogy TX ki, RX be.


pén. márc. 23, 2007 10:35
Profil Privát üzenet küldése Honlap
gyémánt tag
Avatar

Csatlakozott: szer. márc. 24, 2004 13:43
Hozzászólások: 3691
Tartózkodási hely: Ada
Hozzászólás 
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
Profil Privát üzenet küldése Honlap
ezüst tag
Avatar

Csatlakozott: csüt. márc. 16, 2006 17:45
Hozzászólások: 10
Hozzászólás 
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
Profil Privát üzenet küldése
arany tag

Csatlakozott: csüt. jan. 20, 2005 3:04
Hozzászólások: 262
Hozzászólás 
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
Profil Privát üzenet küldése
Hozzászólások megjelenítése:  Rendezés  
Hozzászólás a témához   [ 6770 hozzászólás ]  Oldal Előző  1 ... 39, 40, 41, 42, 43, 44, 45 ... 136  Következő

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 8 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.

Keresés:
Ugrás:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Magyar fordítás © Magyar phpBB Közösség