Autor Tema: Modo Sleep y la transmisión EUSART  (Leído 2356 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Modo Sleep y la transmisión EUSART
« en: 19 de Agosto de 2008, 12:34:21 »
Hola a todos, tengo una preguntica... El modo sleep afecta de alguna manera la TRasmisión EUSART??... Lo pregunto porque, tengo al 4550 trabajandolo en modo Sleep con un conversor analogico digital... Basicamente lo que hace el programa es toma el dato del canal del conversor, lo muestra en el hyperterminal y se duerme... y así ando el programa... Pero la cuestión está en que cuando a mostrar en la pc, pues se ven las letras que mando a mostrar pero la cifrá que está viendo el conversor pues se ven como caracteres grises en la pantalla del hyperterminal... Ahora cuando le quito el modo sleep me doy cuenta de que en el hyperterminal si se denota la cantidad que está midiendo el conversor....

Alguién me poría decir que estará pasando?? No se será por la tasa de transferencia? o por que el pic se está durmiendo antes de enviar el dato al hyperterminal... Esto no creo que sea, puesto que lo mando a la LCD y si se muestra bien... No se pienso que es con el bus rs232 que es muy lento y se solapna los valores, o no se!!! :?

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Modo Sleep y la transmisión EUSART
« Respuesta #1 en: 19 de Agosto de 2008, 12:41:46 »
Yo creo que no deberías enviar al micro a la cama hasta que termine la transmisión USART. Hay un bit que te indica que la comunicación ha terminado; quizás puedas hacer un bucle hasta que el bit cambie de signo antes de meter SLEEP.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Modo Sleep y la transmisión EUSART
« Respuesta #2 en: 19 de Agosto de 2008, 16:57:40 »
Por otros motivos pero aquí termino hablando del SLEEP y de la USART. Y la razón es exactamente la que tú apuntas en tu última frase, la USART es muy, muy, muy lenta y el SLEEP la alcanza antes de terminar de transmitir.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Modo Sleep y la transmisión EUSART
« Respuesta #3 en: 19 de Agosto de 2008, 17:50:11 »
Umm... Entiendo... Entonces una solución razonable seria colocar el bus a mayor velocidad?? o se me ocurre colocar un delay antes de que entre a dormir...???  :?

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Modo Sleep y la transmisión EUSART
« Respuesta #4 en: 19 de Agosto de 2008, 17:51:47 »
Mejor explora el bit que te digo en un bucle hasta que cambie de estado.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Modo Sleep y la transmisión EUSART
« Respuesta #5 en: 19 de Agosto de 2008, 17:54:04 »
O.k... Voy a probar tu sugerencia nocturno!!! Gracias... Luego publico como me fue!! :mrgreen:

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Modo Sleep y la transmisión EUSART
« Respuesta #6 en: 20 de Agosto de 2008, 13:19:05 »
Hola que tal... He aquí mis respuestas con el experimiento!!! He tratado de transmitir y pues nada... Como el modula USART es muy lento, pues probe con la sugerencia de Nocturno, chequee el bit que me indica si el buffer está vacio o no... y pues nada, no envia naita de nada... Ni siquiera letras... Nada! probe on un retardito y tampoco... la puse en Autowakeup, y pues ni siquiera transmite un mal caracter, puse en micro en modo IDLE y tampoco!! ya ando loca, no encuntro más nada que hacer... Si alguien pudiera echarme una mano pos le agradeceria...

Aquí dejo el código...

#include <18f4550.h>
#DEVICE ADC=8
#fuses NOPROTECT,NOCPD,NOLVP,WDT64,XT,NOMCLR
#use fast_io (A)
#use fast_io (B)
#use fast_io (D)
#use delay(clock=4000000)
#include "lcd.c"                              // Libreria de la LCD por el purto B
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)          // Habilita las funciones RS232, velocidad a 9600 baudios
#byte portd= 0xF83
#byte PIR1=0xF9E
#bit TXIF=PIR1.4
#byte BAUDCON=0xFB8
#bit WUE=BAUDCON.1
#byte OSCCON = 0xFD3
#bit IDLEN=OSCCON.7
#bit SCS0=OSCCON.0
#bit SCS1=OSCCON.1

//::::::::::::::::::::::::::Declaración de variables:::::::::::::::::::::::::::::::::::::
float dato,value,valord,value1,valord1,dato1;
int x=0;
//:::::::::::::::::::::::::::Programa Principal:::::::::::::::::::::::::::::::::::::::::::
void main(void)
{
         set_tris_a(0xe7);                                // Puerto A, como b'11100111
         set_tris_b(0x00);                                // Puerto B, como b'00000000 (salida)
         set_tris_d(0x00);                                // Puerto D, como b'11111111 (salida)
         output_a(0);                                     // Limpio el puerto A
         output_c(0);                                     // Limpio el puerto C
         output_b(0);                                     // Limpio el puerto B
         setup_wdt(WDT_ON);                               // Watchdog Encedido
         setup_port_a(AN0_ANALOG );                       // RA0 son analógicos y los demás son digitales
         //WUE=1;


lcd_init();                                               // para inicializar el LCD
restart_wdt();                                            // Inicio el perro Guardian

         while(true)
         {
            restart_wdt();                                 // Inicio el perro Guardian
            IDLEN=1;
            SCS1=0;
            SCS0=0;
            SLEEP();                                       // Modo sleep
                                                           // Se desborda Watchdog y sale del modo Sleep
            if (restart_cause()==WDT_FROM_SLEEP)           // Si el pic despierta por watchdog, entonces...
                {
                   if(x==0)                                 // Pregunto por bandera
                      {
                         setup_adc(ADC_CLOCK_INTERNAL );    // Tomará el dato contando el tiempo con el reloj interno
                         set_adc_channel(0);                // El canal de adquisición del dato es el RA0
                         delay_ms(10);                      // Un retardo para capturar bien el dato
                         value=read_adc();                  // Leo el dato
                         valord=(value*0.4);                // Multiplico el valor por 0.4 para hacer la equivalencia a 2V
                         portd=valord;                      // Lo mando al puerto D
                         dato=(valord*5)/255;               // Convierto el valor a decimal y lo guardo
                         set_adc_channel(1);                // El canal de adquisición del dato es el RA0
                         delay_us(10);                      // Un retardo para capturar bien el dato
                         value1=read_adc();                 // Leo el dato del An1 (Realimentación)
                         valord1=(value1*0.4);              // Multiplico el valor por 0.4 para hacer la equivalencia a 2V
                         dato1=(valord1*5)/255;             // Convierto el valor a decimal y lo guardo
                         setup_adc (ADC_OFF);               // Apago el conversor A/D
                         x=1;                               // Seteo la bandera
                      }
             else if (x==1)                                 // Si x es igual a 1
                {
                  printf(lcd_putc,"\f");                    // Borro la pantalla LCD
                  dato=(value*5)/255;                       // Convierto el valor a decimal y lo guardo
                  printf(lcd_putc,"Voltaje= %2.2g",dato);   // Mando a mostrar el valor del conversor en la LCD
                  printf("\f");                             // Limpio pantalla del hyperterminal
                  printf(" Voltaje= %2.2g V",dato);         // Mando a mostrar el valor del conversor
                  delay_ms(500);

band:               if(txif==0)
                        { goto band;
                       }
                  x=0;                                      // Reseteo la bandera
                }
                }
         }
}

Atte Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Modo Sleep y la transmisión EUSART
« Respuesta #7 en: 20 de Agosto de 2008, 16:56:53 »
Una preguntica... La trasmisión a través del modulo EUSART, aumenta coniderablemente el consumo de corriente del microcontrolador cierto???, Así el pic este en modo Sleep o IDLE????


Atte: Enigma... LA llanerita de Guayana  :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Modo Sleep y la transmisión EUSART
« Respuesta #8 en: 20 de Agosto de 2008, 18:45:39 »
Hola... Bueno hasta que al fin logre transmitir vía USART con el Sleep puesto!!!  :D despues de mover, aquí, mover allá!!! Lo único malo es que el consumo total de circuito, es decir, el pic + el MAX232 + 2 MAX485 (ADM485AN) + las resistencias + condensadores + potenciometros me dan mucho consumo de corriente!! 26 mA :shock: Berro ya he hecho de todo para bajarle ese consumo... Tengo a los pobres integrados pariendo, alimentandolos con 3,7V... Al pobre MAX232 lo estoy alimentando con menos de 1mA...

Pero el que me está echano la partida para atrás es el max485 que va pegado al max2332, que me está consumiendo 22mA, mientras que el otro está consumiendo 0.6mA... :8} ...

Alguna idea de como bajar estos consumos de corriente?? :z)

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!