Hejsan.
Jag och en kompis håller på med ett projekt om en robot som skall leta upp ett värmeljus och släcka det.
I detta använder vi en TPA81 värmesensor (info om denna finns här: http://www.robot-electronics.co.uk/htm/tpa81tech.htm)
Den kommunicerar via I2C.
Alltså kan man använda en I2C-bus och koppla den till SDA och SCL på PIC'en som vi använder (16F876A) eller som jag förstår det kan man koppla SDA och SCL pinnarna direkt till pinnarna på PIC'en.
Rätta mig om jag har fel redan här.
Problemet är att vi inte riktigt vet hur vi skall kommunicera med denna sen.
Vi använder oss utav PicBasic och där finns ju I2C_READ och I2C_WRITE funktioner som använder sig utav SDA och SCL kanalerna.
Dock så kan vi inte lyckas få programmet att använda rätt ben verkar det som, detta är förstås ett mer allmänt problem men det vi vill ha hjälp med är:
Problem 1:
Även om vi skriver
PORTA.1, PORTB.1 eller PORTC.1
så använder den 1an på PORTB
Hur skall man göra för att använda andra pinnar än från Port B?
Problemet i sig ligger ju i att SDA och SCL pinnarna inte ligger på Port B utan C om jag minns rätt.
Om inte annat, går det att använda vilka pinnar som helst som SDA och SCL pinnar eller måste det vara dem angivna i specifikationen för PIC'en?
Problem 2:
SCL klocktiden skall vara på 100Hz för att värmesensorn skall fungera bra, hur ställer man in detta? Med kristaller eller mjukvara, och ja, självklart hur isåfall?
I övrigt tror jag att jag skall få den att fungera.
Det blev väldigt mycket men jag hoppas att någon vill ta sig till att läsa det och hjälpa mig, är extremt tacksam för all hjälp jag kan få.
//Fredrik Olsen
SDA och SCL (I2C)
> Alltså kan man använda en I2C-bus och koppla den till SDA och SCL på
> PIC'en som vi använder (16F876A) eller som jag förstår det kan man
> koppla SDA och SCL pinnarna direkt till pinnarna på PIC'en.
Först, SDA och SCL är också "pinnar", så där är det ingen skillnad.
Eller hur menar du ?
Sen, om det finns I2C hårdvara finns det väl ingen speciell anledning
att köra progrmvaru-I2C ? Varför skulle ni vilja göra det ?
> Om inte annat, går det att använda vilka pinnar som helst som SDA och SCL
> pinnar eller måste det vara dem angivna i specifikationen för PIC'en?
Vad menar ni ? Är databladet oklart ?
Hårdvaru I2C använder de pinnar som databladet specar, så klart.
(Programvaru I2C kan i princip använda vilka pinnar som helst.)
> SCL klocktiden skall vara på 100Hz för att värmesensorn skall
> fungera bra, hur ställer man in detta?
Ingen, databladet, kapitlet om I2C "master mode" har alla detaljer.
100 Khz är till och med i tabellen med exempel...
> Vi använder oss utav PicBasic och där finns ju I2C_READ och I2C_WRITE
Är de hårdvaru eller programvaru I2C-funktoner ?
> Även om vi skriver PORTA.1, PORTB.1 eller PORTC.1 så använder den 1an på PORTB.
*Var* skriver ni det ???
> Hur skall man göra för att använda andra pinnar än från Port B?
När då ?
> PIC'en som vi använder (16F876A) eller som jag förstår det kan man
> koppla SDA och SCL pinnarna direkt till pinnarna på PIC'en.
Först, SDA och SCL är också "pinnar", så där är det ingen skillnad.
Eller hur menar du ?
Sen, om det finns I2C hårdvara finns det väl ingen speciell anledning
att köra progrmvaru-I2C ? Varför skulle ni vilja göra det ?
> Om inte annat, går det att använda vilka pinnar som helst som SDA och SCL
> pinnar eller måste det vara dem angivna i specifikationen för PIC'en?
Vad menar ni ? Är databladet oklart ?
Hårdvaru I2C använder de pinnar som databladet specar, så klart.
(Programvaru I2C kan i princip använda vilka pinnar som helst.)
> SCL klocktiden skall vara på 100Hz för att värmesensorn skall
> fungera bra, hur ställer man in detta?
Ingen, databladet, kapitlet om I2C "master mode" har alla detaljer.
100 Khz är till och med i tabellen med exempel...
> Vi använder oss utav PicBasic och där finns ju I2C_READ och I2C_WRITE
Är de hårdvaru eller programvaru I2C-funktoner ?
> Även om vi skriver PORTA.1, PORTB.1 eller PORTC.1 så använder den 1an på PORTB.
*Var* skriver ni det ???
> Hur skall man göra för att använda andra pinnar än från Port B?
När då ?
>Om inte annat, går det att använda vilka pinnar som helst som SDA och SCL pinnar eller måste det vara dem angivna i specifikationen för PIC'en?
Picbasics I2C-rutiner är mjukvaru-rutiner därför kan ni välja att använda vilka IO-pinnar ni vill på PICen.
>SCL klocktiden skall vara på 100Hz för att värmesensorn skall fungera bra, hur ställer man in detta? Med kristaller eller mjukvara, och ja, självklart hur isåfall?
Menar du att SCL ska klockas med 100kHz? I så fall så ska ni se till att skriva DEFINE OSC x i ert program. x står för vilken frekvens i MHz er kristall är på. Ni kan välja på 3( 3.58 ), 4, 8, 10, 12, 16, 20, 25, 32, 33 eller 40. Om ni har en kristall på mer än 8MHz måste ni lägga till DEFINE I2C_SLOW 1.
Ett tips är att kolla i manualen till Picbasic så finns det exempel på hur man kan koppla SCL och SDA, samt små kodexempel. Där finns även all information som jag har skrivit ovan.
Picbasics I2C-rutiner är mjukvaru-rutiner därför kan ni välja att använda vilka IO-pinnar ni vill på PICen.
>SCL klocktiden skall vara på 100Hz för att värmesensorn skall fungera bra, hur ställer man in detta? Med kristaller eller mjukvara, och ja, självklart hur isåfall?
Menar du att SCL ska klockas med 100kHz? I så fall så ska ni se till att skriva DEFINE OSC x i ert program. x står för vilken frekvens i MHz er kristall är på. Ni kan välja på 3( 3.58 ), 4, 8, 10, 12, 16, 20, 25, 32, 33 eller 40. Om ni har en kristall på mer än 8MHz måste ni lägga till DEFINE I2C_SLOW 1.
Ett tips är att kolla i manualen till Picbasic så finns det exempel på hur man kan koppla SCL och SDA, samt små kodexempel. Där finns även all information som jag har skrivit ovan.