Teade

Collapse

Foorumi reeglid.

Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less

RS232 suhtlus

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    RS232 suhtlus

    Tahaks siis PICiga arvuti COM porti infot saata. Skeem selline:


    Näidiskood olemas ja küsimus nüüd selles, et mis programmiga ma PC poolt kuulama peaks ning kuidas seda programmi siis ka häälestama?
    Oota! Las ma teen seda natuke paremaks...

    #2
    Kui sul on 98, NT, või 2000, siis on väga hea ja lihtne asi firma B&B Electronics ComTest (vabavara), olen seda ise suht palju kasutanud. http://www.bb-europe.com/software_chart.asp
    Sellega saab nii saata kui vastu võtta ja lülitada sisse/välja lisasignaale näiteks (DataTerminalReady, ReadyToSend jne).

    Hyperterm ajab kah asja ära, ent pole nii mugav kasutada.

    Comment


      #3
      hmmm....kas skeem on ikka õige mul? Sest asi ei toimi. Ossiga vaadates saadab PIC ilusasti infot välja niikaua, kui RS232 mooduli toiteots küljes ei ole. Vaikus saabub majja kohe, kui toite ära ühendan.


      Ning programmis lähevad DSR ja DCD nupud põlema kui COM kaabli järgi ühendan.


      Veel selline küsimus, et kas ma seda EN otsa ka torkima pean? Hetkel PICi külge ühendatud ainult SV1 pinnid 4 ja 5
      Oota! Las ma teen seda natuke paremaks...

      Comment


        #4
        Tõmba otse EN massi, sa võid selle ka PIC-i jalaga ühendada ja selle otsa tarkvaraliselt low peale tõmmata aga pole mõtet. DSR ja DCD lähevad "põlema" sildade pärast pistiku pinnide 7,8 ja 6,1,4 vahel. Teoreetiliselt saab ilma nendeta hakkama, ent osa programme ja seadmeid vajab neid signaale (mingid modemid näiteks).

        Comment


          #5
          Neid nn. kviteerimissignale vajasid vanad ja aeglased seadmed. Enamik tänapäevastest suhtleb piisavalt kiiresti (omab piisvalt mälu) ja sillad võib vabalt peale jätta.
          Mismoodi see vaikus peale MAXi kivi pingestamist välja näeb - PIC paneb toru ära? Kui nii siis ehk ta saab serial-vastuvõtu katkestuse ja kood jookseb kokku?
          - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
          - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

          Comment


            #6
            Katsetasin niimoodi: PIC'ile vool järgi, ossiga mõõtsin pinni, kust ta datat väljastab, oss näitas ilusat kandilist joont. Aga kohe, kui lükkasin RS232 mooduli toite järgi (toide tuleb nn. emaplaadilt, kus peal PIC istub) siis oss enam ei näidanud miskit selle pinni peal. Võtan toite lahti, kõik olemas jälle. Ja datakaabel emaplaadi ja RS232 mooduli vahel on sel ajal küljest ära, et asi peab ikka riistvaraline olema

            EDIT: Katsetasin just praegu veel veidi...vaikuse ajal on PICi pinn kogu aeg HIGH. Tester näitab 5V, oss sirget
            Oota! Las ma teen seda natuke paremaks...

            Comment


              #7
              Viska PIC'i proge siia üles, vaataks korra üle.

              Comment


                #8
                Kood:
                ;Tutorial 7_1a
                ;Serial routines - send text to PC
                ;Nigel Goodwin 2003
                
                	LIST	p=16F876	&#59;tell assembler what chip we are using
                	include "P16F876.inc"	&#59;include the defaults for the chip
                	ERRORLEVEL	0,	-302&#59;suppress bank selection messages
                	__config 0x393A &#59;sets the configuration settings (oscillator type etc.)
                
                
                
                
                 cblock	0x20 &#59;start of general purpose registers
                 	count &#59;used in looping routines
                 	count1 &#59;used in delay routine
                 	counta &#59;used in delay routine
                 	countb &#59;used in delay routine
                 	templcd &#59;temp store for 4 bit mode
                 	templcd2
                 	lcdtmp
                 	Xmit_Byte    &#59;holds byte to xmit
                       Rcv_Byte    &#59;holds received byte 
                       Bit_Cntr    &#59;bit counter for RS232
                       Delay_Count    &#59;delay loop counter
                 endc
                
                SER_PORT	Equ	PORTC
                SER_TRIS	Equ	TRISC
                SER_IN Equ	0x07
                SER_OUT Equ	0x06
                
                
                
                 org	0x0000
                
                 BANKSEL ADCON1
                 movlw 0x06
                 movwf ADCON1
                 BANKSEL PORTA &#59;turn analogue inputs off
                
                Initialise	clrf	count
                 clrf	PORTA
                 clrf	PORTB	
                 call	SER_INIT	&#59;initialise serial port
                 call	Long_Delay	&#59;wait about 1 second
                 movlw	'R'
                 call	XMIT_RS232
                 movlw	'S'
                 call	XMIT_RS232
                 movlw	'2'
                 call	XMIT_RS232
                 movlw	'3'
                 call	XMIT_RS232
                 movlw	'2'
                 call	XMIT_RS232
                 movlw	0x0A
                 call	XMIT_RS232
                 movlw	0x0D
                 call	XMIT_RS232
                Done goto	Done  &#59;loop for ever
                
                
                ;Serial routines
                
                SER_INIT
                      BSF   STATUS, RP0     &#59;select bank 1
                      BCF   SER_TRIS, SER_OUT  &#59;set B6 as an output
                      BSF   SER_TRIS, SER_IN   &#59;set B7 as an input
                      BCF   STATUS, RP0     &#59;select bank 0
                      BSF   SER_PORT, SER_OUT  &#59;set SER_OUT high
                      RETURN
                
                XMIT_RS232 MOVWF  Xmit_Byte      &#59;move W to Xmit_Byte
                      MOVLW  0x08         &#59;set 8 bits out
                      MOVWF  Bit_Cntr
                      BCF   SER_PORT, SER_OUT
                      CALL  Bit_Delay
                Ser_Loop  RRF   Xmit_Byte , f    &#59;send one bit
                      BTFSS  STATUS  , C
                      BCF   SER_PORT, SER_OUT
                      BTFSC  STATUS  , C
                      BSF   SER_PORT, SER_OUT
                      CALL  Bit_Delay
                      DECFSZ Bit_Cntr , f    &#59;test if all done
                      GOTO  Ser_Loop
                      BSF   SER_PORT, SER_OUT
                      CALL  Bit_Delay
                      RETURN
                
                Rcv_RS232  BTFSC  SER_PORT, SER_IN   &#59;wait for start bit
                      GOTO  Rcv_RS232
                      CALL  Start_Delay     &#59;do half bit time delay
                      BTFSC  SER_PORT, SER_IN   &#59;check still in start bit
                      GOTO  Rcv_RS232
                      MOVLW  0x08         &#59;set up to read 8 bits
                      MOVWF  Bit_Cntr
                      CLRF  Rcv_Byte
                Next_RcvBit CALL  Bit_Delay
                      BTFSS  SER_PORT, SER_IN
                      BCF   STATUS  , C
                      BTFSC  SER_PORT, SER_IN
                      BSF   STATUS  , C
                      RRF   Rcv_Byte , f
                      DECFSZ Bit_Cntr , f    &#59;test if all done
                      GOTO  Next_RcvBit
                      CALL  Bit_Delay
                      MOVF  Rcv_Byte, W
                      RETURN
                
                Start_Delay MOVLW  0x3D
                      MOVWF  Delay_Count
                Start_Wait NOP
                      DECFSZ Delay_Count , f
                      GOTO  Start_Wait
                      RETURN
                
                Bit_Delay  MOVLW  0x7A
                      MOVWF  Delay_Count
                Bit_Wait  NOP
                      DECFSZ Delay_Count , f
                      GOTO  Bit_Wait
                      RETURN
                
                ;End of serial routines
                
                
                
                
                ;Delay routines
                
                Long_Delay
                 call	Delay255
                 call	Delay255
                 call	Delay255
                 call	Delay255
                 return
                
                Delay255	movlw	0xff	&#59;delay 255 mS
                 goto	d0
                Delay100	movlw	d'100'	&#59;delay 100mS
                 goto	d0
                Delay50 movlw	d'50'	&#59;delay 50mS
                 goto	d0
                Delay20 movlw	d'20'	&#59;delay 20mS
                 goto	d0
                Delay10 movlw	d'10'	&#59;delay 10mS
                 goto	d0
                Delay1 movlw	d'1'	&#59;delay 1mS
                 goto	d0
                Delay5 movlw	0x05	&#59;delay 5.000 ms (4 MHz clock)
                d0 movwf	count1
                d1 movlw	0xE7
                 movwf	counta
                 movlw	0x04
                 movwf	countb
                Delay_0 decfsz	counta, f
                 goto	$+2
                 decfsz	countb, f
                 goto	Delay_0
                
                 decfsz	count1	,f
                 goto	d1
                 retlw	0x00
                
                ;end of Delay routines
                
                
                      	
                 end
                Oota! Las ma teen seda natuke paremaks...

                Comment


                  #9
                  Proovi kusagil alguses (peale portide jms seisu sättimist) öelda: bcf INTCON,GIE (keelab kõik katkestused).
                  Samunegi et su proge ei peaks jääma saatma vaid peaks ainult 1 korra teksti saatma (viimane rida . Done: goto Done ehk lõputu tsükkel samas kohas).
                  - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
                  - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

                  Comment


                    #10
                    lisasin bcf INTCON,GIE

                    ja muutsin loopi, nüüd goto Initialise.

                    Tulemus ikka null.
                    Oota! Las ma teen seda natuke paremaks...

                    Comment


                      #11
                      Originally posted by raitl@Feb 3 2006, 13:27
                      Katsetasin niimoodi: PIC'ile vool järgi, ossiga mõõtsin pinni, kust ta datat väljastab, oss näitas ilusat kandilist joont. Aga kohe, kui lükkasin RS232 mooduli toite järgi (toide tuleb nn. emaplaadilt, kus peal PIC istub) siis oss enam ei näidanud miskit selle pinni peal. Võtan toite lahti, kõik olemas jälle.
                      Näeb nii välja, nagu oleks kaks väljundviiku omavahel kokku ühendanud ja PIC on see nõrgem pool. Kontrolli montaazhi
                      If you think education is expensive, try ignorance.

                      Comment


                        #12
                        Sa selle EN otsaga midagi ette võtsid? Kui see on high või määramatus olekus, siis ei tohiks kah midagi läbi tulla.

                        Muide rauda saad sa niimoodi testida, et võtad PIC'i vahelt ära, veendud, et MAX - i kivi on õigesti ühendatud. Ühendad otse kivil jalad T1IN ja R1OUT või pistikus SV1 otsad 4 ja 5omavahel kokku. Lükkad selle arvutile järgi, pingestad, käivitad jadapordi monitorprogrammi. Saadad arvutist mingi suvalise stringi välja ning sama asi peab tagasi tulema.

                        Kui eelpoolkirjeldatu toimib, siis tähendab see seda, et raud on korras ning sa pead koodi väga põhjalikult üle vaatama.

                        Comment


                          #13
                          MAX232 ei taha kasutada?jäävad igast enable otsad ära
                          Modelleerimises ja tootmises kehtivad:
                          1. Avariikindel vooluring lühistab kõik teised.
                          2. Transistor, millel on kiiresti toimiv kaitse, säästab kaitset, sulades kõigepealt ise.

                          Comment

                          Working...
                          X