Notifications
Clear all
Search result for: id10=WA 0852 2611 9277 [[GLORION]] Order Kitchen Set Atas Pria Premium Bekasi
Can the Self Trigger function (extra purchased option) replace the conventional trigger (hammer switch) and trigger extension cables typically used in refraction work?
Self-Triggering doesn’t provide sufficient timing accuracy to work for refraction surveys. For refraction interpretation, the accuracy of the absolute travel time between source event and arrival at the geophone must be on the Order of ≤ 5 milliseconds. This cannot be achieved with the self-triggering processes.
This is because the self-triggering option works by breaking the data into small'Time Windows' and comparing the energy levels in these against the average background energy. These time windows and the ratio values are chosen by the user, so accuracy will depend upon the length of the window and how tightly you can specify the change in energy levels.
In cases where you don't have a trigger switch, you can Set up the Geode to provide pre-trigger data and place a geophone close to the source. The extra geophone acts as a trigger and will start the survey at T = 0.
For more information, click here
The subject of "Bandwidth" comes up often when discussing cesium magnetometers. There are two different aspects of bandwidth that are different and need to be differentiated:
The cesium magnetometer uses an atomic resonance of the Cs 133 atom (see note 1 below) which varies proportional to the ambient magnetic field. This atomic resonance is used to Set/control the frequency of an oscillator. Therefore the output signal from the magnetometer is a *frequency* which is proportional to the earth's magnetic field at a coefficient of 3.498572 Hertz per nT. Thus the output frequency (called the Larmor frequency) varies from roughly 70KHz at the equator to 350 KHz at the poles.
Because the cesium magnetometer is an oscillator, and because phase is important in an oscillator, the "Bandwidth" of the electronics in the magnetometer must be at least 10 times higher than the maximum output frequency of 350 Khz, or roughly 3.5 MHz.
This bandwidth should not be confused with the magnetic field measurement "Bandwidth", or how fast of a magnetic field change can be measured. To put a scaler value on any magnetic field reading the output frequency of the magnetometer must be counted, and then scaled appropriately to get a field reading in nanoTeslas. The counting process involves opening a gate period, counting the number of Larmor (frequency) cycles that occur, divide that number by the precise time interval of the gate period. then scale that value by dividing by the 3.498572 Hz / Larmor coefficient. You get one reading per gate period, which by default is five or ten hertz (200mS to 100 mS gate period). What you get for a reading during any gate period is the time interval average of the Larmor frequency over that period.
The transfer function of a "time interval averaged" signal is [sine(x) / x] with the first zero falling at the sample frequency. Thus if the G-882 is sampling at 10 hertz the maximum resolvable magnetic field change is roughly 5 hertz.
The sample interval of the G-882 is adjustable by sending commands to it. If the sample rate is Set to 20 hertz the measurement bandwidth will double (from a 10 hertz sample rate) but the base line noise will go up as well.
It should also be noted that the basic system noise level of the G-882 for a stationary sensor is Set by the counter resolution - not by the signal to noise ratio of the oscillator electronics. If the sensor is tilted away from its optimum orientation the magnetometer signal will decrease (and therefore the signal to noise ratio), but the counted field output will not show any significant degradation until the sensor is approaching the dead zone (where the signal is really low).
It is a fairly simple task to connect a GPS to a G-858 magnetometer. You can use the External I/O cable assembly and a null modem to connect the G-858 to most GPS receivers.
Null modems are available from Geometrics or from local Radio Shack or computer stores. The Null modem pin configuration for GPS receivers that have a data cable compatible with 9 pin IBM PC COM ports has male pins on both sides.
The GPS should be Set to output NMEA data that contains the $GPGGA sentence. Be sure to Set the RS232 protocol to 9600 Baud, 8 Databits, 1 Stop Bit and No Parity.
The G-858 must have its serial port Set to the same baud rate as the GPS.
You can use System Setup -> Com & Field Note String Setup -> Chat Mode to determine whether correct communications have been established.
The subject of "Bandwidth" comes up often when discussing cesium magnetometers. There are two different aspects of bandwidth that are different and need to be differentiated:
The cesium magnetometer uses an atomic resonance of the Cs 133 atom (see note 1 below) which varies proportional to the ambient magnetic field. This atomic resonance is used to Set/control the frequency of an oscillator. Therefore the output signal from the magnetometer is a *frequency* which is proportional to the earth's magnetic field at a coefficient of 3.498572 Hertz per nT. Thus the output frequency (called the Larmor frequency) varies from roughly 70KHz at the equator to 350 KHz at the poles.
Because the cesium magnetometer is an oscillator, and because phase is important in an oscillator, the "Bandwidth" of the electronics in the magnetometer must be at least 10 times higher than the maximum output frequency of 350 Khz, or roughly 3.5 MHz.
This bandwidth should not be confused with the magnetic field measurement "Bandwidth", or how fast of a magnetic field change can be measured. To put a scaler value on any magnetic field reading the output frequency of the magnetometer must be counted, and then scaled appropriately to get a field reading in nanoTeslas. The counting process involves opening a gate period, counting the number of Larmor (frequency) cycles that occur, divide that number by the precise time interval of the gate period. then scale that value by dividing by the 3.498572 Hz / Larmor coefficient. You get one reading per gate period, which by default is five or ten hertz (200mS to 100 mS gate period). What you get for a reading during any gate period is the time interval average of the Larmor frequency over that period.
The transfer function of a "time interval averaged" signal is [sine(x) / x] with the first zero falling at the sample frequency. Thus if the G-882 is sampling at 10 hertz the maximum resolvable magnetic field change is roughly 5 hertz.
The sample interval of the G-882 is adjustable by sending commands to it. If the sample rate is Set to 20 hertz the measurement bandwidth will double (from a 10 hertz sample rate) but the base line noise will go up as well.
It should also be noted that the basic system noise level of the G-882 for a stationary sensor is Set by the counter resolution - not by the signal to noise ratio of the oscillator electronics. If the sensor is tilted away from its optimum orientation the magnetometer signal will decrease (and therefore the signal to noise ratio), but the counted field output will not show any significant degradation until the sensor is approaching the dead zone (where the signal is really low).
Attachment : New SeisImager Lite registration.pdf
Attachment : SeisImager_Installation_Instructions_v7.6.pdf
Please see the attached instructions. Registration ID's are typically found on the customer invoice, but can also be found using your Order number or seismograph SN and company name here.
The US Department of Commerce category for the cesium-vapor magnetometers listed in this quotation is ECCN
6A006. It is necessary to obtain a US export license before a magnetometer in this category can be shipping to most countries. If an export license is required, Geometrics Export Administrator will assist you in applying for this license. The export license process takes around 6 weeks, and we are not able to speed up that processes as it is the time the US Government takes to review the export license requests. A license is required for both renting and purchasing the MagArrow, so we are not able to send you the equipment for your use until we receive it.
An Export License is NOT required for shipment of cesium-vapor magnetometers to the following countries: Argentina, Australia, Austria,
Belgium, Bulgaria, Canada, Croatia, Czech Republic, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Iceland, India,
Ireland, Italy, Japan, Latvia, Lithuania, Liechtenstein, Luxembourg, Mexico, Netherlands, New Zealand, Norway, Poland, Portugal, Romania,
Slovenia, Slovakia, South Korea, South Africa, Spain, Sweden, Switzerland, Turkey, and the United Kingdom. (Updated April 2019)
Export or re-export of the quoted items to Cuba, North Korea, Iran, Rwanda, Sudan, and Syria is prohibited by the US Dept. of Commerce as these are embargoed countries.
The MagArrow-SX is a special version of the MagArrow that has a reduced sensitivity in Order to comply with US regulations and does not require an export license.
Please contact us us for more information
Snell’s Law describes quantitatively how wave fronts refract or "bend" at boundaries between contrasting velocities. You've seen it manifest in light waves by the apparent bend of the straw in your glass of water; light travels slower in water than it does in air. Refraction is well illustrated using Huygen's Principle. Consider a wave front (for our purposes, a seismic one) emanating from a point energy source, as shown in the animation above. For simplification, assume we are far enough from the energy source that the wave front is essentially planar, and is approaching an abrupt change in seismic velocity:
Applying Huygen's Principle, we see that after time t, the plane wave has advanced a distance d equal to the radii of a series of spherical wave fronts emanating from the plane wave:
The radii of the spheres, i.e., the distance the plane wave travels in time t, is equal to V1t. The tangent to the spherical wave fronts is the new position of the plane wave. The planar wavefront continues at velocity V1. Again applying Huygen, we see that "every point on the wave front" (see discussion of Huygen above) includes the points where the wave front intersects the velocity boundary:
As the planar wave front advances, the velocity boundary becomes a new source of spherical wave fronts expanding at V2. Hence, part of the plane wave (the tangent to the spherical wave fronts emanating from the velocity boundary) is now traveling at V2. Note that within V2, its direction of advance has changed. This is because in V2, which is higher than V1, Huygen's spheres grow faster during time t.
The refracted wave front continues in the new direction until another velocity boundary is encountered. Here is a simplified version at higher speed:
Zooming out, we see the effect of this on a spherical wave:
It should be obvious from the above that in Order for a wave front to refract, it must strike the velocity boundary at an angle other than 90 degrees. It should also be obvious that in the case of V2 < V1, refraction will be in the opposite direction, and if V1 = V1, no refraction will occur.
Snell's Law quantifies refraction in terms of angle of incidence and velocity contrast. Combining the above diagrams and adding rays,
we can now describe Snell's Law:
In the figure above, i is the incident angle, and r is the refracted angle, measured between the ray and a line perpendicular to the refracting interface. In the example above, the velocity contrast is positive; V2 > V1. There are numerous derivations of Snell's Law on the web if you wish to understand the math.
From the equation, you can see that for any given positive velocity contrast, as i increases, r increases faster:
This is important; it is the property of refraction that allows us to use refracted energy to measure subsurface velocities.
Conversely, a negative velocity contrast results in refraction in the opposite direction:
Standard Procedure on Registering SCS Software
Here's our standard procedure on registering the SCS (Seismic Controller Software):
The latest version of the SCS is 11.1.69, which is used for Windows Operating Systems up to and including W-10 64 bit computers.
Within the zip file you will find instructions as well as the installation file.
Note: Installing the WinPcap is mandatory!
After installing, you will need to register. In Order for us to issue the correct SCS registration we will need additional information. The preferred method is:
1. From the “Registration Window” select “Send Email or Save File to Disk”.
2. Fill out the report, to include serial number of seismograph. (type 0000 in sales No. field if not known)
3. Save the file to your computer.
4. Send an email with the file attached or embedded to: rrivera@geometrics.com and/or support@geometrics.com.
We will then remit with a 40 character alphanumeric string that you can paste into the same “Registration Window.”
Please understand that the SCS can be installed onto as many computers as you wish, yet each installation will generate its own unique user code and therefore need to be registered.
Standard Procedure on Registering SCS Software
Here's our standard procedure on registering the SCS (Seismic Controller Software):
The latest version of the SCS is 11.1.69, which is used for Windows Operating Systems up to and including W-10 64 bit computers.
Within the zip file you will find instructions as well as the installation file.
Note: Installing the WinPcap is mandatory!
After installing, you will need to register. In Order for us to issue the correct SCS registration we will need additional information. The preferred method is:
1. From the “Registration Window” select “Send Email or Save File to Disk”.
2. Fill out the report, to include serial number of seismograph. (type 0000 in sales No. field if not known)
3. Save the file to your computer.
4. Send an email with the file attached or embedded to: rrivera@geometrics.com and/or support@geometrics.com.
We will then remit with a 40 character alphanumeric string that you can paste into the same “Registration Window.”
Please understand that the SCS can be installed onto as many computers as you wish, yet each installation will generate its own unique user code and therefore need to be registered.
Overview
The MagEx instrument and the MagNav app both display information about the state of the instrument's battery. Battery state and reporting exist in bands according to percentage of remaining battery capacity:
30% or higher:The instrument has good remaining capacity.The LED on the instrument's power switch glows a solid green.MagNav displays the battery percentage or voltage in black text on a white background.
Between 20% and 30%:The instrument has capacity to survey for additional time, but if you will be surveying a significant amount more, start thinking about changing the battery.The LED on the power switch is blue.MagNav displays the battery percentage with a blue background.
Between 5% and 20%:You can continue to survey, but the battery is running low and you should consider changing the battery soon.The LED on the power switch is red.MagNav displays the battery percentage with a red background, and periodically notifies you that the battery is running low.
Below 5%:The battery is running low, and the instrument may turn off at any time in Order to preserve battery health. You should change the battery as soon as possible.
Temperature-related effects:Battery performance also changes as the temperature of the battery changes; as the temperature of a battery falls, the voltage it supplies also decreases, and the total energysupplied by the battery decreases. This means that in cold weather a battery will not last as long as in hot weather.
The battery percentages reported in the instrument are adjusted for the effect of temperature; at a given battery voltage a cold battery will display a higher percentage than a warm battery will report.
The effects of colder temperatures are not normally permanent; as a battery warms up, its output voltage and energy return to higher levels.
Notes about the calculation:The MagEx instrument includes 2 batteries, and each battery includes 3 separate cells. Battery percentages are calculated from only one battery in the instrument - either the single battery if only one is connected, or from the better battery if two batteries are connected.
Reported battery percentage is an estimate, based on measurements of the behavior of healthy batteries in instruments in the field and in the lab. Battery performance may change as a battery ages and as the temperature changes.
The best practice for batteries is to use 2 healthy, fully charged batteries, and replace them both when the percentage falls below 20%.
There are basically three types of "gold": low concentration disseminated gold in ore, placer gold deposits and solid gold such as that associated with treasure. Magnetometers are used to find disseminated gold by its association with mineralized zones which also contain magnetite or other magnetic minerals. Magnetometers are often used in conjunction with airborne electromagnetic surveys to find the conductive ore bodies. Placer gold is the type found in buried stream channels such as the gold which sparked the California gold-rush in 1849. Gold dust and magnetic minerals have been concentrated in river banks over thousands of years. Where there is gold there is often magnetite and therefore the magnetometer can be used to locate placer gold deposits. Gold treasure is a different story and being non-magnetic gold, silver, and other precious minerals are not directly detectable by the magnetometer.
The magnetometer can only detect ferrous (iron or steel) objects. If the gold is stored in an iron box or has iron materials next to the gold (such as colonial ship ballast stones in the marine environment), there is the possibility of detecting the iron material. This is true for land and marine (sunken galleon) gold bullion. The vast majority of target search surveys are performed on a grid in a "lawn mower" back and forth manner to cover the area of interest. Lane spacing is dependent on target size (magnetic mass).
At a sensor to target distance of 2 to 3 meters there will need to be at least 1-2 kilograms of iron. This can produce a 1-2 nT anomaly that is detectable in a magnetically clean environment. The ideal environment would be in a plowed farm field or the bottom of the ocean away from human activity i.e., away from a port or harbor. You will probably not be able to detect this small of an anomaly in a city or port location. The more iron mass there is, the better the chance of detecting it.
Training to use the magnetometer can take 1-2 days depending on experience with Setting up computerized survey equipment and a GPS.
Processing the magnetic data requires several days of training and would require a geophysical background to interpret the final maps. We provide free software to make maps and estimate the target depth of burial (inversion). If you are unfamiliar with this procedure, we would recommend that you find a local geotechnical firm to look at the data to determine if there are anomalies that should be investigated further. Remembering that non-ferrous materials do not cause anomalies (gold, silver, copper, brass, aluminum, gems) you will be looking for anomalies either associated with the container OR associated with ground disturbance (i.e., gravesite). In this way some anomalies can be detected where there has been an excavation such as a gravesite.
In Order to understand the process more fully, we strongly suggest that you download and read the Applications Manual for Portable Magnetometers. Other additional resources are available. Understanding how the magnetometer functions and how the earth’s field responds to distortions due to ferrous materials will help you make good decisions about how to interpret and use the data to direct recovery or exploration efforts.
Hi All,
We are using the Teensy 4.1 as a logger (Adafruit GPS is linked with the Teensy) for the MFAM SX. Below is the code for the Arduino IDE (Teensy), for people who might find it useful,
Roi
#include <NativeEthernet.h>
#include <SD.h>
// ---- NETWORK CONFIGURATION ----
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 2, 10);
IPAddress mfamIP(192, 168, 2, 2);
uint16_t mfamPort = 1000;
EthernetClient client;
// ---- PACKET STRUCTURE ----
const int PACKET_SIZE = 1380;
const int SAMPLE_SIZE = 32;
const int HEADER_SIZE = 16;
const int NUM_SAMPLES = 40;
const int SD_CHIP_SELECT = BUILTIN_SDCARD;
uint8_t buffer[PACKET_SIZE];
int bufferPos = 0;
// ---- SD CARD ----
File logFile;
bool sdReady = false;
unsigned long sampleCount = 0;
unsigned long fileStartTime = 0;
char filename[32];
// ---- AUXILIARY CHANNEL STORAGE ----
double gyroX = 0, gyroY = 0, gyroZ = 0, gyroT = 0;
double accelX = 0, accelY = 0, accelZ = 0, accelT = 0;
double compassX = 0, compassY = 0, compassZ = 0, compassT = 0;
// ---- GPS FROM ADAFRUIT MODULE ON SERIAL1 (Pin 0 = RX) ----
char gpsBuffer[256];
int gpsBufferPos = 0;
char gpsString[128] = "";
char gpsDate[12] = "00/00/00";
char gpsTime[16] = "00:00:00.000";
bool gpsFix = false;
uint8_t tsStatus = 0;
// ---- OUTPUT CONTROL ----
// Set to 1 to log every sample, 10 for 100Hz, 20 for 50Hz, etc.
const int DOWNSAMPLE_FACTOR = 1; // 50 Hz output
int downsampleCounter = 0;
// How many minutes per file. Set to 10, 20, 60, etc.
const int FILE_MINUTES = 10;
// ---- LED INDICATOR ----
// Off = starting up
// Very slow blink (every 3 sec) = connected and logging
// Fast blink (4/sec) = connected but no data arriving
// Solid on = no SD card
// 3 quick flashes then pause = cannot connect to MFAM
const int LED_PIN = 13;
unsigned long lastBlinkTime = 0;
bool ledState = false;
unsigned long lastDataTime = 0;
// ---- FUNCTION PROTOTYPES ----
void createNewFile();
void parsePacket(uint8_t* pkt);
void parseAuxChannels(uint8_t* sample, uint16_t frameID);
void readGPS();
void parseGPRMC(char* sentence);
void writeSample(unsigned long timestamp, uint16_t fiducial, double mag1, uint16_t mag1s,
double mag2, uint16_t mag2s, uint16_t sysStatus);
int16_t toSigned16(uint16_t val);
void createNewFile() {
static int fileNumber = 0;
// On first call, find the next available file number
if (fileNumber == 0) {
char testName[32];
for (int i = 1; i <= 99999; i++) {
snprintf(testName, sizeof(testName), "MFAM_%05d.txt", i);
if (!SD.exists(testName)) {
fileNumber = i - 1; // Will be incremented below
break;
}
}
}
fileNumber++;
snprintf(filename, sizeof(filename), "MFAM_%05d.txt", fileNumber);
logFile = SD.open(filename, FILE_WRITE);
if (logFile) {
logFile.println("Mag 1,Mag 2,Fid,SysS,Mg1S,Mg2S,Gyro X,Gyro Y,Gyro Z,Gyro T,Accel X,Accel Y,Accel Z,Accel T,CompassX,CompassY,CompassZ,Comp T,Date,Time,TS Status,GPS");
logFile.flush();
fileStartTime = millis();
Serial.print("Logging to: ");
Serial.println(filename);
} else {
Serial.print("ERROR: Could not create ");
Serial.println(filename);
}
}
void Setup() {
Serial.begin(115200);
delay(2000);
// Start GPS serial port (Adafruit Ultimate GPS defaults to 9600 baud)
Serial1.begin(9600);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
memset(gpsString, 0, sizeof(gpsString));
// Initialize SD card
if (SD.begin(SD_CHIP_SELECT)) {
sdReady = true;
Serial.println("SD card ready.");
} else {
Serial.println("WARNING: No SD card found. Serial output only.");
digitalWrite(LED_PIN, HIGH);
}
// Initialize Ethernet
Ethernet.begin(mac, ip);
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("ERROR: No Ethernet hardware found!");
while (true) {}
}
Serial.print("Teensy IP: ");
Serial.println(Ethernet.localIP());
Serial.print("Connecting to MFAM at ");
Serial.print(mfamIP);
Serial.print(":");
Serial.println(mfamPort);
if (client.connect(mfamIP, mfamPort)) {
Serial.println("Connected to MFAM!");
} else {
Serial.println("Connection failed!");
}
Serial.println("Waiting for GPS fix...");
if (sdReady) {
createNewFile();
}
Serial.println("Mag 1,Mag 2,Fid,SysS,Mg1S,Mg2S,Gyro X,Gyro Y,Gyro Z,Gyro T,Accel X,Accel Y,Accel Z,Accel T,CompassX,CompassY,CompassZ,Comp T,Date,Time,TS Status,GPS");
}
void loop() {
// Always read GPS data from Serial1
readGPS();
if (!client.connected()) {
Serial.println("Disconnected. Reconnecting...");
if (sdReady && logFile) {
logFile.flush();
}
for (int i = 0; i < 3; i++) {
digitalWrite(LED_PIN, HIGH);
delay(100);
digitalWrite(LED_PIN, LOW);
delay(100);
}
delay(1400);
client.connect(mfamIP, mfamPort);
if (client.connected()) {
lastDataTime = millis();
}
return;
}
while (client.available()) {
buffer[bufferPos] = client.read();
bufferPos++;
if (bufferPos >= PACKET_SIZE) {
parsePacket(buffer);
bufferPos = 0;
lastDataTime = millis();
}
}
// LED patterns
if (sdReady) {
if (millis() - lastDataTime > 3000) {
if (millis() - lastBlinkTime > 125) {
ledState = !ledState;
digitalWrite(LED_PIN, ledState ? HIGH : LOW);
lastBlinkTime = millis();
}
} else {
if (millis() - lastBlinkTime > 1500) {
ledState = !ledState;
digitalWrite(LED_PIN, ledState ? HIGH : LOW);
lastBlinkTime = millis();
}
}
}
// New file every FILE_MINUTES minutes
if (sdReady && logFile && (millis() - fileStartTime > (unsigned long)FILE_MINUTES * 60UL * 1000UL)) {
logFile.close();
createNewFile();
}
}
// ---- GPS READING FROM ADAFRUIT MODULE ON SERIAL1 ----
void readGPS() {
while (Serial1.available()) {
char c = Serial1.read();
if (c == '$') {
gpsBufferPos = 0;
}
if (gpsBufferPos < (int)sizeof(gpsBuffer) - 1) {
gpsBuffer[gpsBufferPos] = c;
gpsBufferPos++;
}
if (c == '\n' || c == '\r') {
gpsBuffer[gpsBufferPos] = '\0';
if (strncmp(gpsBuffer, "$GPRMC", 6) == 0 || strncmp(gpsBuffer, "$GNRMC", 6) == 0) {
// Save full sentence for logging
strncpy(gpsString, gpsBuffer, sizeof(gpsString) - 1);
gpsString[sizeof(gpsString) - 1] = '\0';
// Remove trailing newline/carriage return
int slen = strlen(gpsString);
while (slen > 0 && (gpsString[slen - 1] == '\n' || gpsString[slen - 1] == '\r')) {
gpsString[slen - 1] = '\0';
slen--;
}
parseGPRMC(gpsBuffer);
}
gpsBufferPos = 0;
}
}
}
void parseGPRMC(char* sentence) {
// $GPRMC,HHMMSS.sss,A,lat,N,lon,W,speed,course,DDMMYY,...
char copy[256];
strncpy(copy, sentence, sizeof(copy) - 1);
copy[sizeof(copy) - 1] = '\0';
char* token = strtok(copy, ",");
int field = 0;
while (token != NULL && field < 10) {
switch (field) {
case 1: // Time
if (strlen(token) >= 6) {
snprintf(gpsTime, sizeof(gpsTime), "%c%c:%c%c:%s",
token[0], token[1], token[2], token[3], token + 4);
}
break;
case 2: // Fix status
gpsFix = (token[0] == 'A');
break;
case 9: // Date
if (strlen(token) >= 6) {
snprintf(gpsDate, sizeof(gpsDate), "%c%c/%c%c/%c%c",
token[0], token[1], token[2], token[3], token[4], token[5]);
}
break;
}
token = strtok(NULL, ",");
field++;
}
// Update GPS bits of tsStatus
tsStatus = (tsStatus & 0x0C); // Keep MFAM PPS bits (3,2)
tsStatus |= 0x01; // Bit 0: RMC sentence received
if (gpsFix) {
tsStatus |= 0x02; // Bit 1: GPS fix valid
}
}
// ---- MFAM DATA PARSING ----
int16_t toSigned16(uint16_t val) {
if (val > 32767) return (int16_t)(val - 65536);
return (int16_t)val;
}
void parseAuxChannels(uint8_t* sample, uint16_t frameID) {
uint8_t auxID = (frameID >> 11) & 0x07;
uint16_t aux0 = sample[16] | (sample[17] << 8);
uint16_t aux1 = sample[18] | (sample[19] << 8);
uint16_t aux2 = sample[20] | (sample[21] << 8);
uint16_t aux3 = sample[22] | (sample[23] << 8);
switch (auxID) {
case 1:
compassX = toSigned16(aux0) / 0.01333333;
compassY = toSigned16(aux1) / 0.01333333;
compassZ = toSigned16(aux2) / 0.01333333;
compassT = toSigned16(aux3) / 128.0 + 25.0;
break;
case 2:
gyroX = toSigned16(aux0) / 16.384;
gyroY = toSigned16(aux1) / 16.384;
gyroZ = toSigned16(aux2) / 16.384;
gyroT = toSigned16(aux3) / 512.0 + 23.0;
break;
case 4:
accelX = toSigned16(aux0) / 16384.0;
accelY = toSigned16(aux1) / 16384.0;
accelZ = toSigned16(aux2) / 16384.0;
accelT = toSigned16(aux3) / 512.0 + 23.0;
break;
default:
break;
}
}
void writeSample(unsigned long timestamp, uint16_t fiducial, double mag1, uint16_t mag1s,
double mag2, uint16_t mag2s, uint16_t sysStatus) {
char tsStr[12];
snprintf(tsStr, sizeof(tsStr), "%d%d%d%d%d%d%d%d",
(tsStatus >> 7) & 1, (tsStatus >> 6) & 1, (tsStatus >> 5) & 1, (tsStatus >> 4) & 1,
(tsStatus >> 3) & 1, (tsStatus >> 2) & 1, (tsStatus >> 1) & 1, tsStatus & 1);
char sysHex[8], m1sHex[8], m2sHex[8];
snprintf(sysHex, sizeof(sysHex), "%04X", sysStatus);
snprintf(m1sHex, sizeof(m1sHex), "%04X", mag1s);
snprintf(m2sHex, sizeof(m2sHex), "%04X", mag2s);
char line[512];
snprintf(line, sizeof(line),
"%10.4f,%10.4f,%4d,%s,%s,%s,%10.2f,%10.2f,%10.2f,%5.1f,%8.5f,%8.5f,%8.5f,%5.1f,%8.1f,%8.1f,%8.1f,%5.1f,%s,%s,%s,%s",
mag1, mag2, fiducial, sysHex, m1sHex, m2sHex,
gyroX, gyroY, gyroZ, gyroT,
accelX, accelY, accelZ, accelT,
compassX, compassY, compassZ, compassT,
gpsDate, gpsTime, tsStr, gpsString);
if (sdReady && logFile) {
logFile.println(line);
if (sampleCount % 1000 == 0) {
logFile.flush();
}
}
if (sampleCount % 500 == 0) {
Serial.println(line);
}
}
void parsePacket(uint8_t* pkt) {
// Get PPS bits from MFAM system status
uint16_t firstSysStatus = pkt[HEADER_SIZE + 2] | (pkt[HEADER_SIZE + 3] << 8);
uint8_t mfamPPSbits = (firstSysStatus >> 12) & 0x0C;
tsStatus = (tsStatus & 0x03) | mfamPPSbits;
for (int i = 0; i < NUM_SAMPLES; i++) {
int offset = HEADER_SIZE + (i * SAMPLE_SIZE);
uint16_t frameID = pkt[offset] | (pkt[offset + 1] << 8);
uint16_t fiducial = frameID & 0x07FF;
uint16_t sysStatus = pkt[offset + 2] | (pkt[offset + 3] << 8);
uint32_t mag1raw = pkt[offset + 4] | (pkt[offset + 5] << 8) |
((uint32_t)pkt[offset + 6] << 16) | ((uint32_t)pkt[offset + 7] << 24);
double mag1 = mag1raw * 0.05 / 1000.0;
uint16_t mag1status = pkt[offset + 8] | (pkt[offset + 9] << 8);
uint32_t mag2raw = pkt[offset + 10] | (pkt[offset + 11] << 8) |
((uint32_t)pkt[offset + 12] << 16) | ((uint32_t)pkt[offset + 13] << 24);
double mag2 = mag2raw * 0.05 / 1000.0;
uint16_t mag2status = pkt[offset + 14] | (pkt[offset + 15] << 8);
parseAuxChannels(pkt + offset, frameID);
sampleCount++;
downsampleCounter++;
if (downsampleCounter >= DOWNSAMPLE_FACTOR) {
downsampleCounter = 0;
writeSample(millis(), fiducial, mag1, mag1status, mag2, mag2status, sysStatus);
}
}
}
Verify BAUD Rate selected on dip switches 6,7,8
Note: according to a customer this is how the switches are Set as they are attempting a file transfer at 115200 BAUD.
Connect the G-857 to the computer using the download cable and a properly installed USB/RS-232 adaptor. (Must have FTDI):
Open the MagMap Software.
Select Import>G-857/ASCII
1. Enter known Serial Port (My computer is COM4)
2. BAUD 115200 (Switches 6, 7 and 8 off)
3. Set a good location for the file to written to.
4. Leave Download only, open later unchecked.
5. Leave download time out 2.
Select OK.
On the G-857 press OUTPUT, ENTER when this window opens.
BYTES DOWNLOADED will begin to increment.
Select OK in the window below:
The downloaded Mag file should be displayed:
If the download sequence does not happen this way, it is usually a problem with:
1. USB/RS-232 Adaptor not FTDI, or driver not installed.
2. COM PORT assignment incorrect, and/or file destination not valid.
3. BAUD RATE mismatch.
4. Faulty I/O Cable PN 16492-01.
5. Faulty Computer.
6. Faulty G-857 console.
Check to make sure that the G-857 is not in Legacy Mode:
To check if Legacy Mode is enabled press:
AUTO-OUTPUT
To turn it off press:
AUTO-OUTPUT-CLEAR
To Turn on:
AUTO-OUTPUT-ENTER
If Legacy Mode was on then the recorded data recorded needs to be downloaded as a G-856:
What Affects Geode Trigger Cycle Times?
If you're trying to optimize your Geode system for faster trigger cycles—especially in high-repeat environments—there are a few key factors to consider. The goal is to ensure that the system completes its entire cycle (trigger → recording → data transfer → re-arming) before the next expected trigger. Here’s what influences that cycle:
🧠 Core Factors That Affect Cycle Times
1. File Size (Sampling Parameters)
Your sample interval and record length directly affect the size of each data file.You can view the resulting file size in the Acquisition Parameters menu.Larger files take longer to transfer, which delays the re-arm process.
2. Data Transfer Rate
The Geode typically transfers data at around 450–465 kb/sec.Reducing file size is the best way to reduce transfer time and speed up the cycle.
3. Calibration Frequency
By default, the system may attempt to calibrate every N shots, which takes additional time.Go to Options > Calibration and Set "calibrate every N shots" to a large number (e.g., 100000) to prevent unnecessary delays.
4. Recording Delay and Record Length
If you're operating in a region with a consistently deep seafloor, you can add a recording delay and reduce record length accordingly.Example: If the water column is always >0.3s, you can apply a delay of 0.2s and reduce record length by the same amount.This trims your file size and speeds up the transfer/re-arm process.
⚙️ Best Practices
Use the Auto-Trigger function or Set trigger sensitivity to the maximum value for testing.Monitor the cycle timing and adjust acquisition parameters to stay within your trigger window.It's often an iterative process to find the ideal configuration for your environment.
I have Set up a G-882 system here at Geometrics and am receiving data and sending commands using TeraTerm (any terminal emulation program should work). When in normal use mode the Digital add on board sits in front of the G-882 and parses and acts on all commands coming in. There are two versions of the Digital Add On board, which are the GP120 and the GP140. The GP140 is a newer version of the Digital Add ON board. It is the GP140 Digital board that outputs all S/N (and other) information.
I first Set up with the GP140 board (the newer version). I find that the ""RESET" command does work - i.e. it goes into BYPASS mode for a couple seconds, then output the S/N and configuration information, and reverts to normal operation with the digital depth and altimeter information. But it only works every other time I send it. The first time nothing happens. Then I send it again and it works. This appears to be a bug in the GP140. For some commands the first command after power up or reset are ignored. The second time (and subsequent commands) are executed. The work around seems to be sending the RESET command twice.
I also tried an older G-882 with the GP120 Digital board. The Reset (and other commands worked first time and every time.
BTW, the Digital Board version is in the second line with the S/N information that is sent on power up or Reset.
Some questions:
1) My configuration is one G-882 connected to a PC through the white junction box. Is this your configuration, or do you have concatenated G-882's?
2) Can you get the G-882 to accept any commands (like going into Bypass Mode)? I'm wondering if there is a open link in the command line from the PC to the Digital board.