|
|
View previous topic :: View next topic |
Author |
Message |
Hector Guest
|
I2C simple test program |
Posted: Fri May 09, 2003 3:29 am |
|
|
Hey everybody!
I'm trying to make a simple test for communicate two 18F452 via I2C, I'll prefer to use the build-in function to make it more readable. In this code, the slave non-stop showing what it gets, but actually it's nothing! Which is the problem?
//I2C communication between PICs
//MASTER
//PIC 1
#include <18F452.h>
#device *=16
//#FUSES HS,NOWDT,NOPROTECT,PUT,BROWNOUT
#use DELAY(CLOCK=19660800)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#BYTE PORTC = 0xF82
#BYTE PORTB = 0xF81
#BYTE PORTA = 0xF80
#define SLAVE_ADDRESS 0xA0
#use rs232(baud=9600, BITS=8, PARITY=N, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#use I2C (MASTER, SDA=PIN_C4, SCL=PIN_C3)
void main(void)
{
delay_ms(2000);
SET_TRIS_A(0x01);
SET_TRIS_B(0x00);
SET_TRIS_C(0x88);
output_float(PIN_C3);
output_float(PIN_C4);
while(TRUE)
{
i2c_start();
i2c_write(SLAVE_ADDRESS); //write
i2c_write('H');
i2c_stop();
delay_ms(1000);
}
}
__________________________________
//I2C communication between PICs
//SLAVE
//PIC 2
#include <18F452.h>
#device *=16
//#FUSES HS,NOWDT,NOPROTECT,PUT,BROWNOUT
#use DELAY(CLOCK=19660800)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#BYTE PORTC = 0xF82
#BYTE PORTB = 0xF81
#BYTE PORTA = 0xF80
#define SLAVE_ADDRESS 0xA0
#use rs232(baud=9600, BITS=8, PARITY=N, xmit=PIN_A1, rcv=PIN_A0,ERRORS)
#use I2C (SLAVE, SDA = PIN_C4, SCL = PIN_C3, address = SLAVE_ADDRESS)
void main()
{
int c=0;
delay_ms(2000);
SET_TRIS_A(0x01); // 0000 0001
SET_TRIS_B(0x00); // 0000 0000
SET_TRIS_C(0x88); // 1000 1000
output_float(PIN_C3);
output_float(PIN_C4);
printf("I'm your slave, tell what you want\n\r");
while(TRUE)
{
while(!i2c_poll())
c=i2c_read(0);
printf("What I get: \%c\n\r", c);
}
}
any help will be usefull
thank you
___________________________
This message was ported from CCS's old forum
Original Post ID: 14281 |
|
|
John H. Guest
|
Are the output_float commands compiling properly? |
Posted: Fri May 09, 2003 8:21 am |
|
|
Hi Hector,
I'm here searching the forum for answers to the same question. I've got an I2C routine that I wrote that runs properly on an older version of the compiler and now isn't working properly.
Check the *.LST output from the compiler and see if it compiled the "output_float" commands. I suspect that there is an issue when using fast_io and the output_float commands. In my listing, the output_float appear to have been ignored by the compiler without any warning or error message.
You might be able to get your routine up and running if you switch over to standard_io. That seems to allow the output_float command to work.
I'm still looking for a workaround. I prefer not to use the supplied I2C routines.
Let me know if your listing file shows the same.
JH
:=Hey everybody!
:=I'm trying to make a simple test for communicate two 18F452 via I2C, I'll prefer to use the build-in function to make it more readable. In this code, the slave non-stop showing what it gets, but actually it's nothing! Which is the problem?
:=
:=//I2C communication between PICs
:=//MASTER
:=//PIC 1
:=
:=#include <18F452.h>
:=#device *=16
:=
:=//#FUSES HS,NOWDT,NOPROTECT,PUT,BROWNOUT
:=#use DELAY(CLOCK=19660800)
:=#use fast_io(A)
:=#use fast_io(B)
:=#use fast_io(C)
:=
:=#BYTE PORTC = 0xF82
:=#BYTE PORTB = 0xF81
:=#BYTE PORTA = 0xF80
:=
:=#define SLAVE_ADDRESS 0xA0
:=
:=#use rs232(baud=9600, BITS=8, PARITY=N, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
:=#use I2C (MASTER, SDA=PIN_C4, SCL=PIN_C3)
:=
:=
:=
:=
:=void main(void)
:={
:=
:=delay_ms(2000);
:= SET_TRIS_A(0x01);
:= SET_TRIS_B(0x00);
:= SET_TRIS_C(0x88);
:=
:= output_float(PIN_C3);
:= output_float(PIN_C4);
:=
:=while(TRUE)
:={
:= i2c_start();
:= i2c_write(SLAVE_ADDRESS); //write
:= i2c_write('H');
:= i2c_stop();
:=
:= delay_ms(1000);
:=
:=}
:=}
:=
:=__________________________________
:=//I2C communication between PICs
:=//SLAVE
:=//PIC 2
:=
:=#include <18F452.h>
:=#device *=16
:=
:=//#FUSES HS,NOWDT,NOPROTECT,PUT,BROWNOUT
:=#use DELAY(CLOCK=19660800)
:=#use fast_io(A)
:=#use fast_io(B)
:=#use fast_io(C)
:=
:=#BYTE PORTC = 0xF82
:=#BYTE PORTB = 0xF81
:=#BYTE PORTA = 0xF80
:=
:=#define SLAVE_ADDRESS 0xA0
:=
:=#use rs232(baud=9600, BITS=8, PARITY=N, xmit=PIN_A1, rcv=PIN_A0,ERRORS)
:=#use I2C (SLAVE, SDA = PIN_C4, SCL = PIN_C3, address = SLAVE_ADDRESS)
:=
:=
:=void main()
:={
:= int c=0;
:=
:= delay_ms(2000);
:= SET_TRIS_A(0x01); // 0000 0001
:= SET_TRIS_B(0x00); // 0000 0000
:= SET_TRIS_C(0x88); // 1000 1000
:= output_float(PIN_C3);
:= output_float(PIN_C4);
:=
:=
:= printf("I'm your slave, tell what you want\n\r");
:= while(TRUE)
:= {
:= while(!i2c_poll())
:= c=i2c_read(0);
:= printf("What I get: \%c\n\r", c);
:=
:= }
:=}
:=
:=any help will be usefull
:=thank you
___________________________
This message was ported from CCS's old forum
Original Post ID: 14293 |
|
|
John H. Guest
|
Are the output_float commands compiling properly? |
Posted: Fri May 09, 2003 8:27 am |
|
|
Hi Hector,
I'm here searching the forum for answers to the same question. I've got an I2C routine that I wrote that runs properly on an older version of the compiler and now isn't working properly.
Check the *.LST output from the compiler and see if it compiled the "output_float" commands. I suspect that there is an issue when using fast_io and the output_float commands. In my listing, the output_float appear to have been ignored by the compiler without any warning or error message.
You might be able to get your routine up and running if you switch over to standard_io. That seems to allow the output_float command to work.
I'm still looking for a workaround. I prefer not to use the supplied I2C routines.
Let me know if your listing file shows the same.
JH
:=Hey everybody!
:=I'm trying to make a simple test for communicate two 18F452 via I2C, I'll prefer to use the build-in function to make it more readable. In this code, the slave non-stop showing what it gets, but actually it's nothing! Which is the problem?
:=
:=//I2C communication between PICs
:=//MASTER
:=//PIC 1
:=
:=#include <18F452.h>
:=#device *=16
:=
:=//#FUSES HS,NOWDT,NOPROTECT,PUT,BROWNOUT
:=#use DELAY(CLOCK=19660800)
:=#use fast_io(A)
:=#use fast_io(B)
:=#use fast_io(C)
:=
:=#BYTE PORTC = 0xF82
:=#BYTE PORTB = 0xF81
:=#BYTE PORTA = 0xF80
:=
:=#define SLAVE_ADDRESS 0xA0
:=
:=#use rs232(baud=9600, BITS=8, PARITY=N, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
:=#use I2C (MASTER, SDA=PIN_C4, SCL=PIN_C3)
:=
:=
:=
:=
:=void main(void)
:={
:=
:=delay_ms(2000);
:= SET_TRIS_A(0x01);
:= SET_TRIS_B(0x00);
:= SET_TRIS_C(0x88);
:=
:= output_float(PIN_C3);
:= output_float(PIN_C4);
:=
:=while(TRUE)
:={
:= i2c_start();
:= i2c_write(SLAVE_ADDRESS); //write
:= i2c_write('H');
:= i2c_stop();
:=
:= delay_ms(1000);
:=
:=}
:=}
:=
:=__________________________________
:=//I2C communication between PICs
:=//SLAVE
:=//PIC 2
:=
:=#include <18F452.h>
:=#device *=16
:=
:=//#FUSES HS,NOWDT,NOPROTECT,PUT,BROWNOUT
:=#use DELAY(CLOCK=19660800)
:=#use fast_io(A)
:=#use fast_io(B)
:=#use fast_io(C)
:=
:=#BYTE PORTC = 0xF82
:=#BYTE PORTB = 0xF81
:=#BYTE PORTA = 0xF80
:=
:=#define SLAVE_ADDRESS 0xA0
:=
:=#use rs232(baud=9600, BITS=8, PARITY=N, xmit=PIN_A1, rcv=PIN_A0,ERRORS)
:=#use I2C (SLAVE, SDA = PIN_C4, SCL = PIN_C3, address = SLAVE_ADDRESS)
:=
:=
:=void main()
:={
:= int c=0;
:=
:= delay_ms(2000);
:= SET_TRIS_A(0x01); // 0000 0001
:= SET_TRIS_B(0x00); // 0000 0000
:= SET_TRIS_C(0x88); // 1000 1000
:= output_float(PIN_C3);
:= output_float(PIN_C4);
:=
:=
:= printf("I'm your slave, tell what you want\n\r");
:= while(TRUE)
:= {
:= while(!i2c_poll())
:= c=i2c_read(0);
:= printf("What I get: \%c\n\r", c);
:=
:= }
:=}
:=
:=any help will be usefull
:=thank you
___________________________
This message was ported from CCS's old forum
Original Post ID: 14295 |
|
|
Hector Guest
|
Re: Are the output_float commands compiling properly? |
Posted: Sat May 10, 2003 9:13 am |
|
|
hey John!
you're right, the compiler ignores the output_float senteces when using #use fast_io. But that's why you can do it by you own, just set in the TRIS register the pins as input and you'll have the same effect.
Another cuestion does anybody knows if the i2c_poll runs correctly in the slave?
Hector
:=Hi Hector,
:=
:=I'm here searching the forum for answers to the same question. I've got an I2C routine that I wrote that runs properly on an older version of the compiler and now isn't working properly.
:=
:=Check the *.LST output from the compiler and see if it compiled the "output_float" commands. I suspect that there is an issue when using fast_io and the output_float commands. In my listing, the output_float appear to have been ignored by the compiler without any warning or error message.
:=
:=You might be able to get your routine up and running if you switch over to standard_io. That seems to allow the output_float command to work.
:=
:=I'm still looking for a workaround. I prefer not to use the supplied I2C routines.
:=
:=Let me know if your listing file shows the same.
:=
:=JH
___________________________
This message was ported from CCS's old forum
Original Post ID: 14338 |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|