Rev 475 | Rev 482 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 475 | Rev 480 | ||
---|---|---|---|
Line 750... | Line 750... | ||
750 | 750 | ||
751 | // ---------------------------------------------------------------------------------------- |
751 | // ---------------------------------------------------------------------------------------- |
752 | void NCMAG_GetMagVector(void) |
752 | void NCMAG_GetMagVector(void) |
753 | { |
753 | { |
754 | // try to catch the I2C buffer within 0 ms |
754 | // try to catch the I2C buffer within 0 ms |
755 | if(I2C_LockBufferFunc(0)) |
755 | if(I2C_LockBufferFunc(5)) |
756 | { |
756 | { |
757 | u16 TxBytes = 0; |
757 | u16 TxBytes = 0; |
758 | // set register pointer |
758 | // set register pointer |
759 | I2C_BufferPnt[TxBytes++] = REG_MAG_DATAX_MSB; |
759 | I2C_BufferPnt[TxBytes++] = REG_MAG_DATAX_MSB; |
Line 817... | Line 817... | ||
817 | AccConfig.ctrl_4 = ACC_CTRL4_BDU | ACC_CTRL4_FS_8G; |
817 | AccConfig.ctrl_4 = ACC_CTRL4_BDU | ACC_CTRL4_FS_8G; |
818 | AccConfig.ctrl_5 = ACC_CTRL5_STW_OFF; |
818 | AccConfig.ctrl_5 = ACC_CTRL5_STW_OFF; |
819 | return(NCMAG_SetAccConfig()); |
819 | return(NCMAG_SetAccConfig()); |
820 | } |
820 | } |
821 | // -------------------------------------------------------- |
821 | // -------------------------------------------------------- |
822 | void NCMAG_Update(void) |
822 | void NCMAG_Update(u8 init) |
823 | { |
823 | { |
824 | static u32 TimerUpdate = 0; |
824 | static u32 TimerUpdate = 0; |
825 | static s8 send_config = 0; |
825 | static s8 send_config = 0; |
826 | u32 delay = 20; |
826 | u32 delay = 20; |
- | 827 | if(init) TimerUpdate = SetDelay(10); |
|
- | 828 | ||
827 | // todo State Handling for both busses !! |
829 | // todo State Handling for both busses !! |
828 | if((I2C1_State == I2C_STATE_OFF) || (I2C_CompassPort == 0 && I2C0_State == I2C_STATE_OFF) || !NCMAG_Present ) |
830 | if((I2C1_State == I2C_STATE_OFF) || (I2C_CompassPort == 0 && I2C0_State == I2C_STATE_OFF)/* || !NCMAG_Present*/ ) |
829 | { |
831 | { |
830 | Compass_Heading = -1; |
832 | Compass_Heading = -1; |
831 | DebugOut.Analog[14]++; // count I2C error |
833 | DebugOut.Analog[14]++; // count I2C error |
- | 834 | TimerUpdate = SetDelay(10); |
|
832 | return; |
835 | return; |
833 | } |
836 | } |
834 | if(CheckDelay(TimerUpdate)) |
837 | if(CheckDelay(TimerUpdate))// && I2C0_State == I2C_STATE_IDLE && I2C1_State == I2C_STATE_IDLE) |
835 | { |
838 | { |
836 | if(Compass_Heading != -1) send_config = 0; // no re-configuration if value is valid |
839 | if(Compass_Heading != -1) send_config = 0; // no re-configuration if value is valid |
837 | if(++send_config == 25) // 500ms |
840 | if(++send_config == 25) // 500ms |
838 | { |
841 | { |
839 | send_config = -25; // next try after 1 second |
842 | send_config = -25; // next try after 1 second |
Line 855... | Line 858... | ||
855 | delay = 20; |
858 | delay = 20; |
856 | break; |
859 | break; |
857 | case TYPE_LSM303DLH: |
860 | case TYPE_LSM303DLH: |
858 | case TYPE_LSM303DLM: |
861 | case TYPE_LSM303DLM: |
859 | delay = 20; |
862 | delay = 20; |
- | 863 | //delay = 2; |
|
860 | if(s-- || (I2C_CompassPort == I2C_INTERN_1)) NCMAG_GetMagVector(); |
864 | if(s-- || (I2C_CompassPort == I2C_INTERN_1)) NCMAG_GetMagVector(); |
861 | else |
865 | else |
862 | { |
866 | { |
863 | if(AccRawVector.X + AccRawVector.Y + AccRawVector.Z == 0) NCMAG_Init_ACCSensor(); |
867 | if(AccRawVector.X + AccRawVector.Y + AccRawVector.Z == 0) NCMAG_Init_ACCSensor(); |
864 | NCMAG_GetAccVector(0); |
868 | NCMAG_GetAccVector(5); |
865 | delay = 10; |
869 | delay = 10; |
866 | s = 40; // about 0,8 sec |
870 | s = 40; // about 0,8 sec |
867 | }; |
871 | }; |
868 | if(!s) delay = 10; // ACC-Reading in the next step after 10ms |
872 | if(!s) delay = 10; // ACC-Reading in the next step after 10ms |
- | 873 | //if(!s) delay = 2; // ACC-Reading in the next step after 10ms |
|
869 | break; |
874 | break; |
870 | } |
875 | } |
871 | if(send_config == 24) TimerUpdate = SetDelay(15); // next event is the re-configuration |
876 | if(send_config == 24) TimerUpdate = SetDelay(15); // next event is the re-configuration |
872 | else TimerUpdate = SetDelay(delay); // every 20 ms are 50 Hz |
877 | else TimerUpdate = SetDelay(delay); // every 20 ms are 50 Hz |
873 | } |
878 | } |
Line 1012... | Line 1017... | ||
1012 | //---------------------------------------------------------------- |
1017 | //---------------------------------------------------------------- |
1013 | u8 NCMAG_Init(void) |
1018 | u8 NCMAG_Init(void) |
1014 | { |
1019 | { |
1015 | u8 msg[64]; |
1020 | u8 msg[64]; |
1016 | u8 retval = 0; |
1021 | u8 retval = 0; |
1017 | u8 repeat; |
1022 | u8 repeat = 0; |
Line 1018... | Line 1023... | ||
1018 | 1023 | ||
1019 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1024 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1020 | // Search external sensor |
1025 | // Search external sensor |
1021 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1026 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1022 | I2C_CompassPort = I2C_EXTERN_0; |
1027 | I2C_CompassPort = I2C_EXTERN_0; |
Line 1023... | Line 1028... | ||
1023 | NCMAG_SelectI2CBus(I2C_CompassPort); |
1028 | NCMAG_SelectI2CBus(I2C_CompassPort); |
1024 | 1029 | ||
1025 | // get id bytes |
- | |
- | 1030 | // get id bytes |
|
1026 | retval = 0; |
1031 | retval = 0; |
1027 | do |
1032 | for(repeat = 0; repeat < 5; repeat++) |
1028 | { |
1033 | { |
1029 | // retval = NCMAG_GetIdentification(); |
1034 | // retval = NCMAG_GetIdentification(); |
1030 | retval = NCMAG_GetAccConfig(); // only the sensor with ACC is supported |
1035 | retval = NCMAG_GetAccConfig(); // only the sensor with ACC is supported |
1031 | if(retval) break; // break loop on success |
1036 | if(retval) break; // break loop on success |
1032 | // UART1_PutString("+"); |
1037 | UART1_PutString("_"); |
1033 | repeat++; |
- | |
1034 | } while(repeat < 5); |
1038 | } |
1035 | 1039 | //retval = 1; |
|
1036 | if(!retval) |
1040 | if(!retval) |
1037 | { |
1041 | { |
1038 | UART1_PutString(" internal sensor"); |
1042 | UART1_PutString(" internal sensor"); |
Line 1071... | Line 1075... | ||
1071 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1075 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Line 1072... | Line 1076... | ||
1072 | 1076 | ||
1073 | NCMAG_Present = 0; |
1077 | NCMAG_Present = 0; |
1074 | NCMAG_SensorType = TYPE_HMC5843; // assuming having an HMC5843 |
1078 | NCMAG_SensorType = TYPE_HMC5843; // assuming having an HMC5843 |
1075 | // polling for LSM302DLH/DLM option by ACC address ack |
1079 | // polling for LSM302DLH/DLM option by ACC address ack |
1076 | repeat = 0; |
- | |
1077 | do |
1080 | for(repeat = 0; repeat < 3; repeat++) |
1078 | { |
1081 | { |
1079 | retval = NCMAG_GetAccConfig(); |
1082 | retval = NCMAG_GetAccConfig(); |
1080 | if(retval) break; // break loop on success |
- | |
1081 | // UART1_PutString("*"); |
1083 | if(retval) break; // break loop on success |
1082 | repeat++; |
- | |
1083 | } while(repeat < 3); |
1084 | } |
1084 | if(retval) |
1085 | if(retval) |
1085 | { |
1086 | { |
1086 | // initialize ACC sensor |
1087 | // initialize ACC sensor |
Line 1087... | Line 1088... | ||
1087 | NCMAG_Init_ACCSensor(); |
1088 | NCMAG_Init_ACCSensor(); |
1088 | 1089 | ||
1089 | NCMAG_SensorType = TYPE_LSM303DLH; |
1090 | NCMAG_SensorType = TYPE_LSM303DLH; |
1090 | // polling of sub identification |
- | |
1091 | repeat = 0; |
1091 | // polling of sub identification |
1092 | do |
1092 | for(repeat = 0; repeat < 12; repeat++) |
1093 | { |
1093 | { |
1094 | retval = NCMAG_GetIdentification_Sub(); |
- | |
1095 | if(retval) break; // break loop on success |
1094 | retval = NCMAG_GetIdentification_Sub(); |
1096 | // UART1_PutString("."); |
- | |
1097 | repeat++; |
1095 | if(retval) break; // break loop on success |
1098 | }while(repeat < 12); |
1096 | } |
1099 | if(retval) |
1097 | if(retval) |
1100 | { |
1098 | { |
1101 | if(NCMAG_Identification2.Sub == MAG_IDF_LSM303DLM) NCMAG_SensorType = TYPE_LSM303DLM; |
1099 | if(NCMAG_Identification2.Sub == MAG_IDF_LSM303DLM) NCMAG_SensorType = TYPE_LSM303DLM; |
1102 | } |
1100 | } |
1103 | } |
1101 | } |
1104 | // get id bytes |
- | |
1105 | retval = 0; |
1102 | // get id bytes |
1106 | do |
1103 | for(repeat = 0; repeat < 3; repeat++) |
1107 | { |
1104 | { |
1108 | retval = NCMAG_GetIdentification(); |
- | |
1109 | if(retval) break; // break loop on success |
1105 | retval = NCMAG_GetIdentification(); |
1110 | // UART1_PutString("#"); |
- | |
Line 1111... | Line 1106... | ||
1111 | repeat++; |
1106 | if(retval) break; // break loop on success |
1112 | } while(repeat < 12); |
1107 | } |
1113 | 1108 | ||
1114 | // if we got an answer to id request |
1109 | // if we got an answer to id request |