Autor Tema: ejemplos 16f628 @ 16F88...  (Leído 5097 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado sonicTH

  • PIC10
  • *
  • Mensajes: 21
ejemplos 16f628 @ 16F88...
« en: 23 de Mayo de 2010, 11:05:21 »

  Hola que tal:

   De nuevo recurro a ustedes para aliviar mi dolor de cabeza :?

     Estoy haciendo los ejemplos del tema 'ejemplos PBP y proteus'... Los estoy calando pero en 16F88 y no jalan para nada  :shock:, los calo en el 16f628 y jala bien (a veces).En fin, la pregunta es porque??? por ejemplo:
Código: [Seleccionar]
Mensaje Privado (Desconectado)


RE: Ejemplos en PBP y PROTEUS
« Respuesta #5 : 29 de Julio de 2005, 07:35:00 »
Responder con cita
5) BOTONES Y LEDS

Este tiene dos botones el uno sirve para subir y el otro para bajar:



i       var byte
cont    var word

cmcon=7

TRISB=0
TRISA=%00000011
cont=1
PORTB=cont
inicio:
        if PORTA.0=0 then
            cont=cont*2
            PORTB=cont
            if cont>=256 then
                cont=1
                PORTB=cont
            endif
            pause 200           
        else
            cont=cont
        endif
        if PORTA.1=0 then
            cont=cont/2
            PORTB=cont
            if cont<=1 then
                cont=256
            endif
            pause 200
        else
            cont=cont
        endif
        goto inicio
end

Ese es un código de "LordLafebre". Y la cuestión y mayor problema que he visto es que no me respeta las entradas en el puerto A, como si no tomara en cuenta el CMCON ni el TRISA. Ya intenté hasta TRISA:0 y TRISA.1 etc pero nada y no sé la vdd porqué :?


Esto surge por la necesidad de utilizar el 16F88 en lugar del picaxe18X q expuse por ahí en un tema acerca del ADCIN.

En fin, espero mas o menos me orienten; yo le seguiré buscando por mi cuenta no crean ke me voy a atener a ustedes :x.... :D :mrgreen: jeje es broma, es que ya he visto que no les gustan  los flojos que quieren todo en la manita y en bandeja de plata  ;-) zax, see ya.

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: ejemplos 16f628 @ 16F88...
« Respuesta #1 en: 23 de Mayo de 2010, 13:23:50 »
 

Citar
Estoy haciendo los ejemplos del tema 'ejemplos PBP y proteus'... Los estoy calando pero en 16F88 y no jalan para nada   , los calo en el 16f628 y jala bien (a veces).En fin, la pregunta es porque???


Creo haberte respondido esto ya en algún hilo  :mrgreen:, pero ahí va de nuevo  cada pic tiene sus diferencias no es lo mismo un 16f84 que un 16f88, entre familias de pics hay diferencias no es lo mismo un 16f877 que un 18fxx, que un programa funcione en un pic especifico no es garantía de que funcione en otro pic por que ¿?? Pues por que la palabra de configuración, los registros tienen sus diferencias y asegunes por eso es que se recomienda  leer la data del pic con el cual se trabaja.
Ahora si como dices no te responde el tris es muy probable que este asociado a ese puerto algún periférico que se tenga que deshabilitar por ejemplo un comparador, convertidor ad etc.


Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: ejemplos 16f628 @ 16F88...
« Respuesta #2 en: 23 de Mayo de 2010, 16:54:57 »
yo le seguiré buscando por mi cuenta no crean ke me voy a atener a ustedes :x.... :D :mrgreen: jeje es broma, es que ya he visto que no les gustan  los flojos que quieren todo en la manita y en bandeja de plata  ;-) zax, see ya.

¡Cuanta razón tienes!... ;-)
La filosofía de este y cualquier otro foro de carácter técnico es “Primero lee y luego pregunta”.
De todas formas te recuerdo que existe un subforo especialmente dedicado a los simuladores.

Código: QBasic/QuickBASIC
  1. '**********
  2. '*PIC16F88*
  3. '**********
  4. '/*Palabra de configuracion "Fuses".
  5. 'Flash Program Memory Code Protection = OFF, CCP1 Multiplex Selection = RB3
  6. 'In-Circuit Degugger = Disabld, Flash Program Memory Write Protection = OFF
  7. 'Data EEPROM Memory Code Protection = OFF, Low Voltage In-Circuit Serial Programming = Disabled
  8. 'Brown-out Reset = Enable, RA5/\MCLR Pin Function Select = Digital input
  9. 'Power-up Timer = Enabled, Watchdog Timer = Disabled, Oscillator Selection = INTOSC
  10. 'Internal/External Switchover Mode = Disabled, Fail-Safe Clock Monitor = Disabled.
  11. Define CONF_WORD = 0x2f50
  12. Define CONF_WORD_2 = 0x3ffc  '*/
  13. Define CLOCK_FREQUENCY = 8  'Trabajaremos a 8Mhz.
  14. 'Declaracion de variables
  15. DIM i AS Byte
  16. DIM cont AS Word
  17. 'Configuracion de registros
  18. ANSEL =  %00000000  '(PortA) 0 = los pin I/O digitales, 1 = analogicos
  19. CMCON = 0x07  'Comparador a off
  20. OSCCON = 0x7e  'Set intrc To 8mhz, se usara reloj interno a 8Mhz
  21. TRISB = 0  '=%00000000, todos los pin del puerto B como salidas
  22. TRISA = %00000011  'RA1 y RA0 como entradas, resto salidas
  23. 'Asignacion de valores
  24. cont = 1
  25. PORTB = cont
  26. 'Rutina principal
  27. main:
  28.         IF PORTA.0 = 0 THEN
  29.                 cont = cont * 2
  30.                 PORTB = cont
  31.                 IF cont >= 256 THEN
  32.                         cont = 1
  33.                         PORTB = cont
  34.                 Endif
  35. 'WaitMs 200 'Las pausas en las simulaciones se suprimen
  36.         ELSE
  37.                 cont = cont
  38.         Endif
  39.  
  40.         IF PORTA.1 = 0 THEN
  41.                 cont = cont / 2
  42.                 PORTB = cont
  43.                 IF cont <= 1 THEN
  44.                         cont = 256
  45.                 Endif
  46. 'WaitMs 200 'Las pausas en las simulaciones se suprimen
  47.         ELSE
  48.                 cont = cont
  49.         Endif
  50. GOTO main
« Última modificación: 23 de Mayo de 2010, 21:03:27 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: ejemplos 16f628 @ 16F88...
« Respuesta #3 en: 23 de Mayo de 2010, 17:06:39 »
Se me olvidaba, el problema principal lo tienes por omitir esta línea que es especial para este tipo de micros:
ANSEL = %00000000  '0 = los pin I/O digitales, 1 = analógicos, se refiere al PortA
Para evitar esto la mayoría de los Basic tienen esta declaración que es equivalente y estándar para todos los micros:
ALL DIGITAL '= %00000000  '0 = los pin I/O digitales (PortA).

Recuerda que el datasheet del micro es muy claro en esto, es responsabilidad del programador especificar como trabajará cada pin del micro.

Otro tema son la configuración de fuses, en los simuladores no suelen ser necesarios, pero es conveniente acostumbrarse a aprender a configurarlos ya que si, que son necesarios en la realidad. Es decir si no se mientan se configuran por defecto, pero pude que no sea la correcta para cada caso y no funcione el Hard.
« Última modificación: 23 de Mayo de 2010, 17:13:15 por dogflu66 »
Saludos desde Granada, España.

Desconectado sonicTH

  • PIC10
  • *
  • Mensajes: 21
Re: ejemplos 16f628 @ 16F88...
« Respuesta #4 en: 29 de Mayo de 2010, 21:01:22 »
Muy good  :mrgreen: Sin querer llegué a mi mismo msj :P 

    Una consultilla nomás, pq ahí la llevo.

   En el simulador de picaxe existe un comando llamado PINS el cuál lo que hace es leer el puerto A. Pues bien, en pbp obvio no hay una correspondencia directa sin embargo me vienen algunas ideas en la cabeza. Podría declarar if's con portA.0=1 AND portA.1=1 etc, aunque me va a consumir mucha memory, no? Otra sería...ehm...no, no se me ocurre otra  :mrgreen: Hago la consulta en vivo pq en unos minutos retomo el programa  :?..... espero me dén algunas ideas ya que en cuetión lo que debo reemplazar es el CASE de:
Código: [Seleccionar]
select case pins

case 2
goto ford
case 1
goto chevrolet
case 3
goto sbec2_5
case 128
goto sbec_y_pcm3_0

case else

end select

pause 500
goto inicio

PD: Sorry por alejarme un pokito del hilo, es que este tiene mas atención :mrgreen:
PD2: Si ven estoy haciendo la rutina para un probador de computadoras automotrices, así es que en cuanto lo depure para no depender del PICAXE pues se los paso al costo con diagramas y todo, eso no es problema....(bueno, siguiendo la filosofía)....les paso los archivos importantes ya ya le buscan acerca de los conectores y demás, así lo recomiena dogflu66 jiji :mrgreen:zax, gracias.

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: ejemplos 16f628 @ 16F88...
« Respuesta #5 en: 29 de Mayo de 2010, 23:19:20 »
Muy good  :mrgreen: Sin querer llegué a mi mismo msj :P 

    Una consultilla nomás, pq ahí la llevo.

   En el simulador de picaxe existe un comando llamado PINS el cuál lo que hace es leer el puerto A. Pues bien, en pbp obvio no hay una correspondencia directa sin embargo me vienen algunas ideas en la cabeza. Podría declarar if's con portA.0=1 AND portA.1=1 etc, aunque me va a consumir mucha memory, no? Otra sería...ehm...no, no se me ocurre otra  :mrgreen: Hago la consulta en vivo pq en unos minutos retomo el programa  :?..... espero me dén algunas ideas ya que en cuetión lo que debo reemplazar es el CASE de:
Código: [Seleccionar]
select case pins

case 2
goto ford
case 1
goto chevrolet
case 3
goto sbec2_5
case 128
goto sbec_y_pcm3_0

case else

end select

pause 500
goto inicio

PD: Sorry por alejarme un pokito del hilo, es que este tiene mas atención :mrgreen:
PD2: Si ven estoy haciendo la rutina para un probador de computadoras automotrices, así es que en cuanto lo depure para no depender del PICAXE pues se los paso al costo con diagramas y todo, eso no es problema....(bueno, siguiendo la filosofía)....les paso los archivos importantes ya ya le buscan acerca de los conectores y demás, así lo recomiena dogflu66 jiji :mrgreen:zax, gracias.


Es correcto, la forma de leer  o escribir en un puerto es  como lo mencionas, if porta.0=1 then bla bla .
Incluso puedes hacer que la referencia a algún pin del puerto sea más significativa
Porta.1=motor (no se ase  de este manera lo que pasa que ya no recuerdo bien como hacerlo , en protón es con symbol y en pbp creo que con var).
Por  otra parte no veo la necesidad de que sustituyas el case ya que en Basic también es balido.



Desconectado sonicTH

  • PIC10
  • *
  • Mensajes: 21
Re: ejemplos 16f628 @ 16F88...
« Respuesta #6 en: 30 de Mayo de 2010, 15:33:09 »
Solucionado...por ahora  ;-)

  La solución (era obvio hasta cierto punto)... PORTA. Lo leemos y yap  :mrgreen: pero aún debo usar uno de los pines como analógico. Después de haber elegido un case si lo puedo configurar de nuevo con ANSEL verdad? en fin, aún seguiré probando.

   
Código: [Seleccionar]
select case portA
 
      case 1
         goto uno
      case 2
         goto dos
      case 3
         goto tres   
      case else
     
      end select
      'pause 500
      goto inicio

PD: Gracias
PD2: hasta ahorita casi no defino fuses o mas bien DEFINES. Sé que a la larga me va a afectar, lo presiento :shock: así que a ver si me siguen hechando la mano :D

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: ejemplos 16f628 @ 16F88...
« Respuesta #7 en: 30 de Mayo de 2010, 16:23:26 »
Muy good  :mrgreen: Sin querer llegué a mi mismo msj :P 

    Una consultilla nomás, pq ahí la llevo.

   En el simulador de picaxe existe un comando llamado PINS el cuál lo que hace es leer el puerto A. Pues bien, en pbp obvio no hay una correspondencia directa sin embargo me vienen algunas ideas en la cabeza. Podría declarar if's con portA.0=1 AND portA.1=1 etc, aunque me va a consumir mucha memory, no? Otra sería...ehm...no, no se me ocurre otra  :mrgreen: Hago la consulta en vivo pq en unos minutos retomo el programa  :?..... espero me dén algunas ideas ya que en cuetión lo que debo reemplazar es el CASE de:
Código: [Seleccionar]
select case pins

case 2
goto ford
case 1
goto chevrolet
case 3
goto sbec2_5
case 128
goto sbec_y_pcm3_0

case else

end select

pause 500
goto inicio

PD: Sorry por alejarme un pokito del hilo, es que este tiene mas atención :mrgreen:
PD2: Si ven estoy haciendo la rutina para un probador de computadoras automotrices, así es que en cuanto lo depure para no depender del PICAXE pues se los paso al costo con diagramas y todo, eso no es problema....(bueno, siguiendo la filosofía)....les paso los archivos importantes ya ya le buscan acerca de los conectores y demás, así lo recomiena dogflu66 jiji :mrgreen:zax, gracias.


Es correcto, la forma de leer  o escribir en un puerto es  como lo mencionas, if porta.0=1 then bla bla .
Incluso puedes hacer que la referencia a algún pin del puerto sea más significativa
Porta.1=motor (no se ase  de este manera lo que pasa que ya no recuerdo bien como hacerlo , en protón es con symbol y en pbp creo que con var).
Por  otra parte no veo la necesidad de que sustituyas el case ya que en Basic también es balido.








Así es, en algún momento tendrás problemas por no tener configurado adecuadamente. ahora con respecto a configurar el puerto A como digital y después como analógico no tendría que haber problema, solo que a veces tienen sus asegunes mas de una ves me a pasado que no es tan fácil como aparenta


Desconectado sonicTH

  • PIC10
  • *
  • Mensajes: 21
Re: ejemplos 16f628 @ 16F88...
« Respuesta #8 en: 31 de Mayo de 2010, 00:12:30 »

  Ya lo estoy resintiendo :?

   el código es:
Código: [Seleccionar]
TRISA = %11111011     'defino puerto A como entradas
TRISB = %00000000     'defino puerto B como salidas
                     
'adcon1=142
ANSEL = %00000000
'cmcon=7
 portb=0
 'portA=0


'Pause 500
 

 programa:

 
 select case portA
 
      case 1
         goto uno
      case 2
         goto dos
      case 3
         goto tres   
      case else
     
      end select
      'pause 500
      goto programa
     
 
 uno:
 
   high 0
    pause 2000
    low 0
    pause 500
    goto programa
   
 dos:
 
    high 1
    pause 500
    low 1
    pause 500
    goto programa
   
   
 tres:
 
     high 0
     pause 500
     high 1
     pause 500
     high 2
     pause 500
     high 3
     pause 500
     high 4
    pause 2000
    portb=0
    pause 500
    goto programa

deben observar que más allá de configurar o no el ADC al principio NO lo quiero usar, repito NO lo quiero usar. Sin embargo, al leer el puerto A el pin analógico si es tomado en cuenta aún cuando lo configure como salida. Es decir que para vida de que el programa funcione bien el potenciometro conectado al pin 2 (esto en el programa completo) pues debe mandar un 'nivel' de cero. SUpongo que esto veine dado por los triggers de las entradas al usarlas como digitales, etc; pero el caso es que si me lo afecta aún cuando no la quiera tomar en cuenta. Les mando es archivo para que lo observen. Gracias  :mrgreen:

PD: calando con alldigital CMCON, etc, no he resueto nada.

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: ejemplos 16f628 @ 16F88...
« Respuesta #9 en: 31 de Mayo de 2010, 23:46:01 »
No deberías tener problema, si desactivas el conversor ad  el puerto funciona  como  entradas y salidas digitales.( A reserva de que en el pic que utilizas creo  que hay pines que solo funcionan como entradas checa la data )
Para que no te complique más comienza con algo más pequeño as un ejercicio donde pruebes únicamente el puerto A.


 

anything