You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(3) |
Nov
(2) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
|
Feb
|
Mar
|
Apr
(9) |
May
(13) |
Jun
(8) |
Jul
(1) |
Aug
|
Sep
(1) |
Oct
|
Nov
(1) |
Dec
|
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(2) |
Dec
|
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(2) |
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
(1) |
2006 |
Jan
|
Feb
(2) |
Mar
(2) |
Apr
(1) |
May
(2) |
Jun
(4) |
Jul
(1) |
Aug
(15) |
Sep
|
Oct
(3) |
Nov
(9) |
Dec
(9) |
2007 |
Jan
(62) |
Feb
(33) |
Mar
(6) |
Apr
(3) |
May
(66) |
Jun
(30) |
Jul
(3) |
Aug
(16) |
Sep
(16) |
Oct
(24) |
Nov
(17) |
Dec
(16) |
2008 |
Jan
(37) |
Feb
(62) |
Mar
(55) |
Apr
(114) |
May
(28) |
Jun
(29) |
Jul
(47) |
Aug
(8) |
Sep
(25) |
Oct
(34) |
Nov
(19) |
Dec
(1) |
2009 |
Jan
|
Feb
(1) |
Mar
(18) |
Apr
(18) |
May
(7) |
Jun
(14) |
Jul
(3) |
Aug
(4) |
Sep
(10) |
Oct
(36) |
Nov
(4) |
Dec
(5) |
2010 |
Jan
|
Feb
|
Mar
(5) |
Apr
|
May
|
Jun
(2) |
Jul
(4) |
Aug
(29) |
Sep
(5) |
Oct
(5) |
Nov
(65) |
Dec
(24) |
2011 |
Jan
(26) |
Feb
(4) |
Mar
(6) |
Apr
(5) |
May
|
Jun
|
Jul
(17) |
Aug
(37) |
Sep
(6) |
Oct
(7) |
Nov
(5) |
Dec
(12) |
2012 |
Jan
(14) |
Feb
(24) |
Mar
(48) |
Apr
(23) |
May
(29) |
Jun
(18) |
Jul
(11) |
Aug
(5) |
Sep
(2) |
Oct
(18) |
Nov
(23) |
Dec
(10) |
2013 |
Jan
(10) |
Feb
(4) |
Mar
(21) |
Apr
(6) |
May
(12) |
Jun
|
Jul
(1) |
Aug
(6) |
Sep
(4) |
Oct
(15) |
Nov
(3) |
Dec
(1) |
2014 |
Jan
|
Feb
(9) |
Mar
(11) |
Apr
(2) |
May
(1) |
Jun
(8) |
Jul
(4) |
Aug
|
Sep
(1) |
Oct
(2) |
Nov
(46) |
Dec
(9) |
2015 |
Jan
|
Feb
(7) |
Mar
(1) |
Apr
(5) |
May
(8) |
Jun
(4) |
Jul
(5) |
Aug
(7) |
Sep
(11) |
Oct
(3) |
Nov
(1) |
Dec
(3) |
2016 |
Jan
|
Feb
|
Mar
(4) |
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
(4) |
Oct
(3) |
Nov
(2) |
Dec
(11) |
2017 |
Jan
(2) |
Feb
(4) |
Mar
(4) |
Apr
(7) |
May
(6) |
Jun
(4) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(5) |
Dec
|
2018 |
Jan
(1) |
Feb
(21) |
Mar
(5) |
Apr
(9) |
May
(8) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
(6) |
Dec
(44) |
2019 |
Jan
(1) |
Feb
|
Mar
(1) |
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2020 |
Jan
|
Feb
|
Mar
(2) |
Apr
(1) |
May
(1) |
Jun
|
Jul
(4) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Ben N. <par...@gm...> - 2020-07-19 01:27:40
|
I have a single 32-bit 1msec global timer (gulCurrentTime++) that I'd like to use for all timekeeping/scheduling. In the timer's ISR I would check to see if it matches the alarm time. If it does, a call to TimeDispatch() occurs (gulAlarmTime == gulCurrentTime ) . In TimeDispatch, I would save the global time into ulLastDispatchTime, and use it for any calls made to getElapsedTime (gulCurrentTime - ulLastDispatchTime). So therefore setAlarm would be the only function used to trigger the next timer.c's TimeDispatch event. The problem is, 1) Inside TimeDispatch uses setTimer, not setAlarm (total_sleep_time = next_wakeup). What would be the consequence of changing that to simply set the AlarmTime to be next_wakeup? 2) How should DelAlarm be handled? If I make gulAlarmTime to be less than gulCurrentTime, this will effectively disable TimeDispatch from ever being called again.. is that the way it should work? |
From: Jaroslav F. <jaf...@se...> - 2020-07-11 06:43:09
|
Hi all, The CreateThread is defined here: https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createthread YOU MUST NOT USE unsigned long, BECAUSE THE VARIABLE SIZE IS UNDEFINED across compilers! void StartTimerLoop(TimerCallback_t _init_callback) { unsigned long timer_thread_id; stop_timer = 0; init_callback = _init_callback; EnterMutex(); // At first, TimeDispatch will call init_callback. SetAlarm(NULL, 0, init_callback, 0, 0); LeaveMutex(); timer_thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TimerThreadLoop, NULL, 0, &timer_thread_id); SetThreadPriority(timer_thread, THREAD_PRIORITY_HIGHEST); // JFO: Make timer thread wit highest priority. } The proposed fix is to use DWORD. This type is standard in Windows. DWORD timer_thread_id; best regards Jara |
From: Jaroslav F. <jaf...@se...> - 2020-07-10 00:00:36
|
Hi All, Same problem as already complained again. You MUST NOT compare d->lss_transfer.baudRate with "none" string literal. It does not work in C. ***************************************************** case LSS_CONF_ACT_BIT_TIMING: /* Activate Bit Timing Parameters */ if(d->lss_transfer.mode!=LSS_CONFIGURATION_MODE){ MSG_ERR(0x3D2B, "SlaveLSS not in configuration mode",0); break; } if(d->lss_transfer.baudRate!="none"){ ////<<<< !!!!!! d->lss_transfer.switchDelay=getLSSDelay(m); MSG_WAR(0x3D2C, "Slave Switch Delay set to: ",d->lss_transfer.switchDelay); d->lss_transfer.switchDelayState=SDELAY_FIRST; //d->lss_transfer.currentState=getState(d); //setState(d, LssTimingDelay); ***************************************************** The proposed fix is: if(strcmp(d->lss_transfer.baudRate,"none")){ best regards Jara |
From: Jaroslav F. <jaf...@se...> - 2020-07-09 23:43:56
|
Hi all, You MUST NOT compare d->lss_transfer.baudRate with "none" string literal. It does not work in C. case LSS_CONF_ACT_BIT_TIMING: /* Activate Bit Timing Parameters */ m.data[1]=(UNS8)(*(UNS32*)dat1 & 0xFF); m.data[2]=(UNS8)(*(UNS32*)dat1>>8 & 0xFF); if(d->lss_transfer.baudRate!="none"){ //// <<<<<< !!!!!!!!!! d->lss_transfer.switchDelay=(UNS16)(*(UNS32*)dat1 & 0xFFFF); d->lss_transfer.switchDelayState=SDELAY_FIRST; d->lss_transfer.canHandle_t=d->canHandle; res=canSend(d->canHandle,&m); if(res==0){ StartLSS_SDELAY_TIMER(); d->lss_transfer.state=LSS_TRANS_IN_PROGRESS; } return res; } The proposed fix is: if(strcmp(d->lss_transfer.baudRate,"none")){ best regards Jara /////////////////////////////////////////////////////////// struct struct_lss_transfer { UNS8 state; /* state of the transmission : Takes the values LSS_... */ UNS8 command; /* the LSS command of the transmision */ UNS8 mode; /* LSS mode */ UNS32 dat1; /* the data from the last msg received */ UNS8 dat2; UNS8 nodeID; /* the new nodeid stored to update the nodeid when switching to LSS operational*/ UNS8 addr_sel_match; /* the matching mask for the LSS Switch Mode Selective service */ UNS8 addr_ident_match; /* the matching mask for the LSS Identify Remote Slaves service*/ char *baudRate; /* the new baudrate stored to update the node baudrate when a Activate Bit * Timing Parameters is received*/ UNS16 switchDelay; /* the period of the two delay */ UNS8 switchDelayState; /* the state machine for the switchDelay */ CAN_PORT canHandle_t; /* Time counters to implement a timeout in milliseconds.*/ TIMER_HANDLE timerMSG; /* timerMSG is automatically incremented whenever * the lss state is in LSS_TRANS_IN_PROGRESS, and reseted to 0 * when the response LSS have been received. */ TIMER_HANDLE timerSDELAY; /* timerSDELAY is automatically incremented whenever * the lss switchDelayState is in SDELAY_FIRST or SDELAY_SECOND, and reseted to 0 * when the two periods have been expired. */ LSSCallback_t Callback; /* The user callback func to be called at LSS transaction end */ UNS8 LSSanswer; /* stores if a message has been received during a timer period */ #ifdef CO_ENABLE_LSS_FS UNS32 IDNumber; /* in the master, the LSS address parameter which it currently tries to identify. * in the slave, the LSS address parameter which is being checked (LSS-ID[sub]). */ UNS8 BitChecked; /* bits of the current IDNumber that are currently checked */ UNS8 LSSSub; /* which part of the LSS-ID is currently checked in IDNumber */ UNS8 LSSNext; /* which LSSSub value will be used in the next request */ UNS8 LSSPos; /* in the slave, which part of the LSS-ID is currently processed*/ UNS8 FastScan_SM; /* the state machine for the FastScan protocol */ TIMER_HANDLE timerFS; /* timerFS is automatically incremented when the FastScan service * has been requested and reseted to 0 when the protocol ends. */ #ifdef CO_ENABLE_LSS_FS lss_fs_transfer_t lss_fs_transfer; #endif #endif }; |
From: Lars S. <lar...@gm...> - 2020-05-03 18:04:18
|
Hi, I am not in any way connected to the project, but I can answer :) The storage format is based on gnosis and that is only available on python 2.x That is the only big problem with python3 Back in 2018 i think I made a python3 version of the tools that uses XML instead of gnosis. Not sure if it will work on python3, but it should not be a big issue to port it to python3 if I remember correctly. https://bitbucket.org/nimrof/canfestival-3/src/default/objdictgen/ use objdictconvert.py to convert to new format. (python2.x only) I have tried to get that and more changes upstream, but I gave up. Hope it helps. On Thu, 23 Apr 2020, 08:14 Helge Kruse, <Hel...@gm...> wrote: > Hello, > > The object dictionary editor as well as the OD generator script use the > Python version 2.4. This Python version is dated and the next commonly > used Python version 2.7 is also obsolete since January 1st 2020. > (https://www.python.org/downloads/) > > Is there any plan to update the scripts to Python 3.x? > Are there any reasons to avoid a newer Python version? > > Best regards, > Helge > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > |
From: Helge K. <Hel...@gm...> - 2020-04-23 06:12:43
|
Hello, The object dictionary editor as well as the OD generator script use the Python version 2.4. This Python version is dated and the next commonly used Python version 2.7 is also obsolete since January 1st 2020. (https://www.python.org/downloads/) Is there any plan to update the scripts to Python 3.x? Are there any reasons to avoid a newer Python version? Best regards, Helge |
From: Ben N. <par...@gm...> - 2020-03-17 04:28:30
|
Hi All, I'm trying to compile CanFestival3 under Cygwin_NT-6.3 but not having much luck. I'm following the instructions in http://canfestival.sourceforge.net/manual/manual.pdf and have installed the "w32api-headers" package. It seems to configure fine after: export PCAN_HEADER=Pcan_usb.h export PCAN_INCLUDE=../PCAN/PCAN-LightAPI/Include/C++/ export PCAN_LIB=Pcan_usb.lib ./configure --can=peak_win32 --target=win32 yet when I try to 'make' I get link errors like: /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/ld: can_peak_win32.o:can_peak_win32.c:(.text+0x68): undefined reference to `CAN_Init' can_peak_win32.o:can_peak_win32.c:(.text+0x68): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `CAN_Init' /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/ld: can_peak_win32.o:can_peak_win32.c:(.text+0x7c): undefined reference to `CAN_SetRcvEvent' /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/ld: can_peak_win32.o:can_peak_win32.c:(.text+0x2c4): undefined reference to `CAN_Read' /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/ld: can_peak_win32.o:can_peak_win32.c:(.text+0x3e8): undefined reference to `CAN_Write' /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/ld: can_peak_win32.o:can_peak_win32.c:(.text+0x4fb): undefined reference to `CAN_SetRcvEvent' /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/ld: can_peak_win32.o:can_peak_win32.c:(.text+0x500): undefined reference to `CAN_Close' The Pcan_usb.lib file does seem to contain those functions (10/14/2010), so not sure if it's a x32/x64 or format issue that it can't see it. I did notice that it wouldn't even find this library itself, unless I moved it from the original PCAN-LightAPI/Win32/VC_LIB/ folder.. to the folder with can_peak_win32.c Also, the instructions in the manual doesn't list it, but if I don't configure to "--target=win32" then it fails to compile can_peak_win32.c or timers_win32.c: "error: unknown type name ‘CRITICAL_SECTION’; did you mean ‘RTL_CRITICAL_SECTION’?" "error: ‘INFINITE’ undeclared (first use in this function); did you mean ‘KAFFINITY’?" "error: ‘WAIT_OBJECT_0’ undeclared (first use in this function); did you mean ‘_OBJECTID’?" "warning: implicit declaration of function ‘usleep’; did you mean ‘fseek’?" "warning: implicit declaration of function ‘SetEvent’; did you mean ‘setenv’?" "warning: implicit declaration of function ‘CloseHandle’; did you mean ‘UlongToHandle’?" timers_win32.c:68:82: error: cannot convert `long unsigned int*' to `LPDWORD' {aka `unsigned int*'} Anyone have any suggestions what I should try? It seems like building under cygwin is supported, so it must be something simple on my end but I can't find what! Thanks! Ben |
From: Jaroslav F. <jaf...@se...> - 2020-03-13 22:07:57
|
Hi Ben, > I'm following the manual pdf on how to build CanFestival3 under Cygwin, but > it halts when it gets to can_peak_win32.c: > > "error: unknown type name `CRITICAL_SECTION´; did you mean > `RTL_CRITICAL_SECTION´?" Looks like wrong "Windows.h" > "error: `INFINITE´ undeclared (first use in this function); did you mean > `KAFFINITY´?" > "error: `WAIT_OBJECT_0´ undeclared (first use in this function); did you > mean `_OBJECTID´?" > "warning: implicit declaration of function `usleep´; did you mean `fseek´?" > "warning: implicit declaration of function `SetEvent´; did you mean > `setenv´?" > "warning: implicit declaration of function `CloseHandle´; did you mean > `UlongToHandle´?" I am not CAN Festival developper - yes, I am author of can_peak_win32. > Any suggestion on what may be the problem? The main problem behind is that I did not commit all my changes to the official repository. Get my branch of CAN Festival here: http://78.108.103.11/~fojtik/CAN_Festival/ The second problem is that I never attempt to use cygwin. Visual studio only. The work is up to you. You could download here DLLs for USB Peak and PCIe Peak. And please report me your success/failure. regards Jara > Thanks! > Ben > > p.s.I tried to subscribing to the mailing list, but never received the > email confirmation/approval. > ------- End of forwarded message ------- |
From: Bettega S. <ste...@di...> - 2019-05-22 16:29:32
|
Hello, I would like to know if it is possible to read a remote SDO size. Say you have a remote SDO defined to be a R|W function with a size given from a struct (which is the data you actually can read or write to that SDO). In the firmware you need to add an additional parameter to the struct, so that the global size will grow. How can a master read the remote SDO size to know which kind of data can it read or write? Is there any way to do so or do I have to rely on another object (i.e. a RO dictionary entry with the specified size?). This is needed for compatibility with firmware already on the field. Thanks in advance and regards, Stefano Bettega --- Questa e-mail è stata controllata per individuare virus con Avast antivirus. https://www.avast.com/antivirus |
From: Howey, D. <Dyl...@te...> - 2019-03-12 13:36:49
|
Hello, The timers in timers_unix use gettimeofday() to measure elapsed time. This is a problem because the time returned by gettimeofday() can be changed by setting the system clock, e.g. with the `date' command. I've been able to set nodes offline by setting the system clock. While a program that is using this program is running, run the `date' command in a loop: # while true; do date -s '2019-03-08 10:47:00'; sleep 2.1; done Fri Mar 8 10:47:00 UTC 2019 Fri Mar 8 10:47:00 UTC 2019 2019-03-08T10:47:00.876124 [warning] UI_Touchscreen: can communication offline fault set (0xff20) <--- message generated by my application when node goes offline Attached patch which fixes the problem. Instead of gettimeofday(), use clock_gettime(CLOCK_MONOTONIC). The monotonic clock cannot be set and it will never decrease. This clock is intended to measure elapsed time. Thanks, Dylan |
From: <can...@li...> - 2019-01-03 15:38:04
|
Could you try to increase MAX_NB_TIMER to 100 or something like that and see if that makes a difference? On Sat, Dec 15, 2018 at 6:46 AM <can...@li...> wrote: > > > thanks Lars >> >> Sorry, but i have some problem understanding what you mean. >> You have 2 nodes in a sample. >> You want to have 20 samples (40 nodes) running on the same network, > > exactly . >> >> but when you get to 20 nodes, node number 20 and up does not send any >> hearbeat or is it not registerd by canfestival? > > I have an initialization , before calling StartTimerLoop(&InitNodes) in a loop ,I set the consumer heartbeat value > after StartTimerLoop(&InitNodes) if the ProducerHeartBeatTimer had been set I get the heartbeat but otherwise no heartbeat handling done. > in my case first node with any heartbeat number setting works, but the second node when the heartbeat sets for more than 15 items does not set the ProducerHeartBeatTimer and also no hearbeat for second node receives, in node number below this the program works properly > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel |
From: <can...@li...> - 2018-12-26 11:06:31
|
Hi guys, the issue it that I was not able to go in sleep because the uC was stucked in the ISR because the transceiver has no power supply at the end solved resetting the CANBUS in the ISR when the power supply is taken off ( PINC0) file: can_AVR.c ISR(CAN_INT_vect) // edited for ATmegaxxM1 #endif // GCC /****************************************************************************** CAN Interrupt ******************************************************************************/ { unsigned char saved_page = CANPAGE; unsigned char i; if ( !(PINC & (1<<PINC0)) ) // Added by me (Alessio Galli) to go out from the interrupt if in sleep Can_reset(); .... .... .... ----Messaggio originale---- Da: can...@li... Data: 24-dic-2018 12.55 A: <can...@li...> Ogg: [Canfestival-devel] R: R: Re: R: R: Re: R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE if I debug the ISR(CAN_INT_vect) I can see the full activity during the PDO transmission, and a hole waiting for the next PDO timing. How can I know when the PDO is transmitted? In order to put the uC in sleep when the canbus is waiting for the next PDO to be transmitted. Thanks ----Messaggio originale---- Da: can...@li... Data: 24-dic-2018 12.13 A: <can...@li...> Ogg: [Canfestival-devel] R: Re: R: R: Re: R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE This is a serious problem/bug. Sometime, if I remove the main power supply and the uC try to go in sleep mode (power_down) happens that it is trapped inside the CAN interrupt (ISR(CAN_INT_vect)). The issue is that I cannot clear the CANIT General Interrupt Flag because it is a read only bit. What to you suggest to do in order to avoid that the uC stays trapped in the CAN_INT_vect? Thanks in advance ----Messaggio originale---- Da: can...@li... Data: 22-dic-2018 10.01 A: <can...@li...> Ogg: Re: [Canfestival-devel] R: R: Re: R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE is it possible to mask out interrupts to limit the number of interrupts that makes it wake up? just for debugging On Fri, 21 Dec 2018, 21:02 < can...@li... wrote: Hi guys, I'm getting crazy on why I'm not able to go in sleep using the canFestival stack. Using the ISR(PCINT1_vect) sometime if I remove the power supply while the canbus is working the uC goes in a strange situation. Not in sleep but not in run as well. Anyway the power consumption is like in run. Basically, I'm using a pin to debug the situation DDRD |= (1<<PD2); // set PD2 as output DEBUG PORTD &= ~(1<<PD2); // set LOW state DEBUG but sometime happen that the uC try to goes in sleep but suddenly it comes back in "run" ----Messaggio originale---- Da: can...@li... Data: 20-dic-2018 17.10 A: < can...@li...> Ogg: [Canfestival-devel] R: Re: R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >>> can_disable was designed to work with at90can seriers so might not work with your uC looking the datasheet of ATmega64M1 the can register is the same. By the way the can_drv.h is rewritten for my uC. >>> Before sleep I think it is best to set the node in stop mode. It just disable processing and making of almost every type of canopen message, and it will also tell the network that is has stopped. Already tried to put the node in stop mode. It doesn't work. What seems to happen is that the uC seems to miss the interrupt because it has a lower priority with can interrupts. Now I'm doing other tests to solve this issue. thanks anyway ----Messaggio originale---- Da: can...@li... Data: 20-dic-2018 16.54 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE first off can_disable was designed to work with at90can seriers so might not work with your uC Other than the timer, I'm not sure what canfestival can do to wake the controller up, but i have zero experience with sleep, so keep that in mind. Before sleep I think it is best to set the node in stop mode. It just disable processing and making of almost every type of canopen message, and it will also tell the network that is has stopped. On start, what you have done looks good to me. best regards Lars On Wed, 19 Dec 2018, 19:41 < can...@li... wrote: Basically my question is what to do before to go in sleep mode and what to do just after the wake up. In the main I do: switch(baudrate) // 0=100KBaud, 1=125KBaud, 2=200KBaud, 3=250KBaud, 4=500KBaud, 5=1000KBaud { case 0: canInit(100); break; case 1: canInit(125); break; case 2: canInit(200); break; case 3: canInit(250); break; case 4: canInit(500); break; case 5: canInit(1000); break; } initTimer(); // Start timer for the CANopen stack setNodeId(&ObjDict_Data, nodeID); setState(&ObjDict_Data, Pre_operational); // Init the state so, shall I have to do something before the sleep? and after at the wake up? Thanks in advance to anyone spends time in this. ----Messaggio originale---- Da: can...@li... Data: 19-dic-2018 18.52 A: < can...@li...> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Another question: I've implemented the canFestival on a node which goes in sleep mode (POWER_DOWN) when there's no power supply. This device has a battery to keep the power supply on in OR with the main one. Of course when the battery is on I need to put everything in deep sleep mode with a consumption around 1.5uA @3V. The issue is that sometimes, if I receive something on the bus, the node suddendly wakes up from the sleep. Therefore I need to avoid this bad situation in order to avoid the battery discharge. How can I disable the canbus just before to go in sleep? Basically the sleep mode control is made in pin_change interrupt function. ISR(PCINT1_vect) // interrupt service routine called when the sensor is battery powered or not (LOWER PRIORITY THAN PCINT0_vect) { sleepMode = !digitalRead(V_supply); if ( sleepMode ) { Can_disable(); // doesn't work #ifdef SERIAL_DEBUG Serial.print('\0'); // print the NULL character to be sure that the TX port pin (PB0) is LOW #endif cli(); stopADC(); sleep(); } else turnedOn = true; } I'm quite sure that there is something in the canFestival framework which put the uC ON if something is received just before to go in sleep. Any suggestion? ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.24 A: < can...@li...> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Sorry guys my fault. The default nodeID is 0x01. Everything works correctly Thanks and sorry ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.17 A: < can...@li...> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I've found the issue. It relative on how the objectdictionary .c file is created. If I leave the file as it is /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x600; /* 1536 */ The canbus node doesn't reply to any SDO request. If I change it like this /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x605; /* 1536 */ where 0x05 is the nodeID I get the right reply from my node Is this a bug on the object dictionary building procedure in the python script? Waiting a kind reply Thanks ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 20.16 A: < can...@li...> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I did some other tests. The issue seems inside the canDispatch function in states.c. I'm using a pin as debug in order to understand if the code in some point is executed or not. basically this is done in the canDispatch: .............. case SDOrx: if (d->CurrentCommunicationState.csSDO) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedSDO(d,m); } break; case NODE_GUARD: if (d->CurrentCommunicationState.csLifeGuard) proceedNODE_GUARD(d,m); break; case NMT: if (*(d->iam_a_slave)) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedNMTstateChange(d,m); } break; ............ I can see that at the beginning, when I change the state from initialization to oeprational the case NMT is executed correctly. In fact I see the right PDO coming down to the bus. But if I send a message on the bus, the case SDOrx is not executed, then neither the proceedSDO(d,m) function I'll investigate well tomorrow yet. ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 0.00 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE symboles.c: dont know if it does any damage, but it does nothing good. it's for Linux kernel module usage you should not include it in Arduino build On Sat, 15 Dec 2018, 17:33 < can...@li... wrote: Could this issue during compilation /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: parameter names (without types) in function declaration [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: warning: data definition has no type or storage class [enabled by default] EXPORT_SYMBOL (_setODentry); ^ be an issue regarding the missing replies on the BUS. This kind of warning message is repeated for many symbols: honestly I don't think so but for completeness I give you this information Thanks ----Messaggio originale---- Da: can...@li... Data: 13-dic-2018 21.02 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Do the can messages look okay in the canDispatch function (states.c) On Thu, Dec 13, 2018 at 7:30 PM < can...@li...> wrote: > > That's the strange thing. > > The node doesn't react to any message sent > > ----Messaggio originale---- > Da: can...@li... > Data: 13-dic-2018 18.04 > A: < can...@li...> > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > Strange, > You should get a reply on "all" sdo messages > Does the node react to any messages you send to the node? > > > > > > > On Thu, Dec 13, 2018 at 10:57 AM > < can...@li...> wrote: > > > > PDOs every 100ms are running correctly. > > > > The issue remaining is the response from the node. > > > > For instance if I wish to change the event cycle for the PDO from 100ms to 70 ms I need to write on the bus: > > > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h > > > > where nodeID is 600+ID and in my case is 601 > > > > Normally when you send something on the canbus you get a response from the node that depends if the object dictionary element is implemented in the dictionary. > > > > In my case I don't get any reply from the node. > > > > I don't know why > > > > > > ----Messaggio originale---- > > Da: can...@li... > > Data: 13-dic-2018 10.07 > > A: < can...@li...> > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > > > so, everything is up and running? > > > > On Wed, 12 Dec 2018, 16:17 < can...@li... wrote: > >> > >> Ok, > >> > >> solved with > >> > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) > >> // CANIE2 = 0xFF; > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) edited for ATmegaxxM1 > >> > >> in the can_AVR.c file > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.49 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. > >> > >> So I need to change some #define in the can_drv.h file > >> > >> // #define NB_MOB 15 > >> #define NB_MOB 6 // edited for ATmegaxxM1 > >> #define NB_DATA_MAX 8 > >> #define LAST_MOB_NB (NB_MOB-1) > >> #define NO_MOB 0xFF > >> // ---------- > >> //typedef enum { > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, MOB_7, > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, MOB_14 } can_mob_t; > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} can_mob_t;// edited for ATmegaxxM1 > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.33 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Sorry my mistake, > >> > >> the number of PDO sent after the operational mode is, of course, equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 10.58 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> after some proofs I found another issue on the ATmega64M1. > >> > >> Basically and actually I'm able to receive only some PDOs at the beginning (after the operational mode). > >> The number of PDOs receive is based on the NB_RX_MOB define. > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the operational mode, if I define it = 6 I receive only 6 PDOs. > >> > >> After that the canbus goes in a sort of stuck mode and I need a master reset to resume the node. > >> > >> The timer1 works properly just adding these instructions: > >> > >> /* Added by me for Arduino compliance */ > >> TCCR1A = 0; > >> TCCR1B = 0; > >> TIMSK1 = 0; > >> /**************************************/ > >> > >> in the timer_AVR.c > >> > >> Any suggestion? > >> > >> Thanks in advance > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 16.01 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I've found the issue and it was relative to the TCCR1A value. > >> > >> Arduino touches this timer at the beginning in the wiring.c file. > >> > >> Then actually the timer works but I can receive only five PDO after the startup. > >> > >> After that the CANBUS seems stuck and I don't receive PDO anymore. > >> > >> The only way is to make a master reset in order to receive other 5 PDO. > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 12.21 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> hello, > >> I found a strange bug with setting 16bit registers. > >> > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits were applied. > >> > >> The datasheet says that for OCR1B you have to first set the upper byte as documented, and afterwards commit with the lower byte. > >> this however does not work for me. > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 11.30 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> something strange compare if I try to debug the TCNT1 and OCR1B values. > >> > >> Why I get only values from 0 to 255? > >> > >> The timer1 is a 16bit timer > >> > >> ??????????????????? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 10.04 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> > >> probably the issue is that for the ATmega64M1 I have to use the TIMER1 in CTC mode up to OCR1A as top value? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 9.12 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I'm using 8MHz external clock. > >> > >> Timer should be 8us per tick since that I'm using the clkio/64 prescaler. > >> > >> So the timing frequency is, or I suppose, 125Khz --> 8us. > >> > >> // The timer is incrementing every 8 us. > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) > >> #define US_TO_TIMEVAL(us) ((us)>>3) > >> > >> This definition seems to be correct because each timer tick = 8us. > >> > >> In order to have us we have to divide the tick count value by 8 (>>3) instead to have ms we have to multiply by 125. > >> > >> It seems exact. > >> > >> Why you told me that this define are incorrect? > >> > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 10-dic-2018 20.58 > >> A: < can...@li...> > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> This I should be able to help you with > >> in timerscfg.h there are two macros that need to be correct > >> MS_TO_TIMEVAL and US_TO_TIMEVAL > >> > >> They are used to convert ms and us to timer ticks (TIMEVAL) > >> > >> What clock frequency are you using? > >> On Mon, Dec 10, 2018 at 3:13 PM < can...@li...> wrote: > >> > > >> > Hi, > >> > > >> > the issue seems relative to the timer event. > >> > > >> > If I program a transmist PDO every 100ms I can see at the beginning some PDO every 1 or 2 ms. > >> > > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up to a new uC master reset, so a new canbus initialization process. > >> > > >> > Basically the timer_AVR.c file is exactly equal to the original one (for the at90can128) except in the initTimer function where I use the timer1 because the ATmega64M1 doesn't have the timer3 > >> > > >> > void initTimer(void) > >> > /****************************************************************************** > >> > Initializes the timer, turn on the interrupt and put the interrupt time to zero > >> > INPUT void > >> > OUTPUT void > >> > ******************************************************************************/ > >> > { > >> > TimerAlarm = 0; // Set it back to the zero > >> > > >> > // Set timer 1 for CANopen operation tick 8us max, time is 524ms > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit CK/64 > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt > >> > } > >> > > >> > Any comment/suggestion? > >> > > >> > Thanks in advance > >> > > >> > ----Messaggio originale---- > >> > Da: can...@li... > >> > Data: 6-dic-2018 21.04 > >> > A: < can...@li...> > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > > >> > Hi, > >> > I do not have access to a ATmega64M1, so there is no way AFIK for me > >> > to run and debug your code. > >> > Also near zero experience with Arduino, lots of experience with > >> > at90can128 though. > >> > > >> > I could always look at your code, but without knowing the general > >> > place where the problem is, it is close to impossible... for me :) > >> > > >> > When you say that only thing that is working is THE nmt message. > >> > Is there only one nmt message? > >> > What nmt state is the node in? > >> > Have you tried to set it to operational state? > >> > > >> > Best Regards > >> > Lars > >> > On Tue, Dec 4, 2018 at 5:26 PM < can...@li...> wrote: > >> > > > >> > > The only thing which is working is the NMT message at the startup. > >> > > > >> > > No SDO response and I cannot able to make debug now. > >> > > > >> > > Can I attach the whole directory project which stay in the Arduino/libraries folder to give you the whole files package? > >> > > > >> > > Thanks > >> > > > >> > > Bye > >> > > > >> > > Alessio > >> > > > >> > > ----Messaggio originale---- > >> > > Da: can...@li... > >> > > Data: 3-dic-2018 17.52 > >> > > A: < can...@li...> > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in Arduino IDE > >> > > > >> > > Hi, > >> > > Does anything work? > >> > > Like heartbeat or sdo? > >> > > > >> > > could you check if the code reaches buildPDO? > >> > > > >> > > Best Regards > >> > > Lars > >> > > > >> > > On Sat, Dec 1, 2018 at 6:02 PM < can...@li...> wrote: > >> > > > > >> > > > > >> > > > Dear all, > >> > > > > >> > > > first of all many thanks to the developers and people in general that spent time on this project making it an affordable CanOpen platform for everyone. > >> > > > > >> > > > I'm new on this mailing list and here to explain my problem. > >> > > > > >> > > > I'm an electronic engineer and a researcher of University of Brescia (Italy) and I'm trying to make the canFestival working on Arduino using the Atmega64M1 uC. > >> > > > > >> > > > I know that there is the CanFestivino project that is the CanFestival porting for the Arduino IDE and the Atmega328p with the external controller MCP2515. > >> > > > > >> > > > It works but the guy that makes the porting cut several features to fit the code with the Atmega328 ROM and RAM. > >> > > > > >> > > > I reached it compilable in Arduino starting from the AVR example for the ATCAN90128. This uC is very similar to the ATmega64M1. > >> > > > > >> > > > The only things that I did was to change the timer, from timer3 to timer1 (timer3 is not present on the ATmega64M1) and some tiny modifications in the CAN driver. > >> > > > > >> > > > Actually my project is compilable in Arduino where I created an example to read an analog input (A0) sending it through a PDO each 100ms. > >> > > > > >> > > > The only thing to need in order to compile it is the Arduino IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, ...HERE. > >> > > > > >> > > > I cannot figure out why but actually the example doesn't work and I'm struggling on it....making me a bit crazy because I don't understand why. > >> > > > > >> > > > > >> > > > > >> > > > Hope that someone can help me in this.... > >> > > > > >> > > > Thanks > >> > > > > >> > > > Alessio > >> > > > _______________________________________________ > >> > > > Canfestival-devel mailing list > >> > > > Can...@li... > >> > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > > > _______________________________________________ > > Canfestival-devel mailing list > > Can...@li... > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel |
From: <can...@li...> - 2018-12-24 11:55:50
|
if I debug the ISR(CAN_INT_vect) I can see the full activity during the PDO transmission, and a hole waiting for the next PDO timing. How can I know when the PDO is transmitted? In order to put the uC in sleep when the canbus is waiting for the next PDO to be transmitted. Thanks ----Messaggio originale---- Da: can...@li... Data: 24-dic-2018 12.13 A: <can...@li...> Ogg: [Canfestival-devel] R: Re: R: R: Re: R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE This is a serious problem/bug. Sometime, if I remove the main power supply and the uC try to go in sleep mode (power_down) happens that it is trapped inside the CAN interrupt (ISR(CAN_INT_vect)). The issue is that I cannot clear the CANIT General Interrupt Flag because it is a read only bit. What to you suggest to do in order to avoid that the uC stays trapped in the CAN_INT_vect? Thanks in advance ----Messaggio originale---- Da: can...@li... Data: 22-dic-2018 10.01 A: <can...@li...> Ogg: Re: [Canfestival-devel] R: R: Re: R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE is it possible to mask out interrupts to limit the number of interrupts that makes it wake up? just for debugging On Fri, 21 Dec 2018, 21:02 < can...@li... wrote: Hi guys, I'm getting crazy on why I'm not able to go in sleep using the canFestival stack. Using the ISR(PCINT1_vect) sometime if I remove the power supply while the canbus is working the uC goes in a strange situation. Not in sleep but not in run as well. Anyway the power consumption is like in run. Basically, I'm using a pin to debug the situation DDRD |= (1<<PD2); // set PD2 as output DEBUG PORTD &= ~(1<<PD2); // set LOW state DEBUG but sometime happen that the uC try to goes in sleep but suddenly it comes back in "run" ----Messaggio originale---- Da: can...@li... Data: 20-dic-2018 17.10 A: < can...@li...> Ogg: [Canfestival-devel] R: Re: R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >>> can_disable was designed to work with at90can seriers so might not work with your uC looking the datasheet of ATmega64M1 the can register is the same. By the way the can_drv.h is rewritten for my uC. >>> Before sleep I think it is best to set the node in stop mode. It just disable processing and making of almost every type of canopen message, and it will also tell the network that is has stopped. Already tried to put the node in stop mode. It doesn't work. What seems to happen is that the uC seems to miss the interrupt because it has a lower priority with can interrupts. Now I'm doing other tests to solve this issue. thanks anyway ----Messaggio originale---- Da: can...@li... Data: 20-dic-2018 16.54 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE first off can_disable was designed to work with at90can seriers so might not work with your uC Other than the timer, I'm not sure what canfestival can do to wake the controller up, but i have zero experience with sleep, so keep that in mind. Before sleep I think it is best to set the node in stop mode. It just disable processing and making of almost every type of canopen message, and it will also tell the network that is has stopped. On start, what you have done looks good to me. best regards Lars On Wed, 19 Dec 2018, 19:41 < can...@li... wrote: Basically my question is what to do before to go in sleep mode and what to do just after the wake up. In the main I do: switch(baudrate) // 0=100KBaud, 1=125KBaud, 2=200KBaud, 3=250KBaud, 4=500KBaud, 5=1000KBaud { case 0: canInit(100); break; case 1: canInit(125); break; case 2: canInit(200); break; case 3: canInit(250); break; case 4: canInit(500); break; case 5: canInit(1000); break; } initTimer(); // Start timer for the CANopen stack setNodeId(&ObjDict_Data, nodeID); setState(&ObjDict_Data, Pre_operational); // Init the state so, shall I have to do something before the sleep? and after at the wake up? Thanks in advance to anyone spends time in this. ----Messaggio originale---- Da: can...@li... Data: 19-dic-2018 18.52 A: < can...@li...> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Another question: I've implemented the canFestival on a node which goes in sleep mode (POWER_DOWN) when there's no power supply. This device has a battery to keep the power supply on in OR with the main one. Of course when the battery is on I need to put everything in deep sleep mode with a consumption around 1.5uA @3V. The issue is that sometimes, if I receive something on the bus, the node suddendly wakes up from the sleep. Therefore I need to avoid this bad situation in order to avoid the battery discharge. How can I disable the canbus just before to go in sleep? Basically the sleep mode control is made in pin_change interrupt function. ISR(PCINT1_vect) // interrupt service routine called when the sensor is battery powered or not (LOWER PRIORITY THAN PCINT0_vect) { sleepMode = !digitalRead(V_supply); if ( sleepMode ) { Can_disable(); // doesn't work #ifdef SERIAL_DEBUG Serial.print('\0'); // print the NULL character to be sure that the TX port pin (PB0) is LOW #endif cli(); stopADC(); sleep(); } else turnedOn = true; } I'm quite sure that there is something in the canFestival framework which put the uC ON if something is received just before to go in sleep. Any suggestion? ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.24 A: < can...@li...> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Sorry guys my fault. The default nodeID is 0x01. Everything works correctly Thanks and sorry ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.17 A: < can...@li...> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I've found the issue. It relative on how the objectdictionary .c file is created. If I leave the file as it is /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x600; /* 1536 */ The canbus node doesn't reply to any SDO request. If I change it like this /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x605; /* 1536 */ where 0x05 is the nodeID I get the right reply from my node Is this a bug on the object dictionary building procedure in the python script? Waiting a kind reply Thanks ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 20.16 A: < can...@li...> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I did some other tests. The issue seems inside the canDispatch function in states.c. I'm using a pin as debug in order to understand if the code in some point is executed or not. basically this is done in the canDispatch: .............. case SDOrx: if (d->CurrentCommunicationState.csSDO) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedSDO(d,m); } break; case NODE_GUARD: if (d->CurrentCommunicationState.csLifeGuard) proceedNODE_GUARD(d,m); break; case NMT: if (*(d->iam_a_slave)) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedNMTstateChange(d,m); } break; ............ I can see that at the beginning, when I change the state from initialization to oeprational the case NMT is executed correctly. In fact I see the right PDO coming down to the bus. But if I send a message on the bus, the case SDOrx is not executed, then neither the proceedSDO(d,m) function I'll investigate well tomorrow yet. ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 0.00 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE symboles.c: dont know if it does any damage, but it does nothing good. it's for Linux kernel module usage you should not include it in Arduino build On Sat, 15 Dec 2018, 17:33 < can...@li... wrote: Could this issue during compilation /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: parameter names (without types) in function declaration [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: warning: data definition has no type or storage class [enabled by default] EXPORT_SYMBOL (_setODentry); ^ be an issue regarding the missing replies on the BUS. This kind of warning message is repeated for many symbols: honestly I don't think so but for completeness I give you this information Thanks ----Messaggio originale---- Da: can...@li... Data: 13-dic-2018 21.02 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Do the can messages look okay in the canDispatch function (states.c) On Thu, Dec 13, 2018 at 7:30 PM < can...@li...> wrote: > > That's the strange thing. > > The node doesn't react to any message sent > > ----Messaggio originale---- > Da: can...@li... > Data: 13-dic-2018 18.04 > A: < can...@li...> > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > Strange, > You should get a reply on "all" sdo messages > Does the node react to any messages you send to the node? > > > > > > > On Thu, Dec 13, 2018 at 10:57 AM > < can...@li...> wrote: > > > > PDOs every 100ms are running correctly. > > > > The issue remaining is the response from the node. > > > > For instance if I wish to change the event cycle for the PDO from 100ms to 70 ms I need to write on the bus: > > > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h > > > > where nodeID is 600+ID and in my case is 601 > > > > Normally when you send something on the canbus you get a response from the node that depends if the object dictionary element is implemented in the dictionary. > > > > In my case I don't get any reply from the node. > > > > I don't know why > > > > > > ----Messaggio originale---- > > Da: can...@li... > > Data: 13-dic-2018 10.07 > > A: < can...@li...> > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > > > so, everything is up and running? > > > > On Wed, 12 Dec 2018, 16:17 < can...@li... wrote: > >> > >> Ok, > >> > >> solved with > >> > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) > >> // CANIE2 = 0xFF; > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) edited for ATmegaxxM1 > >> > >> in the can_AVR.c file > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.49 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. > >> > >> So I need to change some #define in the can_drv.h file > >> > >> // #define NB_MOB 15 > >> #define NB_MOB 6 // edited for ATmegaxxM1 > >> #define NB_DATA_MAX 8 > >> #define LAST_MOB_NB (NB_MOB-1) > >> #define NO_MOB 0xFF > >> // ---------- > >> //typedef enum { > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, MOB_7, > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, MOB_14 } can_mob_t; > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} can_mob_t;// edited for ATmegaxxM1 > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.33 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Sorry my mistake, > >> > >> the number of PDO sent after the operational mode is, of course, equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 10.58 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> after some proofs I found another issue on the ATmega64M1. > >> > >> Basically and actually I'm able to receive only some PDOs at the beginning (after the operational mode). > >> The number of PDOs receive is based on the NB_RX_MOB define. > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the operational mode, if I define it = 6 I receive only 6 PDOs. > >> > >> After that the canbus goes in a sort of stuck mode and I need a master reset to resume the node. > >> > >> The timer1 works properly just adding these instructions: > >> > >> /* Added by me for Arduino compliance */ > >> TCCR1A = 0; > >> TCCR1B = 0; > >> TIMSK1 = 0; > >> /**************************************/ > >> > >> in the timer_AVR.c > >> > >> Any suggestion? > >> > >> Thanks in advance > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 16.01 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I've found the issue and it was relative to the TCCR1A value. > >> > >> Arduino touches this timer at the beginning in the wiring.c file. > >> > >> Then actually the timer works but I can receive only five PDO after the startup. > >> > >> After that the CANBUS seems stuck and I don't receive PDO anymore. > >> > >> The only way is to make a master reset in order to receive other 5 PDO. > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 12.21 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> hello, > >> I found a strange bug with setting 16bit registers. > >> > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits were applied. > >> > >> The datasheet says that for OCR1B you have to first set the upper byte as documented, and afterwards commit with the lower byte. > >> this however does not work for me. > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 11.30 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> something strange compare if I try to debug the TCNT1 and OCR1B values. > >> > >> Why I get only values from 0 to 255? > >> > >> The timer1 is a 16bit timer > >> > >> ??????????????????? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 10.04 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> > >> probably the issue is that for the ATmega64M1 I have to use the TIMER1 in CTC mode up to OCR1A as top value? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 9.12 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I'm using 8MHz external clock. > >> > >> Timer should be 8us per tick since that I'm using the clkio/64 prescaler. > >> > >> So the timing frequency is, or I suppose, 125Khz --> 8us. > >> > >> // The timer is incrementing every 8 us. > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) > >> #define US_TO_TIMEVAL(us) ((us)>>3) > >> > >> This definition seems to be correct because each timer tick = 8us. > >> > >> In order to have us we have to divide the tick count value by 8 (>>3) instead to have ms we have to multiply by 125. > >> > >> It seems exact. > >> > >> Why you told me that this define are incorrect? > >> > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 10-dic-2018 20.58 > >> A: < can...@li...> > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> This I should be able to help you with > >> in timerscfg.h there are two macros that need to be correct > >> MS_TO_TIMEVAL and US_TO_TIMEVAL > >> > >> They are used to convert ms and us to timer ticks (TIMEVAL) > >> > >> What clock frequency are you using? > >> On Mon, Dec 10, 2018 at 3:13 PM < can...@li...> wrote: > >> > > >> > Hi, > >> > > >> > the issue seems relative to the timer event. > >> > > >> > If I program a transmist PDO every 100ms I can see at the beginning some PDO every 1 or 2 ms. > >> > > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up to a new uC master reset, so a new canbus initialization process. > >> > > >> > Basically the timer_AVR.c file is exactly equal to the original one (for the at90can128) except in the initTimer function where I use the timer1 because the ATmega64M1 doesn't have the timer3 > >> > > >> > void initTimer(void) > >> > /****************************************************************************** > >> > Initializes the timer, turn on the interrupt and put the interrupt time to zero > >> > INPUT void > >> > OUTPUT void > >> > ******************************************************************************/ > >> > { > >> > TimerAlarm = 0; // Set it back to the zero > >> > > >> > // Set timer 1 for CANopen operation tick 8us max, time is 524ms > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit CK/64 > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt > >> > } > >> > > >> > Any comment/suggestion? > >> > > >> > Thanks in advance > >> > > >> > ----Messaggio originale---- > >> > Da: can...@li... > >> > Data: 6-dic-2018 21.04 > >> > A: < can...@li...> > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > > >> > Hi, > >> > I do not have access to a ATmega64M1, so there is no way AFIK for me > >> > to run and debug your code. > >> > Also near zero experience with Arduino, lots of experience with > >> > at90can128 though. > >> > > >> > I could always look at your code, but without knowing the general > >> > place where the problem is, it is close to impossible... for me :) > >> > > >> > When you say that only thing that is working is THE nmt message. > >> > Is there only one nmt message? > >> > What nmt state is the node in? > >> > Have you tried to set it to operational state? > >> > > >> > Best Regards > >> > Lars > >> > On Tue, Dec 4, 2018 at 5:26 PM < can...@li...> wrote: > >> > > > >> > > The only thing which is working is the NMT message at the startup. > >> > > > >> > > No SDO response and I cannot able to make debug now. > >> > > > >> > > Can I attach the whole directory project which stay in the Arduino/libraries folder to give you the whole files package? > >> > > > >> > > Thanks > >> > > > >> > > Bye > >> > > > >> > > Alessio > >> > > > >> > > ----Messaggio originale---- > >> > > Da: can...@li... > >> > > Data: 3-dic-2018 17.52 > >> > > A: < can...@li...> > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in Arduino IDE > >> > > > >> > > Hi, > >> > > Does anything work? > >> > > Like heartbeat or sdo? > >> > > > >> > > could you check if the code reaches buildPDO? > >> > > > >> > > Best Regards > >> > > Lars > >> > > > >> > > On Sat, Dec 1, 2018 at 6:02 PM < can...@li...> wrote: > >> > > > > >> > > > > >> > > > Dear all, > >> > > > > >> > > > first of all many thanks to the developers and people in general that spent time on this project making it an affordable CanOpen platform for everyone. > >> > > > > >> > > > I'm new on this mailing list and here to explain my problem. > >> > > > > >> > > > I'm an electronic engineer and a researcher of University of Brescia (Italy) and I'm trying to make the canFestival working on Arduino using the Atmega64M1 uC. > >> > > > > >> > > > I know that there is the CanFestivino project that is the CanFestival porting for the Arduino IDE and the Atmega328p with the external controller MCP2515. > >> > > > > >> > > > It works but the guy that makes the porting cut several features to fit the code with the Atmega328 ROM and RAM. > >> > > > > >> > > > I reached it compilable in Arduino starting from the AVR example for the ATCAN90128. This uC is very similar to the ATmega64M1. > >> > > > > >> > > > The only things that I did was to change the timer, from timer3 to timer1 (timer3 is not present on the ATmega64M1) and some tiny modifications in the CAN driver. > >> > > > > >> > > > Actually my project is compilable in Arduino where I created an example to read an analog input (A0) sending it through a PDO each 100ms. > >> > > > > >> > > > The only thing to need in order to compile it is the Arduino IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, ...HERE. > >> > > > > >> > > > I cannot figure out why but actually the example doesn't work and I'm struggling on it....making me a bit crazy because I don't understand why. > >> > > > > >> > > > > >> > > > > >> > > > Hope that someone can help me in this.... > >> > > > > >> > > > Thanks > >> > > > > >> > > > Alessio > >> > > > _______________________________________________ > >> > > > Canfestival-devel mailing list > >> > > > Can...@li... > >> > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > > > _______________________________________________ > > Canfestival-devel mailing list > > Can...@li... > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel |
From: <can...@li...> - 2018-12-24 11:13:30
|
This is a serious problem/bug. Sometime, if I remove the main power supply and the uC try to go in sleep mode (power_down) happens that it is trapped inside the CAN interrupt (ISR(CAN_INT_vect)). The issue is that I cannot clear the CANIT General Interrupt Flag because it is a read only bit. What to you suggest to do in order to avoid that the uC stays trapped in the CAN_INT_vect? Thanks in advance ----Messaggio originale---- Da: can...@li... Data: 22-dic-2018 10.01 A: <can...@li...> Ogg: Re: [Canfestival-devel] R: R: Re: R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE is it possible to mask out interrupts to limit the number of interrupts that makes it wake up? just for debugging On Fri, 21 Dec 2018, 21:02 < can...@li... wrote: Hi guys, I'm getting crazy on why I'm not able to go in sleep using the canFestival stack. Using the ISR(PCINT1_vect) sometime if I remove the power supply while the canbus is working the uC goes in a strange situation. Not in sleep but not in run as well. Anyway the power consumption is like in run. Basically, I'm using a pin to debug the situation DDRD |= (1<<PD2); // set PD2 as output DEBUG PORTD &= ~(1<<PD2); // set LOW state DEBUG but sometime happen that the uC try to goes in sleep but suddenly it comes back in "run" ----Messaggio originale---- Da: can...@li... Data: 20-dic-2018 17.10 A: < can...@li...> Ogg: [Canfestival-devel] R: Re: R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >>> can_disable was designed to work with at90can seriers so might not work with your uC looking the datasheet of ATmega64M1 the can register is the same. By the way the can_drv.h is rewritten for my uC. >>> Before sleep I think it is best to set the node in stop mode. It just disable processing and making of almost every type of canopen message, and it will also tell the network that is has stopped. Already tried to put the node in stop mode. It doesn't work. What seems to happen is that the uC seems to miss the interrupt because it has a lower priority with can interrupts. Now I'm doing other tests to solve this issue. thanks anyway ----Messaggio originale---- Da: can...@li... Data: 20-dic-2018 16.54 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE first off can_disable was designed to work with at90can seriers so might not work with your uC Other than the timer, I'm not sure what canfestival can do to wake the controller up, but i have zero experience with sleep, so keep that in mind. Before sleep I think it is best to set the node in stop mode. It just disable processing and making of almost every type of canopen message, and it will also tell the network that is has stopped. On start, what you have done looks good to me. best regards Lars On Wed, 19 Dec 2018, 19:41 < can...@li... wrote: Basically my question is what to do before to go in sleep mode and what to do just after the wake up. In the main I do: switch(baudrate) // 0=100KBaud, 1=125KBaud, 2=200KBaud, 3=250KBaud, 4=500KBaud, 5=1000KBaud { case 0: canInit(100); break; case 1: canInit(125); break; case 2: canInit(200); break; case 3: canInit(250); break; case 4: canInit(500); break; case 5: canInit(1000); break; } initTimer(); // Start timer for the CANopen stack setNodeId(&ObjDict_Data, nodeID); setState(&ObjDict_Data, Pre_operational); // Init the state so, shall I have to do something before the sleep? and after at the wake up? Thanks in advance to anyone spends time in this. ----Messaggio originale---- Da: can...@li... Data: 19-dic-2018 18.52 A: < can...@li...> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Another question: I've implemented the canFestival on a node which goes in sleep mode (POWER_DOWN) when there's no power supply. This device has a battery to keep the power supply on in OR with the main one. Of course when the battery is on I need to put everything in deep sleep mode with a consumption around 1.5uA @3V. The issue is that sometimes, if I receive something on the bus, the node suddendly wakes up from the sleep. Therefore I need to avoid this bad situation in order to avoid the battery discharge. How can I disable the canbus just before to go in sleep? Basically the sleep mode control is made in pin_change interrupt function. ISR(PCINT1_vect) // interrupt service routine called when the sensor is battery powered or not (LOWER PRIORITY THAN PCINT0_vect) { sleepMode = !digitalRead(V_supply); if ( sleepMode ) { Can_disable(); // doesn't work #ifdef SERIAL_DEBUG Serial.print('\0'); // print the NULL character to be sure that the TX port pin (PB0) is LOW #endif cli(); stopADC(); sleep(); } else turnedOn = true; } I'm quite sure that there is something in the canFestival framework which put the uC ON if something is received just before to go in sleep. Any suggestion? ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.24 A: < can...@li...> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Sorry guys my fault. The default nodeID is 0x01. Everything works correctly Thanks and sorry ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.17 A: < can...@li...> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I've found the issue. It relative on how the objectdictionary .c file is created. If I leave the file as it is /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x600; /* 1536 */ The canbus node doesn't reply to any SDO request. If I change it like this /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x605; /* 1536 */ where 0x05 is the nodeID I get the right reply from my node Is this a bug on the object dictionary building procedure in the python script? Waiting a kind reply Thanks ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 20.16 A: < can...@li...> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I did some other tests. The issue seems inside the canDispatch function in states.c. I'm using a pin as debug in order to understand if the code in some point is executed or not. basically this is done in the canDispatch: .............. case SDOrx: if (d->CurrentCommunicationState.csSDO) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedSDO(d,m); } break; case NODE_GUARD: if (d->CurrentCommunicationState.csLifeGuard) proceedNODE_GUARD(d,m); break; case NMT: if (*(d->iam_a_slave)) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedNMTstateChange(d,m); } break; ............ I can see that at the beginning, when I change the state from initialization to oeprational the case NMT is executed correctly. In fact I see the right PDO coming down to the bus. But if I send a message on the bus, the case SDOrx is not executed, then neither the proceedSDO(d,m) function I'll investigate well tomorrow yet. ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 0.00 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE symboles.c: dont know if it does any damage, but it does nothing good. it's for Linux kernel module usage you should not include it in Arduino build On Sat, 15 Dec 2018, 17:33 < can...@li... wrote: Could this issue during compilation /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: parameter names (without types) in function declaration [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: warning: data definition has no type or storage class [enabled by default] EXPORT_SYMBOL (_setODentry); ^ be an issue regarding the missing replies on the BUS. This kind of warning message is repeated for many symbols: honestly I don't think so but for completeness I give you this information Thanks ----Messaggio originale---- Da: can...@li... Data: 13-dic-2018 21.02 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Do the can messages look okay in the canDispatch function (states.c) On Thu, Dec 13, 2018 at 7:30 PM < can...@li...> wrote: > > That's the strange thing. > > The node doesn't react to any message sent > > ----Messaggio originale---- > Da: can...@li... > Data: 13-dic-2018 18.04 > A: < can...@li...> > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > Strange, > You should get a reply on "all" sdo messages > Does the node react to any messages you send to the node? > > > > > > > On Thu, Dec 13, 2018 at 10:57 AM > < can...@li...> wrote: > > > > PDOs every 100ms are running correctly. > > > > The issue remaining is the response from the node. > > > > For instance if I wish to change the event cycle for the PDO from 100ms to 70 ms I need to write on the bus: > > > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h > > > > where nodeID is 600+ID and in my case is 601 > > > > Normally when you send something on the canbus you get a response from the node that depends if the object dictionary element is implemented in the dictionary. > > > > In my case I don't get any reply from the node. > > > > I don't know why > > > > > > ----Messaggio originale---- > > Da: can...@li... > > Data: 13-dic-2018 10.07 > > A: < can...@li...> > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > > > so, everything is up and running? > > > > On Wed, 12 Dec 2018, 16:17 < can...@li... wrote: > >> > >> Ok, > >> > >> solved with > >> > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) > >> // CANIE2 = 0xFF; > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) edited for ATmegaxxM1 > >> > >> in the can_AVR.c file > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.49 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. > >> > >> So I need to change some #define in the can_drv.h file > >> > >> // #define NB_MOB 15 > >> #define NB_MOB 6 // edited for ATmegaxxM1 > >> #define NB_DATA_MAX 8 > >> #define LAST_MOB_NB (NB_MOB-1) > >> #define NO_MOB 0xFF > >> // ---------- > >> //typedef enum { > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, MOB_7, > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, MOB_14 } can_mob_t; > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} can_mob_t;// edited for ATmegaxxM1 > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.33 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Sorry my mistake, > >> > >> the number of PDO sent after the operational mode is, of course, equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 10.58 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> after some proofs I found another issue on the ATmega64M1. > >> > >> Basically and actually I'm able to receive only some PDOs at the beginning (after the operational mode). > >> The number of PDOs receive is based on the NB_RX_MOB define. > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the operational mode, if I define it = 6 I receive only 6 PDOs. > >> > >> After that the canbus goes in a sort of stuck mode and I need a master reset to resume the node. > >> > >> The timer1 works properly just adding these instructions: > >> > >> /* Added by me for Arduino compliance */ > >> TCCR1A = 0; > >> TCCR1B = 0; > >> TIMSK1 = 0; > >> /**************************************/ > >> > >> in the timer_AVR.c > >> > >> Any suggestion? > >> > >> Thanks in advance > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 16.01 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I've found the issue and it was relative to the TCCR1A value. > >> > >> Arduino touches this timer at the beginning in the wiring.c file. > >> > >> Then actually the timer works but I can receive only five PDO after the startup. > >> > >> After that the CANBUS seems stuck and I don't receive PDO anymore. > >> > >> The only way is to make a master reset in order to receive other 5 PDO. > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 12.21 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> hello, > >> I found a strange bug with setting 16bit registers. > >> > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits were applied. > >> > >> The datasheet says that for OCR1B you have to first set the upper byte as documented, and afterwards commit with the lower byte. > >> this however does not work for me. > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 11.30 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> something strange compare if I try to debug the TCNT1 and OCR1B values. > >> > >> Why I get only values from 0 to 255? > >> > >> The timer1 is a 16bit timer > >> > >> ??????????????????? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 10.04 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> > >> probably the issue is that for the ATmega64M1 I have to use the TIMER1 in CTC mode up to OCR1A as top value? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 9.12 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I'm using 8MHz external clock. > >> > >> Timer should be 8us per tick since that I'm using the clkio/64 prescaler. > >> > >> So the timing frequency is, or I suppose, 125Khz --> 8us. > >> > >> // The timer is incrementing every 8 us. > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) > >> #define US_TO_TIMEVAL(us) ((us)>>3) > >> > >> This definition seems to be correct because each timer tick = 8us. > >> > >> In order to have us we have to divide the tick count value by 8 (>>3) instead to have ms we have to multiply by 125. > >> > >> It seems exact. > >> > >> Why you told me that this define are incorrect? > >> > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 10-dic-2018 20.58 > >> A: < can...@li...> > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> This I should be able to help you with > >> in timerscfg.h there are two macros that need to be correct > >> MS_TO_TIMEVAL and US_TO_TIMEVAL > >> > >> They are used to convert ms and us to timer ticks (TIMEVAL) > >> > >> What clock frequency are you using? > >> On Mon, Dec 10, 2018 at 3:13 PM < can...@li...> wrote: > >> > > >> > Hi, > >> > > >> > the issue seems relative to the timer event. > >> > > >> > If I program a transmist PDO every 100ms I can see at the beginning some PDO every 1 or 2 ms. > >> > > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up to a new uC master reset, so a new canbus initialization process. > >> > > >> > Basically the timer_AVR.c file is exactly equal to the original one (for the at90can128) except in the initTimer function where I use the timer1 because the ATmega64M1 doesn't have the timer3 > >> > > >> > void initTimer(void) > >> > /****************************************************************************** > >> > Initializes the timer, turn on the interrupt and put the interrupt time to zero > >> > INPUT void > >> > OUTPUT void > >> > ******************************************************************************/ > >> > { > >> > TimerAlarm = 0; // Set it back to the zero > >> > > >> > // Set timer 1 for CANopen operation tick 8us max, time is 524ms > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit CK/64 > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt > >> > } > >> > > >> > Any comment/suggestion? > >> > > >> > Thanks in advance > >> > > >> > ----Messaggio originale---- > >> > Da: can...@li... > >> > Data: 6-dic-2018 21.04 > >> > A: < can...@li...> > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > > >> > Hi, > >> > I do not have access to a ATmega64M1, so there is no way AFIK for me > >> > to run and debug your code. > >> > Also near zero experience with Arduino, lots of experience with > >> > at90can128 though. > >> > > >> > I could always look at your code, but without knowing the general > >> > place where the problem is, it is close to impossible... for me :) > >> > > >> > When you say that only thing that is working is THE nmt message. > >> > Is there only one nmt message? > >> > What nmt state is the node in? > >> > Have you tried to set it to operational state? > >> > > >> > Best Regards > >> > Lars > >> > On Tue, Dec 4, 2018 at 5:26 PM < can...@li...> wrote: > >> > > > >> > > The only thing which is working is the NMT message at the startup. > >> > > > >> > > No SDO response and I cannot able to make debug now. > >> > > > >> > > Can I attach the whole directory project which stay in the Arduino/libraries folder to give you the whole files package? > >> > > > >> > > Thanks > >> > > > >> > > Bye > >> > > > >> > > Alessio > >> > > > >> > > ----Messaggio originale---- > >> > > Da: can...@li... > >> > > Data: 3-dic-2018 17.52 > >> > > A: < can...@li...> > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in Arduino IDE > >> > > > >> > > Hi, > >> > > Does anything work? > >> > > Like heartbeat or sdo? > >> > > > >> > > could you check if the code reaches buildPDO? > >> > > > >> > > Best Regards > >> > > Lars > >> > > > >> > > On Sat, Dec 1, 2018 at 6:02 PM < can...@li...> wrote: > >> > > > > >> > > > > >> > > > Dear all, > >> > > > > >> > > > first of all many thanks to the developers and people in general that spent time on this project making it an affordable CanOpen platform for everyone. > >> > > > > >> > > > I'm new on this mailing list and here to explain my problem. > >> > > > > >> > > > I'm an electronic engineer and a researcher of University of Brescia (Italy) and I'm trying to make the canFestival working on Arduino using the Atmega64M1 uC. > >> > > > > >> > > > I know that there is the CanFestivino project that is the CanFestival porting for the Arduino IDE and the Atmega328p with the external controller MCP2515. > >> > > > > >> > > > It works but the guy that makes the porting cut several features to fit the code with the Atmega328 ROM and RAM. > >> > > > > >> > > > I reached it compilable in Arduino starting from the AVR example for the ATCAN90128. This uC is very similar to the ATmega64M1. > >> > > > > >> > > > The only things that I did was to change the timer, from timer3 to timer1 (timer3 is not present on the ATmega64M1) and some tiny modifications in the CAN driver. > >> > > > > >> > > > Actually my project is compilable in Arduino where I created an example to read an analog input (A0) sending it through a PDO each 100ms. > >> > > > > >> > > > The only thing to need in order to compile it is the Arduino IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, ...HERE. > >> > > > > >> > > > I cannot figure out why but actually the example doesn't work and I'm struggling on it....making me a bit crazy because I don't understand why. > >> > > > > >> > > > > >> > > > > >> > > > Hope that someone can help me in this.... > >> > > > > >> > > > Thanks > >> > > > > >> > > > Alessio > >> > > > _______________________________________________ > >> > > > Canfestival-devel mailing list > >> > > > Can...@li... > >> > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > > > _______________________________________________ > > Canfestival-devel mailing list > > Can...@li... > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel |
From: <can...@li...> - 2018-12-22 09:24:06
|
I tried to mask the CANGIE register with no success. I'll do other tests Thanks ----Messaggio originale---- Da: can...@li... Data: 22-dic-2018 10.01 A: <can...@li...> Ogg: Re: [Canfestival-devel] R: R: Re: R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE is it possible to mask out interrupts to limit the number of interrupts that makes it wake up? just for debugging On Fri, 21 Dec 2018, 21:02 < can...@li... wrote: Hi guys, I'm getting crazy on why I'm not able to go in sleep using the canFestival stack. Using the ISR(PCINT1_vect) sometime if I remove the power supply while the canbus is working the uC goes in a strange situation. Not in sleep but not in run as well. Anyway the power consumption is like in run. Basically, I'm using a pin to debug the situation DDRD |= (1<<PD2); // set PD2 as output DEBUG PORTD &= ~(1<<PD2); // set LOW state DEBUG but sometime happen that the uC try to goes in sleep but suddenly it comes back in "run" ----Messaggio originale---- Da: can...@li... Data: 20-dic-2018 17.10 A: < can...@li...> Ogg: [Canfestival-devel] R: Re: R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >>> can_disable was designed to work with at90can seriers so might not work with your uC looking the datasheet of ATmega64M1 the can register is the same. By the way the can_drv.h is rewritten for my uC. >>> Before sleep I think it is best to set the node in stop mode. It just disable processing and making of almost every type of canopen message, and it will also tell the network that is has stopped. Already tried to put the node in stop mode. It doesn't work. What seems to happen is that the uC seems to miss the interrupt because it has a lower priority with can interrupts. Now I'm doing other tests to solve this issue. thanks anyway ----Messaggio originale---- Da: can...@li... Data: 20-dic-2018 16.54 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE first off can_disable was designed to work with at90can seriers so might not work with your uC Other than the timer, I'm not sure what canfestival can do to wake the controller up, but i have zero experience with sleep, so keep that in mind. Before sleep I think it is best to set the node in stop mode. It just disable processing and making of almost every type of canopen message, and it will also tell the network that is has stopped. On start, what you have done looks good to me. best regards Lars On Wed, 19 Dec 2018, 19:41 < can...@li... wrote: Basically my question is what to do before to go in sleep mode and what to do just after the wake up. In the main I do: switch(baudrate) // 0=100KBaud, 1=125KBaud, 2=200KBaud, 3=250KBaud, 4=500KBaud, 5=1000KBaud { case 0: canInit(100); break; case 1: canInit(125); break; case 2: canInit(200); break; case 3: canInit(250); break; case 4: canInit(500); break; case 5: canInit(1000); break; } initTimer(); // Start timer for the CANopen stack setNodeId(&ObjDict_Data, nodeID); setState(&ObjDict_Data, Pre_operational); // Init the state so, shall I have to do something before the sleep? and after at the wake up? Thanks in advance to anyone spends time in this. ----Messaggio originale---- Da: can...@li... Data: 19-dic-2018 18.52 A: < can...@li...> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Another question: I've implemented the canFestival on a node which goes in sleep mode (POWER_DOWN) when there's no power supply. This device has a battery to keep the power supply on in OR with the main one. Of course when the battery is on I need to put everything in deep sleep mode with a consumption around 1.5uA @3V. The issue is that sometimes, if I receive something on the bus, the node suddendly wakes up from the sleep. Therefore I need to avoid this bad situation in order to avoid the battery discharge. How can I disable the canbus just before to go in sleep? Basically the sleep mode control is made in pin_change interrupt function. ISR(PCINT1_vect) // interrupt service routine called when the sensor is battery powered or not (LOWER PRIORITY THAN PCINT0_vect) { sleepMode = !digitalRead(V_supply); if ( sleepMode ) { Can_disable(); // doesn't work #ifdef SERIAL_DEBUG Serial.print('\0'); // print the NULL character to be sure that the TX port pin (PB0) is LOW #endif cli(); stopADC(); sleep(); } else turnedOn = true; } I'm quite sure that there is something in the canFestival framework which put the uC ON if something is received just before to go in sleep. Any suggestion? ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.24 A: < can...@li...> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Sorry guys my fault. The default nodeID is 0x01. Everything works correctly Thanks and sorry ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.17 A: < can...@li...> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I've found the issue. It relative on how the objectdictionary .c file is created. If I leave the file as it is /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x600; /* 1536 */ The canbus node doesn't reply to any SDO request. If I change it like this /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x605; /* 1536 */ where 0x05 is the nodeID I get the right reply from my node Is this a bug on the object dictionary building procedure in the python script? Waiting a kind reply Thanks ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 20.16 A: < can...@li...> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I did some other tests. The issue seems inside the canDispatch function in states.c. I'm using a pin as debug in order to understand if the code in some point is executed or not. basically this is done in the canDispatch: .............. case SDOrx: if (d->CurrentCommunicationState.csSDO) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedSDO(d,m); } break; case NODE_GUARD: if (d->CurrentCommunicationState.csLifeGuard) proceedNODE_GUARD(d,m); break; case NMT: if (*(d->iam_a_slave)) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedNMTstateChange(d,m); } break; ............ I can see that at the beginning, when I change the state from initialization to oeprational the case NMT is executed correctly. In fact I see the right PDO coming down to the bus. But if I send a message on the bus, the case SDOrx is not executed, then neither the proceedSDO(d,m) function I'll investigate well tomorrow yet. ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 0.00 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE symboles.c: dont know if it does any damage, but it does nothing good. it's for Linux kernel module usage you should not include it in Arduino build On Sat, 15 Dec 2018, 17:33 < can...@li... wrote: Could this issue during compilation /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: parameter names (without types) in function declaration [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: warning: data definition has no type or storage class [enabled by default] EXPORT_SYMBOL (_setODentry); ^ be an issue regarding the missing replies on the BUS. This kind of warning message is repeated for many symbols: honestly I don't think so but for completeness I give you this information Thanks ----Messaggio originale---- Da: can...@li... Data: 13-dic-2018 21.02 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Do the can messages look okay in the canDispatch function (states.c) On Thu, Dec 13, 2018 at 7:30 PM < can...@li...> wrote: > > That's the strange thing. > > The node doesn't react to any message sent > > ----Messaggio originale---- > Da: can...@li... > Data: 13-dic-2018 18.04 > A: < can...@li...> > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > Strange, > You should get a reply on "all" sdo messages > Does the node react to any messages you send to the node? > > > > > > > On Thu, Dec 13, 2018 at 10:57 AM > < can...@li...> wrote: > > > > PDOs every 100ms are running correctly. > > > > The issue remaining is the response from the node. > > > > For instance if I wish to change the event cycle for the PDO from 100ms to 70 ms I need to write on the bus: > > > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h > > > > where nodeID is 600+ID and in my case is 601 > > > > Normally when you send something on the canbus you get a response from the node that depends if the object dictionary element is implemented in the dictionary. > > > > In my case I don't get any reply from the node. > > > > I don't know why > > > > > > ----Messaggio originale---- > > Da: can...@li... > > Data: 13-dic-2018 10.07 > > A: < can...@li...> > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > > > so, everything is up and running? > > > > On Wed, 12 Dec 2018, 16:17 < can...@li... wrote: > >> > >> Ok, > >> > >> solved with > >> > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) > >> // CANIE2 = 0xFF; > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) edited for ATmegaxxM1 > >> > >> in the can_AVR.c file > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.49 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. > >> > >> So I need to change some #define in the can_drv.h file > >> > >> // #define NB_MOB 15 > >> #define NB_MOB 6 // edited for ATmegaxxM1 > >> #define NB_DATA_MAX 8 > >> #define LAST_MOB_NB (NB_MOB-1) > >> #define NO_MOB 0xFF > >> // ---------- > >> //typedef enum { > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, MOB_7, > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, MOB_14 } can_mob_t; > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} can_mob_t;// edited for ATmegaxxM1 > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.33 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Sorry my mistake, > >> > >> the number of PDO sent after the operational mode is, of course, equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 10.58 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> after some proofs I found another issue on the ATmega64M1. > >> > >> Basically and actually I'm able to receive only some PDOs at the beginning (after the operational mode). > >> The number of PDOs receive is based on the NB_RX_MOB define. > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the operational mode, if I define it = 6 I receive only 6 PDOs. > >> > >> After that the canbus goes in a sort of stuck mode and I need a master reset to resume the node. > >> > >> The timer1 works properly just adding these instructions: > >> > >> /* Added by me for Arduino compliance */ > >> TCCR1A = 0; > >> TCCR1B = 0; > >> TIMSK1 = 0; > >> /**************************************/ > >> > >> in the timer_AVR.c > >> > >> Any suggestion? > >> > >> Thanks in advance > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 16.01 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I've found the issue and it was relative to the TCCR1A value. > >> > >> Arduino touches this timer at the beginning in the wiring.c file. > >> > >> Then actually the timer works but I can receive only five PDO after the startup. > >> > >> After that the CANBUS seems stuck and I don't receive PDO anymore. > >> > >> The only way is to make a master reset in order to receive other 5 PDO. > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 12.21 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> hello, > >> I found a strange bug with setting 16bit registers. > >> > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits were applied. > >> > >> The datasheet says that for OCR1B you have to first set the upper byte as documented, and afterwards commit with the lower byte. > >> this however does not work for me. > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 11.30 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> something strange compare if I try to debug the TCNT1 and OCR1B values. > >> > >> Why I get only values from 0 to 255? > >> > >> The timer1 is a 16bit timer > >> > >> ??????????????????? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 10.04 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> > >> probably the issue is that for the ATmega64M1 I have to use the TIMER1 in CTC mode up to OCR1A as top value? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 9.12 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I'm using 8MHz external clock. > >> > >> Timer should be 8us per tick since that I'm using the clkio/64 prescaler. > >> > >> So the timing frequency is, or I suppose, 125Khz --> 8us. > >> > >> // The timer is incrementing every 8 us. > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) > >> #define US_TO_TIMEVAL(us) ((us)>>3) > >> > >> This definition seems to be correct because each timer tick = 8us. > >> > >> In order to have us we have to divide the tick count value by 8 (>>3) instead to have ms we have to multiply by 125. > >> > >> It seems exact. > >> > >> Why you told me that this define are incorrect? > >> > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 10-dic-2018 20.58 > >> A: < can...@li...> > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> This I should be able to help you with > >> in timerscfg.h there are two macros that need to be correct > >> MS_TO_TIMEVAL and US_TO_TIMEVAL > >> > >> They are used to convert ms and us to timer ticks (TIMEVAL) > >> > >> What clock frequency are you using? > >> On Mon, Dec 10, 2018 at 3:13 PM < can...@li...> wrote: > >> > > >> > Hi, > >> > > >> > the issue seems relative to the timer event. > >> > > >> > If I program a transmist PDO every 100ms I can see at the beginning some PDO every 1 or 2 ms. > >> > > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up to a new uC master reset, so a new canbus initialization process. > >> > > >> > Basically the timer_AVR.c file is exactly equal to the original one (for the at90can128) except in the initTimer function where I use the timer1 because the ATmega64M1 doesn't have the timer3 > >> > > >> > void initTimer(void) > >> > /****************************************************************************** > >> > Initializes the timer, turn on the interrupt and put the interrupt time to zero > >> > INPUT void > >> > OUTPUT void > >> > ******************************************************************************/ > >> > { > >> > TimerAlarm = 0; // Set it back to the zero > >> > > >> > // Set timer 1 for CANopen operation tick 8us max, time is 524ms > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit CK/64 > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt > >> > } > >> > > >> > Any comment/suggestion? > >> > > >> > Thanks in advance > >> > > >> > ----Messaggio originale---- > >> > Da: can...@li... > >> > Data: 6-dic-2018 21.04 > >> > A: < can...@li...> > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > > >> > Hi, > >> > I do not have access to a ATmega64M1, so there is no way AFIK for me > >> > to run and debug your code. > >> > Also near zero experience with Arduino, lots of experience with > >> > at90can128 though. > >> > > >> > I could always look at your code, but without knowing the general > >> > place where the problem is, it is close to impossible... for me :) > >> > > >> > When you say that only thing that is working is THE nmt message. > >> > Is there only one nmt message? > >> > What nmt state is the node in? > >> > Have you tried to set it to operational state? > >> > > >> > Best Regards > >> > Lars > >> > On Tue, Dec 4, 2018 at 5:26 PM < can...@li...> wrote: > >> > > > >> > > The only thing which is working is the NMT message at the startup. > >> > > > >> > > No SDO response and I cannot able to make debug now. > >> > > > >> > > Can I attach the whole directory project which stay in the Arduino/libraries folder to give you the whole files package? > >> > > > >> > > Thanks > >> > > > >> > > Bye > >> > > > >> > > Alessio > >> > > > >> > > ----Messaggio originale---- > >> > > Da: can...@li... > >> > > Data: 3-dic-2018 17.52 > >> > > A: < can...@li...> > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in Arduino IDE > >> > > > >> > > Hi, > >> > > Does anything work? > >> > > Like heartbeat or sdo? > >> > > > >> > > could you check if the code reaches buildPDO? > >> > > > >> > > Best Regards > >> > > Lars > >> > > > >> > > On Sat, Dec 1, 2018 at 6:02 PM < can...@li...> wrote: > >> > > > > >> > > > > >> > > > Dear all, > >> > > > > >> > > > first of all many thanks to the developers and people in general that spent time on this project making it an affordable CanOpen platform for everyone. > >> > > > > >> > > > I'm new on this mailing list and here to explain my problem. > >> > > > > >> > > > I'm an electronic engineer and a researcher of University of Brescia (Italy) and I'm trying to make the canFestival working on Arduino using the Atmega64M1 uC. > >> > > > > >> > > > I know that there is the CanFestivino project that is the CanFestival porting for the Arduino IDE and the Atmega328p with the external controller MCP2515. > >> > > > > >> > > > It works but the guy that makes the porting cut several features to fit the code with the Atmega328 ROM and RAM. > >> > > > > >> > > > I reached it compilable in Arduino starting from the AVR example for the ATCAN90128. This uC is very similar to the ATmega64M1. > >> > > > > >> > > > The only things that I did was to change the timer, from timer3 to timer1 (timer3 is not present on the ATmega64M1) and some tiny modifications in the CAN driver. > >> > > > > >> > > > Actually my project is compilable in Arduino where I created an example to read an analog input (A0) sending it through a PDO each 100ms. > >> > > > > >> > > > The only thing to need in order to compile it is the Arduino IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, ...HERE. > >> > > > > >> > > > I cannot figure out why but actually the example doesn't work and I'm struggling on it....making me a bit crazy because I don't understand why. > >> > > > > >> > > > > >> > > > > >> > > > Hope that someone can help me in this.... > >> > > > > >> > > > Thanks > >> > > > > >> > > > Alessio > >> > > > _______________________________________________ > >> > > > Canfestival-devel mailing list > >> > > > Can...@li... > >> > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > > > _______________________________________________ > > Canfestival-devel mailing list > > Can...@li... > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel |
From: <can...@li...> - 2018-12-22 09:02:08
|
is it possible to mask out interrupts to limit the number of interrupts that makes it wake up? just for debugging On Fri, 21 Dec 2018, 21:02 <can...@li... wrote: > Hi guys, > > I'm getting crazy on why I'm not able to go in sleep using the canFestival > stack. > > Using the ISR(PCINT1_vect) sometime if I remove the power supply while the > canbus is working the uC goes in a strange situation. > > Not in sleep but not in run as well. Anyway the power consumption is like > in run. > > Basically, I'm using a pin to debug the situation > DDRD |= (1<<PD2); // set PD2 as output DEBUG > PORTD &= ~(1<<PD2); // set LOW state DEBUG > but sometime happen that the uC try to goes in sleep but suddenly it comes > back in "run" > > > ----Messaggio originale---- > Da: can...@li... > Data: 20-dic-2018 17.10 > A: <can...@li...> > Ogg: [Canfestival-devel] R: Re: R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: > R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in > Arduino IDE > > >>> can_disable was designed to work with at90can seriers so might not > work with your uC > looking the datasheet of ATmega64M1 the can register is the same. By the > way the can_drv.h is rewritten for my uC. > > >>> Before sleep I think it is best to set the node in stop mode. It just > disable processing and making of almost every type of canopen message, and > it will also tell the network that is has stopped. > Already tried to put the node in stop mode. It doesn't work. What seems to > happen is that the uC seems to miss the interrupt because it has a lower > priority with can interrupts. > > Now I'm doing other tests to solve this issue. > > thanks anyway > > ----Messaggio originale---- > Da: can...@li... > Data: 20-dic-2018 16.54 > A: <can...@li...> > Ogg: Re: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: > R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino > IDE > > first off > can_disable was designed to work with at90can seriers so might not work > with your uC > Other than the timer, I'm not sure what canfestival can do to wake the > controller up, but i have zero experience with sleep, so keep that in mind. > > Before sleep I think it is best to set the node in stop mode. It just > disable processing and making of almost every type of canopen message, and > it will also tell the network that is has stopped. > > On start, what you have done looks good to me. > > best regards > Lars > > On Wed, 19 Dec 2018, 19:41 < can...@li... > <http://invalidurl.gif> wrote: > >> Basically my question is what to do before to go in sleep mode and what >> to do just after the wake up. >> >> In the main I do: >> >> switch(baudrate) // 0=100KBaud, 1=125KBaud, 2=200KBaud, 3=250KBaud, >> 4=500KBaud, 5=1000KBaud >> { >> case 0: canInit(100); break; >> case 1: canInit(125); break; >> case 2: canInit(200); break; >> case 3: canInit(250); break; >> case 4: canInit(500); break; >> case 5: canInit(1000); break; >> } >> initTimer(); // Start timer for the >> CANopen stack >> setNodeId(&ObjDict_Data, nodeID); >> setState(&ObjDict_Data, Pre_operational); // Init the state >> >> so, shall I have to do something before the sleep? >> >> and after at the wake up? >> >> Thanks in advance to anyone spends time in this. >> >> >> >> ----Messaggio originale---- >> Da: can...@li... <http://invalidurl.gif> >> Data: 19-dic-2018 18.52 >> A: < can...@li... <http://invalidurl.gif>> >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: >> R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >> >> >> Another question: >> >> I've implemented the canFestival on a node which goes in sleep mode >> (POWER_DOWN) when there's no power supply. >> >> This device has a battery to keep the power supply on in OR with the main >> one. >> >> Of course when the battery is on I need to put everything in deep sleep >> mode with a consumption around 1.5uA @3V. >> >> The issue is that sometimes, if I receive something on the bus, the node >> suddendly wakes up from the sleep. >> >> Therefore I need to avoid this bad situation in order to avoid the >> battery discharge. >> >> How can I disable the canbus just before to go in sleep? >> >> Basically the sleep mode control is made in pin_change interrupt >> function. >> >> ISR(PCINT1_vect) // interrupt service routine called when the >> sensor is battery powered or not (LOWER PRIORITY THAN PCINT0_vect) >> { >> sleepMode = !digitalRead(V_supply); >> >> if ( sleepMode ) >> { >> Can_disable(); // doesn't work >> >> #ifdef SERIAL_DEBUG >> Serial.print('\0'); // print the NULL character to be sure that >> the TX port pin (PB0) is LOW >> #endif >> cli(); >> stopADC(); >> sleep(); >> } >> else >> turnedOn = true; >> } >> >> >> I'm quite sure that there is something in the canFestival framework which >> put the uC ON if something is received just before to go in sleep. >> >> Any suggestion? >> >> ----Messaggio originale---- >> Da: can...@li... <http://invalidurl.gif> >> Data: 18-dic-2018 10.24 >> A: < can...@li... <http://invalidurl.gif>> >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: >> R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >> >> Sorry guys my fault. >> >> The default nodeID is 0x01. >> >> Everything works correctly >> >> Thanks and sorry >> >> >> ----Messaggio originale---- >> Da: can...@li... <http://invalidurl.gif> >> Data: 18-dic-2018 10.17 >> A: < can...@li... <http://invalidurl.gif>> >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: >> R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >> >> I've found the issue. >> >> It relative on how the objectdictionary .c file is created. >> >> If I leave the file as it is >> >> /* index 0x1200 : Server SDO Parameter. */ >> UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number >> of subindex - 1*/ >> UNS32 >> ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x600; /* 1536 */ >> >> The canbus node doesn't reply to any SDO request. >> >> If I change it like this >> >> /* index 0x1200 : Server SDO Parameter. */ >> UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number >> of subindex - 1*/ >> UNS32 >> ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x605; /* 1536 */ >> >> where 0x05 is the nodeID >> >> I get the right reply from my node >> >> Is this a bug on the object dictionary building procedure in the python >> script? >> >> Waiting a kind reply >> >> Thanks >> >> ----Messaggio originale---- >> Da: can...@li... <http://invalidurl.gif> >> Data: 17-dic-2018 20.16 >> A: < can...@li... <http://invalidurl.gif>> >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: >> R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >> >> I did some other tests. >> >> The issue seems inside the canDispatch function in states.c. >> >> I'm using a pin as debug in order to understand if the code in some point >> is executed or not. >> >> basically this is done in the canDispatch: >> >> .............. >> case SDOrx: >> if (d->CurrentCommunicationState.csSDO) >> { >> DDRB |= (1<<PB4); // set PB4 as output >> PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG >> proceedSDO(d,m); >> } >> break; >> case NODE_GUARD: >> if (d->CurrentCommunicationState.csLifeGuard) >> proceedNODE_GUARD(d,m); >> break; >> case NMT: >> if (*(d->iam_a_slave)) >> { >> DDRB |= (1<<PB4); // set PB4 as output >> PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG >> proceedNMTstateChange(d,m); >> } >> break; >> ............ >> >> I can see that at the beginning, when I change the state from >> initialization to oeprational the case NMT is executed correctly. >> In fact I see the right PDO coming down to the bus. >> >> But if I send a message on the bus, the case SDOrx is not executed, then >> neither the proceedSDO(d,m) function >> >> I'll investigate well tomorrow yet. >> >> >> ----Messaggio originale---- >> Da: can...@li... <http://invalidurl.gif> >> Data: 17-dic-2018 0.00 >> A: < can...@li... <http://invalidurl.gif>> >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: >> R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >> >> symboles.c: dont know if it does any damage, but it does nothing good. >> it's for Linux kernel module usage you should not include it in Arduino >> build >> >> On Sat, 15 Dec 2018, 17:33 < can...@li... >> <http://invalidurl.gif> wrote: >> >>> Could this issue during compilation >>> >>> /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: >>> warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled >>> by default] >>> /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: >>> warning: parameter names (without types) in function declaration [enabled >>> by default] >>> /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: >>> warning: data definition has no type or storage class [enabled by default] >>> EXPORT_SYMBOL (_setODentry); >>> ^ >>> >>> be an issue regarding the missing replies on the BUS. >>> >>> This kind of warning message is repeated for many symbols: >>> >>> honestly I don't think so but for completeness I give you this >>> information >>> >>> Thanks >>> >>> ----Messaggio originale---- >>> Da: can...@li... <http://invalidurl.gif> >>> Data: 13-dic-2018 21.02 >>> A: < can...@li... <http://invalidurl.gif>> >>> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: >>> Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >>> >>> Do the can messages look okay in the canDispatch function (states.c) >>> On Thu, Dec 13, 2018 at 7:30 PM < >>> can...@li... <http://invalidurl.gif>> wrote: >>> > >>> > That's the strange thing. >>> > >>> > The node doesn't react to any message sent >>> > >>> > ----Messaggio originale---- >>> > Da: can...@li... <http://invalidurl.gif> >>> > Data: 13-dic-2018 18.04 >>> > A: < can...@li... <http://invalidurl.gif>> >>> > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: >>> Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >>> > >>> > Strange, >>> > You should get a reply on "all" sdo messages >>> > Does the node react to any messages you send to the node? >>> > >>> > >>> > >>> > >>> > >>> > >>> > On Thu, Dec 13, 2018 at 10:57 AM >>> > < can...@li... <http://invalidurl.gif>> >>> wrote: >>> > > >>> > > PDOs every 100ms are running correctly. >>> > > >>> > > The issue remaining is the response from the node. >>> > > >>> > > For instance if I wish to change the event cycle for the PDO from >>> 100ms to 70 ms I need to write on the bus: >>> > > >>> > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h >>> > > >>> > > where nodeID is 600+ID and in my case is 601 >>> > > >>> > > Normally when you send something on the canbus you get a response >>> from the node that depends if the object dictionary element is implemented >>> in the dictionary. >>> > > >>> > > In my case I don't get any reply from the node. >>> > > >>> > > I don't know why >>> > > >>> > > >>> > > ----Messaggio originale---- >>> > > Da: can...@li... <http://invalidurl.gif> >>> > > Data: 13-dic-2018 10.07 >>> > > A: < can...@li... <http://invalidurl.gif>> >>> >>> > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: >>> R: Re: CanFestival on ATmega64M1 in Arduino IDE >>> > > >>> > > so, everything is up and running? >>> > > >>> > > On Wed, 12 Dec 2018, 16:17 < can...@li... >>> <http://invalidurl.gif> wrote: >>> > >> >>> > >> Ok, >>> > >> >>> > >> solved with >>> > >> >>> > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) >>> > >> // CANIE2 = 0xFF; >>> > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) >>> edited for ATmegaxxM1 >>> > >> >>> > >> in the can_AVR.c file >>> > >> >>> > >> ----Messaggio originale---- >>> > >> Da: can...@li... <http://invalidurl.gif> >>> > >> Data: 12-dic-2018 11.49 >>> > >> A: < can...@li... >>> <http://invalidurl.gif>> >>> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: >>> CanFestival on ATmega64M1 in Arduino IDE >>> > >> >>> > >> >>> > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. >>> > >> >>> > >> So I need to change some #define in the can_drv.h file >>> > >> >>> > >> // #define NB_MOB 15 >>> > >> #define NB_MOB 6 // edited for ATmegaxxM1 >>> > >> #define NB_DATA_MAX 8 >>> > >> #define LAST_MOB_NB (NB_MOB-1) >>> > >> #define NO_MOB 0xFF >>> > >> // ---------- >>> > >> //typedef enum { >>> > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, >>> MOB_7, >>> > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, >>> MOB_14 } can_mob_t; >>> > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} >>> can_mob_t;// edited for ATmegaxxM1 >>> > >> >>> > >> >>> > >> >>> > >> ----Messaggio originale---- >>> > >> Da: can...@li... <http://invalidurl.gif> >>> > >> Data: 12-dic-2018 11.33 >>> > >> A: < can...@li... >>> <http://invalidurl.gif>> >>> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: >>> CanFestival on ATmega64M1 in Arduino IDE >>> > >> >>> > >> Sorry my mistake, >>> > >> >>> > >> the number of PDO sent after the operational mode is, of course, >>> equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) >>> > >> >>> > >> ----Messaggio originale---- >>> > >> Da: can...@li... <http://invalidurl.gif> >>> > >> Data: 12-dic-2018 10.58 >>> > >> A: < can...@li... >>> <http://invalidurl.gif>> >>> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: >>> CanFestival on ATmega64M1 in Arduino IDE >>> > >> >>> > >> Hi, >>> > >> after some proofs I found another issue on the ATmega64M1. >>> > >> >>> > >> Basically and actually I'm able to receive only some PDOs at the >>> beginning (after the operational mode). >>> > >> The number of PDOs receive is based on the NB_RX_MOB define. >>> > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the >>> operational mode, if I define it = 6 I receive only 6 PDOs. >>> > >> >>> > >> After that the canbus goes in a sort of stuck mode and I need a >>> master reset to resume the node. >>> > >> >>> > >> The timer1 works properly just adding these instructions: >>> > >> >>> > >> /* Added by me for Arduino compliance */ >>> > >> TCCR1A = 0; >>> > >> TCCR1B = 0; >>> > >> TIMSK1 = 0; >>> > >> /**************************************/ >>> > >> >>> > >> in the timer_AVR.c >>> > >> >>> > >> Any suggestion? >>> > >> >>> > >> Thanks in advance >>> > >> >>> > >> ----Messaggio originale---- >>> > >> Da: can...@li... <http://invalidurl.gif> >>> > >> Data: 11-dic-2018 16.01 >>> > >> A: < can...@li... >>> <http://invalidurl.gif>> >>> > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: >>> CanFestival on ATmega64M1 in Arduino IDE >>> > >> >>> > >> I've found the issue and it was relative to the TCCR1A value. >>> > >> >>> > >> Arduino touches this timer at the beginning in the wiring.c file. >>> > >> >>> > >> Then actually the timer works but I can receive only five PDO after >>> the startup. >>> > >> >>> > >> After that the CANBUS seems stuck and I don't receive PDO anymore. >>> > >> >>> > >> The only way is to make a master reset in order to receive other 5 >>> PDO. >>> > >> >>> > >> ----Messaggio originale---- >>> > >> Da: can...@li... <http://invalidurl.gif> >>> > >> Data: 11-dic-2018 12.21 >>> > >> A: < can...@li... >>> <http://invalidurl.gif>> >>> > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival >>> on ATmega64M1 in Arduino IDE >>> > >> >>> > >> hello, >>> > >> I found a strange bug with setting 16bit registers. >>> > >> >>> > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits >>> were applied. >>> > >> >>> > >> The datasheet says that for OCR1B you have to first set the upper >>> byte as documented, and afterwards commit with the lower byte. >>> > >> this however does not work for me. >>> > >> >>> > >> >>> > >> ----Messaggio originale---- >>> > >> Da: can...@li... <http://invalidurl.gif> >>> > >> Data: 11-dic-2018 11.30 >>> > >> A: < can...@li... >>> <http://invalidurl.gif>> >>> > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on >>> ATmega64M1 in Arduino IDE >>> > >> >>> > >> Hi, >>> > >> something strange compare if I try to debug the TCNT1 and OCR1B >>> values. >>> > >> >>> > >> Why I get only values from 0 to 255? >>> > >> >>> > >> The timer1 is a 16bit timer >>> > >> >>> > >> ??????????????????? >>> > >> >>> > >> ----Messaggio originale---- >>> > >> Da: can...@li... <http://invalidurl.gif> >>> > >> Data: 11-dic-2018 10.04 >>> > >> A: < can...@li... >>> <http://invalidurl.gif>> >>> > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on >>> ATmega64M1 in Arduino IDE >>> > >> >>> > >> Hi, >>> > >> >>> > >> probably the issue is that for the ATmega64M1 I have to use the >>> TIMER1 in CTC mode up to OCR1A as top value? >>> > >> >>> > >> ----Messaggio originale---- >>> > >> Da: can...@li... <http://invalidurl.gif> >>> > >> Data: 11-dic-2018 9.12 >>> > >> A: < can...@li... >>> <http://invalidurl.gif>> >>> > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on >>> ATmega64M1 in Arduino IDE >>> > >> >>> > >> I'm using 8MHz external clock. >>> > >> >>> > >> Timer should be 8us per tick since that I'm using the clkio/64 >>> prescaler. >>> > >> >>> > >> So the timing frequency is, or I suppose, 125Khz --> 8us. >>> > >> >>> > >> // The timer is incrementing every 8 us. >>> > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) >>> > >> #define US_TO_TIMEVAL(us) ((us)>>3) >>> > >> >>> > >> This definition seems to be correct because each timer tick = 8us. >>> > >> >>> > >> In order to have us we have to divide the tick count value by 8 >>> (>>3) instead to have ms we have to multiply by 125. >>> > >> >>> > >> It seems exact. >>> > >> >>> > >> Why you told me that this define are incorrect? >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> ----Messaggio originale---- >>> > >> Da: can...@li... <http://invalidurl.gif> >>> > >> Data: 10-dic-2018 20.58 >>> > >> A: < can...@li... >>> <http://invalidurl.gif>> >>> > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on >>> ATmega64M1 in Arduino IDE >>> > >> >>> > >> This I should be able to help you with >>> > >> in timerscfg.h there are two macros that need to be correct >>> > >> MS_TO_TIMEVAL and US_TO_TIMEVAL >>> > >> >>> > >> They are used to convert ms and us to timer ticks (TIMEVAL) >>> > >> >>> > >> What clock frequency are you using? >>> > >> On Mon, Dec 10, 2018 at 3:13 PM < >>> can...@li... <http://invalidurl.gif>> wrote: >>> > >> > >>> > >> > Hi, >>> > >> > >>> > >> > the issue seems relative to the timer event. >>> > >> > >>> > >> > If I program a transmist PDO every 100ms I can see at the >>> beginning some PDO every 1 or 2 ms. >>> > >> > >>> > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up >>> to a new uC master reset, so a new canbus initialization process. >>> > >> > >>> > >> > Basically the timer_AVR.c file is exactly equal to the original >>> one (for the at90can128) except in the initTimer function where I use the >>> timer1 because the ATmega64M1 doesn't have the timer3 >>> > >> > >>> > >> > void initTimer(void) >>> > >> > >>> /****************************************************************************** >>> >>> > >> > Initializes the timer, turn on the interrupt and put the >>> interrupt time to zero >>> > >> > INPUT void >>> > >> > OUTPUT void >>> > >> > >>> ******************************************************************************/ >>> >>> > >> > { >>> > >> > TimerAlarm = 0; // Set it back to the zero >>> > >> > >>> > >> > // Set timer 1 for CANopen operation tick 8us max, time is >>> 524ms >>> > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit >>> CK/64 >>> > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt >>> > >> > } >>> > >> > >>> > >> > Any comment/suggestion? >>> > >> > >>> > >> > Thanks in advance >>> > >> > >>> > >> > ----Messaggio originale---- >>> > >> > Da: can...@li... >>> <http://invalidurl.gif> >>> > >> > Data: 6-dic-2018 21.04 >>> > >> > A: < can...@li... >>> <http://invalidurl.gif>> >>> > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in >>> Arduino IDE >>> > >> > >>> > >> > Hi, >>> > >> > I do not have access to a ATmega64M1, so there is no way AFIK for >>> me >>> > >> > to run and debug your code. >>> > >> > Also near zero experience with Arduino, lots of experience with >>> > >> > at90can128 though. >>> > >> > >>> > >> > I could always look at your code, but without knowing the general >>> > >> > place where the problem is, it is close to impossible... for me >>> :) >>> > >> > >>> > >> > When you say that only thing that is working is THE nmt message. >>> > >> > Is there only one nmt message? >>> > >> > What nmt state is the node in? >>> > >> > Have you tried to set it to operational state? >>> > >> > >>> > >> > Best Regards >>> > >> > Lars >>> > >> > On Tue, Dec 4, 2018 at 5:26 PM < >>> can...@li... <http://invalidurl.gif>> wrote: >>> > >> > > >>> > >> > > The only thing which is working is the NMT message at the >>> startup. >>> > >> > > >>> > >> > > No SDO response and I cannot able to make debug now. >>> > >> > > >>> > >> > > Can I attach the whole directory project which stay in the >>> Arduino/libraries folder to give you the whole files package? >>> > >> > > >>> > >> > > Thanks >>> > >> > > >>> > >> > > Bye >>> > >> > > >>> > >> > > Alessio >>> > >> > > >>> > >> > > ----Messaggio originale---- >>> > >> > > Da: can...@li... >>> <http://invalidurl.gif> >>> > >> > > Data: 3-dic-2018 17.52 >>> > >> > > A: < can...@li... >>> <http://invalidurl.gif>> >>> > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in >>> Arduino IDE >>> > >> > > >>> > >> > > Hi, >>> > >> > > Does anything work? >>> > >> > > Like heartbeat or sdo? >>> > >> > > >>> > >> > > could you check if the code reaches buildPDO? >>> > >> > > >>> > >> > > Best Regards >>> > >> > > Lars >>> > >> > > >>> > >> > > On Sat, Dec 1, 2018 at 6:02 PM < >>> can...@li... <http://invalidurl.gif>> wrote: >>> > >> > > > >>> > >> > > > >>> > >> > > > Dear all, >>> > >> > > > >>> > >> > > > first of all many thanks to the developers and people in >>> general that spent time on this project making it an affordable CanOpen >>> platform for everyone. >>> > >> > > > >>> > >> > > > I'm new on this mailing list and here to explain my problem. >>> > >> > > > >>> > >> > > > I'm an electronic engineer and a researcher of University of >>> Brescia (Italy) and I'm trying to make the canFestival working on Arduino >>> using the Atmega64M1 uC. >>> > >> > > > >>> > >> > > > I know that there is the CanFestivino project that is the >>> CanFestival porting for the Arduino IDE and the Atmega328p with the >>> external controller MCP2515. >>> > >> > > > >>> > >> > > > It works but the guy that makes the porting cut several >>> features to fit the code with the Atmega328 ROM and RAM. >>> > >> > > > >>> > >> > > > I reached it compilable in Arduino starting from the AVR >>> example for the ATCAN90128. This uC is very similar to the ATmega64M1. >>> > >> > > > >>> > >> > > > The only things that I did was to change the timer, from >>> timer3 to timer1 (timer3 is not present on the ATmega64M1) and some tiny >>> modifications in the CAN driver. >>> > >> > > > >>> > >> > > > Actually my project is compilable in Arduino where I created >>> an example to read an analog input (A0) sending it through a PDO each >>> 100ms. >>> > >> > > > >>> > >> > > > The only thing to need in order to compile it is the Arduino >>> IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, >>> ...HERE. >>> > >> > > > >>> > >> > > > I cannot figure out why but actually the example doesn't work >>> and I'm struggling on it....making me a bit crazy because I don't >>> understand why. >>> > >> > > > >>> > >> > > > >>> > >> > > > >>> > >> > > > Hope that someone can help me in this.... >>> > >> > > > >>> > >> > > > Thanks >>> > >> > > > >>> > >> > > > Alessio >>> > >> > > > _______________________________________________ >>> > >> > > > Canfestival-devel mailing list >>> > >> > > > Can...@li... >>> <http://invalidurl.gif> >>> > >> > > > >>> https://lists.sourceforge.net/lists/listinfo/canfestival-devel >>> > >> > > >>> > >> > > >>> > >> > > _______________________________________________ >>> > >> > > Canfestival-devel mailing list >>> > >> > > Can...@li... <http://invalidurl.gif> >>> > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >>> > >> > > >>> > >> > > >>> > >> > > _______________________________________________ >>> > >> > > Canfestival-devel mailing list >>> > >> > > Can...@li... <http://invalidurl.gif> >>> > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >>> > >> > >>> > >> > >>> > >> > _______________________________________________ >>> > >> > Canfestival-devel mailing list >>> > >> > Can...@li... <http://invalidurl.gif> >>> > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >>> > >> > >>> > >> > >>> > >> > _______________________________________________ >>> > >> > Canfestival-devel mailing list >>> > >> > Can...@li... <http://invalidurl.gif> >>> > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >>> > >> >>> > >> >>> > >> _______________________________________________ >>> > >> Canfestival-devel mailing list >>> > >> Can...@li... <http://invalidurl.gif> >>> > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > >> _______________________________________________ >>> > >> Canfestival-devel mailing list >>> > >> Can...@li... <http://invalidurl.gif> >>> > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel >>> > > >>> > > >>> > > >>> > > _______________________________________________ >>> > > Canfestival-devel mailing list >>> > > Can...@li... <http://invalidurl.gif> >>> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >>> > >>> > >>> > _______________________________________________ >>> > Canfestival-devel mailing list >>> > Can...@li... <http://invalidurl.gif> >>> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >>> > >>> > >>> > _______________________________________________ >>> > Canfestival-devel mailing list >>> > Can...@li... <http://invalidurl.gif> >>> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >>> >>> >>> _______________________________________________ >>> Canfestival-devel mailing list >>> Can...@li... <http://invalidurl.gif> >>> https://lists.sourceforge.net/lists/listinfo/canfestival-devel >>> >>> >>> _______________________________________________ >>> Canfestival-devel mailing list >>> Can...@li... <http://invalidurl.gif> >>> https://lists.sourceforge.net/lists/listinfo/canfestival-devel >>> >> >> >> >> >> >> >> >> >> >> >> _______________________________________________ >> Canfestival-devel mailing list >> Can...@li... <http://invalidurl.gif> >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel >> > > > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > |
From: <can...@li...> - 2018-12-21 20:01:55
|
Hi guys, I'm getting crazy on why I'm not able to go in sleep using the canFestival stack. Using the ISR(PCINT1_vect) sometime if I remove the power supply while the canbus is working the uC goes in a strange situation. Not in sleep but not in run as well. Anyway the power consumption is like in run. Basically, I'm using a pin to debug the situation DDRD |= (1<<PD2); // set PD2 as output DEBUG PORTD &= ~(1<<PD2); // set LOW state DEBUGbut sometime happen that the uC try to goes in sleep but suddenly it comes back in "run" ----Messaggio originale---- Da: can...@li... Data: 20-dic-2018 17.10 A: <can...@li...> Ogg: [Canfestival-devel] R: Re: R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >>> can_disable was designed to work with at90can seriers so might not work with your uC looking the datasheet of ATmega64M1 the can register is the same. By the way the can_drv.h is rewritten for my uC. >>> Before sleep I think it is best to set the node in stop mode. It just disable processing and making of almost every type of canopen message, and it will also tell the network that is has stopped. Already tried to put the node in stop mode. It doesn't work. What seems to happen is that the uC seems to miss the interrupt because it has a lower priority with can interrupts. Now I'm doing other tests to solve this issue. thanks anyway ----Messaggio originale---- Da: can...@li... Data: 20-dic-2018 16.54 A: <can...@li...> Ogg: Re: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE first off can_disable was designed to work with at90can seriers so might not work with your uC Other than the timer, I'm not sure what canfestival can do to wake the controller up, but i have zero experience with sleep, so keep that in mind. Before sleep I think it is best to set the node in stop mode. It just disable processing and making of almost every type of canopen message, and it will also tell the network that is has stopped. On start, what you have done looks good to me. best regards Lars On Wed, 19 Dec 2018, 19:41 < can...@li... wrote: Basically my question is what to do before to go in sleep mode and what to do just after the wake up. In the main I do: switch(baudrate) // 0=100KBaud, 1=125KBaud, 2=200KBaud, 3=250KBaud, 4=500KBaud, 5=1000KBaud { case 0: canInit(100); break; case 1: canInit(125); break; case 2: canInit(200); break; case 3: canInit(250); break; case 4: canInit(500); break; case 5: canInit(1000); break; } initTimer(); // Start timer for the CANopen stack setNodeId(&ObjDict_Data, nodeID); setState(&ObjDict_Data, Pre_operational); // Init the state so, shall I have to do something before the sleep? and after at the wake up? Thanks in advance to anyone spends time in this. ----Messaggio originale---- Da: can...@li... Data: 19-dic-2018 18.52 A: < can...@li...> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Another question: I've implemented the canFestival on a node which goes in sleep mode (POWER_DOWN) when there's no power supply. This device has a battery to keep the power supply on in OR with the main one. Of course when the battery is on I need to put everything in deep sleep mode with a consumption around 1.5uA @3V. The issue is that sometimes, if I receive something on the bus, the node suddendly wakes up from the sleep. Therefore I need to avoid this bad situation in order to avoid the battery discharge. How can I disable the canbus just before to go in sleep? Basically the sleep mode control is made in pin_change interrupt function. ISR(PCINT1_vect) // interrupt service routine called when the sensor is battery powered or not (LOWER PRIORITY THAN PCINT0_vect) { sleepMode = !digitalRead(V_supply); if ( sleepMode ) { Can_disable(); // doesn't work #ifdef SERIAL_DEBUG Serial.print('\0'); // print the NULL character to be sure that the TX port pin (PB0) is LOW #endif cli(); stopADC(); sleep(); } else turnedOn = true; } I'm quite sure that there is something in the canFestival framework which put the uC ON if something is received just before to go in sleep. Any suggestion? ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.24 A: < can...@li...> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Sorry guys my fault. The default nodeID is 0x01. Everything works correctly Thanks and sorry ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.17 A: < can...@li...> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I've found the issue. It relative on how the objectdictionary .c file is created. If I leave the file as it is /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x600; /* 1536 */ The canbus node doesn't reply to any SDO request. If I change it like this /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x605; /* 1536 */ where 0x05 is the nodeID I get the right reply from my node Is this a bug on the object dictionary building procedure in the python script? Waiting a kind reply Thanks ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 20.16 A: < can...@li...> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I did some other tests. The issue seems inside the canDispatch function in states.c. I'm using a pin as debug in order to understand if the code in some point is executed or not. basically this is done in the canDispatch: .............. case SDOrx: if (d->CurrentCommunicationState.csSDO) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedSDO(d,m); } break; case NODE_GUARD: if (d->CurrentCommunicationState.csLifeGuard) proceedNODE_GUARD(d,m); break; case NMT: if (*(d->iam_a_slave)) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedNMTstateChange(d,m); } break; ............ I can see that at the beginning, when I change the state from initialization to oeprational the case NMT is executed correctly. In fact I see the right PDO coming down to the bus. But if I send a message on the bus, the case SDOrx is not executed, then neither the proceedSDO(d,m) function I'll investigate well tomorrow yet. ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 0.00 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE symboles.c: dont know if it does any damage, but it does nothing good. it's for Linux kernel module usage you should not include it in Arduino build On Sat, 15 Dec 2018, 17:33 < can...@li... wrote: Could this issue during compilation /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: parameter names (without types) in function declaration [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: warning: data definition has no type or storage class [enabled by default] EXPORT_SYMBOL (_setODentry); ^ be an issue regarding the missing replies on the BUS. This kind of warning message is repeated for many symbols: honestly I don't think so but for completeness I give you this information Thanks ----Messaggio originale---- Da: can...@li... Data: 13-dic-2018 21.02 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Do the can messages look okay in the canDispatch function (states.c) On Thu, Dec 13, 2018 at 7:30 PM < can...@li...> wrote: > > That's the strange thing. > > The node doesn't react to any message sent > > ----Messaggio originale---- > Da: can...@li... > Data: 13-dic-2018 18.04 > A: < can...@li...> > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > Strange, > You should get a reply on "all" sdo messages > Does the node react to any messages you send to the node? > > > > > > > On Thu, Dec 13, 2018 at 10:57 AM > < can...@li...> wrote: > > > > PDOs every 100ms are running correctly. > > > > The issue remaining is the response from the node. > > > > For instance if I wish to change the event cycle for the PDO from 100ms to 70 ms I need to write on the bus: > > > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h > > > > where nodeID is 600+ID and in my case is 601 > > > > Normally when you send something on the canbus you get a response from the node that depends if the object dictionary element is implemented in the dictionary. > > > > In my case I don't get any reply from the node. > > > > I don't know why > > > > > > ----Messaggio originale---- > > Da: can...@li... > > Data: 13-dic-2018 10.07 > > A: < can...@li...> > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > > > so, everything is up and running? > > > > On Wed, 12 Dec 2018, 16:17 < can...@li... wrote: > >> > >> Ok, > >> > >> solved with > >> > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) > >> // CANIE2 = 0xFF; > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) edited for ATmegaxxM1 > >> > >> in the can_AVR.c file > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.49 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. > >> > >> So I need to change some #define in the can_drv.h file > >> > >> // #define NB_MOB 15 > >> #define NB_MOB 6 // edited for ATmegaxxM1 > >> #define NB_DATA_MAX 8 > >> #define LAST_MOB_NB (NB_MOB-1) > >> #define NO_MOB 0xFF > >> // ---------- > >> //typedef enum { > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, MOB_7, > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, MOB_14 } can_mob_t; > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} can_mob_t;// edited for ATmegaxxM1 > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.33 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Sorry my mistake, > >> > >> the number of PDO sent after the operational mode is, of course, equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 10.58 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> after some proofs I found another issue on the ATmega64M1. > >> > >> Basically and actually I'm able to receive only some PDOs at the beginning (after the operational mode). > >> The number of PDOs receive is based on the NB_RX_MOB define. > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the operational mode, if I define it = 6 I receive only 6 PDOs. > >> > >> After that the canbus goes in a sort of stuck mode and I need a master reset to resume the node. > >> > >> The timer1 works properly just adding these instructions: > >> > >> /* Added by me for Arduino compliance */ > >> TCCR1A = 0; > >> TCCR1B = 0; > >> TIMSK1 = 0; > >> /**************************************/ > >> > >> in the timer_AVR.c > >> > >> Any suggestion? > >> > >> Thanks in advance > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 16.01 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I've found the issue and it was relative to the TCCR1A value. > >> > >> Arduino touches this timer at the beginning in the wiring.c file. > >> > >> Then actually the timer works but I can receive only five PDO after the startup. > >> > >> After that the CANBUS seems stuck and I don't receive PDO anymore. > >> > >> The only way is to make a master reset in order to receive other 5 PDO. > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 12.21 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> hello, > >> I found a strange bug with setting 16bit registers. > >> > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits were applied. > >> > >> The datasheet says that for OCR1B you have to first set the upper byte as documented, and afterwards commit with the lower byte. > >> this however does not work for me. > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 11.30 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> something strange compare if I try to debug the TCNT1 and OCR1B values. > >> > >> Why I get only values from 0 to 255? > >> > >> The timer1 is a 16bit timer > >> > >> ??????????????????? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 10.04 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> > >> probably the issue is that for the ATmega64M1 I have to use the TIMER1 in CTC mode up to OCR1A as top value? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 9.12 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I'm using 8MHz external clock. > >> > >> Timer should be 8us per tick since that I'm using the clkio/64 prescaler. > >> > >> So the timing frequency is, or I suppose, 125Khz --> 8us. > >> > >> // The timer is incrementing every 8 us. > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) > >> #define US_TO_TIMEVAL(us) ((us)>>3) > >> > >> This definition seems to be correct because each timer tick = 8us. > >> > >> In order to have us we have to divide the tick count value by 8 (>>3) instead to have ms we have to multiply by 125. > >> > >> It seems exact. > >> > >> Why you told me that this define are incorrect? > >> > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 10-dic-2018 20.58 > >> A: < can...@li...> > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> This I should be able to help you with > >> in timerscfg.h there are two macros that need to be correct > >> MS_TO_TIMEVAL and US_TO_TIMEVAL > >> > >> They are used to convert ms and us to timer ticks (TIMEVAL) > >> > >> What clock frequency are you using? > >> On Mon, Dec 10, 2018 at 3:13 PM < can...@li...> wrote: > >> > > >> > Hi, > >> > > >> > the issue seems relative to the timer event. > >> > > >> > If I program a transmist PDO every 100ms I can see at the beginning some PDO every 1 or 2 ms. > >> > > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up to a new uC master reset, so a new canbus initialization process. > >> > > >> > Basically the timer_AVR.c file is exactly equal to the original one (for the at90can128) except in the initTimer function where I use the timer1 because the ATmega64M1 doesn't have the timer3 > >> > > >> > void initTimer(void) > >> > /****************************************************************************** > >> > Initializes the timer, turn on the interrupt and put the interrupt time to zero > >> > INPUT void > >> > OUTPUT void > >> > ******************************************************************************/ > >> > { > >> > TimerAlarm = 0; // Set it back to the zero > >> > > >> > // Set timer 1 for CANopen operation tick 8us max, time is 524ms > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit CK/64 > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt > >> > } > >> > > >> > Any comment/suggestion? > >> > > >> > Thanks in advance > >> > > >> > ----Messaggio originale---- > >> > Da: can...@li... > >> > Data: 6-dic-2018 21.04 > >> > A: < can...@li...> > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > > >> > Hi, > >> > I do not have access to a ATmega64M1, so there is no way AFIK for me > >> > to run and debug your code. > >> > Also near zero experience with Arduino, lots of experience with > >> > at90can128 though. > >> > > >> > I could always look at your code, but without knowing the general > >> > place where the problem is, it is close to impossible... for me :) > >> > > >> > When you say that only thing that is working is THE nmt message. > >> > Is there only one nmt message? > >> > What nmt state is the node in? > >> > Have you tried to set it to operational state? > >> > > >> > Best Regards > >> > Lars > >> > On Tue, Dec 4, 2018 at 5:26 PM < can...@li...> wrote: > >> > > > >> > > The only thing which is working is the NMT message at the startup. > >> > > > >> > > No SDO response and I cannot able to make debug now. > >> > > > >> > > Can I attach the whole directory project which stay in the Arduino/libraries folder to give you the whole files package? > >> > > > >> > > Thanks > >> > > > >> > > Bye > >> > > > >> > > Alessio > >> > > > >> > > ----Messaggio originale---- > >> > > Da: can...@li... > >> > > Data: 3-dic-2018 17.52 > >> > > A: < can...@li...> > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in Arduino IDE > >> > > > >> > > Hi, > >> > > Does anything work? > >> > > Like heartbeat or sdo? > >> > > > >> > > could you check if the code reaches buildPDO? > >> > > > >> > > Best Regards > >> > > Lars > >> > > > >> > > On Sat, Dec 1, 2018 at 6:02 PM < can...@li...> wrote: > >> > > > > >> > > > > >> > > > Dear all, > >> > > > > >> > > > first of all many thanks to the developers and people in general that spent time on this project making it an affordable CanOpen platform for everyone. > >> > > > > >> > > > I'm new on this mailing list and here to explain my problem. > >> > > > > >> > > > I'm an electronic engineer and a researcher of University of Brescia (Italy) and I'm trying to make the canFestival working on Arduino using the Atmega64M1 uC. > >> > > > > >> > > > I know that there is the CanFestivino project that is the CanFestival porting for the Arduino IDE and the Atmega328p with the external controller MCP2515. > >> > > > > >> > > > It works but the guy that makes the porting cut several features to fit the code with the Atmega328 ROM and RAM. > >> > > > > >> > > > I reached it compilable in Arduino starting from the AVR example for the ATCAN90128. This uC is very similar to the ATmega64M1. > >> > > > > >> > > > The only things that I did was to change the timer, from timer3 to timer1 (timer3 is not present on the ATmega64M1) and some tiny modifications in the CAN driver. > >> > > > > >> > > > Actually my project is compilable in Arduino where I created an example to read an analog input (A0) sending it through a PDO each 100ms. > >> > > > > >> > > > The only thing to need in order to compile it is the Arduino IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, ...HERE. > >> > > > > >> > > > I cannot figure out why but actually the example doesn't work and I'm struggling on it....making me a bit crazy because I don't understand why. > >> > > > > >> > > > > >> > > > > >> > > > Hope that someone can help me in this.... > >> > > > > >> > > > Thanks > >> > > > > >> > > > Alessio > >> > > > _______________________________________________ > >> > > > Canfestival-devel mailing list > >> > > > Can...@li... > >> > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > > > _______________________________________________ > > Canfestival-devel mailing list > > Can...@li... > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel |
From: <can...@li...> - 2018-12-20 16:10:20
|
>>> can_disable was designed to work with at90can seriers so might not work with your uC looking the datasheet of ATmega64M1 the can register is the same. By the way the can_drv.h is rewritten for my uC. >>> Before sleep I think it is best to set the node in stop mode. It just disable processing and making of almost every type of canopen message, and it will also tell the network that is has stopped. Already tried to put the node in stop mode. It doesn't work. What seems to happen is that the uC seems to miss the interrupt because it has a lower priority with can interrupts. Now I'm doing other tests to solve this issue. thanks anyway ----Messaggio originale---- Da: can...@li... Data: 20-dic-2018 16.54 A: <can...@li...> Ogg: Re: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE first off can_disable was designed to work with at90can seriers so might not work with your uC Other than the timer, I'm not sure what canfestival can do to wake the controller up, but i have zero experience with sleep, so keep that in mind. Before sleep I think it is best to set the node in stop mode. It just disable processing and making of almost every type of canopen message, and it will also tell the network that is has stopped. On start, what you have done looks good to me. best regards Lars On Wed, 19 Dec 2018, 19:41 < can...@li... wrote: Basically my question is what to do before to go in sleep mode and what to do just after the wake up. In the main I do: switch(baudrate) // 0=100KBaud, 1=125KBaud, 2=200KBaud, 3=250KBaud, 4=500KBaud, 5=1000KBaud { case 0: canInit(100); break; case 1: canInit(125); break; case 2: canInit(200); break; case 3: canInit(250); break; case 4: canInit(500); break; case 5: canInit(1000); break; } initTimer(); // Start timer for the CANopen stack setNodeId(&ObjDict_Data, nodeID); setState(&ObjDict_Data, Pre_operational); // Init the state so, shall I have to do something before the sleep? and after at the wake up? Thanks in advance to anyone spends time in this. ----Messaggio originale---- Da: can...@li... Data: 19-dic-2018 18.52 A: < can...@li...> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Another question: I've implemented the canFestival on a node which goes in sleep mode (POWER_DOWN) when there's no power supply. This device has a battery to keep the power supply on in OR with the main one. Of course when the battery is on I need to put everything in deep sleep mode with a consumption around 1.5uA @3V. The issue is that sometimes, if I receive something on the bus, the node suddendly wakes up from the sleep. Therefore I need to avoid this bad situation in order to avoid the battery discharge. How can I disable the canbus just before to go in sleep? Basically the sleep mode control is made in pin_change interrupt function. ISR(PCINT1_vect) // interrupt service routine called when the sensor is battery powered or not (LOWER PRIORITY THAN PCINT0_vect) { sleepMode = !digitalRead(V_supply); if ( sleepMode ) { Can_disable(); // doesn't work #ifdef SERIAL_DEBUG Serial.print('\0'); // print the NULL character to be sure that the TX port pin (PB0) is LOW #endif cli(); stopADC(); sleep(); } else turnedOn = true; } I'm quite sure that there is something in the canFestival framework which put the uC ON if something is received just before to go in sleep. Any suggestion? ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.24 A: < can...@li...> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Sorry guys my fault. The default nodeID is 0x01. Everything works correctly Thanks and sorry ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.17 A: < can...@li...> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I've found the issue. It relative on how the objectdictionary .c file is created. If I leave the file as it is /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x600; /* 1536 */ The canbus node doesn't reply to any SDO request. If I change it like this /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x605; /* 1536 */ where 0x05 is the nodeID I get the right reply from my node Is this a bug on the object dictionary building procedure in the python script? Waiting a kind reply Thanks ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 20.16 A: < can...@li...> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I did some other tests. The issue seems inside the canDispatch function in states.c. I'm using a pin as debug in order to understand if the code in some point is executed or not. basically this is done in the canDispatch: .............. case SDOrx: if (d->CurrentCommunicationState.csSDO) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedSDO(d,m); } break; case NODE_GUARD: if (d->CurrentCommunicationState.csLifeGuard) proceedNODE_GUARD(d,m); break; case NMT: if (*(d->iam_a_slave)) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedNMTstateChange(d,m); } break; ............ I can see that at the beginning, when I change the state from initialization to oeprational the case NMT is executed correctly. In fact I see the right PDO coming down to the bus. But if I send a message on the bus, the case SDOrx is not executed, then neither the proceedSDO(d,m) function I'll investigate well tomorrow yet. ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 0.00 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE symboles.c: dont know if it does any damage, but it does nothing good. it's for Linux kernel module usage you should not include it in Arduino build On Sat, 15 Dec 2018, 17:33 < can...@li... wrote: Could this issue during compilation /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: parameter names (without types) in function declaration [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: warning: data definition has no type or storage class [enabled by default] EXPORT_SYMBOL (_setODentry); ^ be an issue regarding the missing replies on the BUS. This kind of warning message is repeated for many symbols: honestly I don't think so but for completeness I give you this information Thanks ----Messaggio originale---- Da: can...@li... Data: 13-dic-2018 21.02 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Do the can messages look okay in the canDispatch function (states.c) On Thu, Dec 13, 2018 at 7:30 PM < can...@li...> wrote: > > That's the strange thing. > > The node doesn't react to any message sent > > ----Messaggio originale---- > Da: can...@li... > Data: 13-dic-2018 18.04 > A: < can...@li...> > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > Strange, > You should get a reply on "all" sdo messages > Does the node react to any messages you send to the node? > > > > > > > On Thu, Dec 13, 2018 at 10:57 AM > < can...@li...> wrote: > > > > PDOs every 100ms are running correctly. > > > > The issue remaining is the response from the node. > > > > For instance if I wish to change the event cycle for the PDO from 100ms to 70 ms I need to write on the bus: > > > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h > > > > where nodeID is 600+ID and in my case is 601 > > > > Normally when you send something on the canbus you get a response from the node that depends if the object dictionary element is implemented in the dictionary. > > > > In my case I don't get any reply from the node. > > > > I don't know why > > > > > > ----Messaggio originale---- > > Da: can...@li... > > Data: 13-dic-2018 10.07 > > A: < can...@li...> > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > > > so, everything is up and running? > > > > On Wed, 12 Dec 2018, 16:17 < can...@li... wrote: > >> > >> Ok, > >> > >> solved with > >> > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) > >> // CANIE2 = 0xFF; > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) edited for ATmegaxxM1 > >> > >> in the can_AVR.c file > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.49 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. > >> > >> So I need to change some #define in the can_drv.h file > >> > >> // #define NB_MOB 15 > >> #define NB_MOB 6 // edited for ATmegaxxM1 > >> #define NB_DATA_MAX 8 > >> #define LAST_MOB_NB (NB_MOB-1) > >> #define NO_MOB 0xFF > >> // ---------- > >> //typedef enum { > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, MOB_7, > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, MOB_14 } can_mob_t; > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} can_mob_t;// edited for ATmegaxxM1 > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.33 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Sorry my mistake, > >> > >> the number of PDO sent after the operational mode is, of course, equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 10.58 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> after some proofs I found another issue on the ATmega64M1. > >> > >> Basically and actually I'm able to receive only some PDOs at the beginning (after the operational mode). > >> The number of PDOs receive is based on the NB_RX_MOB define. > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the operational mode, if I define it = 6 I receive only 6 PDOs. > >> > >> After that the canbus goes in a sort of stuck mode and I need a master reset to resume the node. > >> > >> The timer1 works properly just adding these instructions: > >> > >> /* Added by me for Arduino compliance */ > >> TCCR1A = 0; > >> TCCR1B = 0; > >> TIMSK1 = 0; > >> /**************************************/ > >> > >> in the timer_AVR.c > >> > >> Any suggestion? > >> > >> Thanks in advance > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 16.01 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I've found the issue and it was relative to the TCCR1A value. > >> > >> Arduino touches this timer at the beginning in the wiring.c file. > >> > >> Then actually the timer works but I can receive only five PDO after the startup. > >> > >> After that the CANBUS seems stuck and I don't receive PDO anymore. > >> > >> The only way is to make a master reset in order to receive other 5 PDO. > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 12.21 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> hello, > >> I found a strange bug with setting 16bit registers. > >> > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits were applied. > >> > >> The datasheet says that for OCR1B you have to first set the upper byte as documented, and afterwards commit with the lower byte. > >> this however does not work for me. > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 11.30 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> something strange compare if I try to debug the TCNT1 and OCR1B values. > >> > >> Why I get only values from 0 to 255? > >> > >> The timer1 is a 16bit timer > >> > >> ??????????????????? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 10.04 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> > >> probably the issue is that for the ATmega64M1 I have to use the TIMER1 in CTC mode up to OCR1A as top value? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 9.12 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I'm using 8MHz external clock. > >> > >> Timer should be 8us per tick since that I'm using the clkio/64 prescaler. > >> > >> So the timing frequency is, or I suppose, 125Khz --> 8us. > >> > >> // The timer is incrementing every 8 us. > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) > >> #define US_TO_TIMEVAL(us) ((us)>>3) > >> > >> This definition seems to be correct because each timer tick = 8us. > >> > >> In order to have us we have to divide the tick count value by 8 (>>3) instead to have ms we have to multiply by 125. > >> > >> It seems exact. > >> > >> Why you told me that this define are incorrect? > >> > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 10-dic-2018 20.58 > >> A: < can...@li...> > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> This I should be able to help you with > >> in timerscfg.h there are two macros that need to be correct > >> MS_TO_TIMEVAL and US_TO_TIMEVAL > >> > >> They are used to convert ms and us to timer ticks (TIMEVAL) > >> > >> What clock frequency are you using? > >> On Mon, Dec 10, 2018 at 3:13 PM < can...@li...> wrote: > >> > > >> > Hi, > >> > > >> > the issue seems relative to the timer event. > >> > > >> > If I program a transmist PDO every 100ms I can see at the beginning some PDO every 1 or 2 ms. > >> > > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up to a new uC master reset, so a new canbus initialization process. > >> > > >> > Basically the timer_AVR.c file is exactly equal to the original one (for the at90can128) except in the initTimer function where I use the timer1 because the ATmega64M1 doesn't have the timer3 > >> > > >> > void initTimer(void) > >> > /****************************************************************************** > >> > Initializes the timer, turn on the interrupt and put the interrupt time to zero > >> > INPUT void > >> > OUTPUT void > >> > ******************************************************************************/ > >> > { > >> > TimerAlarm = 0; // Set it back to the zero > >> > > >> > // Set timer 1 for CANopen operation tick 8us max, time is 524ms > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit CK/64 > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt > >> > } > >> > > >> > Any comment/suggestion? > >> > > >> > Thanks in advance > >> > > >> > ----Messaggio originale---- > >> > Da: can...@li... > >> > Data: 6-dic-2018 21.04 > >> > A: < can...@li...> > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > > >> > Hi, > >> > I do not have access to a ATmega64M1, so there is no way AFIK for me > >> > to run and debug your code. > >> > Also near zero experience with Arduino, lots of experience with > >> > at90can128 though. > >> > > >> > I could always look at your code, but without knowing the general > >> > place where the problem is, it is close to impossible... for me :) > >> > > >> > When you say that only thing that is working is THE nmt message. > >> > Is there only one nmt message? > >> > What nmt state is the node in? > >> > Have you tried to set it to operational state? > >> > > >> > Best Regards > >> > Lars > >> > On Tue, Dec 4, 2018 at 5:26 PM < can...@li...> wrote: > >> > > > >> > > The only thing which is working is the NMT message at the startup. > >> > > > >> > > No SDO response and I cannot able to make debug now. > >> > > > >> > > Can I attach the whole directory project which stay in the Arduino/libraries folder to give you the whole files package? > >> > > > >> > > Thanks > >> > > > >> > > Bye > >> > > > >> > > Alessio > >> > > > >> > > ----Messaggio originale---- > >> > > Da: can...@li... > >> > > Data: 3-dic-2018 17.52 > >> > > A: < can...@li...> > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in Arduino IDE > >> > > > >> > > Hi, > >> > > Does anything work? > >> > > Like heartbeat or sdo? > >> > > > >> > > could you check if the code reaches buildPDO? > >> > > > >> > > Best Regards > >> > > Lars > >> > > > >> > > On Sat, Dec 1, 2018 at 6:02 PM < can...@li...> wrote: > >> > > > > >> > > > > >> > > > Dear all, > >> > > > > >> > > > first of all many thanks to the developers and people in general that spent time on this project making it an affordable CanOpen platform for everyone. > >> > > > > >> > > > I'm new on this mailing list and here to explain my problem. > >> > > > > >> > > > I'm an electronic engineer and a researcher of University of Brescia (Italy) and I'm trying to make the canFestival working on Arduino using the Atmega64M1 uC. > >> > > > > >> > > > I know that there is the CanFestivino project that is the CanFestival porting for the Arduino IDE and the Atmega328p with the external controller MCP2515. > >> > > > > >> > > > It works but the guy that makes the porting cut several features to fit the code with the Atmega328 ROM and RAM. > >> > > > > >> > > > I reached it compilable in Arduino starting from the AVR example for the ATCAN90128. This uC is very similar to the ATmega64M1. > >> > > > > >> > > > The only things that I did was to change the timer, from timer3 to timer1 (timer3 is not present on the ATmega64M1) and some tiny modifications in the CAN driver. > >> > > > > >> > > > Actually my project is compilable in Arduino where I created an example to read an analog input (A0) sending it through a PDO each 100ms. > >> > > > > >> > > > The only thing to need in order to compile it is the Arduino IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, ...HERE. > >> > > > > >> > > > I cannot figure out why but actually the example doesn't work and I'm struggling on it....making me a bit crazy because I don't understand why. > >> > > > > >> > > > > >> > > > > >> > > > Hope that someone can help me in this.... > >> > > > > >> > > > Thanks > >> > > > > >> > > > Alessio > >> > > > _______________________________________________ > >> > > > Canfestival-devel mailing list > >> > > > Can...@li... > >> > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > > > _______________________________________________ > > Canfestival-devel mailing list > > Can...@li... > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel |
From: <can...@li...> - 2018-12-20 15:55:20
|
first off can_disable was designed to work with at90can seriers so might not work with your uC Other than the timer, I'm not sure what canfestival can do to wake the controller up, but i have zero experience with sleep, so keep that in mind. Before sleep I think it is best to set the node in stop mode. It just disable processing and making of almost every type of canopen message, and it will also tell the network that is has stopped. On start, what you have done looks good to me. best regards Lars On Wed, 19 Dec 2018, 19:41 <can...@li... wrote: > Basically my question is what to do before to go in sleep mode and what to > do just after the wake up. > > In the main I do: > > switch(baudrate) // 0=100KBaud, 1=125KBaud, 2=200KBaud, 3=250KBaud, > 4=500KBaud, 5=1000KBaud > { > case 0: canInit(100); break; > case 1: canInit(125); break; > case 2: canInit(200); break; > case 3: canInit(250); break; > case 4: canInit(500); break; > case 5: canInit(1000); break; > } > initTimer(); // Start timer for the CANopen > stack > setNodeId(&ObjDict_Data, nodeID); > setState(&ObjDict_Data, Pre_operational); // Init the state > > so, shall I have to do something before the sleep? > > and after at the wake up? > > Thanks in advance to anyone spends time in this. > > > > ----Messaggio originale---- > Da: can...@li... > Data: 19-dic-2018 18.52 > A: <can...@li...> > Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: > R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > > Another question: > > I've implemented the canFestival on a node which goes in sleep mode > (POWER_DOWN) when there's no power supply. > > This device has a battery to keep the power supply on in OR with the main > one. > > Of course when the battery is on I need to put everything in deep sleep > mode with a consumption around 1.5uA @3V. > > The issue is that sometimes, if I receive something on the bus, the node > suddendly wakes up from the sleep. > > Therefore I need to avoid this bad situation in order to avoid the battery > discharge. > > How can I disable the canbus just before to go in sleep? > > Basically the sleep mode control is made in pin_change interrupt function. > > ISR(PCINT1_vect) // interrupt service routine called when the sensor > is battery powered or not (LOWER PRIORITY THAN PCINT0_vect) > { > sleepMode = !digitalRead(V_supply); > > if ( sleepMode ) > { > Can_disable(); // doesn't work > > #ifdef SERIAL_DEBUG > Serial.print('\0'); // print the NULL character to be sure that > the TX port pin (PB0) is LOW > #endif > cli(); > stopADC(); > sleep(); > } > else > turnedOn = true; > } > > > I'm quite sure that there is something in the canFestival framework which > put the uC ON if something is received just before to go in sleep. > > Any suggestion? > > ----Messaggio originale---- > Da: can...@li... > Data: 18-dic-2018 10.24 > A: <can...@li...> > Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: > R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > Sorry guys my fault. > > The default nodeID is 0x01. > > Everything works correctly > > Thanks and sorry > > > ----Messaggio originale---- > Da: can...@li... > Data: 18-dic-2018 10.17 > A: <can...@li...> > Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: > R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > I've found the issue. > > It relative on how the objectdictionary .c file is created. > > If I leave the file as it is > > /* index 0x1200 : Server SDO Parameter. */ > UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of > subindex - 1*/ > UNS32 > ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x600; /* 1536 */ > > The canbus node doesn't reply to any SDO request. > > If I change it like this > > /* index 0x1200 : Server SDO Parameter. */ > UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of > subindex - 1*/ > UNS32 > ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x605; /* 1536 */ > > where 0x05 is the nodeID > > I get the right reply from my node > > Is this a bug on the object dictionary building procedure in the python > script? > > Waiting a kind reply > > Thanks > > ----Messaggio originale---- > Da: can...@li... > Data: 17-dic-2018 20.16 > A: <can...@li...> > Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: > R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > I did some other tests. > > The issue seems inside the canDispatch function in states.c. > > I'm using a pin as debug in order to understand if the code in some point > is executed or not. > > basically this is done in the canDispatch: > > .............. > case SDOrx: > if (d->CurrentCommunicationState.csSDO) > { > DDRB |= (1<<PB4); // set PB4 as output > PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG > proceedSDO(d,m); > } > break; > case NODE_GUARD: > if (d->CurrentCommunicationState.csLifeGuard) > proceedNODE_GUARD(d,m); > break; > case NMT: > if (*(d->iam_a_slave)) > { > DDRB |= (1<<PB4); // set PB4 as output > PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG > proceedNMTstateChange(d,m); > } > break; > ............ > > I can see that at the beginning, when I change the state from > initialization to oeprational the case NMT is executed correctly. > In fact I see the right PDO coming down to the bus. > > But if I send a message on the bus, the case SDOrx is not executed, then > neither the proceedSDO(d,m) function > > I'll investigate well tomorrow yet. > > > ----Messaggio originale---- > Da: can...@li... > Data: 17-dic-2018 0.00 > A: <can...@li...> > Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: > R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > symboles.c: dont know if it does any damage, but it does nothing good. > it's for Linux kernel module usage you should not include it in Arduino > build > > On Sat, 15 Dec 2018, 17:33 < can...@li... > <http://invalidurl.gif> wrote: > >> Could this issue during compilation >> >> /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: >> warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled >> by default] >> /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: >> warning: parameter names (without types) in function declaration [enabled >> by default] >> /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: >> warning: data definition has no type or storage class [enabled by default] >> EXPORT_SYMBOL (_setODentry); >> ^ >> >> be an issue regarding the missing replies on the BUS. >> >> This kind of warning message is repeated for many symbols: >> >> honestly I don't think so but for completeness I give you this >> information >> >> Thanks >> >> ----Messaggio originale---- >> Da: can...@li... <http://invalidurl.gif> >> Data: 13-dic-2018 21.02 >> A: < can...@li... <http://invalidurl.gif>> >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: >> R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >> >> Do the can messages look okay in the canDispatch function (states.c) >> On Thu, Dec 13, 2018 at 7:30 PM < can...@li... >> <http://invalidurl.gif>> wrote: >> > >> > That's the strange thing. >> > >> > The node doesn't react to any message sent >> > >> > ----Messaggio originale---- >> > Da: can...@li... <http://invalidurl.gif> >> > Data: 13-dic-2018 18.04 >> > A: < can...@li... <http://invalidurl.gif>> >> > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: >> Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE >> > >> > Strange, >> > You should get a reply on "all" sdo messages >> > Does the node react to any messages you send to the node? >> > >> > >> > >> > >> > >> > >> > On Thu, Dec 13, 2018 at 10:57 AM >> > < can...@li... <http://invalidurl.gif>> >> wrote: >> > > >> > > PDOs every 100ms are running correctly. >> > > >> > > The issue remaining is the response from the node. >> > > >> > > For instance if I wish to change the event cycle for the PDO from >> 100ms to 70 ms I need to write on the bus: >> > > >> > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h >> > > >> > > where nodeID is 600+ID and in my case is 601 >> > > >> > > Normally when you send something on the canbus you get a response >> from the node that depends if the object dictionary element is implemented >> in the dictionary. >> > > >> > > In my case I don't get any reply from the node. >> > > >> > > I don't know why >> > > >> > > >> > > ----Messaggio originale---- >> > > Da: can...@li... <http://invalidurl.gif> >> > > Data: 13-dic-2018 10.07 >> > > A: < can...@li... <http://invalidurl.gif>> >> >> > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: R: >> Re: CanFestival on ATmega64M1 in Arduino IDE >> > > >> > > so, everything is up and running? >> > > >> > > On Wed, 12 Dec 2018, 16:17 < can...@li... >> <http://invalidurl.gif> wrote: >> > >> >> > >> Ok, >> > >> >> > >> solved with >> > >> >> > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) >> > >> // CANIE2 = 0xFF; >> > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) >> edited for ATmegaxxM1 >> > >> >> > >> in the can_AVR.c file >> > >> >> > >> ----Messaggio originale---- >> > >> Da: can...@li... <http://invalidurl.gif> >> > >> Data: 12-dic-2018 11.49 >> > >> A: < can...@li... <http://invalidurl.gif>> >> >> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: >> CanFestival on ATmega64M1 in Arduino IDE >> > >> >> > >> >> > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. >> > >> >> > >> So I need to change some #define in the can_drv.h file >> > >> >> > >> // #define NB_MOB 15 >> > >> #define NB_MOB 6 // edited for ATmegaxxM1 >> > >> #define NB_DATA_MAX 8 >> > >> #define LAST_MOB_NB (NB_MOB-1) >> > >> #define NO_MOB 0xFF >> > >> // ---------- >> > >> //typedef enum { >> > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, >> MOB_7, >> > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, >> MOB_14 } can_mob_t; >> > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} >> can_mob_t;// edited for ATmegaxxM1 >> > >> >> > >> >> > >> >> > >> ----Messaggio originale---- >> > >> Da: can...@li... <http://invalidurl.gif> >> > >> Data: 12-dic-2018 11.33 >> > >> A: < can...@li... <http://invalidurl.gif>> >> >> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: >> CanFestival on ATmega64M1 in Arduino IDE >> > >> >> > >> Sorry my mistake, >> > >> >> > >> the number of PDO sent after the operational mode is, of course, >> equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) >> > >> >> > >> ----Messaggio originale---- >> > >> Da: can...@li... <http://invalidurl.gif> >> > >> Data: 12-dic-2018 10.58 >> > >> A: < can...@li... <http://invalidurl.gif>> >> >> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: >> CanFestival on ATmega64M1 in Arduino IDE >> > >> >> > >> Hi, >> > >> after some proofs I found another issue on the ATmega64M1. >> > >> >> > >> Basically and actually I'm able to receive only some PDOs at the >> beginning (after the operational mode). >> > >> The number of PDOs receive is based on the NB_RX_MOB define. >> > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the >> operational mode, if I define it = 6 I receive only 6 PDOs. >> > >> >> > >> After that the canbus goes in a sort of stuck mode and I need a >> master reset to resume the node. >> > >> >> > >> The timer1 works properly just adding these instructions: >> > >> >> > >> /* Added by me for Arduino compliance */ >> > >> TCCR1A = 0; >> > >> TCCR1B = 0; >> > >> TIMSK1 = 0; >> > >> /**************************************/ >> > >> >> > >> in the timer_AVR.c >> > >> >> > >> Any suggestion? >> > >> >> > >> Thanks in advance >> > >> >> > >> ----Messaggio originale---- >> > >> Da: can...@li... <http://invalidurl.gif> >> > >> Data: 11-dic-2018 16.01 >> > >> A: < can...@li... <http://invalidurl.gif>> >> >> > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: >> CanFestival on ATmega64M1 in Arduino IDE >> > >> >> > >> I've found the issue and it was relative to the TCCR1A value. >> > >> >> > >> Arduino touches this timer at the beginning in the wiring.c file. >> > >> >> > >> Then actually the timer works but I can receive only five PDO after >> the startup. >> > >> >> > >> After that the CANBUS seems stuck and I don't receive PDO anymore. >> > >> >> > >> The only way is to make a master reset in order to receive other 5 >> PDO. >> > >> >> > >> ----Messaggio originale---- >> > >> Da: can...@li... <http://invalidurl.gif> >> > >> Data: 11-dic-2018 12.21 >> > >> A: < can...@li... <http://invalidurl.gif>> >> >> > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival >> on ATmega64M1 in Arduino IDE >> > >> >> > >> hello, >> > >> I found a strange bug with setting 16bit registers. >> > >> >> > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits were >> applied. >> > >> >> > >> The datasheet says that for OCR1B you have to first set the upper >> byte as documented, and afterwards commit with the lower byte. >> > >> this however does not work for me. >> > >> >> > >> >> > >> ----Messaggio originale---- >> > >> Da: can...@li... <http://invalidurl.gif> >> > >> Data: 11-dic-2018 11.30 >> > >> A: < can...@li... <http://invalidurl.gif>> >> >> > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on >> ATmega64M1 in Arduino IDE >> > >> >> > >> Hi, >> > >> something strange compare if I try to debug the TCNT1 and OCR1B >> values. >> > >> >> > >> Why I get only values from 0 to 255? >> > >> >> > >> The timer1 is a 16bit timer >> > >> >> > >> ??????????????????? >> > >> >> > >> ----Messaggio originale---- >> > >> Da: can...@li... <http://invalidurl.gif> >> > >> Data: 11-dic-2018 10.04 >> > >> A: < can...@li... <http://invalidurl.gif>> >> >> > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on >> ATmega64M1 in Arduino IDE >> > >> >> > >> Hi, >> > >> >> > >> probably the issue is that for the ATmega64M1 I have to use the >> TIMER1 in CTC mode up to OCR1A as top value? >> > >> >> > >> ----Messaggio originale---- >> > >> Da: can...@li... <http://invalidurl.gif> >> > >> Data: 11-dic-2018 9.12 >> > >> A: < can...@li... <http://invalidurl.gif>> >> >> > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on >> ATmega64M1 in Arduino IDE >> > >> >> > >> I'm using 8MHz external clock. >> > >> >> > >> Timer should be 8us per tick since that I'm using the clkio/64 >> prescaler. >> > >> >> > >> So the timing frequency is, or I suppose, 125Khz --> 8us. >> > >> >> > >> // The timer is incrementing every 8 us. >> > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) >> > >> #define US_TO_TIMEVAL(us) ((us)>>3) >> > >> >> > >> This definition seems to be correct because each timer tick = 8us. >> > >> >> > >> In order to have us we have to divide the tick count value by 8 >> (>>3) instead to have ms we have to multiply by 125. >> > >> >> > >> It seems exact. >> > >> >> > >> Why you told me that this define are incorrect? >> > >> >> > >> >> > >> >> > >> >> > >> ----Messaggio originale---- >> > >> Da: can...@li... <http://invalidurl.gif> >> > >> Data: 10-dic-2018 20.58 >> > >> A: < can...@li... <http://invalidurl.gif>> >> >> > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on ATmega64M1 >> in Arduino IDE >> > >> >> > >> This I should be able to help you with >> > >> in timerscfg.h there are two macros that need to be correct >> > >> MS_TO_TIMEVAL and US_TO_TIMEVAL >> > >> >> > >> They are used to convert ms and us to timer ticks (TIMEVAL) >> > >> >> > >> What clock frequency are you using? >> > >> On Mon, Dec 10, 2018 at 3:13 PM < >> can...@li... <http://invalidurl.gif>> wrote: >> > >> > >> > >> > Hi, >> > >> > >> > >> > the issue seems relative to the timer event. >> > >> > >> > >> > If I program a transmist PDO every 100ms I can see at the >> beginning some PDO every 1 or 2 ms. >> > >> > >> > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up >> to a new uC master reset, so a new canbus initialization process. >> > >> > >> > >> > Basically the timer_AVR.c file is exactly equal to the original >> one (for the at90can128) except in the initTimer function where I use the >> timer1 because the ATmega64M1 doesn't have the timer3 >> > >> > >> > >> > void initTimer(void) >> > >> > >> /****************************************************************************** >> >> > >> > Initializes the timer, turn on the interrupt and put the interrupt >> time to zero >> > >> > INPUT void >> > >> > OUTPUT void >> > >> > >> ******************************************************************************/ >> >> > >> > { >> > >> > TimerAlarm = 0; // Set it back to the zero >> > >> > >> > >> > // Set timer 1 for CANopen operation tick 8us max, time is 524ms >> > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit >> CK/64 >> > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt >> > >> > } >> > >> > >> > >> > Any comment/suggestion? >> > >> > >> > >> > Thanks in advance >> > >> > >> > >> > ----Messaggio originale---- >> > >> > Da: can...@li... >> <http://invalidurl.gif> >> > >> > Data: 6-dic-2018 21.04 >> > >> > A: < can...@li... >> <http://invalidurl.gif>> >> > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in >> Arduino IDE >> > >> > >> > >> > Hi, >> > >> > I do not have access to a ATmega64M1, so there is no way AFIK for >> me >> > >> > to run and debug your code. >> > >> > Also near zero experience with Arduino, lots of experience with >> > >> > at90can128 though. >> > >> > >> > >> > I could always look at your code, but without knowing the general >> > >> > place where the problem is, it is close to impossible... for me :) >> > >> > >> > >> > When you say that only thing that is working is THE nmt message. >> > >> > Is there only one nmt message? >> > >> > What nmt state is the node in? >> > >> > Have you tried to set it to operational state? >> > >> > >> > >> > Best Regards >> > >> > Lars >> > >> > On Tue, Dec 4, 2018 at 5:26 PM < >> can...@li... <http://invalidurl.gif>> wrote: >> > >> > > >> > >> > > The only thing which is working is the NMT message at the >> startup. >> > >> > > >> > >> > > No SDO response and I cannot able to make debug now. >> > >> > > >> > >> > > Can I attach the whole directory project which stay in the >> Arduino/libraries folder to give you the whole files package? >> > >> > > >> > >> > > Thanks >> > >> > > >> > >> > > Bye >> > >> > > >> > >> > > Alessio >> > >> > > >> > >> > > ----Messaggio originale---- >> > >> > > Da: can...@li... >> <http://invalidurl.gif> >> > >> > > Data: 3-dic-2018 17.52 >> > >> > > A: < can...@li... >> <http://invalidurl.gif>> >> > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in >> Arduino IDE >> > >> > > >> > >> > > Hi, >> > >> > > Does anything work? >> > >> > > Like heartbeat or sdo? >> > >> > > >> > >> > > could you check if the code reaches buildPDO? >> > >> > > >> > >> > > Best Regards >> > >> > > Lars >> > >> > > >> > >> > > On Sat, Dec 1, 2018 at 6:02 PM < >> can...@li... <http://invalidurl.gif>> wrote: >> > >> > > > >> > >> > > > >> > >> > > > Dear all, >> > >> > > > >> > >> > > > first of all many thanks to the developers and people in >> general that spent time on this project making it an affordable CanOpen >> platform for everyone. >> > >> > > > >> > >> > > > I'm new on this mailing list and here to explain my problem. >> > >> > > > >> > >> > > > I'm an electronic engineer and a researcher of University of >> Brescia (Italy) and I'm trying to make the canFestival working on Arduino >> using the Atmega64M1 uC. >> > >> > > > >> > >> > > > I know that there is the CanFestivino project that is the >> CanFestival porting for the Arduino IDE and the Atmega328p with the >> external controller MCP2515. >> > >> > > > >> > >> > > > It works but the guy that makes the porting cut several >> features to fit the code with the Atmega328 ROM and RAM. >> > >> > > > >> > >> > > > I reached it compilable in Arduino starting from the AVR >> example for the ATCAN90128. This uC is very similar to the ATmega64M1. >> > >> > > > >> > >> > > > The only things that I did was to change the timer, from >> timer3 to timer1 (timer3 is not present on the ATmega64M1) and some tiny >> modifications in the CAN driver. >> > >> > > > >> > >> > > > Actually my project is compilable in Arduino where I created >> an example to read an analog input (A0) sending it through a PDO each >> 100ms. >> > >> > > > >> > >> > > > The only thing to need in order to compile it is the Arduino >> IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, >> ...HERE. >> > >> > > > >> > >> > > > I cannot figure out why but actually the example doesn't work >> and I'm struggling on it....making me a bit crazy because I don't >> understand why. >> > >> > > > >> > >> > > > >> > >> > > > >> > >> > > > Hope that someone can help me in this.... >> > >> > > > >> > >> > > > Thanks >> > >> > > > >> > >> > > > Alessio >> > >> > > > _______________________________________________ >> > >> > > > Canfestival-devel mailing list >> > >> > > > Can...@li... >> <http://invalidurl.gif> >> > >> > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >> > >> > > >> > >> > > >> > >> > > _______________________________________________ >> > >> > > Canfestival-devel mailing list >> > >> > > Can...@li... <http://invalidurl.gif> >> > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >> > >> > > >> > >> > > >> > >> > > _______________________________________________ >> > >> > > Canfestival-devel mailing list >> > >> > > Can...@li... <http://invalidurl.gif> >> > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >> > >> > >> > >> > >> > >> > _______________________________________________ >> > >> > Canfestival-devel mailing list >> > >> > Can...@li... <http://invalidurl.gif> >> > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >> > >> > >> > >> > >> > >> > _______________________________________________ >> > >> > Canfestival-devel mailing list >> > >> > Can...@li... <http://invalidurl.gif> >> > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >> > >> >> > >> >> > >> _______________________________________________ >> > >> Canfestival-devel mailing list >> > >> Can...@li... <http://invalidurl.gif> >> > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > >> _______________________________________________ >> > >> Canfestival-devel mailing list >> > >> Can...@li... <http://invalidurl.gif> >> > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel >> > > >> > > >> > > >> > > _______________________________________________ >> > > Canfestival-devel mailing list >> > > Can...@li... <http://invalidurl.gif> >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >> > >> > >> > _______________________________________________ >> > Canfestival-devel mailing list >> > Can...@li... <http://invalidurl.gif> >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >> > >> > >> > _______________________________________________ >> > Canfestival-devel mailing list >> > Can...@li... <http://invalidurl.gif> >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel >> >> >> _______________________________________________ >> Canfestival-devel mailing list >> Can...@li... <http://invalidurl.gif> >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel >> >> >> _______________________________________________ >> Canfestival-devel mailing list >> Can...@li... <http://invalidurl.gif> >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel >> > > > > > > > > > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > |
From: <can...@li...> - 2018-12-19 18:41:26
|
Basically my question is what to do before to go in sleep mode and what to do just after the wake up. In the main I do: switch(baudrate) // 0=100KBaud, 1=125KBaud, 2=200KBaud, 3=250KBaud, 4=500KBaud, 5=1000KBaud { case 0: canInit(100); break; case 1: canInit(125); break; case 2: canInit(200); break; case 3: canInit(250); break; case 4: canInit(500); break; case 5: canInit(1000); break; } initTimer(); // Start timer for the CANopen stack setNodeId(&ObjDict_Data, nodeID); setState(&ObjDict_Data, Pre_operational); // Init the state so, shall I have to do something before the sleep? and after at the wake up? Thanks in advance to anyone spends time in this. ----Messaggio originale---- Da: can...@li... Data: 19-dic-2018 18.52 A: <can...@li...> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Another question: I've implemented the canFestival on a node which goes in sleep mode (POWER_DOWN) when there's no power supply. This device has a battery to keep the power supply on in OR with the main one. Of course when the battery is on I need to put everything in deep sleep mode with a consumption around 1.5uA @3V. The issue is that sometimes, if I receive something on the bus, the node suddendly wakes up from the sleep. Therefore I need to avoid this bad situation in order to avoid the battery discharge. How can I disable the canbus just before to go in sleep? Basically the sleep mode control is made in pin_change interrupt function. ISR(PCINT1_vect) // interrupt service routine called when the sensor is battery powered or not (LOWER PRIORITY THAN PCINT0_vect) { sleepMode = !digitalRead(V_supply); if ( sleepMode ) { Can_disable(); // doesn't work #ifdef SERIAL_DEBUG Serial.print('\0'); // print the NULL character to be sure that the TX port pin (PB0) is LOW #endif cli(); stopADC(); sleep(); } else turnedOn = true; } I'm quite sure that there is something in the canFestival framework which put the uC ON if something is received just before to go in sleep. Any suggestion? ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.24 A: <can...@li...> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Sorry guys my fault. The default nodeID is 0x01. Everything works correctly Thanks and sorry ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.17 A: <can...@li...> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I've found the issue. It relative on how the objectdictionary .c file is created. If I leave the file as it is /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x600; /* 1536 */ The canbus node doesn't reply to any SDO request. If I change it like this /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x605; /* 1536 */ where 0x05 is the nodeID I get the right reply from my node Is this a bug on the object dictionary building procedure in the python script? Waiting a kind reply Thanks ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 20.16 A: <can...@li...> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I did some other tests. The issue seems inside the canDispatch function in states.c. I'm using a pin as debug in order to understand if the code in some point is executed or not. basically this is done in the canDispatch: .............. case SDOrx: if (d->CurrentCommunicationState.csSDO) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedSDO(d,m); } break; case NODE_GUARD: if (d->CurrentCommunicationState.csLifeGuard) proceedNODE_GUARD(d,m); break; case NMT: if (*(d->iam_a_slave)) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedNMTstateChange(d,m); } break; ............ I can see that at the beginning, when I change the state from initialization to oeprational the case NMT is executed correctly. In fact I see the right PDO coming down to the bus. But if I send a message on the bus, the case SDOrx is not executed, then neither the proceedSDO(d,m) function I'll investigate well tomorrow yet. ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 0.00 A: <can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE symboles.c: dont know if it does any damage, but it does nothing good. it's for Linux kernel module usage you should not include it in Arduino build On Sat, 15 Dec 2018, 17:33 < can...@li... wrote: Could this issue during compilation /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: parameter names (without types) in function declaration [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: warning: data definition has no type or storage class [enabled by default] EXPORT_SYMBOL (_setODentry); ^ be an issue regarding the missing replies on the BUS. This kind of warning message is repeated for many symbols: honestly I don't think so but for completeness I give you this information Thanks ----Messaggio originale---- Da: can...@li... Data: 13-dic-2018 21.02 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Do the can messages look okay in the canDispatch function (states.c) On Thu, Dec 13, 2018 at 7:30 PM < can...@li...> wrote: > > That's the strange thing. > > The node doesn't react to any message sent > > ----Messaggio originale---- > Da: can...@li... > Data: 13-dic-2018 18.04 > A: < can...@li...> > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > Strange, > You should get a reply on "all" sdo messages > Does the node react to any messages you send to the node? > > > > > > > On Thu, Dec 13, 2018 at 10:57 AM > < can...@li...> wrote: > > > > PDOs every 100ms are running correctly. > > > > The issue remaining is the response from the node. > > > > For instance if I wish to change the event cycle for the PDO from 100ms to 70 ms I need to write on the bus: > > > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h > > > > where nodeID is 600+ID and in my case is 601 > > > > Normally when you send something on the canbus you get a response from the node that depends if the object dictionary element is implemented in the dictionary. > > > > In my case I don't get any reply from the node. > > > > I don't know why > > > > > > ----Messaggio originale---- > > Da: can...@li... > > Data: 13-dic-2018 10.07 > > A: < can...@li...> > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > > > so, everything is up and running? > > > > On Wed, 12 Dec 2018, 16:17 < can...@li... wrote: > >> > >> Ok, > >> > >> solved with > >> > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) > >> // CANIE2 = 0xFF; > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) edited for ATmegaxxM1 > >> > >> in the can_AVR.c file > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.49 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. > >> > >> So I need to change some #define in the can_drv.h file > >> > >> // #define NB_MOB 15 > >> #define NB_MOB 6 // edited for ATmegaxxM1 > >> #define NB_DATA_MAX 8 > >> #define LAST_MOB_NB (NB_MOB-1) > >> #define NO_MOB 0xFF > >> // ---------- > >> //typedef enum { > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, MOB_7, > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, MOB_14 } can_mob_t; > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} can_mob_t;// edited for ATmegaxxM1 > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.33 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Sorry my mistake, > >> > >> the number of PDO sent after the operational mode is, of course, equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 10.58 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> after some proofs I found another issue on the ATmega64M1. > >> > >> Basically and actually I'm able to receive only some PDOs at the beginning (after the operational mode). > >> The number of PDOs receive is based on the NB_RX_MOB define. > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the operational mode, if I define it = 6 I receive only 6 PDOs. > >> > >> After that the canbus goes in a sort of stuck mode and I need a master reset to resume the node. > >> > >> The timer1 works properly just adding these instructions: > >> > >> /* Added by me for Arduino compliance */ > >> TCCR1A = 0; > >> TCCR1B = 0; > >> TIMSK1 = 0; > >> /**************************************/ > >> > >> in the timer_AVR.c > >> > >> Any suggestion? > >> > >> Thanks in advance > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 16.01 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I've found the issue and it was relative to the TCCR1A value. > >> > >> Arduino touches this timer at the beginning in the wiring.c file. > >> > >> Then actually the timer works but I can receive only five PDO after the startup. > >> > >> After that the CANBUS seems stuck and I don't receive PDO anymore. > >> > >> The only way is to make a master reset in order to receive other 5 PDO. > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 12.21 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> hello, > >> I found a strange bug with setting 16bit registers. > >> > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits were applied. > >> > >> The datasheet says that for OCR1B you have to first set the upper byte as documented, and afterwards commit with the lower byte. > >> this however does not work for me. > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 11.30 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> something strange compare if I try to debug the TCNT1 and OCR1B values. > >> > >> Why I get only values from 0 to 255? > >> > >> The timer1 is a 16bit timer > >> > >> ??????????????????? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 10.04 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> > >> probably the issue is that for the ATmega64M1 I have to use the TIMER1 in CTC mode up to OCR1A as top value? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 9.12 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I'm using 8MHz external clock. > >> > >> Timer should be 8us per tick since that I'm using the clkio/64 prescaler. > >> > >> So the timing frequency is, or I suppose, 125Khz --> 8us. > >> > >> // The timer is incrementing every 8 us. > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) > >> #define US_TO_TIMEVAL(us) ((us)>>3) > >> > >> This definition seems to be correct because each timer tick = 8us. > >> > >> In order to have us we have to divide the tick count value by 8 (>>3) instead to have ms we have to multiply by 125. > >> > >> It seems exact. > >> > >> Why you told me that this define are incorrect? > >> > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 10-dic-2018 20.58 > >> A: < can...@li...> > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> This I should be able to help you with > >> in timerscfg.h there are two macros that need to be correct > >> MS_TO_TIMEVAL and US_TO_TIMEVAL > >> > >> They are used to convert ms and us to timer ticks (TIMEVAL) > >> > >> What clock frequency are you using? > >> On Mon, Dec 10, 2018 at 3:13 PM < can...@li...> wrote: > >> > > >> > Hi, > >> > > >> > the issue seems relative to the timer event. > >> > > >> > If I program a transmist PDO every 100ms I can see at the beginning some PDO every 1 or 2 ms. > >> > > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up to a new uC master reset, so a new canbus initialization process. > >> > > >> > Basically the timer_AVR.c file is exactly equal to the original one (for the at90can128) except in the initTimer function where I use the timer1 because the ATmega64M1 doesn't have the timer3 > >> > > >> > void initTimer(void) > >> > /****************************************************************************** > >> > Initializes the timer, turn on the interrupt and put the interrupt time to zero > >> > INPUT void > >> > OUTPUT void > >> > ******************************************************************************/ > >> > { > >> > TimerAlarm = 0; // Set it back to the zero > >> > > >> > // Set timer 1 for CANopen operation tick 8us max, time is 524ms > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit CK/64 > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt > >> > } > >> > > >> > Any comment/suggestion? > >> > > >> > Thanks in advance > >> > > >> > ----Messaggio originale---- > >> > Da: can...@li... > >> > Data: 6-dic-2018 21.04 > >> > A: < can...@li...> > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > > >> > Hi, > >> > I do not have access to a ATmega64M1, so there is no way AFIK for me > >> > to run and debug your code. > >> > Also near zero experience with Arduino, lots of experience with > >> > at90can128 though. > >> > > >> > I could always look at your code, but without knowing the general > >> > place where the problem is, it is close to impossible... for me :) > >> > > >> > When you say that only thing that is working is THE nmt message. > >> > Is there only one nmt message? > >> > What nmt state is the node in? > >> > Have you tried to set it to operational state? > >> > > >> > Best Regards > >> > Lars > >> > On Tue, Dec 4, 2018 at 5:26 PM < can...@li...> wrote: > >> > > > >> > > The only thing which is working is the NMT message at the startup. > >> > > > >> > > No SDO response and I cannot able to make debug now. > >> > > > >> > > Can I attach the whole directory project which stay in the Arduino/libraries folder to give you the whole files package? > >> > > > >> > > Thanks > >> > > > >> > > Bye > >> > > > >> > > Alessio > >> > > > >> > > ----Messaggio originale---- > >> > > Da: can...@li... > >> > > Data: 3-dic-2018 17.52 > >> > > A: < can...@li...> > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in Arduino IDE > >> > > > >> > > Hi, > >> > > Does anything work? > >> > > Like heartbeat or sdo? > >> > > > >> > > could you check if the code reaches buildPDO? > >> > > > >> > > Best Regards > >> > > Lars > >> > > > >> > > On Sat, Dec 1, 2018 at 6:02 PM < can...@li...> wrote: > >> > > > > >> > > > > >> > > > Dear all, > >> > > > > >> > > > first of all many thanks to the developers and people in general that spent time on this project making it an affordable CanOpen platform for everyone. > >> > > > > >> > > > I'm new on this mailing list and here to explain my problem. > >> > > > > >> > > > I'm an electronic engineer and a researcher of University of Brescia (Italy) and I'm trying to make the canFestival working on Arduino using the Atmega64M1 uC. > >> > > > > >> > > > I know that there is the CanFestivino project that is the CanFestival porting for the Arduino IDE and the Atmega328p with the external controller MCP2515. > >> > > > > >> > > > It works but the guy that makes the porting cut several features to fit the code with the Atmega328 ROM and RAM. > >> > > > > >> > > > I reached it compilable in Arduino starting from the AVR example for the ATCAN90128. This uC is very similar to the ATmega64M1. > >> > > > > >> > > > The only things that I did was to change the timer, from timer3 to timer1 (timer3 is not present on the ATmega64M1) and some tiny modifications in the CAN driver. > >> > > > > >> > > > Actually my project is compilable in Arduino where I created an example to read an analog input (A0) sending it through a PDO each 100ms. > >> > > > > >> > > > The only thing to need in order to compile it is the Arduino IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, ...HERE. > >> > > > > >> > > > I cannot figure out why but actually the example doesn't work and I'm struggling on it....making me a bit crazy because I don't understand why. > >> > > > > >> > > > > >> > > > > >> > > > Hope that someone can help me in this.... > >> > > > > >> > > > Thanks > >> > > > > >> > > > Alessio > >> > > > _______________________________________________ > >> > > > Canfestival-devel mailing list > >> > > > Can...@li... > >> > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > > > _______________________________________________ > > Canfestival-devel mailing list > > Can...@li... > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel |
From: <can...@li...> - 2018-12-19 17:53:00
|
Another question: I've implemented the canFestival on a node which goes in sleep mode (POWER_DOWN) when there's no power supply. This device has a battery to keep the power supply on in OR with the main one. Of course when the battery is on I need to put everything in deep sleep mode with a consumption around 1.5uA @3V. The issue is that sometimes, if I receive something on the bus, the node suddendly wakes up from the sleep. Therefore I need to avoid this bad situation in order to avoid the battery discharge. How can I disable the canbus just before to go in sleep? Basically the sleep mode control is made in pin_change interrupt function. ISR(PCINT1_vect) // interrupt service routine called when the sensor is battery powered or not (LOWER PRIORITY THAN PCINT0_vect) { sleepMode = !digitalRead(V_supply); if ( sleepMode ) { Can_disable(); // doesn't work #ifdef SERIAL_DEBUG Serial.print('\0'); // print the NULL character to be sure that the TX port pin (PB0) is LOW #endif cli(); stopADC(); sleep(); } else turnedOn = true; } I'm quite sure that there is something in the canFestival framework which put the uC ON if something is received just before to go in sleep. Any suggestion? ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.24 A: <can...@li...> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Sorry guys my fault. The default nodeID is 0x01. Everything works correctly Thanks and sorry ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.17 A: <can...@li...> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I've found the issue. It relative on how the objectdictionary .c file is created. If I leave the file as it is /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x600; /* 1536 */ The canbus node doesn't reply to any SDO request. If I change it like this /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x605; /* 1536 */ where 0x05 is the nodeID I get the right reply from my node Is this a bug on the object dictionary building procedure in the python script? Waiting a kind reply Thanks ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 20.16 A: <can...@li...> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I did some other tests. The issue seems inside the canDispatch function in states.c. I'm using a pin as debug in order to understand if the code in some point is executed or not. basically this is done in the canDispatch: .............. case SDOrx: if (d->CurrentCommunicationState.csSDO) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedSDO(d,m); } break; case NODE_GUARD: if (d->CurrentCommunicationState.csLifeGuard) proceedNODE_GUARD(d,m); break; case NMT: if (*(d->iam_a_slave)) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedNMTstateChange(d,m); } break; ............ I can see that at the beginning, when I change the state from initialization to oeprational the case NMT is executed correctly. In fact I see the right PDO coming down to the bus. But if I send a message on the bus, the case SDOrx is not executed, then neither the proceedSDO(d,m) function I'll investigate well tomorrow yet. ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 0.00 A: <can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE symboles.c: dont know if it does any damage, but it does nothing good. it's for Linux kernel module usage you should not include it in Arduino build On Sat, 15 Dec 2018, 17:33 < can...@li... wrote: Could this issue during compilation /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: parameter names (without types) in function declaration [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: warning: data definition has no type or storage class [enabled by default] EXPORT_SYMBOL (_setODentry); ^ be an issue regarding the missing replies on the BUS. This kind of warning message is repeated for many symbols: honestly I don't think so but for completeness I give you this information Thanks ----Messaggio originale---- Da: can...@li... Data: 13-dic-2018 21.02 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Do the can messages look okay in the canDispatch function (states.c) On Thu, Dec 13, 2018 at 7:30 PM < can...@li...> wrote: > > That's the strange thing. > > The node doesn't react to any message sent > > ----Messaggio originale---- > Da: can...@li... > Data: 13-dic-2018 18.04 > A: < can...@li...> > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > Strange, > You should get a reply on "all" sdo messages > Does the node react to any messages you send to the node? > > > > > > > On Thu, Dec 13, 2018 at 10:57 AM > < can...@li...> wrote: > > > > PDOs every 100ms are running correctly. > > > > The issue remaining is the response from the node. > > > > For instance if I wish to change the event cycle for the PDO from 100ms to 70 ms I need to write on the bus: > > > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h > > > > where nodeID is 600+ID and in my case is 601 > > > > Normally when you send something on the canbus you get a response from the node that depends if the object dictionary element is implemented in the dictionary. > > > > In my case I don't get any reply from the node. > > > > I don't know why > > > > > > ----Messaggio originale---- > > Da: can...@li... > > Data: 13-dic-2018 10.07 > > A: < can...@li...> > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > > > so, everything is up and running? > > > > On Wed, 12 Dec 2018, 16:17 < can...@li... wrote: > >> > >> Ok, > >> > >> solved with > >> > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) > >> // CANIE2 = 0xFF; > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) edited for ATmegaxxM1 > >> > >> in the can_AVR.c file > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.49 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. > >> > >> So I need to change some #define in the can_drv.h file > >> > >> // #define NB_MOB 15 > >> #define NB_MOB 6 // edited for ATmegaxxM1 > >> #define NB_DATA_MAX 8 > >> #define LAST_MOB_NB (NB_MOB-1) > >> #define NO_MOB 0xFF > >> // ---------- > >> //typedef enum { > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, MOB_7, > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, MOB_14 } can_mob_t; > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} can_mob_t;// edited for ATmegaxxM1 > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.33 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Sorry my mistake, > >> > >> the number of PDO sent after the operational mode is, of course, equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 10.58 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> after some proofs I found another issue on the ATmega64M1. > >> > >> Basically and actually I'm able to receive only some PDOs at the beginning (after the operational mode). > >> The number of PDOs receive is based on the NB_RX_MOB define. > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the operational mode, if I define it = 6 I receive only 6 PDOs. > >> > >> After that the canbus goes in a sort of stuck mode and I need a master reset to resume the node. > >> > >> The timer1 works properly just adding these instructions: > >> > >> /* Added by me for Arduino compliance */ > >> TCCR1A = 0; > >> TCCR1B = 0; > >> TIMSK1 = 0; > >> /**************************************/ > >> > >> in the timer_AVR.c > >> > >> Any suggestion? > >> > >> Thanks in advance > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 16.01 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I've found the issue and it was relative to the TCCR1A value. > >> > >> Arduino touches this timer at the beginning in the wiring.c file. > >> > >> Then actually the timer works but I can receive only five PDO after the startup. > >> > >> After that the CANBUS seems stuck and I don't receive PDO anymore. > >> > >> The only way is to make a master reset in order to receive other 5 PDO. > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 12.21 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> hello, > >> I found a strange bug with setting 16bit registers. > >> > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits were applied. > >> > >> The datasheet says that for OCR1B you have to first set the upper byte as documented, and afterwards commit with the lower byte. > >> this however does not work for me. > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 11.30 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> something strange compare if I try to debug the TCNT1 and OCR1B values. > >> > >> Why I get only values from 0 to 255? > >> > >> The timer1 is a 16bit timer > >> > >> ??????????????????? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 10.04 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> > >> probably the issue is that for the ATmega64M1 I have to use the TIMER1 in CTC mode up to OCR1A as top value? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 9.12 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I'm using 8MHz external clock. > >> > >> Timer should be 8us per tick since that I'm using the clkio/64 prescaler. > >> > >> So the timing frequency is, or I suppose, 125Khz --> 8us. > >> > >> // The timer is incrementing every 8 us. > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) > >> #define US_TO_TIMEVAL(us) ((us)>>3) > >> > >> This definition seems to be correct because each timer tick = 8us. > >> > >> In order to have us we have to divide the tick count value by 8 (>>3) instead to have ms we have to multiply by 125. > >> > >> It seems exact. > >> > >> Why you told me that this define are incorrect? > >> > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 10-dic-2018 20.58 > >> A: < can...@li...> > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> This I should be able to help you with > >> in timerscfg.h there are two macros that need to be correct > >> MS_TO_TIMEVAL and US_TO_TIMEVAL > >> > >> They are used to convert ms and us to timer ticks (TIMEVAL) > >> > >> What clock frequency are you using? > >> On Mon, Dec 10, 2018 at 3:13 PM < can...@li...> wrote: > >> > > >> > Hi, > >> > > >> > the issue seems relative to the timer event. > >> > > >> > If I program a transmist PDO every 100ms I can see at the beginning some PDO every 1 or 2 ms. > >> > > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up to a new uC master reset, so a new canbus initialization process. > >> > > >> > Basically the timer_AVR.c file is exactly equal to the original one (for the at90can128) except in the initTimer function where I use the timer1 because the ATmega64M1 doesn't have the timer3 > >> > > >> > void initTimer(void) > >> > /****************************************************************************** > >> > Initializes the timer, turn on the interrupt and put the interrupt time to zero > >> > INPUT void > >> > OUTPUT void > >> > ******************************************************************************/ > >> > { > >> > TimerAlarm = 0; // Set it back to the zero > >> > > >> > // Set timer 1 for CANopen operation tick 8us max, time is 524ms > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit CK/64 > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt > >> > } > >> > > >> > Any comment/suggestion? > >> > > >> > Thanks in advance > >> > > >> > ----Messaggio originale---- > >> > Da: can...@li... > >> > Data: 6-dic-2018 21.04 > >> > A: < can...@li...> > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > > >> > Hi, > >> > I do not have access to a ATmega64M1, so there is no way AFIK for me > >> > to run and debug your code. > >> > Also near zero experience with Arduino, lots of experience with > >> > at90can128 though. > >> > > >> > I could always look at your code, but without knowing the general > >> > place where the problem is, it is close to impossible... for me :) > >> > > >> > When you say that only thing that is working is THE nmt message. > >> > Is there only one nmt message? > >> > What nmt state is the node in? > >> > Have you tried to set it to operational state? > >> > > >> > Best Regards > >> > Lars > >> > On Tue, Dec 4, 2018 at 5:26 PM < can...@li...> wrote: > >> > > > >> > > The only thing which is working is the NMT message at the startup. > >> > > > >> > > No SDO response and I cannot able to make debug now. > >> > > > >> > > Can I attach the whole directory project which stay in the Arduino/libraries folder to give you the whole files package? > >> > > > >> > > Thanks > >> > > > >> > > Bye > >> > > > >> > > Alessio > >> > > > >> > > ----Messaggio originale---- > >> > > Da: can...@li... > >> > > Data: 3-dic-2018 17.52 > >> > > A: < can...@li...> > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in Arduino IDE > >> > > > >> > > Hi, > >> > > Does anything work? > >> > > Like heartbeat or sdo? > >> > > > >> > > could you check if the code reaches buildPDO? > >> > > > >> > > Best Regards > >> > > Lars > >> > > > >> > > On Sat, Dec 1, 2018 at 6:02 PM < can...@li...> wrote: > >> > > > > >> > > > > >> > > > Dear all, > >> > > > > >> > > > first of all many thanks to the developers and people in general that spent time on this project making it an affordable CanOpen platform for everyone. > >> > > > > >> > > > I'm new on this mailing list and here to explain my problem. > >> > > > > >> > > > I'm an electronic engineer and a researcher of University of Brescia (Italy) and I'm trying to make the canFestival working on Arduino using the Atmega64M1 uC. > >> > > > > >> > > > I know that there is the CanFestivino project that is the CanFestival porting for the Arduino IDE and the Atmega328p with the external controller MCP2515. > >> > > > > >> > > > It works but the guy that makes the porting cut several features to fit the code with the Atmega328 ROM and RAM. > >> > > > > >> > > > I reached it compilable in Arduino starting from the AVR example for the ATCAN90128. This uC is very similar to the ATmega64M1. > >> > > > > >> > > > The only things that I did was to change the timer, from timer3 to timer1 (timer3 is not present on the ATmega64M1) and some tiny modifications in the CAN driver. > >> > > > > >> > > > Actually my project is compilable in Arduino where I created an example to read an analog input (A0) sending it through a PDO each 100ms. > >> > > > > >> > > > The only thing to need in order to compile it is the Arduino IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, ...HERE. > >> > > > > >> > > > I cannot figure out why but actually the example doesn't work and I'm struggling on it....making me a bit crazy because I don't understand why. > >> > > > > >> > > > > >> > > > > >> > > > Hope that someone can help me in this.... > >> > > > > >> > > > Thanks > >> > > > > >> > > > Alessio > >> > > > _______________________________________________ > >> > > > Canfestival-devel mailing list > >> > > > Can...@li... > >> > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > > > _______________________________________________ > > Canfestival-devel mailing list > > Can...@li... > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel |
From: <can...@li...> - 2018-12-18 09:24:27
|
Sorry guys my fault. The default nodeID is 0x01. Everything works correctly Thanks and sorry ----Messaggio originale---- Da: can...@li... Data: 18-dic-2018 10.17 A: <can...@li...> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I've found the issue. It relative on how the objectdictionary .c file is created. If I leave the file as it is /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x600; /* 1536 */ The canbus node doesn't reply to any SDO request. If I change it like this /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x605; /* 1536 */ where 0x05 is the nodeID I get the right reply from my node Is this a bug on the object dictionary building procedure in the python script? Waiting a kind reply Thanks ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 20.16 A: <can...@li...> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I did some other tests. The issue seems inside the canDispatch function in states.c. I'm using a pin as debug in order to understand if the code in some point is executed or not. basically this is done in the canDispatch: .............. case SDOrx: if (d->CurrentCommunicationState.csSDO) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedSDO(d,m); } break; case NODE_GUARD: if (d->CurrentCommunicationState.csLifeGuard) proceedNODE_GUARD(d,m); break; case NMT: if (*(d->iam_a_slave)) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedNMTstateChange(d,m); } break; ............ I can see that at the beginning, when I change the state from initialization to oeprational the case NMT is executed correctly. In fact I see the right PDO coming down to the bus. But if I send a message on the bus, the case SDOrx is not executed, then neither the proceedSDO(d,m) function I'll investigate well tomorrow yet. ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 0.00 A: <can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE symboles.c: dont know if it does any damage, but it does nothing good. it's for Linux kernel module usage you should not include it in Arduino build On Sat, 15 Dec 2018, 17:33 < can...@li... wrote: Could this issue during compilation /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: parameter names (without types) in function declaration [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: warning: data definition has no type or storage class [enabled by default] EXPORT_SYMBOL (_setODentry); ^ be an issue regarding the missing replies on the BUS. This kind of warning message is repeated for many symbols: honestly I don't think so but for completeness I give you this information Thanks ----Messaggio originale---- Da: can...@li... Data: 13-dic-2018 21.02 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Do the can messages look okay in the canDispatch function (states.c) On Thu, Dec 13, 2018 at 7:30 PM < can...@li...> wrote: > > That's the strange thing. > > The node doesn't react to any message sent > > ----Messaggio originale---- > Da: can...@li... > Data: 13-dic-2018 18.04 > A: < can...@li...> > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > Strange, > You should get a reply on "all" sdo messages > Does the node react to any messages you send to the node? > > > > > > > On Thu, Dec 13, 2018 at 10:57 AM > < can...@li...> wrote: > > > > PDOs every 100ms are running correctly. > > > > The issue remaining is the response from the node. > > > > For instance if I wish to change the event cycle for the PDO from 100ms to 70 ms I need to write on the bus: > > > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h > > > > where nodeID is 600+ID and in my case is 601 > > > > Normally when you send something on the canbus you get a response from the node that depends if the object dictionary element is implemented in the dictionary. > > > > In my case I don't get any reply from the node. > > > > I don't know why > > > > > > ----Messaggio originale---- > > Da: can...@li... > > Data: 13-dic-2018 10.07 > > A: < can...@li...> > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > > > so, everything is up and running? > > > > On Wed, 12 Dec 2018, 16:17 < can...@li... wrote: > >> > >> Ok, > >> > >> solved with > >> > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) > >> // CANIE2 = 0xFF; > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) edited for ATmegaxxM1 > >> > >> in the can_AVR.c file > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.49 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. > >> > >> So I need to change some #define in the can_drv.h file > >> > >> // #define NB_MOB 15 > >> #define NB_MOB 6 // edited for ATmegaxxM1 > >> #define NB_DATA_MAX 8 > >> #define LAST_MOB_NB (NB_MOB-1) > >> #define NO_MOB 0xFF > >> // ---------- > >> //typedef enum { > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, MOB_7, > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, MOB_14 } can_mob_t; > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} can_mob_t;// edited for ATmegaxxM1 > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.33 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Sorry my mistake, > >> > >> the number of PDO sent after the operational mode is, of course, equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 10.58 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> after some proofs I found another issue on the ATmega64M1. > >> > >> Basically and actually I'm able to receive only some PDOs at the beginning (after the operational mode). > >> The number of PDOs receive is based on the NB_RX_MOB define. > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the operational mode, if I define it = 6 I receive only 6 PDOs. > >> > >> After that the canbus goes in a sort of stuck mode and I need a master reset to resume the node. > >> > >> The timer1 works properly just adding these instructions: > >> > >> /* Added by me for Arduino compliance */ > >> TCCR1A = 0; > >> TCCR1B = 0; > >> TIMSK1 = 0; > >> /**************************************/ > >> > >> in the timer_AVR.c > >> > >> Any suggestion? > >> > >> Thanks in advance > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 16.01 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I've found the issue and it was relative to the TCCR1A value. > >> > >> Arduino touches this timer at the beginning in the wiring.c file. > >> > >> Then actually the timer works but I can receive only five PDO after the startup. > >> > >> After that the CANBUS seems stuck and I don't receive PDO anymore. > >> > >> The only way is to make a master reset in order to receive other 5 PDO. > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 12.21 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> hello, > >> I found a strange bug with setting 16bit registers. > >> > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits were applied. > >> > >> The datasheet says that for OCR1B you have to first set the upper byte as documented, and afterwards commit with the lower byte. > >> this however does not work for me. > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 11.30 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> something strange compare if I try to debug the TCNT1 and OCR1B values. > >> > >> Why I get only values from 0 to 255? > >> > >> The timer1 is a 16bit timer > >> > >> ??????????????????? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 10.04 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> > >> probably the issue is that for the ATmega64M1 I have to use the TIMER1 in CTC mode up to OCR1A as top value? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 9.12 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I'm using 8MHz external clock. > >> > >> Timer should be 8us per tick since that I'm using the clkio/64 prescaler. > >> > >> So the timing frequency is, or I suppose, 125Khz --> 8us. > >> > >> // The timer is incrementing every 8 us. > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) > >> #define US_TO_TIMEVAL(us) ((us)>>3) > >> > >> This definition seems to be correct because each timer tick = 8us. > >> > >> In order to have us we have to divide the tick count value by 8 (>>3) instead to have ms we have to multiply by 125. > >> > >> It seems exact. > >> > >> Why you told me that this define are incorrect? > >> > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 10-dic-2018 20.58 > >> A: < can...@li...> > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> This I should be able to help you with > >> in timerscfg.h there are two macros that need to be correct > >> MS_TO_TIMEVAL and US_TO_TIMEVAL > >> > >> They are used to convert ms and us to timer ticks (TIMEVAL) > >> > >> What clock frequency are you using? > >> On Mon, Dec 10, 2018 at 3:13 PM < can...@li...> wrote: > >> > > >> > Hi, > >> > > >> > the issue seems relative to the timer event. > >> > > >> > If I program a transmist PDO every 100ms I can see at the beginning some PDO every 1 or 2 ms. > >> > > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up to a new uC master reset, so a new canbus initialization process. > >> > > >> > Basically the timer_AVR.c file is exactly equal to the original one (for the at90can128) except in the initTimer function where I use the timer1 because the ATmega64M1 doesn't have the timer3 > >> > > >> > void initTimer(void) > >> > /****************************************************************************** > >> > Initializes the timer, turn on the interrupt and put the interrupt time to zero > >> > INPUT void > >> > OUTPUT void > >> > ******************************************************************************/ > >> > { > >> > TimerAlarm = 0; // Set it back to the zero > >> > > >> > // Set timer 1 for CANopen operation tick 8us max, time is 524ms > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit CK/64 > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt > >> > } > >> > > >> > Any comment/suggestion? > >> > > >> > Thanks in advance > >> > > >> > ----Messaggio originale---- > >> > Da: can...@li... > >> > Data: 6-dic-2018 21.04 > >> > A: < can...@li...> > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > > >> > Hi, > >> > I do not have access to a ATmega64M1, so there is no way AFIK for me > >> > to run and debug your code. > >> > Also near zero experience with Arduino, lots of experience with > >> > at90can128 though. > >> > > >> > I could always look at your code, but without knowing the general > >> > place where the problem is, it is close to impossible... for me :) > >> > > >> > When you say that only thing that is working is THE nmt message. > >> > Is there only one nmt message? > >> > What nmt state is the node in? > >> > Have you tried to set it to operational state? > >> > > >> > Best Regards > >> > Lars > >> > On Tue, Dec 4, 2018 at 5:26 PM < can...@li...> wrote: > >> > > > >> > > The only thing which is working is the NMT message at the startup. > >> > > > >> > > No SDO response and I cannot able to make debug now. > >> > > > >> > > Can I attach the whole directory project which stay in the Arduino/libraries folder to give you the whole files package? > >> > > > >> > > Thanks > >> > > > >> > > Bye > >> > > > >> > > Alessio > >> > > > >> > > ----Messaggio originale---- > >> > > Da: can...@li... > >> > > Data: 3-dic-2018 17.52 > >> > > A: < can...@li...> > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in Arduino IDE > >> > > > >> > > Hi, > >> > > Does anything work? > >> > > Like heartbeat or sdo? > >> > > > >> > > could you check if the code reaches buildPDO? > >> > > > >> > > Best Regards > >> > > Lars > >> > > > >> > > On Sat, Dec 1, 2018 at 6:02 PM < can...@li...> wrote: > >> > > > > >> > > > > >> > > > Dear all, > >> > > > > >> > > > first of all many thanks to the developers and people in general that spent time on this project making it an affordable CanOpen platform for everyone. > >> > > > > >> > > > I'm new on this mailing list and here to explain my problem. > >> > > > > >> > > > I'm an electronic engineer and a researcher of University of Brescia (Italy) and I'm trying to make the canFestival working on Arduino using the Atmega64M1 uC. > >> > > > > >> > > > I know that there is the CanFestivino project that is the CanFestival porting for the Arduino IDE and the Atmega328p with the external controller MCP2515. > >> > > > > >> > > > It works but the guy that makes the porting cut several features to fit the code with the Atmega328 ROM and RAM. > >> > > > > >> > > > I reached it compilable in Arduino starting from the AVR example for the ATCAN90128. This uC is very similar to the ATmega64M1. > >> > > > > >> > > > The only things that I did was to change the timer, from timer3 to timer1 (timer3 is not present on the ATmega64M1) and some tiny modifications in the CAN driver. > >> > > > > >> > > > Actually my project is compilable in Arduino where I created an example to read an analog input (A0) sending it through a PDO each 100ms. > >> > > > > >> > > > The only thing to need in order to compile it is the Arduino IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, ...HERE. > >> > > > > >> > > > I cannot figure out why but actually the example doesn't work and I'm struggling on it....making me a bit crazy because I don't understand why. > >> > > > > >> > > > > >> > > > > >> > > > Hope that someone can help me in this.... > >> > > > > >> > > > Thanks > >> > > > > >> > > > Alessio > >> > > > _______________________________________________ > >> > > > Canfestival-devel mailing list > >> > > > Can...@li... > >> > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > > > _______________________________________________ > > Canfestival-devel mailing list > > Can...@li... > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel |
From: <can...@li...> - 2018-12-18 09:18:02
|
I've found the issue. It relative on how the objectdictionary .c file is created. If I leave the file as it is /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x600; /* 1536 */ The canbus node doesn't reply to any SDO request. If I change it like this /* index 0x1200 : Server SDO Parameter. */ UNS8 ObjDict_highestSubIndex_obj1200 = 2; /* number of subindex - 1*/ UNS32 ObjDict_obj1200_COB_ID_Client_to_Server_Receive_SDO = 0x605; /* 1536 */ where 0x05 is the nodeID I get the right reply from my node Is this a bug on the object dictionary building procedure in the python script? Waiting a kind reply Thanks ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 20.16 A: <can...@li...> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE I did some other tests. The issue seems inside the canDispatch function in states.c. I'm using a pin as debug in order to understand if the code in some point is executed or not. basically this is done in the canDispatch: .............. case SDOrx: if (d->CurrentCommunicationState.csSDO) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedSDO(d,m); } break; case NODE_GUARD: if (d->CurrentCommunicationState.csLifeGuard) proceedNODE_GUARD(d,m); break; case NMT: if (*(d->iam_a_slave)) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedNMTstateChange(d,m); } break; ............ I can see that at the beginning, when I change the state from initialization to oeprational the case NMT is executed correctly. In fact I see the right PDO coming down to the bus. But if I send a message on the bus, the case SDOrx is not executed, then neither the proceedSDO(d,m) function I'll investigate well tomorrow yet. ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 0.00 A: <can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE symboles.c: dont know if it does any damage, but it does nothing good. it's for Linux kernel module usage you should not include it in Arduino build On Sat, 15 Dec 2018, 17:33 < can...@li... wrote: Could this issue during compilation /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: parameter names (without types) in function declaration [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: warning: data definition has no type or storage class [enabled by default] EXPORT_SYMBOL (_setODentry); ^ be an issue regarding the missing replies on the BUS. This kind of warning message is repeated for many symbols: honestly I don't think so but for completeness I give you this information Thanks ----Messaggio originale---- Da: can...@li... Data: 13-dic-2018 21.02 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Do the can messages look okay in the canDispatch function (states.c) On Thu, Dec 13, 2018 at 7:30 PM < can...@li...> wrote: > > That's the strange thing. > > The node doesn't react to any message sent > > ----Messaggio originale---- > Da: can...@li... > Data: 13-dic-2018 18.04 > A: < can...@li...> > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > Strange, > You should get a reply on "all" sdo messages > Does the node react to any messages you send to the node? > > > > > > > On Thu, Dec 13, 2018 at 10:57 AM > < can...@li...> wrote: > > > > PDOs every 100ms are running correctly. > > > > The issue remaining is the response from the node. > > > > For instance if I wish to change the event cycle for the PDO from 100ms to 70 ms I need to write on the bus: > > > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h > > > > where nodeID is 600+ID and in my case is 601 > > > > Normally when you send something on the canbus you get a response from the node that depends if the object dictionary element is implemented in the dictionary. > > > > In my case I don't get any reply from the node. > > > > I don't know why > > > > > > ----Messaggio originale---- > > Da: can...@li... > > Data: 13-dic-2018 10.07 > > A: < can...@li...> > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > > > so, everything is up and running? > > > > On Wed, 12 Dec 2018, 16:17 < can...@li... wrote: > >> > >> Ok, > >> > >> solved with > >> > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) > >> // CANIE2 = 0xFF; > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) edited for ATmegaxxM1 > >> > >> in the can_AVR.c file > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.49 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. > >> > >> So I need to change some #define in the can_drv.h file > >> > >> // #define NB_MOB 15 > >> #define NB_MOB 6 // edited for ATmegaxxM1 > >> #define NB_DATA_MAX 8 > >> #define LAST_MOB_NB (NB_MOB-1) > >> #define NO_MOB 0xFF > >> // ---------- > >> //typedef enum { > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, MOB_7, > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, MOB_14 } can_mob_t; > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} can_mob_t;// edited for ATmegaxxM1 > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.33 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Sorry my mistake, > >> > >> the number of PDO sent after the operational mode is, of course, equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 10.58 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> after some proofs I found another issue on the ATmega64M1. > >> > >> Basically and actually I'm able to receive only some PDOs at the beginning (after the operational mode). > >> The number of PDOs receive is based on the NB_RX_MOB define. > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the operational mode, if I define it = 6 I receive only 6 PDOs. > >> > >> After that the canbus goes in a sort of stuck mode and I need a master reset to resume the node. > >> > >> The timer1 works properly just adding these instructions: > >> > >> /* Added by me for Arduino compliance */ > >> TCCR1A = 0; > >> TCCR1B = 0; > >> TIMSK1 = 0; > >> /**************************************/ > >> > >> in the timer_AVR.c > >> > >> Any suggestion? > >> > >> Thanks in advance > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 16.01 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I've found the issue and it was relative to the TCCR1A value. > >> > >> Arduino touches this timer at the beginning in the wiring.c file. > >> > >> Then actually the timer works but I can receive only five PDO after the startup. > >> > >> After that the CANBUS seems stuck and I don't receive PDO anymore. > >> > >> The only way is to make a master reset in order to receive other 5 PDO. > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 12.21 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> hello, > >> I found a strange bug with setting 16bit registers. > >> > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits were applied. > >> > >> The datasheet says that for OCR1B you have to first set the upper byte as documented, and afterwards commit with the lower byte. > >> this however does not work for me. > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 11.30 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> something strange compare if I try to debug the TCNT1 and OCR1B values. > >> > >> Why I get only values from 0 to 255? > >> > >> The timer1 is a 16bit timer > >> > >> ??????????????????? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 10.04 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> > >> probably the issue is that for the ATmega64M1 I have to use the TIMER1 in CTC mode up to OCR1A as top value? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 9.12 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I'm using 8MHz external clock. > >> > >> Timer should be 8us per tick since that I'm using the clkio/64 prescaler. > >> > >> So the timing frequency is, or I suppose, 125Khz --> 8us. > >> > >> // The timer is incrementing every 8 us. > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) > >> #define US_TO_TIMEVAL(us) ((us)>>3) > >> > >> This definition seems to be correct because each timer tick = 8us. > >> > >> In order to have us we have to divide the tick count value by 8 (>>3) instead to have ms we have to multiply by 125. > >> > >> It seems exact. > >> > >> Why you told me that this define are incorrect? > >> > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 10-dic-2018 20.58 > >> A: < can...@li...> > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> This I should be able to help you with > >> in timerscfg.h there are two macros that need to be correct > >> MS_TO_TIMEVAL and US_TO_TIMEVAL > >> > >> They are used to convert ms and us to timer ticks (TIMEVAL) > >> > >> What clock frequency are you using? > >> On Mon, Dec 10, 2018 at 3:13 PM < can...@li...> wrote: > >> > > >> > Hi, > >> > > >> > the issue seems relative to the timer event. > >> > > >> > If I program a transmist PDO every 100ms I can see at the beginning some PDO every 1 or 2 ms. > >> > > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up to a new uC master reset, so a new canbus initialization process. > >> > > >> > Basically the timer_AVR.c file is exactly equal to the original one (for the at90can128) except in the initTimer function where I use the timer1 because the ATmega64M1 doesn't have the timer3 > >> > > >> > void initTimer(void) > >> > /****************************************************************************** > >> > Initializes the timer, turn on the interrupt and put the interrupt time to zero > >> > INPUT void > >> > OUTPUT void > >> > ******************************************************************************/ > >> > { > >> > TimerAlarm = 0; // Set it back to the zero > >> > > >> > // Set timer 1 for CANopen operation tick 8us max, time is 524ms > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit CK/64 > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt > >> > } > >> > > >> > Any comment/suggestion? > >> > > >> > Thanks in advance > >> > > >> > ----Messaggio originale---- > >> > Da: can...@li... > >> > Data: 6-dic-2018 21.04 > >> > A: < can...@li...> > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > > >> > Hi, > >> > I do not have access to a ATmega64M1, so there is no way AFIK for me > >> > to run and debug your code. > >> > Also near zero experience with Arduino, lots of experience with > >> > at90can128 though. > >> > > >> > I could always look at your code, but without knowing the general > >> > place where the problem is, it is close to impossible... for me :) > >> > > >> > When you say that only thing that is working is THE nmt message. > >> > Is there only one nmt message? > >> > What nmt state is the node in? > >> > Have you tried to set it to operational state? > >> > > >> > Best Regards > >> > Lars > >> > On Tue, Dec 4, 2018 at 5:26 PM < can...@li...> wrote: > >> > > > >> > > The only thing which is working is the NMT message at the startup. > >> > > > >> > > No SDO response and I cannot able to make debug now. > >> > > > >> > > Can I attach the whole directory project which stay in the Arduino/libraries folder to give you the whole files package? > >> > > > >> > > Thanks > >> > > > >> > > Bye > >> > > > >> > > Alessio > >> > > > >> > > ----Messaggio originale---- > >> > > Da: can...@li... > >> > > Data: 3-dic-2018 17.52 > >> > > A: < can...@li...> > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in Arduino IDE > >> > > > >> > > Hi, > >> > > Does anything work? > >> > > Like heartbeat or sdo? > >> > > > >> > > could you check if the code reaches buildPDO? > >> > > > >> > > Best Regards > >> > > Lars > >> > > > >> > > On Sat, Dec 1, 2018 at 6:02 PM < can...@li...> wrote: > >> > > > > >> > > > > >> > > > Dear all, > >> > > > > >> > > > first of all many thanks to the developers and people in general that spent time on this project making it an affordable CanOpen platform for everyone. > >> > > > > >> > > > I'm new on this mailing list and here to explain my problem. > >> > > > > >> > > > I'm an electronic engineer and a researcher of University of Brescia (Italy) and I'm trying to make the canFestival working on Arduino using the Atmega64M1 uC. > >> > > > > >> > > > I know that there is the CanFestivino project that is the CanFestival porting for the Arduino IDE and the Atmega328p with the external controller MCP2515. > >> > > > > >> > > > It works but the guy that makes the porting cut several features to fit the code with the Atmega328 ROM and RAM. > >> > > > > >> > > > I reached it compilable in Arduino starting from the AVR example for the ATCAN90128. This uC is very similar to the ATmega64M1. > >> > > > > >> > > > The only things that I did was to change the timer, from timer3 to timer1 (timer3 is not present on the ATmega64M1) and some tiny modifications in the CAN driver. > >> > > > > >> > > > Actually my project is compilable in Arduino where I created an example to read an analog input (A0) sending it through a PDO each 100ms. > >> > > > > >> > > > The only thing to need in order to compile it is the Arduino IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, ...HERE. > >> > > > > >> > > > I cannot figure out why but actually the example doesn't work and I'm struggling on it....making me a bit crazy because I don't understand why. > >> > > > > >> > > > > >> > > > > >> > > > Hope that someone can help me in this.... > >> > > > > >> > > > Thanks > >> > > > > >> > > > Alessio > >> > > > _______________________________________________ > >> > > > Canfestival-devel mailing list > >> > > > Can...@li... > >> > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > > > _______________________________________________ > > Canfestival-devel mailing list > > Can...@li... > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel |
From: <can...@li...> - 2018-12-17 19:17:10
|
I did some other tests. The issue seems inside the canDispatch function in states.c. I'm using a pin as debug in order to understand if the code in some point is executed or not. basically this is done in the canDispatch: .............. case SDOrx: if (d->CurrentCommunicationState.csSDO) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedSDO(d,m); } break; case NODE_GUARD: if (d->CurrentCommunicationState.csLifeGuard) proceedNODE_GUARD(d,m); break; case NMT: if (*(d->iam_a_slave)) { DDRB |= (1<<PB4); // set PB4 as output PORTB |= (1<<PB4); // set PB4 HIGH for DEBUG proceedNMTstateChange(d,m); } break; ............ I can see that at the beginning, when I change the state from initialization to oeprational the case NMT is executed correctly. In fact I see the right PDO coming down to the bus. But if I send a message on the bus, the case SDOrx is not executed, then neither the proceedSDO(d,m) function I'll investigate well tomorrow yet. ----Messaggio originale---- Da: can...@li... Data: 17-dic-2018 0.00 A: <can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE symboles.c: dont know if it does any damage, but it does nothing good. it's for Linux kernel module usage you should not include it in Arduino build On Sat, 15 Dec 2018, 17:33 < can...@li... wrote: Could this issue during compilation /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: warning: parameter names (without types) in function declaration [enabled by default] /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: warning: data definition has no type or storage class [enabled by default] EXPORT_SYMBOL (_setODentry); ^ be an issue regarding the missing replies on the BUS. This kind of warning message is repeated for many symbols: honestly I don't think so but for completeness I give you this information Thanks ----Messaggio originale---- Da: can...@li... Data: 13-dic-2018 21.02 A: < can...@li...> Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE Do the can messages look okay in the canDispatch function (states.c) On Thu, Dec 13, 2018 at 7:30 PM < can...@li...> wrote: > > That's the strange thing. > > The node doesn't react to any message sent > > ----Messaggio originale---- > Da: can...@li... > Data: 13-dic-2018 18.04 > A: < can...@li...> > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > Strange, > You should get a reply on "all" sdo messages > Does the node react to any messages you send to the node? > > > > > > > On Thu, Dec 13, 2018 at 10:57 AM > < can...@li...> wrote: > > > > PDOs every 100ms are running correctly. > > > > The issue remaining is the response from the node. > > > > For instance if I wish to change the event cycle for the PDO from 100ms to 70 ms I need to write on the bus: > > > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h > > > > where nodeID is 600+ID and in my case is 601 > > > > Normally when you send something on the canbus you get a response from the node that depends if the object dictionary element is implemented in the dictionary. > > > > In my case I don't get any reply from the node. > > > > I don't know why > > > > > > ----Messaggio originale---- > > Da: can...@li... > > Data: 13-dic-2018 10.07 > > A: < can...@li...> > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > > > so, everything is up and running? > > > > On Wed, 12 Dec 2018, 16:17 < can...@li... wrote: > >> > >> Ok, > >> > >> solved with > >> > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) > >> // CANIE2 = 0xFF; > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) edited for ATmegaxxM1 > >> > >> in the can_AVR.c file > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.49 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. > >> > >> So I need to change some #define in the can_drv.h file > >> > >> // #define NB_MOB 15 > >> #define NB_MOB 6 // edited for ATmegaxxM1 > >> #define NB_DATA_MAX 8 > >> #define LAST_MOB_NB (NB_MOB-1) > >> #define NO_MOB 0xFF > >> // ---------- > >> //typedef enum { > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, MOB_7, > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, MOB_14 } can_mob_t; > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} can_mob_t;// edited for ATmegaxxM1 > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 11.33 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Sorry my mistake, > >> > >> the number of PDO sent after the operational mode is, of course, equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 12-dic-2018 10.58 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> after some proofs I found another issue on the ATmega64M1. > >> > >> Basically and actually I'm able to receive only some PDOs at the beginning (after the operational mode). > >> The number of PDOs receive is based on the NB_RX_MOB define. > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the operational mode, if I define it = 6 I receive only 6 PDOs. > >> > >> After that the canbus goes in a sort of stuck mode and I need a master reset to resume the node. > >> > >> The timer1 works properly just adding these instructions: > >> > >> /* Added by me for Arduino compliance */ > >> TCCR1A = 0; > >> TCCR1B = 0; > >> TIMSK1 = 0; > >> /**************************************/ > >> > >> in the timer_AVR.c > >> > >> Any suggestion? > >> > >> Thanks in advance > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 16.01 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I've found the issue and it was relative to the TCCR1A value. > >> > >> Arduino touches this timer at the beginning in the wiring.c file. > >> > >> Then actually the timer works but I can receive only five PDO after the startup. > >> > >> After that the CANBUS seems stuck and I don't receive PDO anymore. > >> > >> The only way is to make a master reset in order to receive other 5 PDO. > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 12.21 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> hello, > >> I found a strange bug with setting 16bit registers. > >> > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits were applied. > >> > >> The datasheet says that for OCR1B you have to first set the upper byte as documented, and afterwards commit with the lower byte. > >> this however does not work for me. > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 11.30 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> something strange compare if I try to debug the TCNT1 and OCR1B values. > >> > >> Why I get only values from 0 to 255? > >> > >> The timer1 is a 16bit timer > >> > >> ??????????????????? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 10.04 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> Hi, > >> > >> probably the issue is that for the ATmega64M1 I have to use the TIMER1 in CTC mode up to OCR1A as top value? > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 11-dic-2018 9.12 > >> A: < can...@li...> > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> I'm using 8MHz external clock. > >> > >> Timer should be 8us per tick since that I'm using the clkio/64 prescaler. > >> > >> So the timing frequency is, or I suppose, 125Khz --> 8us. > >> > >> // The timer is incrementing every 8 us. > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) > >> #define US_TO_TIMEVAL(us) ((us)>>3) > >> > >> This definition seems to be correct because each timer tick = 8us. > >> > >> In order to have us we have to divide the tick count value by 8 (>>3) instead to have ms we have to multiply by 125. > >> > >> It seems exact. > >> > >> Why you told me that this define are incorrect? > >> > >> > >> > >> > >> ----Messaggio originale---- > >> Da: can...@li... > >> Data: 10-dic-2018 20.58 > >> A: < can...@li...> > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > >> This I should be able to help you with > >> in timerscfg.h there are two macros that need to be correct > >> MS_TO_TIMEVAL and US_TO_TIMEVAL > >> > >> They are used to convert ms and us to timer ticks (TIMEVAL) > >> > >> What clock frequency are you using? > >> On Mon, Dec 10, 2018 at 3:13 PM < can...@li...> wrote: > >> > > >> > Hi, > >> > > >> > the issue seems relative to the timer event. > >> > > >> > If I program a transmist PDO every 100ms I can see at the beginning some PDO every 1 or 2 ms. > >> > > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up to a new uC master reset, so a new canbus initialization process. > >> > > >> > Basically the timer_AVR.c file is exactly equal to the original one (for the at90can128) except in the initTimer function where I use the timer1 because the ATmega64M1 doesn't have the timer3 > >> > > >> > void initTimer(void) > >> > /****************************************************************************** > >> > Initializes the timer, turn on the interrupt and put the interrupt time to zero > >> > INPUT void > >> > OUTPUT void > >> > ******************************************************************************/ > >> > { > >> > TimerAlarm = 0; // Set it back to the zero > >> > > >> > // Set timer 1 for CANopen operation tick 8us max, time is 524ms > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit CK/64 > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt > >> > } > >> > > >> > Any comment/suggestion? > >> > > >> > Thanks in advance > >> > > >> > ----Messaggio originale---- > >> > Da: can...@li... > >> > Data: 6-dic-2018 21.04 > >> > A: < can...@li...> > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in Arduino IDE > >> > > >> > Hi, > >> > I do not have access to a ATmega64M1, so there is no way AFIK for me > >> > to run and debug your code. > >> > Also near zero experience with Arduino, lots of experience with > >> > at90can128 though. > >> > > >> > I could always look at your code, but without knowing the general > >> > place where the problem is, it is close to impossible... for me :) > >> > > >> > When you say that only thing that is working is THE nmt message. > >> > Is there only one nmt message? > >> > What nmt state is the node in? > >> > Have you tried to set it to operational state? > >> > > >> > Best Regards > >> > Lars > >> > On Tue, Dec 4, 2018 at 5:26 PM < can...@li...> wrote: > >> > > > >> > > The only thing which is working is the NMT message at the startup. > >> > > > >> > > No SDO response and I cannot able to make debug now. > >> > > > >> > > Can I attach the whole directory project which stay in the Arduino/libraries folder to give you the whole files package? > >> > > > >> > > Thanks > >> > > > >> > > Bye > >> > > > >> > > Alessio > >> > > > >> > > ----Messaggio originale---- > >> > > Da: can...@li... > >> > > Data: 3-dic-2018 17.52 > >> > > A: < can...@li...> > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in Arduino IDE > >> > > > >> > > Hi, > >> > > Does anything work? > >> > > Like heartbeat or sdo? > >> > > > >> > > could you check if the code reaches buildPDO? > >> > > > >> > > Best Regards > >> > > Lars > >> > > > >> > > On Sat, Dec 1, 2018 at 6:02 PM < can...@li...> wrote: > >> > > > > >> > > > > >> > > > Dear all, > >> > > > > >> > > > first of all many thanks to the developers and people in general that spent time on this project making it an affordable CanOpen platform for everyone. > >> > > > > >> > > > I'm new on this mailing list and here to explain my problem. > >> > > > > >> > > > I'm an electronic engineer and a researcher of University of Brescia (Italy) and I'm trying to make the canFestival working on Arduino using the Atmega64M1 uC. > >> > > > > >> > > > I know that there is the CanFestivino project that is the CanFestival porting for the Arduino IDE and the Atmega328p with the external controller MCP2515. > >> > > > > >> > > > It works but the guy that makes the porting cut several features to fit the code with the Atmega328 ROM and RAM. > >> > > > > >> > > > I reached it compilable in Arduino starting from the AVR example for the ATCAN90128. This uC is very similar to the ATmega64M1. > >> > > > > >> > > > The only things that I did was to change the timer, from timer3 to timer1 (timer3 is not present on the ATmega64M1) and some tiny modifications in the CAN driver. > >> > > > > >> > > > Actually my project is compilable in Arduino where I created an example to read an analog input (A0) sending it through a PDO each 100ms. > >> > > > > >> > > > The only thing to need in order to compile it is the Arduino IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, ...HERE. > >> > > > > >> > > > I cannot figure out why but actually the example doesn't work and I'm struggling on it....making me a bit crazy because I don't understand why. > >> > > > > >> > > > > >> > > > > >> > > > Hope that someone can help me in this.... > >> > > > > >> > > > Thanks > >> > > > > >> > > > Alessio > >> > > > _______________________________________________ > >> > > > Canfestival-devel mailing list > >> > > > Can...@li... > >> > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > > >> > > > >> > > _______________________________________________ > >> > > Canfestival-devel mailing list > >> > > Can...@li... > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > > >> > > >> > _______________________________________________ > >> > Canfestival-devel mailing list > >> > Can...@li... > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> _______________________________________________ > >> Canfestival-devel mailing list > >> Can...@li... > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > > > _______________________________________________ > > Canfestival-devel mailing list > > Can...@li... > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel _______________________________________________ Canfestival-devel mailing list Can...@li... https://lists.sourceforge.net/lists/listinfo/canfestival-devel |
From: <can...@li...> - 2018-12-16 23:01:08
|
symboles.c: dont know if it does any damage, but it does nothing good. it's for Linux kernel module usage you should not include it in Arduino build On Sat, 15 Dec 2018, 17:33 <can...@li... wrote: > Could this issue during compilation > > /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: > warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL' [enabled > by default] > /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:56:1: > warning: parameter names (without types) in function declaration [enabled > by default] > /home/alessio/Arduino/libraries/CanFestival_ATmega64M1_Arduino/symbols.c:57:1: > warning: data definition has no type or storage class [enabled by default] > EXPORT_SYMBOL (_setODentry); > ^ > > be an issue regarding the missing replies on the BUS. > > This kind of warning message is repeated for many symbols: > > honestly I don't think so but for completeness I give you this information > > Thanks > > ----Messaggio originale---- > Da: can...@li... > Data: 13-dic-2018 21.02 > A: <can...@li...> > Ogg: Re: [Canfestival-devel] R: Re: R: Re: R: R: R: R: R: R: R: R: R: Re: > R: Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > Do the can messages look okay in the canDispatch function (states.c) > On Thu, Dec 13, 2018 at 7:30 PM <can...@li...> > wrote: > > > > That's the strange thing. > > > > The node doesn't react to any message sent > > > > ----Messaggio originale---- > > Da: can...@li... > > Data: 13-dic-2018 18.04 > > A: <can...@li...> > > Ogg: Re: [Canfestival-devel] R: Re: R: R: R: R: R: R: R: R: R: Re: R: > Re: R: Re: CanFestival on ATmega64M1 in Arduino IDE > > > > Strange, > > You should get a reply on "all" sdo messages > > Does the node react to any messages you send to the node? > > > > > > > > > > > > > > On Thu, Dec 13, 2018 at 10:57 AM > > <can...@li...> wrote: > > > > > > PDOs every 100ms are running correctly. > > > > > > The issue remaining is the response from the node. > > > > > > For instance if I wish to change the event cycle for the PDO from > 100ms to 70 ms I need to write on the bus: > > > > > > nodeID 2Bh 00h 18h 05h 46h 00h 00h 00h > > > > > > where nodeID is 600+ID and in my case is 601 > > > > > > Normally when you send something on the canbus you get a response from > the node that depends if the object dictionary element is implemented in > the dictionary. > > > > > > In my case I don't get any reply from the node. > > > > > > I don't know why > > > > > > > > > ----Messaggio originale---- > > > Da: can...@li... > > > Data: 13-dic-2018 10.07 > > > A: <can...@li...> > > > Ogg: Re: [Canfestival-devel] R: R: R: R: R: R: R: R: R: Re: R: Re: R: > Re: CanFestival on ATmega64M1 in Arduino IDE > > > > > > so, everything is up and running? > > > > > > On Wed, 12 Dec 2018, 16:17 < can...@li... > wrote: > > >> > > >> Ok, > > >> > > >> solved with > > >> > > >> // CANIE1 = 0x7F; // Enable the interrupts of all MObs (0..14) > > >> // CANIE2 = 0xFF; > > >> CANIE2 = 0x3F; // Enable the interrupts of all MObs (0..5) > edited for ATmegaxxM1 > > >> > > >> in the can_AVR.c file > > >> > > >> ----Messaggio originale---- > > >> Da: can...@li... > > >> Data: 12-dic-2018 11.49 > > >> A: < can...@li...> > > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: R: Re: R: Re: R: Re: > CanFestival on ATmega64M1 in Arduino IDE > > >> > > >> > > >> the Atmega64M1 has only 6 Mobs instead of 15 of AT90CAN128. > > >> > > >> So I need to change some #define in the can_drv.h file > > >> > > >> // #define NB_MOB 15 > > >> #define NB_MOB 6 // edited for ATmegaxxM1 > > >> #define NB_DATA_MAX 8 > > >> #define LAST_MOB_NB (NB_MOB-1) > > >> #define NO_MOB 0xFF > > >> // ---------- > > >> //typedef enum { > > >> // MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5, MOB_6, > MOB_7, > > >> // MOB_8, MOB_9, MOB_10, MOB_11, MOB_12, MOB_13, > MOB_14 } can_mob_t; > > >> typedef enum {MOB_0, MOB_1, MOB_2, MOB_3, MOB_4, MOB_5} > can_mob_t;// edited for ATmegaxxM1 > > >> > > >> > > >> > > >> ----Messaggio originale---- > > >> Da: can...@li... > > >> Data: 12-dic-2018 11.33 > > >> A: < can...@li...> > > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: R: Re: R: Re: R: Re: > CanFestival on ATmega64M1 in Arduino IDE > > >> > > >> Sorry my mistake, > > >> > > >> the number of PDO sent after the operational mode is, of course, > equal to NB_TX_MOB = (NB_MOB - NB_RX_MOB) > > >> > > >> ----Messaggio originale---- > > >> Da: can...@li... > > >> Data: 12-dic-2018 10.58 > > >> A: < can...@li...> > > >> Ogg: [Canfestival-devel] R: R: R: R: R: R: Re: R: Re: R: Re: > CanFestival on ATmega64M1 in Arduino IDE > > >> > > >> Hi, > > >> after some proofs I found another issue on the ATmega64M1. > > >> > > >> Basically and actually I'm able to receive only some PDOs at the > beginning (after the operational mode). > > >> The number of PDOs receive is based on the NB_RX_MOB define. > > >> So if I define NB_RX_MOB = 3 I receive only 3 PDO after the > operational mode, if I define it = 6 I receive only 6 PDOs. > > >> > > >> After that the canbus goes in a sort of stuck mode and I need a > master reset to resume the node. > > >> > > >> The timer1 works properly just adding these instructions: > > >> > > >> /* Added by me for Arduino compliance */ > > >> TCCR1A = 0; > > >> TCCR1B = 0; > > >> TIMSK1 = 0; > > >> /**************************************/ > > >> > > >> in the timer_AVR.c > > >> > > >> Any suggestion? > > >> > > >> Thanks in advance > > >> > > >> ----Messaggio originale---- > > >> Da: can...@li... > > >> Data: 11-dic-2018 16.01 > > >> A: < can...@li...> > > >> Ogg: [Canfestival-devel] R: R: R: R: R: Re: R: Re: R: Re: CanFestival > on ATmega64M1 in Arduino IDE > > >> > > >> I've found the issue and it was relative to the TCCR1A value. > > >> > > >> Arduino touches this timer at the beginning in the wiring.c file. > > >> > > >> Then actually the timer works but I can receive only five PDO after > the startup. > > >> > > >> After that the CANBUS seems stuck and I don't receive PDO anymore. > > >> > > >> The only way is to make a master reset in order to receive other 5 > PDO. > > >> > > >> ----Messaggio originale---- > > >> Da: can...@li... > > >> Data: 11-dic-2018 12.21 > > >> A: < can...@li...> > > >> Ogg: [Canfestival-devel] R: R: R: R: Re: R: Re: R: Re: CanFestival on > ATmega64M1 in Arduino IDE > > >> > > >> hello, > > >> I found a strange bug with setting 16bit registers. > > >> > > >> I tried to set 16 bit register OCR1B, but only the lower 8 bits were > applied. > > >> > > >> The datasheet says that for OCR1B you have to first set the upper > byte as documented, and afterwards commit with the lower byte. > > >> this however does not work for me. > > >> > > >> > > >> ----Messaggio originale---- > > >> Da: can...@li... > > >> Data: 11-dic-2018 11.30 > > >> A: < can...@li...> > > >> Ogg: [Canfestival-devel] R: R: R: Re: R: Re: R: Re: CanFestival on > ATmega64M1 in Arduino IDE > > >> > > >> Hi, > > >> something strange compare if I try to debug the TCNT1 and OCR1B > values. > > >> > > >> Why I get only values from 0 to 255? > > >> > > >> The timer1 is a 16bit timer > > >> > > >> ??????????????????? > > >> > > >> ----Messaggio originale---- > > >> Da: can...@li... > > >> Data: 11-dic-2018 10.04 > > >> A: < can...@li...> > > >> Ogg: [Canfestival-devel] R: R: Re: R: Re: R: Re: CanFestival on > ATmega64M1 in Arduino IDE > > >> > > >> Hi, > > >> > > >> probably the issue is that for the ATmega64M1 I have to use the > TIMER1 in CTC mode up to OCR1A as top value? > > >> > > >> ----Messaggio originale---- > > >> Da: can...@li... > > >> Data: 11-dic-2018 9.12 > > >> A: < can...@li...> > > >> Ogg: [Canfestival-devel] R: Re: R: Re: R: Re: CanFestival on > ATmega64M1 in Arduino IDE > > >> > > >> I'm using 8MHz external clock. > > >> > > >> Timer should be 8us per tick since that I'm using the clkio/64 > prescaler. > > >> > > >> So the timing frequency is, or I suppose, 125Khz --> 8us. > > >> > > >> // The timer is incrementing every 8 us. > > >> #define MS_TO_TIMEVAL(ms) ((ms) * 125) > > >> #define US_TO_TIMEVAL(us) ((us)>>3) > > >> > > >> This definition seems to be correct because each timer tick = 8us. > > >> > > >> In order to have us we have to divide the tick count value by 8 (>>3) > instead to have ms we have to multiply by 125. > > >> > > >> It seems exact. > > >> > > >> Why you told me that this define are incorrect? > > >> > > >> > > >> > > >> > > >> ----Messaggio originale---- > > >> Da: can...@li... > > >> Data: 10-dic-2018 20.58 > > >> A: < can...@li...> > > >> Ogg: Re: [Canfestival-devel] R: Re: R: Re: CanFestival on ATmega64M1 > in Arduino IDE > > >> > > >> This I should be able to help you with > > >> in timerscfg.h there are two macros that need to be correct > > >> MS_TO_TIMEVAL and US_TO_TIMEVAL > > >> > > >> They are used to convert ms and us to timer ticks (TIMEVAL) > > >> > > >> What clock frequency are you using? > > >> On Mon, Dec 10, 2018 at 3:13 PM < > can...@li...> wrote: > > >> > > > >> > Hi, > > >> > > > >> > the issue seems relative to the timer event. > > >> > > > >> > If I program a transmist PDO every 100ms I can see at the beginning > some PDO every 1 or 2 ms. > > >> > > > >> > After that the CANNUS stacks and I cannot receive PDOs anymore up > to a new uC master reset, so a new canbus initialization process. > > >> > > > >> > Basically the timer_AVR.c file is exactly equal to the original > one (for the at90can128) except in the initTimer function where I use the > timer1 because the ATmega64M1 doesn't have the timer3 > > >> > > > >> > void initTimer(void) > > >> > > /****************************************************************************** > > > >> > Initializes the timer, turn on the interrupt and put the interrupt > time to zero > > >> > INPUT void > > >> > OUTPUT void > > >> > > ******************************************************************************/ > > > >> > { > > >> > TimerAlarm = 0; // Set it back to the zero > > >> > > > >> > // Set timer 1 for CANopen operation tick 8us max, time is 524ms > > >> > TCCR1B = (1 << CS11) | (1 << CS10); // Timer 1 normal, mit > CK/64 > > >> > TIMSK1 = 1 << OCIE1B; // Enable the interrupt > > >> > } > > >> > > > >> > Any comment/suggestion? > > >> > > > >> > Thanks in advance > > >> > > > >> > ----Messaggio originale---- > > >> > Da: can...@li... > > >> > Data: 6-dic-2018 21.04 > > >> > A: < can...@li...> > > >> > Ogg: Re: [Canfestival-devel] R: Re: CanFestival on ATmega64M1 in > Arduino IDE > > >> > > > >> > Hi, > > >> > I do not have access to a ATmega64M1, so there is no way AFIK for > me > > >> > to run and debug your code. > > >> > Also near zero experience with Arduino, lots of experience with > > >> > at90can128 though. > > >> > > > >> > I could always look at your code, but without knowing the general > > >> > place where the problem is, it is close to impossible... for me :) > > >> > > > >> > When you say that only thing that is working is THE nmt message. > > >> > Is there only one nmt message? > > >> > What nmt state is the node in? > > >> > Have you tried to set it to operational state? > > >> > > > >> > Best Regards > > >> > Lars > > >> > On Tue, Dec 4, 2018 at 5:26 PM < > can...@li...> wrote: > > >> > > > > >> > > The only thing which is working is the NMT message at the > startup. > > >> > > > > >> > > No SDO response and I cannot able to make debug now. > > >> > > > > >> > > Can I attach the whole directory project which stay in the > Arduino/libraries folder to give you the whole files package? > > >> > > > > >> > > Thanks > > >> > > > > >> > > Bye > > >> > > > > >> > > Alessio > > >> > > > > >> > > ----Messaggio originale---- > > >> > > Da: can...@li... > > >> > > Data: 3-dic-2018 17.52 > > >> > > A: < can...@li...> > > >> > > Ogg: Re: [Canfestival-devel] CanFestival on ATmega64M1 in Arduino > IDE > > >> > > > > >> > > Hi, > > >> > > Does anything work? > > >> > > Like heartbeat or sdo? > > >> > > > > >> > > could you check if the code reaches buildPDO? > > >> > > > > >> > > Best Regards > > >> > > Lars > > >> > > > > >> > > On Sat, Dec 1, 2018 at 6:02 PM < > can...@li...> wrote: > > >> > > > > > >> > > > > > >> > > > Dear all, > > >> > > > > > >> > > > first of all many thanks to the developers and people in > general that spent time on this project making it an affordable CanOpen > platform for everyone. > > >> > > > > > >> > > > I'm new on this mailing list and here to explain my problem. > > >> > > > > > >> > > > I'm an electronic engineer and a researcher of University of > Brescia (Italy) and I'm trying to make the canFestival working on Arduino > using the Atmega64M1 uC. > > >> > > > > > >> > > > I know that there is the CanFestivino project that is the > CanFestival porting for the Arduino IDE and the Atmega328p with the > external controller MCP2515. > > >> > > > > > >> > > > It works but the guy that makes the porting cut several > features to fit the code with the Atmega328 ROM and RAM. > > >> > > > > > >> > > > I reached it compilable in Arduino starting from the AVR > example for the ATCAN90128. This uC is very similar to the ATmega64M1. > > >> > > > > > >> > > > The only things that I did was to change the timer, from timer3 > to timer1 (timer3 is not present on the ATmega64M1) and some tiny > modifications in the CAN driver. > > >> > > > > > >> > > > Actually my project is compilable in Arduino where I created an > example to read an analog input (A0) sending it through a PDO each 100ms. > > >> > > > > > >> > > > The only thing to need in order to compile it is the Arduino > IDE support files for CAN enabled Amtel AVR chips: ATmega64M1, ATmega32M1, > ...HERE. > > >> > > > > > >> > > > I cannot figure out why but actually the example doesn't work > and I'm struggling on it....making me a bit crazy because I don't > understand why. > > >> > > > > > >> > > > > > >> > > > > > >> > > > Hope that someone can help me in this.... > > >> > > > > > >> > > > Thanks > > >> > > > > > >> > > > Alessio > > >> > > > _______________________________________________ > > >> > > > Canfestival-devel mailing list > > >> > > > Can...@li... > > >> > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > >> > > > > >> > > > > >> > > _______________________________________________ > > >> > > Canfestival-devel mailing list > > >> > > Can...@li... > > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > >> > > > > >> > > > > >> > > _______________________________________________ > > >> > > Canfestival-devel mailing list > > >> > > Can...@li... > > >> > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > >> > > > >> > > > >> > _______________________________________________ > > >> > Canfestival-devel mailing list > > >> > Can...@li... > > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > >> > > > >> > > > >> > _______________________________________________ > > >> > Canfestival-devel mailing list > > >> > Can...@li... > > >> > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > >> > > >> > > >> _______________________________________________ > > >> Canfestival-devel mailing list > > >> Can...@li... > > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> _______________________________________________ > > >> Canfestival-devel mailing list > > >> Can...@li... > > >> https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > > > > > > > _______________________________________________ > > > Canfestival-devel mailing list > > > Can...@li... > > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > _______________________________________________ > > Canfestival-devel mailing list > > Can...@li... > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > > > > _______________________________________________ > > Canfestival-devel mailing list > > Can...@li... > > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > > > _______________________________________________ > Canfestival-devel mailing list > Can...@li... > https://lists.sourceforge.net/lists/listinfo/canfestival-devel > |