View previous topic :: View next topic |
Author |
Message |
smatjaz
Joined: 28 Jun 2004 Posts: 62
|
Posted: Wed Nov 19, 2014 8:08 pm Post subject: ATXMEGA and RTC PCF8583 |
|
|
Hello.
Couple of days I'm trying to connect PCF8583 - I2C on ATXMEGA128A3U.
It doesn't work.
In help is described, how I2C works on ATXMEGA, but for me unsucssefull.
I don't know, where is a problem. Microcontroler(ATXMEGA128A3U) don't answer on I2c statements.
It hangs. With changing hardware - other PCB-with PCF8583, nothing changed. I also changed port (PortF to portE), changed settings to software I2C, but the problem is the same.
In addition is my testing software.
Could you somebody tell me, where is the problem?
P.S. In many my projects it works OK with ATMEGA chips.
Best regards.
Code: | '-----------------------------------------------------------
' micro : ATXMEGA128A3U
'-----------------------------------------------------------
'$sim
$regfile = "xm128a3udef.dat"
$crystal = 32000000 '32MHz
$hwstack = 150
$swstack = 150
$framesize = 150
$lib "xmega.lib"
$external _xmegafix_clear
$external _xmegafix_rol_r1014
'-EXT OSC-----------------------------------------------------------------
Config Osc = Enabled , Extosc = Enabled , Pllosc = Enabled , Range = 12mhz_16mhz , Startup = Xtal_16kclk , Pllsource = Extclock , Plldiv2 = Disabled , Pllmul = 2
Config Sysclock = Pll , Prescalea = 1 , Prescalebc = 1_1
Config Priority = Static , Vector = Application , Lo = Enabled
'-EEPROM XMEGA-----------------------------------------------------------------
Config Eeprom = Mapped
'-RTC-----------------------------------------------------------------------------
'Config Date = Dmy , Separator = -
'Config Clock = Soft , Rtc = 1khz_32khz_crystosc , Gosub = Sectic ' we select the internal 1 KHz clock from the 32KHz external oscillator
'PCF8583----------------------------------
Open "twie" For Binary As #4 ' Use TWI on Port F
Dim Twi_start As Byte
Config Twie = 400000 ' 100KHz
I2cinit #4
'-Software I2C-----------------------------
'$forcesofti2c ' with this the software I2C/TWI commands are used when inlcuding i2c.lbx
'$lib "i2c.lbx"
'Dim E As Byte
'Config Vport0 = E
'Config Sda = Porte.0 '10K pullup !!!!!!
'Config Scl = Porte.1
'Config Scl = Port0 .1 ' Pin to use as SCL (The hardware pin is Pinb.1)
'Config Sda = Port0 .0 ' Pin to use as SDA (The hardware pin is Pinb.0)
'I2cinit ' Bring the Pin's in the proper state
Dim Tm_i As Byte , Tm(16) As Byte , Answer As String * 1
Dim Second As Byte , Minute As Byte , Hour As Byte , Day As Byte , Month As Byte , Year As Byte
Declare Sub Settime()
Declare Sub Gettime()
Enable Interrupts ' as usual interrupts must be enabled
Config Com7 = 9600 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8 'F2, F3
Open "COM7:" For Binary As #7
Enable Interrupts
Config Serialin6 = Buffered , Size = 100
Waitms 500
'------------------------------------------------------------------------------
Print #7 , "RTC-PCF8583 2014-11"
Print #7 , "Ver. " ; Version(1) ; " " ; Version(3)
Dim Casxx As String * 10
Dim Casx As Byte
Dim I As Byte
Dim Temp As Byte
'-Main ------------------------------------------------------------------------
Main:
Do
Print #7 , Hex(hour) ; ":" ; Hex(minute) ; ":" ; Hex(second)
Call Gettime()
Waitms 500
Loop
End
'------------------------------------------------------------------------------
Sub Gettime()
For I = 1 To 5
Temp = I + 4
I2cstart #4
I2cwbyte &HA0 , #4 'write addres of PCF8583
I2cwbyte Temp , #4 'select register
I2crepstart #4
I2cwbyte &HA1 , #4
I2crbyte Tm(i) , Nack , #4
Next
I2cstop #4
Print #7 , Hex(tm(4)) ; "-" ; Hex(tm(5)) ; "-201" ; Year ; " " ; Hex(tm(3)) ; ":" ; Hex(tm(2)) ; ":" ; Hex(tm(1))
End Sub Gettime()
'--------------------[Interrupt Service Routines]-------------------------------
Sectic:
Return
'------------------------------------------------------------------------------ |
[/code]
(BASCOM-AVR version : 2.0.7.7 ) |
|
Back to top |
|
|
MWS
Joined: 22 Aug 2009 Posts: 2262
|
Posted: Wed Nov 19, 2014 8:51 pm Post subject: Re: ATXMEGA and RTC PCF8583 |
|
|
smatjaz wrote: | I also changed port (PortF to portE) |
The ATXMega128A3U provides two TWI interfaces, one on port C and one on E. It's no surprise, that you had no success on port F.
Checkpoints:
- device address correct? Pin 3 = A0 attached to GND/VCC?
- pullups attached?
- SDA/SCL on PE0..1?
- other HW on PE0..1? |
|
Back to top |
|
|
smatjaz
Joined: 28 Jun 2004 Posts: 62
|
Posted: Thu Nov 20, 2014 2:13 pm Post subject: Re: ATXMEGA and RTC PCF8583 |
|
|
MWS wrote: | smatjaz wrote: | I also changed port (PortF to portE) |
The ATXMega128A3U provides two TWI interfaces, one on port C and one on E. It's no surprise, that you had no success on port F.
Checkpoints:
- device address correct? Pin 3 = A0 attached to GND/VCC?
- pullups attached?
- SDA/SCL on PE0..1?
- other HW on PE0..1? |
Hello.
I checked:
- Device address is pin3 A0=GND- OK
- Pullups attached- 10KResistor Pullup on both wires
- SDA/SCL on PE0/PE1 - OK
- other HW on PE0/1- Any other hardware.
... but microcontroler still hangs.
Does somebody have some test software for PCF8583?
Best regards. M. |
|
Back to top |
|
|
MWS
Joined: 22 Aug 2009 Posts: 2262
|
Posted: Thu Nov 20, 2014 8:04 pm Post subject: Re: ATXMEGA and RTC PCF8583 |
|
|
Mods: the post I've wrote doubled, and surprisingly I see no option to delete, so I ask you, to do this job.
Last edited by MWS on Thu Nov 20, 2014 8:15 pm; edited 2 times in total |
|
Back to top |
|
|
MWS
Joined: 22 Aug 2009 Posts: 2262
|
Posted: Thu Nov 20, 2014 8:05 pm Post subject: Re: ATXMEGA and RTC PCF8583 |
|
|
smatjaz wrote: | Code: | Sub Gettime()
For I = 1 To 5
Temp = I + 4
I2cstart #4
I2cwbyte &HA0 , #4 'write addres of PCF8583
I2cwbyte Temp , #4 'select register
I2crepstart #4
I2cwbyte &HA1 , #4
I2crbyte Tm(i) , Nack , #4
Next
I2cstop #4 |
|
I've noticed, that you've put the I2CStop in the wrong place. You do absolute register addressing, which btw. is not neccessary, see the sample here: http://www.mcselec.com/index.php?option=com_content&task=view&id=44&Itemid=57.
The way you do it, you always have to complete one sequence, which is done by an I2CStop before the next.
Else, see the linked sample for a more efficient way to read the registers. |
|
Back to top |
|
|
smatjaz
Joined: 28 Jun 2004 Posts: 62
|
Posted: Wed Nov 26, 2014 10:24 pm Post subject: |
|
|
Thank you for help.
I solved the problem. ATXMEGA128A3U doesn't have I2c on portF. It was the reason that microocontroler hangs.
I changed hardware with ATXMEGA128A1 and It works. It also works on ATXMEGA128A3U- Port C and Port E.
There are statements:
Code: | Dim Twi_start As Byte ' This Variable is used by the I2C functions
Open "TWIE" For Binary As #4 ' Pull-Up resistor (4K7) on SDA and SCL to Vcc = 3,3V
Config Twie = 100000
I2cinit #4
... |
I have one question more. Why doesn't work software I2C/TWI?
I connect PCF8583 on portF.3 and portF.4 - ATXMEGA128A3U:
Code: | $forcesofti2c ' with this the software I2C/TWI commands are used when inlcuding i2c.lbx
$lib "i2c.lbx" ' override the normal xmega i2c lib
Dim Twi_start As Byte ' This is important because otherwise the compiler returns:
' Error: Line 5: 245 No more space for BIT [TWI_START], and File: E: \ $ Elektro \ Projects-Xmega \ Xmega128-ME test LCD \ 128A1_xmega-I2C1.bas
Dim F As Byte
'We Use Here Virtual Port 0
Config Vport0 = F ' 'map portB to virtual port0
Config Scl = Port0.4 ' Pin to use as SCL (The hardware pin is Pinb.1)
Config Sda = Port0.3 ' Pin to use as SDA (The hardware pin is Pinb.0)
I2cinit |
... but nothing happen.
Any suggestion?
Best regards.
M. |
|
Back to top |
|
|
MWS
Joined: 22 Aug 2009 Posts: 2262
|
Posted: Thu Nov 27, 2014 12:45 am Post subject: |
|
|
I think to remember, that I've solved this XMega/SoftI2C issue one time, was like that:
- remove $lib "xmega.lib"
- use $lib "i2c.lbx"
- use $forcesofti2c
- remove the VPort
- config SCL/SDA to the real portpins |
|
Back to top |
|
|
albertsm
Joined: 09 Apr 2004 Posts: 5913 Location: Holland
|
Posted: Thu Nov 27, 2014 10:32 am Post subject: |
|
|
from the help:
$FORCESOFTI2C
Top Previous Next
Action
The $forcesofti2c directive force the ATXMEGA to use software I2C/TWI Library instead of the hardware I2C registers of ATXMEGA.
Syntax
$forcesofti2c
Remarks
ATXMEGA have usually enough I2C interfaces with fixed SDA and SCL pins but if you want to use other pins as SDA/SCL you can use this directive.
Required Library: $lib "i2c.lbx"
noticeYou can not combine the soft mode with the hardware TWI. Thus when using $forcesofti2c, you can not add an additional TWI channel.
$forcesofti2c ' with this the software I2C/TWI commands are used when inlcuding i2c.lbx
$lib "i2c.lbx" ' override the normal xmega i2c lib
Then you need to configure the SDA and SCL Pin and initialize the pins:
Config Scl = Port0 .1 ' Pin to use as SCL (The hardware pin is Pinb.1)
Config Sda = Port0 .0 ' Pin to use as SDA (The hardware pin is Pinb.0)
I2cinit ' Bring the Pin's in the proper state
See also
Using the I2C protocol
Example
' Using ATXMEGA with software I2C routines to use also pins which are no hardware SDA/SCL pins
' Needed Library: $lib "i2c.lbx"
' The $forcesofti2c directive force the ATXMEGA to use software I2c/TWI Library
' The hardware for this example is XMEGA-A3BU XPlained board from Atmel
' Don't forget the pull-ups on SDA/SCL pin !
' Bascom Version 2.0.7.6 or higher needed
Code: | $regfile = "XM256A3BUDEF.DAT"
$crystal = 32000000 '32MHz
$hwstack = 64
$swstack = 40
$framesize = 80
$forcesofti2c ' with this the software I2C/TWI commands are used when inlcuding i2c.lbx
$lib "i2c.lbx" ' override the normal xmega i2c lib
Config Osc = Enabled , 32mhzosc = Enabled
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1
Config Portr.0 = Output
Led0 Alias Portr.0 'LED 0 (XMEGA-A3BU XPlained board from Atmel )
Config Portr.1 = Output
Led1 Alias Portr.1 'LED 1 (XMEGA-A3BU XPlained board from Atmel )
Dim B As Byte
'We use here Virtual port 0
Config Vport0 = B ' 'map portB to virtual port0
Config Scl = Port0 .1 ' Pin to use as SCL (The hardware pin is Pinb.1)
Config Sda = Port0 .0 ' Pin to use as SDA (The hardware pin is Pinb.0)
I2cinit ' Bring the Pin's in the proper state
Do
Waitms 500
Set Led1
Reset Led0
Waitms 500
Reset Led1
Set Led0
Incr B
I2cstart
I2cwbyte &H24 ' address of I2C Slave
I2cwbyte B ' databyte to send to slave
I2cstop
Loop
End 'end program
|
_________________ Mark |
|
Back to top |
|
|
smatjaz
Joined: 28 Jun 2004 Posts: 62
|
Posted: Thu Nov 27, 2014 6:53 pm Post subject: |
|
|
Thank you MWS, Thank you Mark.
Software I2c works now, when I remove
Another question:
How will operate other features XMEGA without a library?
Best regards. M.
P.S. XMEGA is full of secrets.
|
|
Back to top |
|
|
MWS
Joined: 22 Aug 2009 Posts: 2262
|
Posted: Thu Nov 27, 2014 7:04 pm Post subject: |
|
|
smatjaz wrote: | How will operate other features XMEGA without a library? |
Normal.
Afaik the xmega.lib was a workaround for some cliffs in the beginning and in the meantime should be not necessary anymore.
I may be wrong, Mark surly can tell better. |
|
Back to top |
|
|
albertsm
Joined: 09 Apr 2004 Posts: 5913 Location: Holland
|
Posted: Thu Nov 27, 2014 8:49 pm Post subject: |
|
|
xmega.lib is still used but you do not need to specify it. it is included when the processor is an xmega.
but the order of the libs is important. when you add $lib you want this lib to be processed first. So the compiler adds xmega as last. This way the code from the $lib specified library is used first and the code from xmega is ignored. _________________ Mark |
|
Back to top |
|
|
|
|
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 You cannot attach files in this forum You cannot download files in this forum
|
|