Seahound1
- 17th December 2012, 16:05
Wonder if some one has used the 16F1847. I am trying to get the USART and I2C working at the same time. The code comes from 16F877a that I adapted which worked. But I can not get it to work on the 16F1847.....I have changed the header to reflect the new chip. Any ideas?
define OSC 20
DEFINE HSER_TXSTA 24h
DEFINE HSER_BAUD 9600 'Set Baud rate to 9600bps
DEFINE HSER_BITS 8 'Set to 8 bit mode
DEFINE HSER_CLROERR 1 'Clear overflow error automaticallyAFPCON1 = %00000001
APFCON0 = %11110001                        'Set RB pins to SCL1 and SDA 1
APFCON1 = 1                                ' TX on RB5
B0          var     Word                    ' Temp variable
Heading     var     Word                    ' Compass heading
B2          var     byte                    ' Temp variable
DPIN        var     portb.7                ' I2C data pin  RB2 and RB4
CPIN        var     Portb.6                ' I2C clock pin
APFCON0 = %11110001                        'Set RB pins to SCL1 and SDA 1
APFCON1 = 1
mackrackit
- 17th December 2012, 18:15
Can you get either one of the functions working independently?
Posting your code may also help.
Seahound1
- 17th December 2012, 20:11
Yep the TX works fine....tried putting the I2C connections on different pins, but no dice.
Seahound1
- 17th December 2012, 20:15
Code as requested....basically it is generating GPS sentence, and using a I2C compass to populate the heading information in the sentence.....it works fine on the 16f877a. Got a problem with space on the gizmo I am building hence the move to a smaller chip.
Include "modedefs.bas"
define OSC 20
DEFINE HSER_TXSTA 24h
DEFINE HSER_BAUD 9600 'Set Baud rate to 9600bps
DEFINE HSER_BITS 8 'Set to 8 bit mode
DEFINE HSER_CLROERR 1 'Clear overflow error automaticallyAFPCON1 = %00000001
APFCON0 = %11110001                        'Set RB pins to SCL1 and SDA 1
APFCON1 = 1                                ' TX on RB5
B0          var     Word                    ' Temp variable
Heading     var     Word                    ' Compass heading
B2          var     byte                    ' Temp variable
DPIN        var     portb.7                ' I2C data pin  RB2 and RB4
CPIN        var     Portb.6                ' I2C clock pin
APFCON0 = %11110001                        'Set RB pins to SCL1 and SDA 1
APFCON1 = 1                                ' TX on RB5
p           var byte
Dec_lat1    var word
Dec_lat2    var word
S_byte      var byte  
Dec_long1   var word
Dec_long2   var word
E_byte      var byte
variation   var byte
UTC         var byte
UTC_2       var byte
Dec_off     var byte
Course      var byte
date_stamp  var byte
UTC_A       var byte
UTC_2_A     var byte
Off_set     var byte
Dec_long1_A var byte
Dec_long2_A var byte
Dec_lat1_A  var byte
Dec_lat2_A  var byte
TracID      var word
WPT_array   var byte (63)
WPT_array_A var byte (60)
 
cksum       var Byte 
cksum1      var byte         
                               '               "["
WPT_array[0]="$"
WPT_array[1]="G"
WPT_array[2]="P"
WPT_array[3]="R"
WPT_array[4]="M"
WPT_array[5]="C"
WPT_array[6]="," 
WPT_array[7]=UTC DIG 5+"0"
WPT_array[8]=UTC DIG 4+"0"
WPT_array[9]=UTC DIG 3+"0"
WPT_array[10]=UTC DIG 2+"0"
WPT_array[11]=UTC DIG 1+"0"
WPT_array[12]=UTC DIG 0+"0"
WPT_array[13]="."
WPT_array[14]=UTC_2 DIG 2+"0"
WPT_array[15]=UTC_2 DIG 1+"0"
WPT_array[16]=UTC_2 DIG 0+"0"
WPT_array[17]=","
WPT_array[18]="A"
WPT_array[18]=","
WPT_array[20]=Dec_long1 Dig 3+"0"
WPT_array[21]=Dec_long1 Dig 2+"0"
WPT_array[22]=Dec_long1 Dig 1+"0"
WPT_array[23]=Dec_long1 Dig 0+"0"
WPT_array[24]="."
WPT_array[25]=Dec_long2 Dig 3+"0"
WPT_array[26]=Dec_long2 Dig 2+"0"
WPT_array[27]=Dec_long2 Dig 1+"0"
WPT_array[28]=Dec_long2 Dig 0+"0"
WPT_array[29]="," 
WPT_array[30]="N"
WPT_array[31]=","
WPT_array[32]=Dec_lat1 Dig 3+"0"
WPT_array[33]=Dec_lat1 Dig 2+"0"
WPT_array[34]=Dec_lat1 Dig 1+"0"
WPT_array[35]=Dec_lat1 Dig 0+"0"
WPT_array[36]="."
WPT_array[37]=Dec_lat2 Dig 3+"0"
WPT_array[38]=Dec_lat2 Dig 2+"0"
WPT_array[39]=Dec_lat2 Dig 1+"0"
WPT_array[40]=Dec_lat2 Dig 0+"0"
WPT_array[41]="," 
WPT_array[42]="W"
WPT_array[43]=","
WPT_array[44]=Dec_off Dig 1+"0"
WPT_array[45]=Dec_off Dig 0+"0"
WPT_array[46]="."
WPT_array[47]=Dec_off Dig 0+"0"
WPT_array[48]=","
WPT_array[49]= "0" + heading dig 2
WPT_array[50]= "0" + heading dig 1                  
WPT_array[51]= "0" + heading dig 0             
WPT_array[52]="."
WPT_array[53]=Course Dig 0+"0"
WPT_array[54]=","
WPT_array[55]=date_stamp Dig 1+"0"
WPT_array[56]=date_stamp Dig 0+"0"
WPT_array[57]=","
WPT_array[58]=variation Dig 1+"0"
WPT_array[59]=variation Dig 0+"0"
WPT_array[60]=","
WPT_array[62]="E"
WPT_array[63]="*" 
WPT_array_A[0]="$"
WPT_array_A[1]="G"
WPT_array_A[2]="P"
WPT_array_A[3]="G"
WPT_array_A[4]="G"
WPT_array_A[5]="A"
WPT_array_A[6]="," 
WPT_array_A[7]=UTC_A DIG 5+"0"
WPT_array_A[8]=UTC_A DIG 4+"0"
WPT_array_A[9]=UTC_A DIG 3+"0"
WPT_array_A[10]=UTC_A DIG 2+"0"
WPT_array_A[11]=UTC_A DIG 1+"0"
WPT_array_A[12]=UTC_A DIG 0+"0"
WPT_array_A[13]="."
WPT_array_A[14]=UTC_2_A DIG 2+"0"
WPT_array_A[15]=UTC_2_A DIG 1+"0"
WPT_array_A[16]=UTC_2_A DIG 0+"0"
WPT_array_A[17]=","
WPT_array_A[18]=Dec_long1_A Dig 3+"0"
WPT_array_A[19]=Dec_long1_A Dig 2+"0"
WPT_array_A[20]=Dec_long1_A Dig 1+"0"
WPT_array_A[21]=Dec_long1_A Dig 0+"0"
WPT_array_A[22]="."
WPT_array_A[23]=Dec_long2_A Dig 3+"0"
WPT_array_A[24]=Dec_long2_A Dig 2+"0"
WPT_array_A[25]=Dec_long2_A Dig 1+"0"
WPT_array_A[26]=Dec_long2_A Dig 0+"0"
WPT_array_A[27]="," 
WPT_array_A[28]="N"
WPT_array_A[29]=","
WPT_array_A[30]=Dec_lat1_A Dig 3+"0"
WPT_array_A[31]=Dec_lat1_A Dig 2+"0"
WPT_array_A[32]=Dec_lat1_A Dig 1+"0"
WPT_array_A[33]=Dec_lat1_A Dig 0+"0"
WPT_array_A[34]="."
WPT_array_A[35]=Dec_lat2_A Dig 3+"0"
WPT_array_A[36]=Dec_lat2_A Dig 2+"0"
WPT_array_A[37]=Dec_lat2_A Dig 1+"0"
WPT_array_A[38]=Dec_lat2_A Dig 0+"0"
WPT_array_A[39]="," 
WPT_array_A[40]="W"
WPT_array_A[41]=","
WPT_array_A[42]="1"
WPT_array_A[43]=","
WPT_array_A[44]="0"
WPT_array_A[45]="9"
WPT_array_A[46]=","
WPT_array_A[47]="1"
WPT_array_A[48]=","
WPT_array_A[49]=Off_set Dig 0+"0"
WPT_array_A[50]=Off_set Dig 0+"0"
WPT_array_A[51]=Off_set Dig 0+"0"
WPT_array_A[52]=","
WPT_array_A[53]="M"
WPT_array_A[54]=","
WPT_array_A[55]="0"
WPT_array_A[56]=","
WPT_array_A[57]="M"
WPT_array_A[58]=","
WPT_array_A[59]=","
WPT_array_A[60]="*" 
 pause 1000
 cksum=0
p=0
for p = 1 to 63
cksum = cksum^(WPT_array[p])
Next P
p=0
cksum1=0
for p = 1 to 60
cksum1 = cksum1^(WPT_array_A[p])
Next P
 Main
 I2CREAD DPIN,CPIN,$C0,$C1,[B2] ' Read 2 locations in a row
    B0=B2*14
    Heading=B0/10
WPT_array[49]= "0" + heading dig 2
WPT_array[50]= "0" + heading dig 1                   
WPT_array[51]= "0" + heading dig 0  
 
pause 100 
Hserout [Str WPT_array\63, HEX Cksum,13,1]
pause 100
hserout [Str WPT_array_A\60, HEX Cksum1,13,10]
pause 100
 Goto Main
 End
SteveB
- 17th December 2012, 22:08
Seahound,
Take a look at the table (Table 1) on page 4 of the datasheet.
From what I can see, you can move the RX pin for the USART from RB1 to RB2.  The SDA1 for I2C can not be moved, and is on RB1.  SCL1 for I2C is on RB4.  And TX fro the USART can be moved between RB2 and RB5.  So here is how it should fall out:
I2C:
RB1 SDA1
RB4 SCL1
USART
RB2 RX
RB5 TX
So the APFCONx registers should be 
APFCON0 = %10000000
APFCON1 = %00000001
and the pin assignments:
DPIN var portb.1 ' I2C data pin 
CPIN var Portb.4 ' I2C clock pin
HTH
Seahound1
- 17th December 2012, 23:51
Thanks for the reply. Just tried it and it does not work. May have to try a short bit of code to see if I can display the heading on a LCD using the I2C routine with out all the other stuff. You helped the last time when I could not get the 16F877a working...:)
Seahound1
- 18th December 2012, 21:41
Had to change to SW TX then it works....well sort of. The I2C reads the compass and the data is stored in the array and tehn transmitted....however the OSD compass heading displays garbage (643, 888, 127 random stuff).
Changed the chip set up to
Include "modedefs.bas"
define OSC 20
Define I2C_SLOW 1
APFCON0 = %11100000                        'Set RB pins to SCL1 and SDA 1
APFCON1 = 1                                 ' TX on RB5
CM1CON0 = 0 ' COMPARATORS OFF
CM1CON1 =0
CM2CON0 = 0 ' COMPARATORS OFF
CM2CON1 =0 
CPSCON0 = 0 'CAPACTIVE SENSE MODULE OFF
ANSELA = 0   'turn off analog port A
ANSELB = 0   'turn off analog port B
 TRISA= %11111111
 TRISB= %11111111
Powered by vBulletin® Version 4.1.7 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.