Autor Tema: Se que es muy básico pero....  (Leído 8792 veces)

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

Desconectado dariman

  • PIC10
  • *
  • Mensajes: 10
Se que es muy básico pero....
« en: 21 de Octubre de 2021, 08:19:21 »
Hola a todos. Antes de hacer la preguntonta, les explico brevemente el porque. A mis 58, estoy haciendo por milésima vez el intento de aprender algo sobre los PIC. Ya he hecho pequeñisimos programas, pero las vicisitudes de la vida hacen que no le pueda dar continuidad y debo volver a arrancar de cero. Espero esta vez lograrlo. Dicho esto, necesito saber algo tan básico como como hacer para, en una comunicación serie (spi) donde los datos llegan bit a bit, poder encadenarlos dentro de un mismo registro. Pretendo hacer un controlador de horno con un MAX31855. Si, ya un amigo me dijo que es como si un estudiante de primer año de arquitectura intentara un edificio de 10 pisos. Pero bue, se que, aunque me lleve muuuuucho tiempo, seguramente aprenderé mucho en el camino.
Gracias y disculpen el testamento.

PD: no me interesa que me lo den resuelto, pero si una idea de como encararlo. Gracias de nuevo

Siii, perdón. Uso ASM. En realidad empecé con los PIC por un libro que decía: Programar pic es fácil, solo con 32 instrucciones...... Se olvidaron decir que eso era una infima parte de la verdad  :D :D :D
« Última modificación: 21 de Octubre de 2021, 12:49:36 por dariman »
DariKp

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:Se que es muy básico pero....
« Respuesta #1 en: 21 de Octubre de 2021, 09:14:09 »
Con que lenguaje de programación vas a encarar el proyecto?

ASM, C, Básic, ...,.?

F.
Todos los días se aprende algo nuevo.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Se que es muy básico pero....
« Respuesta #2 en: 21 de Octubre de 2021, 09:26:09 »
No sabemos si estás programando en ASM, C o Basic ni si usas XC8, CCS, etc.

Definido eso, podés googlear ejemplos (https://www.ccsinfo.com/forum/viewtopic.php?t=52718) , analizarlos , probarlos/simularlos y consultar en TODOPIC :)




Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Se que es muy básico pero....
« Respuesta #3 en: 21 de Octubre de 2021, 10:37:27 »

Desconectado dariman

  • PIC10
  • *
  • Mensajes: 10
Re:Se que es muy básico pero....
« Respuesta #4 en: 21 de Octubre de 2021, 12:54:06 »
Te recomiendo que comiences por utilizar un Arduino.

https://learn.adafruit.com/thermocouple/arduino-code
https://www.arduino.cc/reference/en/libraries/max31855/

Te agradezco el concejo Picuino, pero empecé con assembler y ahora es mi desafío personal llegar a...no se si decir dominarlo, me parece muy arrogante de mi parte, pero si lograr conocerlo lo suficiento como para utilizarlo. Gracias igual.
DariKp

Desconectado dariman

  • PIC10
  • *
  • Mensajes: 10
Re:Se que es muy básico pero....
« Respuesta #5 en: 21 de Octubre de 2021, 13:01:25 »
No sabemos si estás programando en ASM, C o Basic ni si usas XC8, CCS, etc.

Definido eso, podés googlear ejemplos (https://www.ccsinfo.com/forum/viewtopic.php?t=52718) , analizarlos , probarlos/simularlos y consultar en TODOPIC :)

Gracias Eduardo2, intenté por google, pero creo que no supe redactar correctamente la pregunta porque siempre terminaba en otras cuestiones que nada que ver con mi duda. El link que me compartís no me permite entrar. E intento lograrlo con ASM. Gracias igual.
DariKp

Desconectado dariman

  • PIC10
  • *
  • Mensajes: 10
Re:Se que es muy básico pero....
« Respuesta #6 en: 21 de Octubre de 2021, 13:03:15 »
Con que lenguaje de programación vas a encarar el proyecto?

ASM, C, Básic, ...,.?

F.

Gracias Dspic30. Estoy intentando con ASM. Gracias y perdón por la omisión en la pregunta original.
DariKp

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Se que es muy básico pero....
« Respuesta #7 en: 21 de Octubre de 2021, 15:19:22 »
... El link que me compartís no me permite entrar.
Que raro, es un foro de CCS, tal vez haya que estar registrado.    Se trata de una discusión (con código) de la lectura de termocuplas con el  MAX31855 y un 16F88.

Citar
E intento lograrlo con ASM. Gracias igual.
El set de instrucciones de los pic y avr es espantoso, con rutinas críticas en velocidad tiene sentido hacerlas asm, pero el programa completo...  Es masoquismo puro y duro.
En cambio, si se tratara de micros de la familia 8051 hasta sería una tarea agradable :)

Desconectado dariman

  • PIC10
  • *
  • Mensajes: 10
Re:Se que es muy básico pero....
« Respuesta #8 en: 22 de Octubre de 2021, 19:21:17 »
Eduardo2, confío en tu palabra porque en verdad no tengo ni idea de los otros micros. Es más, admiro a los que pueden programar en varios lenguajes. Yo me dedique a la electrónica casi toda mi vida, pero entré muy tarde en el mundo de los micro. Arranque con los pic y en ASM y me está costando, pero si cambio ahora es como volver a empezar. Prefiero quedarme y darle hasta donde llegue, de todas maneras, para mi, es puro hobby, ya no vivo de la electrónica. Igual, gracias a vos y a todos los que dispusieron de su tiempo para tratar de ayudarme. Seguiré buscando y pretendo no parar hasta lograr comunicar el pic con el max. Gracias a todos !!!!
DariKp

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Se que es muy básico pero....
« Respuesta #9 en: 23 de Octubre de 2021, 14:40:21 »
Yo creo que es más fácil comenzar desde cero con Arduino que seguir programando todo en Assembler.
Y una cosa no quita la otra porque si quieres, más tarde puedes programar Arduino en Assembler para ponerte las cosas difíciles.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Se que es muy básico pero....
« Respuesta #10 en: 24 de Octubre de 2021, 03:32:47 »
... Arranque con los pic y en ASM y me está costando, pero si cambio ahora es como volver a empezar. Prefiero quedarme y darle hasta donde llegue,
Pensamiento de viejo...  Y eso que sos menor que yo :)
Para nada es volver a empezar, ni cerca.  Yo también empecé programando en assembler y por mas ahora prefiero C toda la vida lo sigo usando.  Cada vez que ocurren "cosas raras", recurro al listado en assembler generado por el compilador para ver qué  %&$#  está pasando.

Citar
... Seguiré buscando y pretendo no parar hasta lograr comunicar el pic con el max.
Cuando no se consiguen ejemplos en ASM, un truco es "fabricarlo" a partir de uno en C, simplemente analizando los bloques de código que te interesan.

Por ejemplo, se escribe un programa corto como éste para un 16F88:
Código: [Seleccionar]
#include <16F88.h>

#FUSES NOWDT                    // No Watch Dog Timer
#FUSES INTRC_IO                 // >>> Oscilador interno, no CLKOUT
#FUSES PUT                      // Power Up Timer
#FUSES NOMCLR                   // Master Clear pin used for I/O
#FUSES NOBROWNOUT               // Reset when brownout detected
#FUSES PROTECT                  // Code not protected from reading
#FUSES NOCPD                    // No EE protection

#use delay(int=8000000)         // Especifica al compilador que hace uso del OSC interno
#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=8)

#use STANDARD_IO( B )

union { int8 by[4]; struct{signed int16 lo , hi ;};} Data ;

void ReadMAX(void){
   
    output_low(PIN_B0) ;
    delay_us(10) ;
    Data.by[3] = spi_read(0);       
    Data.by[2] = spi_read(0);       
    Data.by[1] = spi_read(0);       
    Data.by[0] = spi_read(0);
    output_high(PIN_B0) ;
}

void main(void){
float t_amb, t_ext ;
   
    set_tris_b(1) ;
    setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_64);
   
    delay_ms(500);
    while(TRUE)
    {
        ReadMAX() ;

        t_amb = Data.lo/256. ;
        t_ext = Data.hi/16. - t_amb ;
        printf("TCK: %f  | TAmb: %f\n\r",t_ext,t_amb);

        delay_ms(1000);
   }
}

De acá lo único que interesa es el setup del SPI:  setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_64);
y cuando lee el MAX:      Data.by[3] = spi_read(0); 

El ASM generado para esas instrucciones es:
Código: [Seleccionar]
....................     setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_64);
04A0:  BCF    03.5
04A1:  BCF    14.5
04A2:  BSF    03.5
04A3:  BCF    06.2
04A4:  BSF    06.1
04A5:  BCF    06.4
04A6:  MOVLW  22
04A7:  BCF    03.5
04A8:  MOVWF  14
04A9:  MOVLW  00
04AA:  BSF    03.5
04AB:  MOVWF  14

Esto se repite 4 veces pues son 32 bits a leer y va guardando en posiciones de memoria consecutivas (23,22,21,20)
Código: [Seleccionar]
....................     Data.by[3] = spi_read(0);       
002C:  MOVF   13,W
002D:  CLRF   13
002E:  BSF    03.5
002F:  RRF    14,W
0030:  BTFSS  03.0
0031:  GOTO   02F
0032:  BCF    03.5
0033:  MOVF   13,W
0034:  MOVWF  23

Claro que esto es un plan B cuando no se consigue un ejemplo en ASM, pues como el compilador no te pone las etiquetas el paso siguiente es agarrar el datasheet y ver a qué variables corresponden los números.
 

Desconectado gustavopic

  • PIC18
  • ****
  • Mensajes: 417
Re:Se que es muy básico pero....
« Respuesta #11 en: 13 de Febrero de 2022, 13:16:19 »
Eduardo2, confío en tu palabra porque en verdad no tengo ni idea de los otros micros. Es más, admiro a los que pueden programar en varios lenguajes. Yo me dedique a la electrónica casi toda mi vida, pero entré muy tarde en el mundo de los micro. Arranque con los pic y en ASM y me está costando, pero si cambio ahora es como volver a empezar. Prefiero quedarme y darle hasta donde llegue, de todas maneras, para mi, es puro hobby, ya no vivo de la electrónica. Igual, gracias a vos y a todos los que dispusieron de su tiempo para tratar de ayudarme. Seguiré buscando y pretendo no parar hasta lograr comunicar el pic con el max. Gracias a todos !!!!

de donde sos ??

yo tambien, inicie en ASM  y hace unos años hice el curso de arduino, era lo que tenia a mano,

tengo tu edad tambien y estudie electronica de chico.

te vale la pena estudiar C, o arduino, te lo aseguro, y no lo hagas solo, busca un curso, algo , si es presencial, mejor.

« Última modificación: 13 de Febrero de 2022, 13:23:49 por gustavopic »

Desconectado dariman

  • PIC10
  • *
  • Mensajes: 10
Re:Se que es muy básico pero....
« Respuesta #12 en: 09 de Marzo de 2023, 23:47:05 »
Una vez mas, hola a todos. Aunque ya haya pasado mucho tiempo de iniciado el tema, quiero darlo por terminado.
Tenía un amigo acá en Cba que me apadrinaba en esto de aprender ASM. El era un capo en el tema. Un día le regalaron un arduino y al tiempo le pregunte que le había parecido: "un lindo juguete" fue su única repuesta.
Ojo !!!! no intento iniciar discusiones al respecto, sólo es una anécdota a modo de homenaje de mi querido amigo Héctor, que abandonó su presencia física en esta vida.
A esta altura de mi vida, esto de programar, era sólo un hobby, pero la partida del maestro Jedy como yo lo llamaba, desaceleró notablemente mis ganas.
Perdón porque esto no tiene nada que ver con los micros, pero es una forma de despedirlo en su terreno.
Gracias a todos, se que el se enojaría, pero acá termina.
Abrazos
DariKp

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Se que es muy básico pero....
« Respuesta #13 en: 10 de Marzo de 2023, 06:11:25 »
Yo de arduino toco lo básico por que a veces me piden una plaqueta para controlar tonterías, como encender una lámpara de escalera temporizador pero con opción de poder apagarlas si se vuelve a pulsar la llave de luz, pues cosas así.

  Pero a medida que la cosa se complica con proyectos más serios, para mi arduino dejo de ser una opcion. Cuando las funciones no hacían lo que debían, y tras perder media tarde para buscar el problema, y ver finalmente el problema la tontería que era, los acabé programando directamente en C para el Atmega con MpLabX.  Fuera ide de arduino.

   Me recuerda a las HAL de los ARM.  Tantísima librería te acelera el desarrollo, pero te acaba convirtiendo en dependiente de ellas y cuando toca analizar un problema agárrate.

  No soy tampoco de los que configura registros a mano y tira de datasheet del micro para todo, pero si que me gusta destripar y analizar librerías de registros y periféricos en los ratos libres para ver claro como trabajan. 

  ASM siempre se debe conocer, pero no para programar con el, sino para depurar y analizar cuando algo falla y no se consigue averiguar desde un programa en C, nisiquiera en debug. 


 

anything