Pages: [1]   Go Down
Author Topic: Real Time Clock Library... not that one... a new one.  (Read 1607 times)
0 Members and 1 Guest are viewing this topic.
'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello,

Like I mentioned on this post here: http://arduino.cc/forum/index.php/topic,56908.0.html

It is possible to get the Arduino Mega, or any other chip with the same package as the ATmega16 (eg: 32, 324, 644) to have an RTC running in one of the timers with just a 32,768kHz running on the TOSC pins.
Like I said previously I have almost all the code done (trying to get it more POSIX-like) in C, and some wrapper methods for a RTC class to be used in the Arduino IDE. However, C++ is definitely not something I know very well and I found a problem that I need some help with to "map" the C functions to C++ methods.

In my code I have an interrupt set up. This is something that the end user of the library won't need to see, but I can define it in the code either way, right? After all, it is the brain of the RTC.

I also need to have a structure named (you got it) tm as a global variable to keep the current time. And this is where I got stuck. Can I define variables in the C files and let them be accessible through C++? I have created functions to set and get them in C (which would be called in the C++ methods), but if I could access these variables in the C++ file it would be better. I think... :S

Can you guys give me an example? I have looked at the tutorial here http://www.arduino.cc/en/Hacking/LibraryTutorial and it doesn't have what I'm looking for. Or maybe some help with this...

Best regards, Carlos.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 601
Posts: 48556
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Can I define variables in the C files and let them be accessible through C++?
Yes, but...

You really should not be creating C files. You should be creating C++ files (with the .cpp extension). The Arduino programming language is, after all, C++.
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Can I define variables in the C files and let them be accessible through C++?
Yes, but...

You really should not be creating C files. You should be creating C++ files (with the .cpp extension). The Arduino programming language is, after all, C++.

True... but can I add the interrupt service routine in the .cpp file? Something like this:

ISR(TIMER_OVERFLOW){

count_time++;
}
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Erfurt, Germany
Offline Offline
Newbie
*
Karma: 1
Posts: 42
IPC Certified Interconnect Designer (C.I.D.), hustling around in electronics since 1971
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Please have a looh at he avr\sleep library. There you will find the use of Interrupts, but unfortunately only with \INT0 and \INT 1 inputs. You can place the adress of your ISR in the approprite registers by using inline code. The interrupts have been defined in "WInterrupts.c", which you have to inspect how it is done.
Try to ise the register names from Atmel's documentation. It should work.
If you are confused with inline I found this link somewhere else in this forum: http://www.nongnu.org/avr-libc/user-manual/inline_asm.html
Hope this helps...
Logged

2b || !2b
Shakespeare, Hamlet

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok... I don't think I'm coming across right.

I know C, I know how to define the interrupt function and I also know to setup the AVR registers to work as I want them to. That is not my problem!

Writing the C++ class, although not something I do very often isn't a big challenge (optimizing it, will be a bigger challenge) but my only question right now is how do I define the ISR routine inside the C++ file?
And if not possible, how do I make the connection between the variables I'll have inside the .c file where the said ISR is defined and the C++ methods?

Do I make myself clearer now?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 601
Posts: 48556
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

As I said, you really don't want a .c file. You really do want a .cpp file.

However, bear in mind that C++ is a superset of C. This means that anything in that superset, including anything C, can go in the file.

The ISR can not be a member of a class, since there is no way to define which instance of the class the method is called for. It can be static member in a class, because static methods belong to the class, not an instance of the class.
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok...

I got the .cpp (apart from the string functions to print the time) files and .h compiled without errors yesterday. So right now the problem is to add the ISR in the .cpp file.
I'll give it a try as a static member to see if it at least compiles. I have seen in a tutorial, we can add and ISR in the Arduino sketch... so it is quite likely it can be added in the .cpp file as well.

Can you give me an example of how that would go in the C++ code?

Then all I need is to get the Mega board (may the eBay gods be with me) and a crystal. smiley
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3225
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Small update...

Although I do want to do this, and I'd appreciate some help in getting the ISR in the .cpp file. Sadly this can't be used in Arduino Mega. The designer of the Arduino Mega board decided that porting those pins would be too much work and therefore, unless someone has some really great soldering skills, it's not possible to get done. smiley-sad

Seeeduino Mega does have these pins available though. smiley
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Plano, TX
Offline Offline
Full Member
***
Karma: 0
Posts: 101
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
I'd appreciate some help in getting the ISR in the .cpp file.

I posted an example in another thread that may be helpful.  See:
http://arduino.cc/forum/index.php/topic,53035.msg390455.html#msg390455
(and maybe someone can answer my question regarding interrupt selection)

-Carl
Logged

Pages: [1]   Go Up
Jump to: