[x]
Posted via EE Mobile

Search, ask, and monitor your questions on the go with EE Mobile. Visit Experts Exchange from your mobile device and never be out of touch again.

09/27/2006 at 11:23PM PDT, ID: 22005694
[x]
Attachment Details
[x]
The Solution Rating System

With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.

  • The Grade of the Solution
  • The Zone Rank of the Expert Providing the Solution
  • The Number of Author and Expert Comments
  • The Number of Experts Contributing
  • The Feedback of the Community

Your Input Matters
Because of the way the system is set up, the most important variable in this equation is you. As a member of Experts Exchange, you are able to cast your vote on the quality of the solutions in regard to how complete, accurate, helpful and easy to understand each solution is. When you provide your feedback, each rating is adjusted accordingly. So, if you see a solution that has a poor rating that you think is a good solution, let us know by rating it. As you do, the rating will be adjusted and will become more accurate for other members of our site.

If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support.

Thank you!

7.6

RX & TX serial communication with GPS - PIC 16F84 - Hyperterminal

Asked by dbuela in Assembly Programming Language

Tags: pic, gps, serial

Hardware = a PIC 16F84, I use a crystal oscillator 4 MHz, in a multi-purpose test board with a MAX 232 to convert from TTL to CMOS. Also, a GPS receiver TFAG10, and a computer with Hyperterminal.
Software = Write the Assembly program in MPLAB IDE, simulate with MPLAB SIM and flash the program into the PIC with ICPROG.

The GPS receiver, transmit the data at 4800 bps, 8 bits, N,1 stop bit. When I connect the TFAG10 to the serial port of the computer. I can see the data comming through Hyperterminal (No problems there)

Assuming that at 4800 bps the lenght of the bit is 208 useconds, wrote a program to test that... below is the code (may be messy but works just fine)

                                list p=16F84
            radix hex
            org 0
status equ 0x03
porta equ 0x05
portb equ 0x06
count8 equ 0x0d
indf equ 0x00
fsr equ 0x04
            bsf status,5            ;bank 1
            movlw 0x00
            movwf portb            ;port b all out
            movlw 0x11
            movwf porta            ;ra0 y ra4 in
            bcf status,5            ;bank 0
start            movlw 0x11            ;lower limit is 0x12 but put -1 in fsr
            movwf fsr
            movlw 0x41            ;caracter "A"
            movwf 0x12            ;put it into this memory address
            movlw 0x42            ;caracter "B"
            movwf 0x13            ;put it into this memory address
            movlw 0x43            ;caracter "C"
            movwf 0x14            ;put it into this memory address
            movlw 0x44            ;caracter "D"
            movwf 0x15            ;put it into this memory address
            movlw 0x45            ;caracter "E"
            movwf 0x16            ;put it into this memory address
            movlw 0x46            ;caracter "F"
            movwf 0x17            ;put it into this memory address
            movlw 0x47            ;caracter "G"
            movwf 0x18            ;put it into this memory address
            movlw 0x48            ;caracter "H"
            movwf 0x19            ;put it into this memory address
            movlw 0x49            ;caracter "I"
            movwf 0x1a            ;put it into this memory address
            movlw 0x4a            ;caracter "J"
            movwf 0x1b            ;put it into this memory address
            movlw 0x4b            ;caracter "K"
            movwf 0x1c            ;put it into this memory address
            movlw 0x4c            ;caracter "L"
            movwf 0x1d            ;put it into this memory address
            movlw 0x4d            ;caracter "M"
            movwf 0x1e            ;put it into this memory address
            movlw 0x4e            ;caracter "N"
            movwf 0x1f            ;put it into this memory address
            movlw 0x4f            ;caracter "O"
            movwf 0x20            ;put it into this memory address
            movlw 0x50            ;caracter "P"
            movwf 0x21            ;put it into this memory address
            movlw 0x51            ;caracter "Q"
            movwf 0x22            ;put it into this memory address
            movlw 0x52            ;caracter "R"
            movwf 0x23            ;put it into this memory address
            movlw 0x53            ;caracter "S"
            movwf 0x24            ;put it into this memory address
            movlw 0x54            ;caracter "T"
            movwf 0x25            ;put it into this memory address
            movlw 0x55            ;caracter "U"
            movwf 0x26            ;put it into this memory address
            movlw 0x56            ;caracter "V"
            movwf 0x27            ;put it into this memory address
            movlw 0x57            ;caracter "W"
            movwf 0x28            ;put it into this memory address
            movlw 0x58            ;caracter "X"
            movwf 0x29            ;put it into this memory address
            clrf count8                  ; put count8 to zero
newbyte            incf fsr,1                  ;fsr=fsr+1
            bcf porta,1                  ;start bit
            nop
            nop
            nop
            nop
            nop                  ;several nops to meet timing
newbit            call delay                  ;go to delay
            btfsc indf,0                            ;is bit 0 = 0 on variable memory address?
            goto one                  ;no, is 1
zero            bcf porta,1                  ;yes, send a 0 on RA1
            rrf indf,1                  ;move all bits down one place
            incf count8,1            ;count8=count8+1
            btfss count8,3            ;is it 8?
            goto newbit            ;no, go and find a new bit
            goto stopbit            ;yes, go and send stop bit
one             bsf porta,1                  ;send a 1 on RA1
            rrf indf,1                  ;move all bits down one place
            incf count8,1            ;count8=count8+1
            btfss count8,3            ;is it 8?
            goto newbit             ;no, go and find a new bit
stopbit                       call delay                                        ;delay
            bsf porta,1                  ;send a 1 on RA1
            call delay                  ;delays between bytes
            call delay                  ;
            clrf count8                  ;put count8 to zero
            movlw 0x29            ;the final character is on memory 0x29
            subwf fsr,0            ;w= fsr-0x29
            btfsc status,2            ;did fsr reach the final character ?
            goto start                  ;yes, all over again
            goto newbyte            ;no, go and get a new byte
delay            movlw 0x40
            movwf 0x0e
loop            decfsz 0x0e,1
            goto loop
            return
            end

So, if my GPS receiver and the program above both can be viewed by the Hyperterminal (4800, 8,N,1) then I assume that the lenght of the bit that the GPS receiver gives me is the same as my program (208 useconds = 1/4800).

Well, and here is my problem, I CAN NOT make it work assuming 208 useconds... instead it works when I put a delay between 40 and 100 useconds (anywhere between those values) using this program:
RA0 is connected to the GPS and RA1 is connected to the computer.

            list p=16F84
            radix hex
            org 0
status equ 0x03
porta equ 0x05
portb equ 0x06
            bsf status,5      ;bank 1
            movlw 0x00
            movwf portb      ;portb all out
            movlw 0x11
            movwf porta      ;ra0 and ra4 in (don't use ra4 at all)
            bcf status,5      ;bank 0
start            movlw 0x00
            movwf portb      ;port b all off (I don't use them)
search            btfsc porta,0      ;is there a 0 in RA0 ? (in)
            goto one            ;no, go to one
zero            bcf porta,1            ;yes, then put a 0 in RA1 (out)
            call delay            ;go delay
            goto search      ;back to search
one            bsf porta,1            ;put a 1 in RA1 (out)
            call delay            ;go delay
            goto search      ;back to search
delay            movlw 0x1e               ;maximum value for the transmission to be OK
            movwf 0x0e
loop            decfsz 0x0e,1
            goto loop
            return
            end

So, this program also works fine, but I can't understand why ....because the delay is way too short for the suposed 4800 bps from the GPS... and if in deed the bit is shorter (then it won't be 4800 !! as the specifications state)... why is the GPS working fine with Hyperterminal at 4800 ?

Feel free to treat me as ignorant, I don't care as long as answer is reached. :-)
[+][-]09/29/06 03:05 AM, ID: 17626174

View this solution now by starting your 30-day free trial. Setting up your free trial is quick, easy, and secure. We will return you to this solution, unlocked, when you're done.

 

About this solution

Zone: Assembly Programming Language
Tags: pic, gps, serial
Sign Up Now!
Solution Provided By: mokule
Participating Experts: 2
Solution Grade: A
 
 
[+][-]09/28/06 10:58 AM, ID: 17621450

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]09/28/06 04:44 PM, ID: 17623885

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]09/28/06 09:02 PM, ID: 17625084

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]09/29/06 03:15 AM, ID: 17626207

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]09/29/06 03:24 AM, ID: 17626232

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]09/29/06 03:28 AM, ID: 17626242

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
 
Loading Advertisement...
20091028-EE-VQP-86