VHF: Canal 77
"Se navega por los astros, por la mar, por la tierra, por las gentes, por los sentimientos...Se navega." — Altair

Hola Cofrade

Hemos detectado que utilizas un bloqueador de anuncios. Si puedes, considera añadir La Taberna del Puerto a tu lista de excepciones. Esto nos ayuda a mantener la comunidad y cubrir los gastos del servidor. ¡Gracias por tu apoyo!

LOTERÍA DE NAVIDAD 2026
De nuevo jugamos al 31103 que no es otro que la fecha de fundación de la Taberna. Si quieres jugar haz click en el décimo

Por favor, si juegas, comprueba que estés en la lista y que no haya ningún problema. Muchas gracias a todos los que participáis y MUCHA SUERTE.

Anuncio

Colapsar

NORMAS DEL FORO: OBLIGATORIA SU LECTURA

Hola cofrade, has recalado en la Taberna del Puerto, algo más que un foro náutico. Eres bienvenido, participa, aprende y enséñanos; de eso se trata, de enriquecernos todos en nuestros conocimientos, y sobre todo de pasar un buen rato. No entres si vienes buscando conflictos, polémicas o cualquier otro fin que no sean los anteriormente descritos. Tenemos algunas normas y es obligatorio que las leas antes de empezar.

1/ Este es un foro náutico y aunque se permite hablar de otros temas, se ruega contención en el uso de los mismos, para ello existe un foro específico.

2/ Usa títulos claros y que describan el contenido del tema. De este modo será más fácil encontrarlos en el buscador para posteriores consultas además de que facilitas el trabajo de los que te vayan a responder. Títulos ambiguos como “ayuda”, “tengo un problema”, etc... no colaboran a este fin. Inserta tú tema en el foro adecuado, mira antes de lanzarlo por si alguien poco antes que tú ha puesto lo mismo; si es así no crees un tema nuevo, contesta al otro. Usa el buscador, es una gran herramienta. No escribas todo el texto con mayúsculas, se interpreta como que estás gritando. Todo esto facilita enormemente el trabajo de los que curramos aquí.

3/ No se permite el "spam" ni la publicidad de empresas o de actividades que conlleven lucro. Tampoco solicitud de ofertas de empresas o profesionales salvo en los foros de anuncios de compra-venta.

4/ No uses el foro como un chat salvo en aquellos temas habilitados a tal efecto, los cuales periódicamente serán eliminados. Las contestaciones reiterativas y/o automáticas, haciendo uso del sistema copi-pegui o cualquier otro no están permitidas.

5/ Respeta a los demás y a sus opiniones si quieres que las tuyas sean respetadas. Los insultos, la agresividad, el mal gusto y la mala educación no están permitidas en este foro. Aquí venimos a divertirnos, no a pelearnos. Se prohíbe insultar, ser agresivo, maleducado, soez, no respetar a los demás, intentar imponer nuestras ideas, empezar o dar pie a que empiecen peleas o trifulcas. Se exige orden y delicadeza a la hora de tratar ciertos asuntos, como por ejemplo, en lo que a la ortografía se refiere. Serán considerados como insultos y faltas de respeto el calificar a los Moderadores y/o Administradores como censores, dictadores, que coartan la libertad de expresión, que aplican un doble rasero, y expresiones similares.

6/ Nos gusta conocer con quién hablamos, así que, una pequeña presentación en el foro correspondiente que existe para tal fin siempre será bien recibida. No obstante, si alguien decide no presentarse, los demás usuarios se abstendran de reclamar dicha presentación y/o realizar crítica o petición alguna.

7/ Los temas políticos o que induzcan a la polémica innecesaria, mejor los dejas para otros foros de los muchos que hay para ello en la red. Se prohíbe hablar de política, de política económica, de política social, de nacionalismos, de antinacionalismos, de diferencias idiomáticas, de banderas nacionales, de exaltaciones patrióticas, de hechos diferenciales, de religión, de anti-religíon, de toros y del maltrato animal, y en general de todos los temas que se sabe de antemano van a ser polémicos y mucho más si no son náuticos. No contestes a estos temas o mensajes, informa a los administradores. No se tolerarán actitudes racistas, xenófobas, sexistas, denigrantes hacia otros colectivos o para con los demás, totalitarias o extremistas sean del signo que sea.

8/ El reenvío de mensajes que hayan sido modificados, o bien el envío de otros mensajes que muestren su descontento con esta modificación, pueden conducir al bloqueo de la cuenta. Esto también sucederá cuando un usuario insista en retomar algún tema o continuar sobre una conducta de la que se le ha alertado. En casos de que la mala conducta de un usuario continúe, se podrá proceder a su expulsión definitiva.

9/ Todos los temas y/o mensajes que fomenten la piratería sobre cualquier software u otro material protegido, o informen de cómo o dónde llevarla a cabo serán retirados inmediatamente del foro. No obstante, y debido a la imposibilidad por parte de los administrador de controlar todos los temas y mensajes , si alguien detecta cualquier incidencia de este tipo ruego lo comunique de forma inmediata a la administración, especificando el enlace al tema para poder ser retirado.

10/ Se prohíbe la reproducción total o parcial de textos u otros medios sujetos a Copyright y/o pertenecientes a otras webs, foros, etc... Sin embargo si que se podrán insertar enlaces a los mismos, pero siempre haciendo referencia a la página propietaria.

11/ La Taberna es un foro en lengua castellana o español, pero cada uno es libre de expresarse como quiera, allá él si la mayoría no lo entiende. Los usuarios se abstendrán de hacer ningún comentario indicando al que escribe en otra lengua su pertinencia o no. Tampoco se tolerará el uso del idioma como arma reivindicativa de ningún tipo.

12/ No se permiten insultos ni difamaciones a empresas, profesionales o particulares. Tampoco acusaciones de ningún tipo, que no estén probadas o demostradas judicialmente o por lo medios legales adecuados. Este no es un medio para presentar denuncias, para ello, existen los juzgados, consumo, etc...

13/ No se permite la inserción de hilos o mensajes con el fin de generar exclusivamente tráfico a otras web, aplicaciones o canales, bien sea mediante enlaces, mediante artículos, ficheros o datos parciales, o por cualquier otro método.


14/ Cualquier incumplimiento de estas normas, puede ser motivo de amonestación y/o expulsión del autor, de borrado o cierre de temas o mensajes, o de cualquier otra medida que la administración decida para intentar hacer que éstas sean cumplidas. Los temas pueden ser movidos o unidos sin previo aviso a criterio de los administradores.

15/ Si estás de acuerdo con ellas este es tú sitio; si no te gustan, no te apetece cumplirlas, las consideras restrictivas, censoras o que coartan tu libertad de expresión, no entres, no intervengas, y no te quejes cuando te sean aplicadas las medias correctoras adecuadas. No luches por cambiarlas a tu conveniencia, no puedes.

16/ Baja Voluntaria del foro.

Ni éste ni ningún otro Foro tiene previsto un sistema de Bajas voluntarias y automáticas. Simplemente con dejar de participar en él, y editar el Perfil de usuario para que dejen de aparecer los datos que crean no deben verse es suficiente.

No obstante, si alguien quiere que se le borre su cuenta, deberá enviar un e-mail desde el enlace "contáctanos" que se encuentra en la parte inferior del foro usando el e-mail con el que está registrado en la Taberna ya que es la única forma de comprobar la autenticidad del que se quiere dar de baja.
Así se evita que alguien pueda coger los datos de tu cuenta y pedir que se borre la misma.

Por otro lado advertir que los mensajes del usuario aparecerán, una vez borrada la cuenta, como realizados por un "invitado" ya que las intervenciones en un Foro público, son públicas. Es decir, desde el momento en que se publican dejan de pertenecer al usuario. Por otro lado, como siempre hay contestaciones a los mensajes, si algunos son borrados, el hilo deja de tener sentido.

En cualquier caso, si existe algún o algunos mensajes en el que aparezcan datos personales que el usuario no quiere que sigan apareciendo, ANTES de pedir la baja, podrá reportarnos estos mensajes, usando la opción "reportar mensajes" y nosotros eliminaremos esos datos personales.

Se entiende que una vez borrada la cuenta, esta acción es irreversible, con lo cual no se podrá volver atrás.



Estas normas pueden ser modificadas sin previo aviso, por lo que se recomienda consultarlas regularmente...



Bueno, y eso es todo, pasa, busca asiento por donde puedas y pide lo que guste...
Ver más
Ver menos

Simulador de corredera usando 1 GPS

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Re: Simulador de corredera usando 1 GPS

    He usado el esquema del mensaje 100 de este post.

    Comprueba las soldaduras y que el cable que lleva la señal desde nuestro montaje al display es el correcto.

    Comentario


    • Re: Simulador de corredera usando 1 GPS

      De acuerdo, gracias. Es lo que estaba usando. Seguiré en el intento .


      Comentario


      • Re: Simulador de corredera usando 1 GPS

        Bueno todo repasado y parece que vuelve a funcionar , el domingo lo probaré en el barco.

        Unas

        Comentario


        • Re: Simulador de corredera usando 1 GPS

          Originalmente publicado por Tartessos Ver Mensaje
          Hola de nuevo ScubaEdu, solo es para confirmarte que a mí me ha funcionado perfectamente la conexión de la placa arduino (que me facilitó ya programada el cofrade Masivas) con mi Autohelm Tridata ST50, solo abrí el cable negro que viene de la corredera y sustituí el cable interior de color verde por la salida de la placa arduino. Tienes que tener mucho cuidado porque los cables interiores del cable negro original son muy finos.
          Suerte
          Tartessos. Muchas Gracias. Hoy me he decidido y lo he hecho. Mi sorpresa es que el cable rojo lleva 5v y no 12v como esperaba. El Arduino Nano no le gusta mucho que lo alimentes por debajo de 6,5 voltios y sospecho de de vez en cuando se reinicia. ¿Tu has utilizado para alimentarlo el cable rojo y la camisa del cable de la corredera o lo has alimentado de otra forma?

          Luego me tocará calibrarlo porque me parece que mide en exceso pero eso ya lo haré en la siguiente fase.

          Comentario


          • Re: Simulador de corredera usando 1 GPS

            Hoy lo he probado y:
            Efectivamente el ST50 va a 5V no a 12
            No tiene suficiente intensidad para alimentar el Arduino NANO y el GPS.
            Modifico para alimentar el VIN del Ardunino con 12V y va mucho mejor. Me empeñaba en alimentarlo con el cable Rojo del ST50 y no tenia fuerza.
            Estoy calibrando. De momento
            No va mal a 17.000 p/nm* (4.8 Hz per knot) aunque creo que para velocidades muy bajas tendré que bajar un poco. El numero de pulsos 16.500 o algo así.

            Gracias a todos

            Comentario


            • Re: Simulador de corredera usando 1 GPS

              Originalmente publicado por ScubaEdu Ver Mensaje
              Hoy lo he probado y:
              Efectivamente el ST50 va a 5V no a 12
              No tiene suficiente intensidad para alimentar el Arduino NANO y el GPS.
              Modifico para alimentar el VIN del Ardunino con 12V y va mucho mejor. Me empeñaba en alimentarlo con el cable Rojo del ST50 y no tenia fuerza.
              Estoy calibrando. De momento
              No va mal a 17.000 p/nm* (4.8 Hz per knot) aunque creo que para velocidades muy bajas tendré que bajar un poco. El numero de pulsos 16.500 o algo así.

              Gracias a todos
              Estupendo ScubaEdu, te podía haber advertido desde el primer momento porque di los mismos pasos que tú, naturalmente me tuve que buscar 12v de otro lugar.
              Perdona que no te respondiera antes pero es que no me conecto a la taberna muy a menudo.

              Comentario


              • Re: Simulador de corredera usando 1 GPS

                Perdón por atreverme a opinar pero, si los 5 volts están regulados (como es de suponer) podrían alimentar el arduino nano, no a través de Vin (entrada de alimentación externa) sino por el pin 4 (5v) o, mas fácil, directamente con un cable USB a su entrada.





                Yo de momento solo he usado el Arduino uno y claro, si lo alimentas con 5 volts por la entrada de Vin no es suficiente porque pasa por el regulador interno y hay caída de tensión.


                Comentario


                • Re: Simulador de corredera usando 1 GPS

                  Hoy he pensado en meter a la entrada de 12v un buck converter. Concretamente un dc dc mini360 MP2307.
                  No llega a un euro y me baja un poco la tension que con el motor en marcha llega a unos 14v. En teoria el arduino soporta picos de 20v pero mejor protegerlo. Durara mas.

                  Comentario


                  • Re: Simulador de corredera usando 1 GPS

                    Originalmente publicado por ScubaEdu Ver Mensaje
                    Hoy he pensado en meter a la entrada de 12v un buck converter. Concretamente un dc dc mini360 MP2307.
                    No llega a un euro y me baja un poco la tension que con el motor en marcha llega a unos 14v. En teoria el arduino soporta picos de 20v pero mejor protegerlo. Durara mas.
                    Y un 7809 con un disipador?

                    Comentario


                    • Re: Simulador de corredera usando 1 GPS

                      Originalmente publicado por Leeway Ver Mensaje
                      Y un 7809 con un disipador?
                      Pues lo estuve pensando pero en teoria se calienta mucho mas y es menos eficiente ¿Por qué lo prefieres?

                      http://https://m.youtube.com/watch?v=giGRrODKJSE

                      Comentario


                      • Re: Simulador de corredera usando 1 GPS

                        Originalmente publicado por ScubaEdu Ver Mensaje
                        Pues lo estuve pensando pero en teoria se calienta mucho mas y es menos eficiente ¿Por qué lo prefieres?

                        http://https://m.youtube.com/watch?v=giGRrODKJSE
                        Pues el vídeo es muy interesante. Pero yo lo decía porque lo he hecho así en algunos montajes y porque creía que el Arduino también monta un 7805 , pero desde luego puede que sea mejor tu opción.
                        Gracias

                        Comentario


                        • Re: Simulador de corredera usando 1 GPS

                          Bueno, ya he probado el programa de Alcapar y me marca velocidades muy bajas, aproximadamente de la mitad de lo que debería. Modificaré la calibración de la corredera pero me parece mucha diferencia para que sea sólo un desajuste de calibración. Seguiremos ...

                          Unas

                          Comentario


                          • Re: Simulador de corredera usando 1 GPS

                            Originalmente publicado por skovela Ver Mensaje
                            Bueno, ya he probado el programa de Alcapar y me marca velocidades muy bajas, aproximadamente de la mitad de lo que debería. Modificaré la calibración de la corredera pero me parece mucha diferencia para que sea sólo un desajuste de calibración. Seguiremos ...

                            Unas
                            Lo que marca no es importante, calibra con el GPS, o cambia la relación de pulsos en el sketch. Una vez ajustes para 5 nudos irá bien.

                            Comentario


                            • Re: Simulador de corredera usando 1 GPS

                              Ve poniendo valores fijos a la velocidad en el programa de arduino en lugar del del GPS y con esos valores miras lo que pone en el display y ajustas el invento. Yo lo hice con pasos de medio en medio nudo y se me ha quedado perfecto. Asi ademas no mezclas error de GPS con ajuste de la corredera.

                              Luego ya vuelves al programa original.

                              Ah! Te a importante el GPS que uses. Yo el primero tenia mucho error a velocidades bajas. Me compre otro que ademas era GNSS y ahora perfecto.

                              Comentario


                              • Re: Simulador de corredera usando 1 GPS

                                Originalmente publicado por ScubaEdu Ver Mensaje
                                Ve poniendo valores fijos a la velocidad en el programa de arduino en lugar del del GPS y con esos valores miras lo que pone en el display y ajustas el invento. Yo lo hice con pasos de medio en medio nudo y se me ha quedado perfecto. Asi ademas no mezclas error de GPS con ajuste de la corredera.

                                Luego ya vuelves al programa original.

                                Ah! Te a importante el GPS que uses. Yo el primero tenia mucho error a velocidades bajas. Me compre otro que ademas era GNSS y ahora perfecto.



                                Buena idea lo de la velocidad fija. Y lo mejor es que no hace falta irse a pasear para probar . Lo intentaré.



                                Tengo tres GPS, un NEO 6M, otro NEO7M y un VKEL pero creo que todos comparten el chip de ublox y me da que ninguno tiene GNSS, de todas forma en el primer montaje que hice allá por 2013 con la instrucción original del cofrade Jiauka iba perfecto y la precisión era muy buena incluso a baja velocidad (era el chip que indicaba él al principio de este hilo). Por cierto ... ¿usais un divisor de tensión o un convertidor lógico 3,3v -5v. para conectar el GPS al arduino? o conectais directamente el Tx y Rx del GPS a las patas 2 y 3 del Arduino? lo digo porque ya he leido de todo. Parece que no afecta en principio pero no sé si a la larga se pueden romper cosas aunque aumenta el lío de conexiones y cables.


                                Unas

                                Comentario


                                • Re: Simulador de corredera usando 1 GPS

                                  Originalmente publicado por ScubaEdu Ver Mensaje
                                  ... Ve poniendo valores fijos a la velocidad en el programa de arduino en lugar del del GPS y con esos valores miras lo que pone en el display y ajustas el invento. Yo lo hice con pasos de medio en medio nudo y se me ha quedado perfecto. Asi ademas no mezclas error de GPS con ajuste de la corredera ...

                                  .

                                  Bueno ... lo he probado y me oscila mucho la velocidad, he puesto 4.5 como velocidad fija dejando el resto de operaciones del GPS en el bucle , pero oscila en la pantalla desde 4.3 hasta 5.0 de forma continua, no se está quieta ni dos segundos. He variado el pulso un poco arriba y abajo y esa oscilación sigue igual. Si quito del bucle las todas operaciones del GPS , entonces si que se queda fija fija a 4.5 una vez ajustada la corredera ahí. No tengo mucha idea de esto pero da la impresión que la adquisición de datos del GPS distorsiona el tiempo del bucle con la consiguiente variación de pulsos por segundo. Seguiremos estudiando e intentando entender todo esto. Gracias de nuevo.


                                  Unas

                                  Comentario


                                  • Re: Simulador de corredera usando 1 GPS

                                    Hoy he cambiado la librería del GPS por la plus, he quitado las líneas referentes a latitud longitud y la oscilación a que hacía referencia en el anterior mensaje ha bajado a 0,1 nudos y todo parece mas estable


                                    El código de Alcapar quedaría así



                                    #include <SoftwareSerial.h>
                                    #include <TinyGPS++.h>

                                    TinyGPSPlus gps;
                                    SoftwareSerial ss(2, 3);

                                    float velocidad = 0.0;
                                    float frecuencia = 0;
                                    int intervalo = 0;
                                    float semiciclo = 0;
                                    unsigned long tiempo = 0;
                                    void setup()
                                    {
                                    Serial.begin(115200);
                                    pinMode(9, OUTPUT);
                                    digitalWrite(9, HIGH);
                                    ss.begin(9600);
                                    }

                                    void loop()
                                    {
                                    while (ss.available() > 0)
                                    gps.encode(ss.read());
                                    if (gps.speed.isUpdated()){

                                    velocidad = gps.speed.knots();
                                    frecuencia = 4.8 * velocidad;
                                    tiempo = millis();
                                    if (velocidad != 0) {
                                    while ((millis() - tiempo) <= 2000) {
                                    semiciclo = 500 / frecuencia;
                                    intervalo = round(semiciclo);
                                    digitalWrite(9, LOW);
                                    delay(intervalo);
                                    digitalWrite(9, HIGH);
                                    delay(intervalo);
                                    }
                                    }
                                    else
                                    {
                                    digitalWrite(9, HIGH);
                                    }
                                    }
                                    else {
                                    digitalWrite(9, HIGH);
                                    }

                                    }


                                    A ver si lo pruebo de forma real ...


                                    Unas

                                    Comentario


                                    • Re: Simulador de corredera usando 1 GPS

                                      Originalmente publicado por jiauka Ver Mensaje
                                      Hola:

                                      Hace días que tenía pendiente 1 pequeño brico para sustituir el típico sensor airmar analógico que llevan muchos veleros (el típico con el cable de masa, rojo y verde). Lo que hace es simular los impulsos en función de la velocidad GPS (SOG), ya sé que no es muy ortodoxo, ya que no tiene en cuenta la corriente, pero no tengo ningún agujero en el casco y no quiero hacerlo.

                                      He usado 1 placa de desarrollo arduino



                                      1 sensor GPS NMEA0183


                                      y 1 poco de programación en C algo cutre.
                                      Código:
                                        
                                      
                                      #define F_CPU 16000000L
                                      #include <avr/io.h>
                                      #include <avr/interrupt.h>
                                      #include <util/delay.h>    // including the avr delay lib
                                      #include "led.h"            // Header file for led
                                      #include "usart.h"            // Header for Serial communication
                                      #include "SoftwareSerial.h"
                                      
                                      #define MYDEBUG(x)
                                      
                                      // OBJECT CREATION
                                      LED led1(0x05,5);            // Creates an object called led1 connected to PortB.5 (0x05 is the Special function register for PORTB)
                                      LED output(0x0b,4);  //PPRTD, bit 4
                                      
                                      SoftwareSerial mySerial(2, 3,false);
                                      #include <avr/io.h>
                                      #include <avr/interrupt.h>
                                      
                                      #define FOSC F_CPU // Clock Speed
                                      #define BAUD 115200      // Baud Rate
                                      #define MYUBRR (((((FOSC * 10) / (16L * BAUD)) + 5) / 10) - 1)
                                      
                                      // NMEA setences
                                      #define NMEA_DISABLE_CGA "PSRF103,00,00,00,01"
                                      #define NMEA_DISABLE_GLL "PSRF103,01,00,00,01"
                                      #define NMEA_DISABLE_GSA "PSRF103,02,00,00,01"
                                      #define NMEA_DISABLE_GSV "PSRF103,03,00,00,01"
                                      #define NMEA_DISABLE_RMC "PSRF103,04,00,00,01"
                                      #define NMEA_DISABLE_VTG "PSRF103,05,00,00,01"
                                      #define NMEA_ENABLE_VTG_1HZ "PSRF103,05,00,05,01"
                                      #define NMEA_QUERY_VTG "PSRF103,05,01,01,01"
                                      
                                      char nmea_data[128];
                                      char setnyb(unsigned char c)
                                      {
                                        if(c<9) return c+'0';
                                        else return c-10+'A';
                                      }
                                      
                                      void send_nmea(const char *datagram) {
                                          int i;
                                          char *p=(char*)datagram;
                                          unsigned char checksum=0;
                                          i=0;
                                          nmea_data[i++]='$';
                                          while(*p) {
                                              nmea_data[i]=*p++;
                                              checksum=checksum^nmea_data[i];
                                              i++;
                                          }
                                          nmea_data[i++]='*';
                                          nmea_data[i++]=setnyb((checksum >> 4) &0x0f);
                                          nmea_data[i++]=setnyb(checksum &0x0f);
                                          nmea_data[i]=0x00;
                                          mySerial.println((const String &)nmea_data);
                                          
                                      }
                                      #define STAT_NMEA_NONE 0
                                      #define STAT_NMEA_HEADER 1
                                      #define STAT_NMEA_DATA 2
                                              
                                      //    VTG-Course Over Ground and Ground Speed
                                      //$GPVTG,309.62,T,,M,0.13,N,0.2,K
                                      char nmea_header[5];
                                      char nmea_field[32];    
                                      int knots=1450,dotpos,tknots=10;
                                      
                                      int int_counter = 0;
                                      volatile int second = 0;
                                      int oldSecond = 0;
                                      long starttime = 0;
                                      int on=0;
                                      /* Timer2 reload value, globally available */  
                                      unsigned int tcnt2;  
                                       
                                      // Aruino runs at 16 Mhz, so we have 1000 Overflows per second...
                                      // 1/ ((16000000 / 64) / 256) = 1 / 1000
                                      ISR(TIMER2_OVF_vect) {
                                             /* Reload the timer */  
                                            TCNT2 = tcnt2;  
                                          int_counter++;
                                          if(tknots > 0 ) {
                                                if (int_counter >= tknots) {
                                                   if(on) {
                                                       led1.on();
                                                      output.on();
                                                      on=0;
                                                  }
                                                     else {
                                                         led1.off();
                                                      output.off();
                                                      on=1;
                                                  }
                                                  int_counter = 0;
                                              }
                                          }
                                      };
                                       
                                       void timer_setup() {  
                                        
                                        TIMSK2 &= ~(1<<TOIE2);  
                                        
                                        /* Configure timer2 in normal mode (pure counting, no PWM etc.) */  
                                        TCCR2A &= ~((1<<WGM21) | (1<<WGM20));  
                                        TCCR2B &= ~(1<<WGM22);  
                                        
                                        /* Select clock source: internal I/O clock */  
                                        ASSR &= ~(1<<AS2);  
                                        
                                        /* Disable Compare Match A interrupt enable (only want overflow) */  
                                        TIMSK2 &= ~(1<<OCIE2A);  
                                        
                                        /* Now configure the prescaler to CPU clock divided by 128 */  
                                        TCCR2B |= (1<<CS22)  | (1<<CS20); // Set bits  
                                        TCCR2B &= ~(1<<CS21);             // Clear bit  
                                        
                                        /* We need to calculate a proper value to load the timer counter. 
                                         * The following loads the value 131 into the Timer 2 counter register 
                                         * The math behind this is: 
                                         * (CPU frequency) / (prescaler value) = 125000 Hz = 8us. 
                                         * (desired period) / 8us = 125. 
                                         * MAX(uint8) + 1 - 125 = 131; 
                                         */  
                                        /* Save value globally for later reload in ISR */  
                                        tcnt2 = 131;   
                                        
                                        /* Finally load end enable the timer */  
                                        TCNT2 = tcnt2;  
                                        TIMSK2 |= (1<<TOIE2);  
                                      }  
                                      
                                      int main(void)
                                      {
                                          char c,*p;
                                          unsigned char stat=STAT_NMEA_NONE;
                                          int i,head_counter,nmea_field_counter,nmea_field_data_counter;
                                          // INITIALIZATIONS
                                          DDRB = 0b00100000;    //B5 output: board LED
                                          USART_Init(MYUBRR); // Initializes the serial communication
                                      
                                          mySerial.begin(4800);
                                          mySerial.listen();
                                          tknots=10000/knots;
                                          timer_setup();
                                          _delay_ms(1000);
                                          sei();
                                          send_nmea(NMEA_DISABLE_CGA);
                                          send_nmea(NMEA_DISABLE_GLL);
                                          send_nmea(NMEA_DISABLE_GSA);
                                          send_nmea(NMEA_DISABLE_GSV);
                                          send_nmea(NMEA_DISABLE_RMC);
                                          send_nmea(NMEA_DISABLE_VTG);
                                          send_nmea(NMEA_ENABLE_VTG_1HZ);
                                          while(1)
                                          {
                                              sei();
                                              
                                               if (mySerial.available()) {
                                                  c=mySerial.read();
                                                  MYDEBUG(USART_Sendbyte(c));
                                                  if( c < 0x20) {
                                                      stat=STAT_NMEA_NONE;
                                                  }
                                                  if( c == 0x0a) {
                                                      _delay_ms(100);
                                                      send_nmea(NMEA_QUERY_VTG);
                                                  }
                                                  switch (stat) {
                                      
                                                      case STAT_NMEA_HEADER:
                                                          if(head_counter < 5 ) {
                                                              nmea_header[head_counter++] = c;
                                                              if(head_counter==5) {
                                                                  if(strncmp(nmea_header,"GPVTG",5) ==0) {
                                                                      MYDEBUG(USART_Send_string("GPVTG\r\n"));
                                                                      stat=STAT_NMEA_DATA;
                                                                      nmea_field_counter=0;
                                                                      head_counter=0;
                                                                  } else {
                                                                      stat=STAT_NMEA_NONE;
                                                                  }                            
                                                              }
                                                          } else {
                                                              stat=STAT_NMEA_NONE;
                                                          }                            
                                                  
                                                      break;
                                                      case STAT_NMEA_DATA:
                                                          if(c == ',') {
                                                              if(nmea_field_counter==5) {
                                                                  p=nmea_field;
                                                                  dotpos=0;
                                                                  knots=0;
                                                                  while(*p) {
                                                                      if(*p >= '0' && *p <= '9') {
                                                                          knots=knots*10+*p-'0';
                                                                      }
                                                                      p++;
                                                                  }
                                                                  sprintf(nmea_field,"\r\nspeed=%d\n\r",knots);
                                                                  USART_Send_string(nmea_field);
                                                                  if(knots>0)
                                                                      tknots=10000/knots;
                                                                  else
                                                                      tknots=0;
                                                              }                            
                                          
                                                              nmea_field_counter++;
                                                              nmea_field_data_counter=0;
                                                              nmea_field[0]=0;
                                                          }
                                                          if(nmea_field_counter==5) {
                                                              nmea_field[nmea_field_data_counter++]=c;
                                                              nmea_field[nmea_field_data_counter]=0;
                                                          }
                                                          break;
                                                      case STAT_NMEA_NONE:
                                                      default:
                                                          if(c=='$') {
                                                              stat=STAT_NMEA_HEADER;
                                                              head_counter=0;
                                                          }
                                                      break;
                                                  }
                                              }
                                          }
                                      }
                                      Si hay alguien interesado en esquema, etc... para hacerse 1 que me lo diga y miro de pasarlo a limpio.
                                      Hola, estaría interesado en el esquema de conexiones. Gracias

                                      Comentario


                                      • Re: Simulador de corredera usando 1 GPS

                                        Hola cofrade, yo también estaría interesado.
                                        Muchas gracias

                                        Comentario


                                        • Re: Simulador de corredera usando 1 GPS

                                          Originalmente publicado por PEDRO >K Ver Mensaje
                                          Hola cofrade, yo también estaría interesado.
                                          Muchas gracias
                                          ¿Habeis visto el mensaje #95 o el #100?
                                          ¿Que esquema es el que os falta?

                                          Comentario


                                          • Re: Simulador de corredera usando 1 GPS

                                            Buenos días
                                            Soy Christian y me pongo en contacto con vosotros para comentarlos el tema de un ST40 bidata que lo tengo en mi barco pero que no tiene corredera, No se como solucionar este inconveniente .Como soy un ignorante en programacion os ruego que me hechais una mano para solucionar este problema,
                                            Una cervesa de antemano

                                            Comentario


                                            • Respuesta: Re: Simulador de corredera usando 1 GPS

                                              Buenos dias christian b y bienvenido a la Taberna. Al igual que en cualquier taberna, cuando se entra por primera vez, hay que saludar y presentarse para que asi sepámoslos con quien estamos hablando, contándonos si tienes barco, donde sueles navegar, ....

                                              Date una vuelta por el buscador, tienes hilos abierto sobre tu instrumentación.

                                              Mira ESTE por si te puede ayudar.

                                              Saludos
                                              Rafa


                                              RAFNI KAI
                                              www.RAFNI.es

                                              "Sean felices, porque la vida es urgente. La vida es una y ahora, así que hay que vivirla a tope y con intensidad"

                                              Comentario


                                              • Re: Simulador de corredera usando 1 GPS

                                                El codigo publicado por Jiauka en la pagina 4, post numero 100 creo que esta mal.

                                                Parace que dependiendo si la velocidad esta por debajo o por encima de 3 nudos utiliza un prescale de 64 o 256. (64x4=256)

                                                Pero luego los K_NOT_FACTOR que utiliiza son 2626000 y 164125 (164125x4 no es 2626000)

                                                Osea los prescale son multiplos de 4 pero los knot_factor no son multiplos de 4.

                                                El valor correcto para KNOT_FACTOR_L creo que seria 656500

                                                Detecte el fallo porque el invento me da velocidades muy bajas por debajo de los 3 nudos y funciona bien por encima de los 3 nudos.

                                                No se si Jiauka sigue por el foro y puede darle un vistazo al codigo y confimar esto.

                                                Lo que me extraña es que el codigo se publico en 2016 y nadie haya notado el error. Porque ya digo que no marca bien velocidad por debajo de 3 nudos.

                                                Copio aqui debajo el trozo de codigo afectado

                                                #define KNOT_FACTOR_H 2626000L
                                                #define KNOT_FACTOR_L 164125L
                                                #define KNOT_LOWER_THRESHOLD 300L //below 3 knots
                                                #define KNOT_UPPER_THRESHOLD 500L //over 5 knots

                                                void pwm_set(long OCRValue)
                                                {
                                                OCR1A = OCRValue; // set the counter
                                                }

                                                void pwm_start(int high_low)
                                                {
                                                if(high_low)
                                                TCCR1B = _BV(WGM12)|_BV(CS11)|_BV(CS10); // // CTC mode - 64 prescale
                                                else
                                                TCCR1B = _BV(WGM12)|_BV(CS12)|_BV(CS10); // // CTC mode - 256 prescale
                                                TCCR1A = _BV(COM1A0); // // Toggle mode 0C1A
                                                pwm_high=high_low;
                                                }

                                                Comentario


                                                • Re: Simulador de corredera usando 1 GPS

                                                  Ya he conseguido compilar el codigo con AVR Studio. En cuanto pueda lo pruebo en el barco y confirmo que funciona bien por debajo de 3 nudos.

                                                  Comentario


                                                  • Re: Simulador de corredera usando 1 GPS

                                                    Buenas

                                                    La verdad nomeacuerdo, pero hice como 20 y nadie se quejó.

                                                    Los AVR están bastante obsoletos, losúltimos que he hechgo he usado 1 ESP32, si hay interes pongo el código

                                                    Comentario

                                                    ¿Quién está?

                                                    Colapsar

                                                    Actualmente hay 1 usuario en línea. 0 miembros y 1 invitados.

                                                    La mayor cantidad histórica de usuarios es de 37.627, 06/09/2026 en 10:52:48.

                                                    Trabajando...
                                                    X