Announcement

Collapse
No announcement yet.

Announcement

Collapse
No announcement yet.

data format

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • data format

    Hello dear friends,
    I’ve been working on magnetometer devices and imaging systems for a long time. I’ve run into a problem, and if anyone has information about it, please guide me.
    I want to know what the data transmission format from the microcontroller to the Visualizer software should be.
    I tested it in every way I could, but the scan didn’t show up on the laptop.​

  • #2
    Originally posted by ma330 View Post
    Hello dear friends,
    I’ve been working on magnetometer devices and imaging systems for a long time. I’ve run into a problem, and if anyone has information about it, please guide me.
    I want to know what the data transmission format from the microcontroller to the Visualizer software should be.
    I tested it in every way I could, but the scan didn’t show up on the laptop.​
    Hello, would you provide more specifications?

    From which microcontroller into which visualizer?

    I am using esp32 with sd card. Saving location, orientation and measurement data as .csv
    Later on pc python generates interactive html (in this case i measured all directions from one place so result is sphere)
    4200 rows of: time,lat,lon,heading,pitch,roll,f1_hz,f2_hz look like this:

    Click image for larger version

Name:	image.png
Views:	166
Size:	216.6 KB
ID:	442676​​
    Attached Files

    Comment


    • #3
      Originally posted by Hyena View Post

      Hello, would you provide more specifications?

      From which microcontroller into which visualizer?

      I am using esp32 with sd card. Saving location, orientation and measurement data as .csv
      Later on pc python generates interactive html (in this case i measured all directions from one place so result is sphere)
      4200 rows of: time,lat,lon,heading,pitch,roll,f1_hz,f2_hz look like this:

      Click image for larger version  Name:	image.png Views:	8 Size:	216.6 KB ID:	442676​​
      I’m using the ATmega32 microcontroller,I send the data to the laptop via the USART port using Bluetooth.

      Comment


      • #4
        I found this code in one of the threads on this forum. I’m not sure whether it actually works or not. I have one question: what is the reason for sending several transmissions in a row with a 250ms delay before the main loop?
        Could you explain the reason for this process?

        https://www.geotech1.com/forums/foru...800#post425800

        Code:
        Chip type : ATmega16A
        Program type : Application
        AVR Core Clock frequency: 8.000000 MHz
        Memory model : Small
        External RAM size : 0
        Data Stack size : 256
        ***********/
        
        #include <mega16a.h>
        #include <delay.h>
        
        // Declare your global variables here
        int x;
        
        // Standard Input/Output functions
        #include <stdio.h>
        
        // Voltage Reference: AVCC pin
        #define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (1<<ADLAR))
        
        // Read the 8 most significant bits of the AD conversion result
        unsigned char read_adc(unsigned char adc_input)
        {
          ADMUX=adc_input | ADC_VREF_TYPE;
          // Delay needed for the stabilization of the ADC input voltage
          delay_us(10);
          // Start the AD conversion
          ADCSRA|=(1<<ADSC);
          // Wait for the AD conversion to complete
          while ((ADCSRA & (1<<ADIF))==0);
          ADCSRA|=(1<<ADIF);
          return ADCH;
        }
        
        void main(void)
        {
          // Declare your local variables here
          
          // Input/Output Ports initialization
          // Port A initialization
          // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
          DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
          // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
          PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
          
          // Port B initialization
          // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
          DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
          // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
          PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
          
          // Port C initialization
          // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
          DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
          // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
          PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
          
          // Port D initialization
          // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
          DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
          // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
          PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
          
          // Timer/Counter 0 initialization
          // Clock source: System Clock
          // Clock value: Timer 0 Stopped
          // Mode: Normal top=0xFF
          // OC0 output: Disconnected
          TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
          TCNT0=0x00;
          OCR0=0x00;
        
          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: Timer1 Stopped
          // Mode: Normal top=0xFFFF
          // OC1A output: Disconnected
          // OC1B output: Disconnected
          // Noise Canceler: Off
          // Input Capture on Falling Edge
          // Timer1 Overflow Interrupt: Off
          // Input Capture Interrupt: Off
          // Compare A Match Interrupt: Off
          // Compare B Match Interrupt: Off
          TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
          TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
          TCNT1H=0x00;
          TCNT1L=0x00;
          ICR1H=0x00;
          ICR1L=0x00;
          OCR1AH=0x00;
          OCR1AL=0x00;
          OCR1BH=0x00;
          OCR1BL=0x00;
        
          // Timer/Counter 2 initialization
          // Clock source: System Clock
          // Clock value: Timer2 Stopped
          // Mode: Normal top=0xFF
          // OC2 output: Disconnected
          ASSR=0<<AS2;
          TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
          TCNT2=0x00;
          OCR2=0x00;
        
          // Timer(s)/Counter(s) Interrupt(s) initialization
          TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
          
          // External Interrupt(s) initialization
          // INT0: Off
          // INT1: Off
          // INT2: Off
          MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
          MCUCSR=(0<<ISC2);
          
          // USART initialization
          // Communication Parameters: 8 Data, 1 Stop, No Parity
          // USART Receiver: Off
          // USART Transmitter: On
          // USART Mode: Asynchronous
          // USART Baud Rate: 2400
          UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
          UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB | (0<<TXB;
          UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
          UBRRH=0x00;
          UBRRL=0xCF;
          
          // Analog Comparator initialization
          // Analog Comparator: Off
          // The Analog Comparator's positive input is
          // connected to the AIN0 pin
          // The Analog Comparator's negative input is
          // connected to the AIN1 pin
          ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
          
          // ADC initialization
          // ADC Clock frequency: 1000.000 kHz
          // ADC Voltage Reference: AVCC pin
          // ADC Auto Trigger Source: ADC Stopped
          // Only the 8 most significant bits of
          // the AD conversion result are used
          ADMUX=ADC_VREF_TYPE;
          ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
          SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
          
          // SPI initialization
          // SPI disabled
          SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
          
          // TWI initialization
          // TWI disabled
          TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
        
          printf("%d\r\n",100);
          delay_ms(250);
          printf("%d\r\n",100);
          delay_ms(250);
          printf("%d\r\n",100);
          delay_ms(250);
          printf("%d\r\n",15);
          delay_ms(250);
          printf("%d\r\n",15);
          delay_ms(250);
          printf("%d\r\n",15);
          delay_ms(250);
          printf("%d\r\n",83);
          delay_ms(250);
          printf("%d\r\n",83);
          delay_ms(250);
          printf("%d\r\n",83);
          delay_ms(250);
          printf("%d\r\n",105);
          delay_ms(250);
          printf("%d\r\n",105);
          delay_ms(250);
          printf("%d\r\n",105);
          delay_ms(250);
          printf("%d\r\n",67);
          delay_ms(250);
          printf("%d\r\n",67);
          delay_ms(250);
          printf("%d\r\n",67);
          delay_ms(250);
          
          while (1)
          {
            // Place your code here
            x=read_adc(0);
            delay_ms(100);
            printf("%d\r\n",x);
          }
        }​​
        ​
        Last edited by Carl-NC; 11-20-2025, 03:02 PM.

        Comment


        • #5
          Initialize all peripherals (mostly disabled)
          Configure ADC to read analog values from channel ADC0 (PA0)
          Configure USART transmitter only, baud = 2400 bps
          Print several predefined numbers via UART - seems like initialization sequence


          Then loop sending PA0 value (0-255) each 0.1s

          Read ADC channel 0
          delay 100 ms
          send ADC value through UART

          Comment


          • #6
            Originally posted by Hyena View Post
            Initialize all peripherals (mostly disabled)
            Configure ADC to read analog values from channel ADC0 (PA0)
            Configure USART transmitter only, baud = 2400 bps
            Print several predefined numbers via UART - seems like initialization sequence


            Then loop sending PA0 value (0-255) each 0.1s

            Read ADC channel 0
            delay 100 ms
            send ADC value through UART


            By sending the data this way, will I be able to view the live data in the Visualizer software?

            Comment


            • #7
              If software expect this initialization, then yes. I still dont know what software are we talking about, do you have link to its specs?

              Comment


              • #8
                Originally posted by Hyena View Post
                If software expect this initialization, then yes. I still dont know what software are we talking about, do you have link to its specs?
                Visualizer 3d okm company .

                Atmega32 in code vision

                Comment


                • #9
                  Well, I looked at their online manuals but found no information about communication protocols. Their detectors seems to have some kind of operation modes which should correspond to selected in software. I would be very carefull about anything coming from LRL selling company... without further detailed info, cant confirm/reject.

                  Comment


                  • #10
                    Originally posted by ma330 View Post
                    Hello dear friends,
                    I’ve been working on magnetometer devices and imaging systems for a long time. I’ve run into a problem, and if anyone has information about it, please guide me.
                    I want to know what the data transmission format from the microcontroller to the Visualizer software should be.
                    I tested it in every way I could, but the scan didn’t show up on the laptop.​
                    Contact me on Telegram for instructions.
                    @Muha1154

                    Comment


                    • #11
                      Originally posted by Mahmoud Jo View Post

                      Contact me on Telegram for instructions.
                      @Muha1154
                      User is not found

                      Comment

                      Working...
                      X