Autor Tema: Dht11 en assembler  (Leído 16620 veces)

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

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re:Dht11 en assembler
« Respuesta #15 en: 12 de Febrero de 2016, 23:50:42 »
jo.an.

estuve leyendo el código que subiste, pero tengo la impresión de que falta algo

Código: [Seleccionar]
ppp             bsf      3,5                  ;banco 1
                  movlw    b'000001'      ;ra0 como entrada
                  movwf    0x05
                  bcf      3,5                  ;banco 0
                  movwf    0x08
                  call     reta
                  goto     ppp

¿dónde están las rutinas en donde se comienzan a leer las transiciones  de los estados logicos de los 40 bits que le envia el sensor al pic?

recuerda que esos tiempos son variables (con un mínimo establecido por el fabricante), por lo que es conveniente utilizar interrupciones y luego capturar el tiempo de la transición para catalogar el estado lógico y así armar la trama recibida.
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re:Dht11 en assembler
« Respuesta #16 en: 13 de Febrero de 2016, 00:07:51 »
http://www.geekfactory.mx/tutoriales/tutoriales-pic/dht11-con-pic/

en este link explican muy bien la parte teórica concerniente al funcionamiento del sensor DHT11 y como comunicarse a través de un pic.



La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re:Dht11 en assembler
« Respuesta #17 en: 13 de Febrero de 2016, 20:49:52 »
Un saludo:ya visualizo los bit que envia el dht11 en el portd,pero me envia 43 bit y son 40,no se por que.Estoy intentando captar los pulsos de 70us que son los 1 y 26us que son los 0.Alguna idea de por donde empezar?.Gracias

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re:Dht11 en assembler
« Respuesta #18 en: 13 de Febrero de 2016, 23:59:10 »
no sé qué técnica estés utilizando para leer los bits

pero la forma que yo he visto en diferentes ejemplos, es midiendo el tiempo en el que cada nivel lógico se encuentra en uno o en cero y luego comparar ese tiempo con los rangos establecidos por el fabricante para asignarle el estado lógico correspondiente.

si te envía 43 bits, es porque estás leyendo demás, incluso para el dht11 no hace falta leer los 40 bits, puesto que este sensor no trabaja con valores fraccionarios, es decir, envía solo valores enteros.
« Última modificación: 14 de Febrero de 2016, 00:02:23 por PalitroqueZ »
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Dht11 en assembler
« Respuesta #19 en: 14 de Febrero de 2016, 02:37:40 »
Yo ya no puedo ayudarte mas, de hacerlo deberia darte el codigo.

Tenes MUCHOS problemas. Y espero que no te lo tomes a mal lo que te voy a decir

El software:
- Tu codigo lo unico que posee son demoras.
- Te dije que no tenias que poner a 1 la salida, lo haces.
- Te dije que debias esperar 1 segundo desde el comienzo del micro a tomar medidas y no lo haces.
- Usas 0x05 para cambiar el TRISA que es un error de concepto ( a pesar que funcione y creas que usar ese compilador viejo es mejor).
- No usas un BSF para cambiar un bit y usas todo un MOVLW MOVWF.
- Tenes que agradecer a una deidad que esta por default en radix hex, sino tu codigo seria aun peor.

Vos como persona:
- No estas buscando una solucion logica, estas tirando cualquier cosa encima. No estas leyendo/viendo los diagramas de tiempo de como son las señales, asi de esa forma tratar de pensar linea a linea como hacerlo. Simplemente estas leyendo el puerto por leerlo. No por que el 1 dure 70us tenes que crear una demora de 70us !. No tiene ni sentido.
Aca nadie te va a dar un codigo 100% funcional, a no ser que realmente estes cerca de hacerlo por vos mismo.

Como estoy de buen humor te voy a dar una pista:
El codigo del dht es tan simple como esperar un 0 y luego cuando se detecta un 1 ir a una demora de 40us y leer, si es un 0, entonces es un 0, si es un 1 es un 1. Repetir 40 veces. ( 12 instrucciones tal ves , sin contar la demora ) Terminada la libreria. Esto es para leer los bits, obviamente tenes que esperar por el pulso de entrada.. que seran... 4 instrucciones mas.. Y enviar el primer pulso que seran otras 4 instrucciones.
Y si te preguntas el por que esa demora de 40us, es por que 40us es suficiente como para que el pulso alto de un 0 pase, y menor que el pulso alto de un 1. Asi que lo que leas luego de esos 40us es tu valor.

Finalmente lo que es por mi:
Cualquier pregunta/problema que tengas con gusto te ayudaria, siempre y cuando uses un compilador como la gente, y no intentes tirar codigos por tirar y pensar realmente lo que estas haciendo con el codigo.
« Última modificación: 14 de Febrero de 2016, 02:43:39 por KILLERJC »

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re:Dht11 en assembler
« Respuesta #20 en: 14 de Febrero de 2016, 18:00:01 »
Pues mira por donde me lo tome a mal:No hago las cosas por hacer como tu crees,quizas no sepa  interpretar las secuencias.No quiero que nadie me haga mi trabajo,solo que me oriente.Respecto al ensamblador dime cual usar para ser gente o cuales son para los que no somos gente.Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Dht11 en assembler
« Respuesta #21 en: 14 de Febrero de 2016, 18:58:52 »
Me equivoque al decir "como la gente" por que veo que lo tomaste como personal , es una expresion Argentina para diferenciar entre algo bueno o no. Y me referia al compilador y no vos como persona.
Si tu compilador lo unico que hace es complicarte la vida, por que eso es realmente escribir 0x05 (es decir recordar al leer el codigo cual era el hexadecimal de cada registro ) y no PORTA, por no poder incluir un .inc quieras admitirlo o no es algo que afecta al entendimiento facil del codigo, tanto para vos como para las demas personas que lo leen.

El unico compilador que existe para ASM es el MPASM que viene ya de por si con el IDE de MPLAB X, incluso si no te gusta ese IDE (algunos dicen que es pesado) podes ir por el MPLAB v8.xx que aun asi no deberias hacerlo, Y si no queres IDE ( en el cual podes simular paso a paso ) podes usar el compilador/linker por linea de comandos pero no lo recomendaria. Esta es la herramienta que provee el fabricante.

Citar
No hago las cosas por hacer como tu crees,quizas no sepa  interpretar las secuencias

El tema es que no estas mostrando ningun progreso, ni tomando la ayuda prestada y presentando codigos que hacen lo opuesto o poco, yo no se el nivel de conocimiento que tengas pero me baso en lo que intentas hacer, es decir una persona que recien inicia en el mundo de la programacion, no se va a ir a meter en un proyecto que requiere tal ves demasiado conocimiento, se va a ir incorporando poco a poco. Haciendo de cosas simples a mas complejas
Y te explico el por que pense que estabas tirando codigos por tirar:

En tu primer codigo simplmente no sabias que hacen las instrucciones, Como por ejemplo imagine que solo poniendo BTFSS PORTA,0 ibas a tener todo guardado en W. Y ni siquiera tiene relacion una cosa u otra.
Tambien denota que no sabes que lo unico que podes leer de una entrada digital es un 1 o 0 en ese momento. Lo cual un ejemplo de una llave (pulsador ) + un led te hubiera dado el indicio de que podes hacer y que no.
Y me arriesgo a creer que pensabas que el microcontrolador iba a esperar que llegara un valor, pero el microcontrolador sigue su camino y no para por nadie en sus instrucciones.
No se como es que sabias que llegaron 43 bits con el codigo que pasaste, por que jamas de los jamas para, y no se como es que estarias viendo todo el valor del PORTD cada 20us o algo asi.

Observo eso y veo que simplemente le estas errando en eso que es basico. Perfecto, nadie nacio sabiendo y lo entiendo, aca se ayuda a todas las personas, pero como todos dicen, antes de aprender a correr hay que aprender a caminar.

Luego se te dio 1 codigo el cual imagino que leiste, pero que dijiste: "Lo compile y ni pio". Pero ni siquiera sabes que es lo que fallaba ahi. Es como si lo hubieras hecho un copy/paste y probado. O al menos es lo que parecio leyendolo. Y mas al decir que ibas a seguir en "tu busqueda" lo cual imagine que es de una libreria de ponerla y que funcione. Esto en ASM lo mas seguro es que no ocurra, por que cada micro es distinto, tiene distintos registros, etc. Distinto puede ser en un lenguaje como C ( y es por eso que esta lleno de liberias en C )

Entonces se intento hacer otro acercamiento, y esta ves se dio los links al datasheet del modulo, el cual explica como va la señal por el cable, como es que el micro debe iniciar la secuencia,  el por que debes esperar 1 segundo antes de leer por primera ves. Los tiempo que estan en 0 y en 1 las señales que vos tenes que capturar.
PalitroqueZ te dio un link en español ( por si no te gusta el ingles ) que tambien explica como es esa señal.
Y a pesar que te dije sobre la espera me encuentro con que tu programa no lo tiene. Pense: "bueno lo pondra despues", pero luego veo lo que te dije antes sobre NO poner a 1 el bit de salida (por que podes cortocircuitar el pin). Y es lo primero que veo en tu segundo codigo. Tal ves por que no sabia que hacian las instrucciones ?, no se por que estaba asi.

Volviendo al tema de capturar uno o cero.

Vos capturas un 1 o 0 nomas en el instante que se lee el pin (que se ejecuta la instruccion), asi que tenes que saber cuando paso de 0 a 1 o de 1 a 0, y esto lo haces leyendo la entrada esperando que cambie de nivel. No hay ninguna otra explicacion de como podes hacer lo mas que:

Código: ASM
  1. BTFSS xxx,0  ;  Estaba en 0, espero que se ponga en 1.
  2. GOTO  $-1    ; el $-1 hace que vaya a la direccion del BTFSS es para ahorrarse una etiqueta.

Ahora como decia, esos bits viene "codificados", entonces tenes que descubrir como hacer para diferenciar entre uno y otro, lo unico que queda es medir el tiempo del estado en alto. Que es lo unico que difiere entre uno u otro.. Si es lo unico que difiere uno de otro, ¿en que hay que enforcarse? Y si.. el pulso en alto. Cuando comienza? cuando pasa de 0 a 1. Cuando termina? Cuando pasa de 1 a 0.

Se me ocurren varias formas, midiendo el tiempo o usar un delay como te dije... Lo mas rapido que le debe venir a una persona que no conoce mucho de PIC que sabe que puede leer solo 0 o 1 es medir el tiempo de alguna forma e ir pensando como va llegando la señal esa al pin del PIC. las cosas que se me ocurren son timers lo mas complejo, o ir sumando algun registro. O un delay si te das cuenta que el 0 o el 1 no tardan lo mismo ( que seria para mi lo ideal )

Suponiendo que tenes un PIC que trabaja a 4Mhz, cada instruccion tarda 1us. Entonces incluso en el peor de los casos si incremento una variable tendria 70 guardado en esa variable suficiente como para 8 bits, que indicaria el 1, si es un 0 tendria menos de 30, nuevamente trazamos 40 el limite. Como el codigo que te paso aca (solo de referencia) toma 5 ciclos para preguntar de nuevo por la entrada ( es decir pregunto cada 5 us ), entonces si es mayor a 6 significa ( conte 7, a 5us cada uno son 35us + 2 cuando detecto el paso de 0 a 1, es 37us proximo a los 40) que es un 1. Y esto repetido 40 veces.

Código: ASM
  1. CLRF    Contador
  2.         BTFSC   xxx,0  ; Espero el 1, la entrada esta en 0
  3.         GOTO    $-1
  4.  
  5. PreguntoDeNuevo
  6.  
  7.         BTFSS   xxx,0  ; Si llego aca es por que la entrada llego a 1, asi que espero ahora el 0
  8.         GOTO    LLegoelcero
  9.         INCF    Contador, F
  10.         GOTO    PreguntoDeNuevo
  11.  
  12. LLegoelcero
  13.         MOVLW   0x7             ; Si llego aca es por que
  14.         SUBWF   Contador, W
  15.         BTFSx   STATUS, C
  16.         GOTO    Fue un cero
  17.         GOTO    Fue un uno
  18.         ; Guardo dato tambien

Si me hubieras presentado un codigo asi, en el que tal ves no sabias lo que tarda una instruccion y tenias problemas con los tiempos, yo hubiera entendido que punto de conocimiento tenes y proceder a arreglar la funcion. Y la otra con demora:

Código: ASM
  1. BTFSC   xxx,0  ; Espero el 0
  2.         GOTO    $-1
  3.         BTFSS   xxx,0  ; Espero el 1
  4.         GOTO    $-1
  5.         CALL    delay_40ms
  6.         BTFSS   xxx,0
  7.         GOTO    Guardar_0
  8. Guardar_1
  9.         ; Aca guardo el 1, no superar 20/30 instrucciones
  10.  
  11.  
  12. Guardar_0
  13.         ; Aca guardo el 0, no superar 20/30 instrucciones

Estos codigos no toman el pulso del entrada en cuenta. Y se debe repetir.


PD: Yo no tengo nada en contra de nadie (enojado o lo que quieras llamarle) aunque lo pueda parecer, si queres seguir con el programa yo te voy a seguir ayudando y vos sos libre de preguntar todo lo que desees, de lo mas basico que se te pueda ocurrir que te voy a seguir respondiendo e intentar explicar. Pero espero compromiso tambien de la otra parte, de nada sirve ayudar si vos no tomas la ayuda en cuenta.
« Última modificación: 14 de Febrero de 2016, 19:25:32 por KILLERJC »

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re:Dht11 en assembler
« Respuesta #22 en: 14 de Febrero de 2016, 22:43:02 »
No es justificacion a mi actitud pero ya estoy viejo, me desespero y se me dispara el mal genio con facilidad,disculpa.Como te comente llevo 17 años con los pic pequeños medianos y grandes,como comprenderas he hecho bastantes cosillas con ellos.Se que las cosas no son faciles unos progamas salen rapido pero otros hay que dedicarles mas tiempo,el fin lo justifica.Tenia montado lo de control de humedad y temperatura con lm35 y el hs11 pero la humedad se me desfasa mucho,por eso estoy intentando con el dht11.Voy a cacharrear con el codigo que mandaste y te comento.Un saludo

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re:Dht11 en assembler
« Respuesta #23 en: 16 de Febrero de 2016, 16:38:48 »
Un saludo:Ya consegui leer los 40 bit que envia el dht.Ahora estoy el la parte de contar los 8 primeros bit que envia creo que humedad,pero no puedo leerla en rd ,con un poco mas de humedad o temperatura se me altera mucho imposible  de ver grados o % de humedad.Supongo que sumarlos y comparar con el cheksum.Como podria hacer esto?.Perdona que insista se me volvio reto.Gracias

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Dht11 en assembler
« Respuesta #24 en: 16 de Febrero de 2016, 17:29:06 »
Hay varias cosas bien encaminadas y otras no tanto. Hay tambien unos cuantos errores y cosas que se pueden mejorar.

Código: ASM
  1. btfss    PORTA, 0      
  2.                   goto     $-1         
  3.                   btfsc    PORTA, 0    
  4.                   goto     $-1

Esta al revés, Primero esperas que este en 0 y cuando estes en 0 esperas el 1, por lo cual el primero deberia ser un BTFSC y el segundo un BTFSS.

Código: ASM
  1. movf     reg2 , W      
  2.                   movwf    reg2        
  3.                   xorlw    .8          
  4.                   btfsc    STATUS, Z

Hay una instruccion que esta demas ahi, el MOVWF reg2 esta por demas. Incluso lo podrias haber realizado tambien asi:

Código: [Seleccionar]
MOVLW .8
XORWF  reg2, W

Lo demas estuvo correcto o casi correcto..

Código: ASM
  1. incf     reg2, W      
  2.                   movwf    reg2        
  3.                   incf     reg1, W      ;incrementa en el contador
  4.                   movwf    reg1        
  5.                   rlf      reg1, F      ;rota un bit a la izquierda osea un uno
  6.                   goto     as
  7.  
  8. suma1             incf     reg2, W      ;suma 1
  9.                   movwf    reg2
  10.                   rlf      reg1,1      ;rota un bit a la izquierda esta vez un 0
  11.                   goto     as

Voy a hacer notar un uso sin sentido de una instruccion, como por ejempo para incrementar un registro hiciste, INCF reg2, W y luego lo guardaste con el MOVWF, cuando simplemente necesitabas 1 sola instruccion:

Código: [Seleccionar]
INCF reg2, F
Y ahora el error.

Cuando rotas el valor del carry se introduce en el bit0, esto no es problema si el bit del carry es 0, pero si es 1 cambia TODO. especialmente si estas "sumando" 1. Observemos 2 ejemplos:

Código: [Seleccionar]
                  incf     reg1, F      ;incrementa en el contador
                  rlf      reg1, F      ;rota un bit a la izquierda osea un uno

reg1 = 0x00  y carry en 0
A la salida de ese codigo tendrias 0x01 lo cual es correcto, ahora supongamos que el carry estaba en 1. Y a la salida tendrias 0x03, que si pasa otra ves por ese codigo teminaria con el valor 0x09 pero aun.
Este problema es para ambos, cuando es 1 o es 0.
Otro problema, estarias rotando una ves mas, cuando no deberias, es decir para el ultimo bit.

Tambien otra cosa es que estas pensando en 8 bits a la vez, intenta pensar en 40 bits a llenar y no solo 8.

Estas sacando tus datos en unos milisegundos al PORTD, asi que no se como es que estas viendo que llegan tus 40 bits

---------------------------

Una mas que es "molesto" para los demas, en realidad no molesto sino que cuesta entenderle rapidamente.
Intenta escribir los nombres de los registros con nombres que tienen significado, al igual que las etiquetas, sino se pone dificil leerlo por las demas personas. Los comentarios ayudan, pero es mas facil de esta forma, para vos y para todos. Acostumbrate asi y te va a ser mas facil.

---------------------------

Te dejo un codigo para que lo leas por 2 cosas
- Para que veas como lo haria yo
- Como es mas facil leer y entenderle al programa teniendo nombres que realmente significan algo, etiquetas que tambien, incluso los nombres de los bits, PORTx.

Una cosa mas, el dato que llega esta formado por 4 bytes + 1 checksum, de esos 4 , 2 son para la temperatura y 2 para la humedad. y Cada uno de esos 2, uno es para la parte entera y la otra para la decimal. Supongamos esto:

53.35% de humedad:

Humedad Entero : 53
Humedad Decimal : 35

Los datos empiezan por el bit de mayor valor de Humedad Entero, luego Humedad Decimal, Luego Temperatura Entero, Temperatura Decimal y finalmente Checksum.

Código: ASM
  1. Leer_DHT:
  2.  
  3.         CLRF    TempEntero
  4.         CLRF    TempDecimal
  5.         CLRF    HumEntero
  6.         CLRF    HumDecimal
  7.         CLRF    Checksum
  8.  
  9.         MOVLW   .40
  10.         MOVWF   CantidadBits
  11.  
  12.  
  13.         ; Aca enviar pulso inicial ( poner como salida, y luego a 0 por un tiempo, luego pasarlo a entrada )
  14.  
  15.  
  16.         ; Agregar aca la espera del primer pulso de respuesta que no forma parte de los bits.
  17.  
  18.  
  19.         ; Ahora bit a bit
  20. Loop:
  21.         BTFSC   PORTA, 0        ; Espero que llegue el 0
  22.         GOTO    $-1
  23.         BTFSS   PORTA, 0        ; Estoy en 0, Espero que se ponga en 1
  24.         GOTO    $-1
  25.         CALL    Delay40us       ; Luego del delay pasan como maximo 17 ciclos hasta que vuelve a preguntar de nuevo, lo cual estaria dentro del rango de las 20 instrucciones para 4Mhz
  26.         BTFSS   PORTA, 0
  27.         GOTO    Es_cero
  28. Es_uno:
  29.         ; Si llego aca es 1
  30.         BSF     Checksum, 0     ; Observa que no uso INCF, sino que directamente pongo a 1 o 0 el bit
  31.         GOTO    Rotar
  32. Es_cero:
  33.         ; Si llego aca es 0
  34.         BCF     Checksum, 0
  35. Rotar:
  36.         DECF    CantidadBits, F ; Decremento la cantidad de bits restantes, cuando llega a 0 salgo, sino roto el valor, al rotar lo trato como un numero completo de 40 bits
  37.         BTFSC   STATUS,Z
  38.         RETURN
  39.         RLF     Checksum, F     ; Cuando roto por primera vez (en Checksum) el carry puede tener cualquier valor
  40.         RLF     TempDecimal,; pero no importa por que en la proxima pasada sobreescribo ese bit con BSF y BCF, los demas carrys son necesarios
  41.         RLF     TempEntero, F
  42.         RLF     HumDecimal, F
  43.         RLF     HumEntero, F
  44.         GOTO    Loop
  45.  
  46.  
  47. ; Si W = 0 indica que esta todo bien, sino borra todo por que el dato es malo.
  48. ; Esto es para comprobar con el que llama
  49.  
  50.  
  51. Checkear_datos:
  52.         MOVF    HumEntero, W
  53.         ADDWF   HumDecimal, W
  54.         ADDWF   TempEntero, W
  55.         ADDWF   TempDecimal, W
  56.         XORWF   Checksum, W
  57.         BTFSC   STATUS, Z
  58.         RETURN                  ;W = 0
  59. Mal_Checksum:
  60.         CLRF    TempEntero
  61.         CLRF    TempDecimal
  62.         CLRF    HumEntero
  63.         CLRF    HumDecimal
  64.         CLRF    Checksum
  65.         RETURN                  ;W =/= 0

Esto funcionaria bastante sencillo. simplmente es:

Código: [Seleccionar]
CALL Leer_DHT
CALL Checkear_datos
ANDLW 0xFF
BTFSS STATUS, Z
; Aca llego mal asi que leo de vuelta o hago lo que sea
; Aca llego bien

Los datos estan en los registros que se llenaron obviamente.
« Última modificación: 16 de Febrero de 2016, 17:41:23 por KILLERJC »

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re:Dht11 en assembler
« Respuesta #25 en: 16 de Febrero de 2016, 20:46:58 »
Tienes razon:Si no lo envio completo esta dificil que alguien ayude.Tambien tienes razon,si tengo un 1 y el siguiente es otro 1 y lo roto a la izquierda pues serian 3 y si envia otro 1 y tambien lo roto  a la izquierda serian 7.Ya capto.Gracias

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re:Dht11 en assembler
« Respuesta #26 en: 16 de Febrero de 2016, 21:05:10 »
Saludos:Asi leo los 40 bit

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Dht11 en assembler
« Respuesta #27 en: 16 de Febrero de 2016, 23:27:08 »
Asi es imposible que leas los 40 bits... es mas le falta casi todo lo que me pasaste antes.

Encima tenes muchos errores..

Te dije que no debes poner el pin en alto

Código: [Seleccionar]
                  bsf      PORTA,0 ; Mal
Tambien tenes esto:

Código: [Seleccionar]
                  bcf      STATUS,RP0   ;banco 1 , error mal
                  movlw    b'000001'  ;
                  movwf    TRISA
                  bcf      STATUS,RP0   ;banco 0

Si observas los 2 son BCF, por lo cual jamas vas a pasar al banco 1.

Código: [Seleccionar]
                  incf     reg1,0
                  movwf    reg1
                  movwf    PORTD      ;lo visualizo en rd

Asi podes detectar que llegaron 40 bits, pero no determinar cuales. Con eso el resultado en el PORTD deberia ser 0x28.

Te pido nuevamente que estudies el codigo que te pase.

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re:Dht11 en assembler
« Respuesta #28 en: 17 de Febrero de 2016, 19:32:46 »
tienes razon no paso al banco 1 y si te digo que  en el protoboar me marca 00101000 cambie o no cambie al banco,me dirias que imposible,para mi tambien es imposible pero mis ojos lo estan viendo.Vuelvo a enviar el codigo,si no pongo bsf     oxo5,0  en la linea 50 no leo nada en el puerto d.Creo que estamos liados con el tris nunca lo utilizo, hago esto movlw b'000001' movwf 0x05 y pongo ra0 como entrada,movlw b'000000' movwf  0x05 y pongo ra0 como salida.Esto es solo para contar los 40 bit que envia el dht.Cuando a terminado de contar los 40 bit se queda en la linea 63 ya que se queda alta la entrada ra0.Estoy probando con 2 pic no creo que esten dañados los 2 pero me hacen cosas que a ti no te hacen.

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re:Dht11 en assembler
« Respuesta #29 en: 17 de Febrero de 2016, 19:45:04 »
casi se me olvida