Autor Tema: HSERIN & HSEROUT - Todo un dilema...  (Leído 25311 veces)

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

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #15 en: 26 de Marzo de 2004, 07:03:00 »
Debes tener un problema con los formatos, el string guarda seguramente los bytes como caracteres ASCII, mientras el otro dato seguramente esta en decimal, prueba hacer un cambio de formato antes de comparar...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #16 en: 26 de Marzo de 2004, 15:06:00 »
Hay está la pregunta....!!!
¿¿¿¿
Como se cambia el formato de datos???

la función hserin, guarda los datos como ascii
y la función read, los guarda como decimal o hexadecimal....
como hago la transformacion???

Eso es lo primero que me vino a la cabeza....
Es un error muy tipico en programación....
En lenguajes como visual basic, php, c, si que lo conozco, pero en PBP, no conozco la función o procedimiento de conversión de datos...

TNKS

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #17 en: 27 de Marzo de 2004, 05:19:00 »
No puedes formatear el dato de EEPROM , pero si puedes hacerlo dentro del Serin, utilizando el modificador DEC y el HEX, lee un poco acerca de Serin, Serin2, Serout y Serout2, para saber como utilizarlos.

Si la montaña no viene a mi...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #18 en: 27 de Marzo de 2004, 15:11:00 »
Actualmente estoy utilizando hserin, y ya intenté formatear los datos como tu bien dices con dec/hex, pero los resultados no fueron buenos....
pero creo recordar, que la comparación, la hice contra los datos directamente leidos a variable, por lo que deduzco que intenté comparar contra ascii...
En que formato leemos los datos de la eprom con read??? en decimal o hexadecimal???
dependiendo de esto, creo que no debe ser demasiado dificil encontrar el fallo...

mread var byte
sread var byte

.
.
.
read 0, mread
hserin [hex sread]
if mread = sread then high portb.7
.
.
.



Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #19 en: 29 de Marzo de 2004, 18:24:00 »
Unas cosas se arreglan, y otras empiezan a fallar....
Ahora, que la comunicación serie, empieza a funcionar,
le adjunto al código, la rutina de gestión de interrupciones que tenia creada, y se acelera el proceso de tal modo, que no funciona...

El problema está en que la rutina, está preparada para gestionar las interrupciones con un cristal de 4Mhz

Y ahora uso uno de 20Mhz....

El preescaler a 32...


El programa va a tal velocidad, que no soy capaz de detectar en que parte del código está el problema,por medio de los leds que uso para control.

Si le quito la configuración del preescaler, parace que funciona mejor... Pero me he perdido...

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #20 en: 30 de Marzo de 2004, 13:46:00 »
Parece que no es el peescaler...
el problema lo tengo al habilitar la interupción por timer0

si pongo el timer, el programa, funciona, pero me tira los datos que le vienen en gana por el serial...

os dejo un example... a ver si encontrais algo raro... porque ya empiezo a desesperar...


OPTION_REG=%00000100   " prescaler 1:32
INTCON = %11010000    " Enable interrupt on general,PORTB.0, timer0


si pongo intcon = 11110000, funciona, pero hace lo que le viene en gana
si lo pongo = 11010000, todo funciona bien...

aqui la parte de código que maneja las interrupciones...
la he cortado, porque sino, ocupa mucho...

la interrupción de la uart, tampoco funciona...

Perdonar si son demasiadas preguntas, pero es que esta vez, parece que no quiere funcionar nada...

-----------------------------------------
asm
intt
      bcf     INTCON,GIE
;
GuardarRegistros
      movwf   wsave                ;Salva W
      swapf   STATUS,W             ;Invierte STATUS --> W
      CLRF     STATUS                 ; sets to BANK0
      movwf   ssave                ;Salva STATUS
      MOVF    PCLATH,W
     MOVWF     psave                  ; save pclath
      CLRF     PCLATH
      MOVF     FSR,W
      MOVWF  fsave                  ; save fsr reg

;
      BTFSC    PIR1,RCIF              ;hay enterrupción en la uart???
      goto    rxint                     ;si

      btfsc   INTCON,INTF          ;? Hubo interrupcion en RB0 ?
      goto    In                   ;Si
      btfsc   INTCON,T0IF          ;? Hubo sobrefujo en TMR0 ?
      goto    T0                   ;Si
      btfss   INTCON,RBIF          ;? Hubo algun cambio de RB4-RB7 ?
      goto    RestaurarRegistros   ;No

rb47
.
goto    RestaurarRegistros
.
.
.
.
T0    bcf     INTCON,T0IF          ;Pone a cero para poder salir de la ISR
      decfsz  ticks,f
      goto RestaurarRegistros
      movlw 122     ; Paso un segundo - actualiza tiempo
      movwf ticks
      movlw 6
      movwf tmr0
      clrf Convert         ; Convert = 0
      incf   segundos,f
      movf   segundos,w
      sublw 60
      btfss STATUS,Z   ; 60 segundos ?
      goto  RestaurarRegistros   ; no
      clrf   segundos   ; si
      incf  minutos,f
      endasm
         hserout["timer - ", dec(minutos),10,13]
      asm
      goto    RestaurarRegistros
.
in
goto    RestaurarRegistros
.
.
.
.
.
rxint
      endasm
        high portb.4
      asm
      BCF   PIR1,RCIF
;
RestaurarRegistros
      ; Retorna habilitando todas las interrupciones
      ; Restore PCLATH, STATUS and W registers
    MOVF   fsave,W   ; get saved fsr reg
   MOVWF   FSR      ; restore   
   MOVF   psave,W   ; get saved pclath
   MOVWF   PCLATH      ; restore
   SWAPF   ssave,W   ; get saved status in w
   MOVWF   STATUS      ; restore status ( and bank )
   SWAPF   Wsave,F   ; reload into self to set status bits
   SWAPF   Wsave,W   ; and restore
    bcf   INTCON , T0IF  ; Resetea bandera de interrupcion por Timer0
    bsf     INTCON , GIE             ; Activa interrupciones generales
   
    retfie
EndAsm

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #21 en: 30 de Marzo de 2004, 17:17:00 »
Creo que el error esta en estas lineas dentro del assembler, no por sintaxis sino por tiempo de ejecucion....




endasm
  hserout["timer - ", dec(minutos),10,13]
asm




Es muy probable que al interrumpir por tanto tiempo como es lo que lleva enviar este mensaje, se solapen las interrupciones y entres en una llamada recursiva al handler de interrupcion, que el PBP no puede resolver...

Prueba de sacarlo fuera de la interrupcion, y ejecutalo segun el estado de una bandera (flag) que te diga DeboTransmitir, por ejemplo.
Afuera el PBP no interrumpira esta transmicion, guardara el estado de la int hasta que pueda hacerlo...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #22 en: 30 de Marzo de 2004, 17:44:00 »
Gracias MGL...
En cuanto llegue a casa, lo miro, porque ahora ando poniendo copitas a mis clientes...

Una cosita....
En la parte del hadler de interrupción, la parte en la que veo si hay interrupción por recepción en la UART, hay algo mal????
No me funciona!!!!

lo que quiero, es leer si llega algo a la uart, y meterlo en un array
para luego interpretarlo....
Ves algo mal???

--  BTFSC PIR1,RCIF --
TNKS

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #23 en: 30 de Marzo de 2004, 22:05:00 »
Acabo de mirarlo...
Si dejo el hserin dentro del handler, lo envia al serial bien...
Pero si lo saco suera, manda lo que le viene en gana...
lo que he hecho, es poner debajo del incremento de minutos,
bsf _TimerMinutos

y en el programa principal

if timerminutos = 1 then
 hserout ["Time - ", minutos,10,13]
 timerminutos = 0
endif

si habilito el intcon = 11010000
la transmisión serie, funciona perfecta, pero si habilito el timer0
intcon=11110000, no funciona... Vamos, mada datos, pero son ilegibles... no los manda en el formato que debería...

hserout ["Hola Mundo",10,13]
saca al hiperterminal
Hmla  loundM
por ejemplo...
alguna idea???
Toy medio loco...
Al final, la gestión de tiempos, la voy a hacer con el pause...

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #24 en: 31 de Marzo de 2004, 07:04:00 »
Que bueno !!
Hiciste tu propio circuito Scrambler !!
Ahora puedes enviar mensajes codificados !!

Je..je..fue una broma.
Revisaste bien si estas seteando las Interrupciones bien ?
Porque en vez de habilitar todo junto no los habilitas por separado, bit a bit de Intcon, asi puedes probar en que condicion anda y en cual no, por ejemplo haciendo que bajo determinada condicion use el Tmr0 y en otras no...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #25 en: 31 de Marzo de 2004, 15:56:00 »
Me he perdido por completo...
Mis conocimientos, son mínimos al lado de los tuyos.
En el código que puse antes para el manejo de interrupciones, es lo poco que se sobre el tema, y lo entiendo por su sencillez, pero
en cuanto intento incrementar el código, vienen los problemas...

Esto es como el que entiende el idioma ingles, pero no sabe hablarlo.

Mi idea, es en un futuro, poder gestionar la interrupción por rb0, rb4-rb7, tmr0, y uart.
con rb0 rb4-7, hago un rastreo de las entradas para hacer algo asi como un automata...
con timer0, gestiono los tiempos de actuación de las salidas.
y con la interrupción de uart, gestiono el llenado de un array, qye luego interpreto en el programa principal.
asi, puedo gestionar las salidas, dependiendo de las entradas,
y tambien por comunicación serie, interpretando una serie de comandos tipo AT.

alguna idea con codigo de ejemplo??
Encuentras algún error en el código que postee antes???

TNKS

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #26 en: 31 de Marzo de 2004, 16:06:00 »
Quiero ayudarte, pero para eso por favor enviame una idea del circuito y el codigo completo, si es posible bien comentado.

En cuanto al PLC, miraste en el foro de proyectos, Hagamos un PLC con Pic!!

Alli esta una buena parte de lo que necesitas, pero en asm...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #27 en: 31 de Marzo de 2004, 21:19:00 »
el circuito...
en principio. esta montado del siguiente modo...
portb como entradas...
y porta como salidas.
El portc. solo lo uso para los datos serie por la uart.
al portc, le he puesto un max232, con salidas RX,TX y masa a un conector db9
al porta, todos los pines conectador a una resistencia de 330 ohmios y diodos led contra masa...
mas adelante, cuando consiga que los led hagan lo que yo quiero, le pondré la parte de potencia con transistores bc547, o similares... pero de momento con comandar los led, estoy contento

las entradas, con pulsadores con entrada a 5v salida con una resistencio de 1k contra masa para leer 1 logico.

el clock, un cristal de 20mhz con dos condensadores como siempre
y la alimentación a su sitio..

hasta ahora este es el circuito

 sobre el tema del código,  dame unas horas, que ahora estoy en mi bar poniendo copitas....
mañana en cuanto me levante de la cama, te lo mando, o si quieres, lo pongo por aqui...
asi, cuando funcione, dejamos que otra gente, no tenga tantos problemas como yo...

tnks
si algún dia vienes a madrid, recuerda, que estás invitado a tomar unas copas en mi bar.

Desconectado manu2097

  • PIC10
  • *
  • Mensajes: 17
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #28 en: 01 de Abril de 2004, 09:57:00 »
erdonad la pregunta, pues no se si tendría que haberla formulado en este hilo.

Resulta que también estoy liado con la usart, y tengo un lío algo serio

Cuando utilizo la instrucción hserin 1000,error,[wait("CMT",wait("+",str ntelef11,wait("F",str mens8] pues funciona bien el pic detecta el mensaje del GSM y tal. Pero cuando lo hago por interrupciones y lo configuro todo, aparentemente el programa va bien hasta que el gsm quiere mandar algo por el serie, salta la interrupción se va a la subrutina y ejecuta la instrucción hserin pero no encuentra CMT así que está 1000ms esperando sin encontrar nada y luego salta a error y sale de la interrupción.
Bueno después de ver ejemplos he llegado a pensar que cuando utilizo interrupciones no puedo utilizar el hserin con wait ni nada adicional solo puedo leer el byte que está en el buffer de la usart y ya está. ¿Este pensamiento es cierto? ¿he de ir byte a byte leyendo el bufer de la usar y almacenarlo en una cadena los caracteres para depuse trabajar y extraer de ella los valores que quiero?

Estoy algo confuso.
Un saludo a todos y gracias de antemano.

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: HSERIN & HSEROUT - Todo un dilema...
« Respuesta #29 en: 01 de Abril de 2004, 15:55:00 »
Manu, desgraciadamente,por lo que he leido por aqui...
es lo que nos va a tocar hacer....


Ahora viene mi pregunta....
te funcionan las interrupciones de la uart???
es posible que me mandes algo de código, con el que contrastar en que me estoy equivocando???
a mi no me funcionan....
Las tratas en ASM o en PBP?¿?

A ver si entre todos, conseguimos hacer que este post, sirva para que la gente aprenda de nuestros errores....

Aunque realmente, aqui, el que mas soluciones da, es MGLSOFT
porque yo lo único que hago es mandar código con errores...
lo vamos depurando, pero va muy lenta la cosa...
en determinados momentos llega a desesperar......
Pero merece la pena pelear, para aprender...

Tnks...


 

anything