jueves, 21 de abril de 2011

Ya quedo mi programa

Qué onda como les ha ido. Pues yo pensé que en vacaciones iba a hacer varias cosas pero pues nomas nada jajaja y luego lo peor es que el sábado me voy a desaparecer hasta el jueves saldré fuera iré a Puerto Vallarta pero como todo buen geek me llevare mi compu pero no prometo nada, me la llevo porque necesito trabajar en un reporte sobre mi fresadora CNC que la verdad ya me está preocupando porque tengo todo menos los proveedores no me contestan ni nada. En fin si he trabajado algo no he sido totalmente flojo XD ya les había dicho que ya tenía el DAC funcionando pues ahora creo que ya tengo también funcionando todo mi programa para el µC At90PWM316. Esto es en simulación en AVR Studio 4 pues el programa está hecho en ensamblador y hace lo siguiente básicamente:

  1. Cuento cuantos pulsos ha dado mi encoder con el timer que en este caso se usa como contador por que cuento los pulsos, esto se hace con el timer 1 de 16 bits.
  2. Con el timer de 8 bits creo una base de tiempo cada cierto tiempo voy a checarlo y enviar lo que leo al analógico. ¿Por qué lo hago así? pues es muy simple si lo hiciera uno tras otro como mi µC va a correr a 8 Mhz pues son como 5 instrucciones las que necesito para hacer todo eso entonces como son instrucciones de 1 solo ciclo lo haría 5/8000000 cada segundo y en ese tiempo no creo que del motor ni una fracción de revolución por eso el timer que contara hasta 255 y después ya lo hará pero pues como este timer tiene un preescaler de 8 pues en realidad trabajara a un frecuencia de 1 MHZ entonces seria 255/1000000 dando nos un tiempo de 255 µs cada actualización espero y eso sea más pero puedo jugar con eso en la programación
  3. Y ahora si al final dependiendo del valor que me dio el timer genero una salida analógica proporcional a mi velocidad. Esto se hará como se dijo cada 255 µs

Pues aquí les dejo el código

    .include "pwm316def.inc"

    .ORG 0X0000

    RJMP INICIO

    .ORG 0X0022

    RJMP OVERFLOW

    .ORG 0X00FF

INICIO:LDI R16,0XFF

    OUT SPL,R16

    LDI R16,0X02

    OUT SPH,R16

    LDI R16,0B01001010

    STS ADMUX,R16

    LDI R16,0B11000011

    STS ADCSRA,R16

    LDI R16,0B00000000

    STS ADCSRB,R16

    LDI R16,0B00000011

    STS DACON,R16

    LDI R16,0B00000000

    STS TCCR1A, R16

    LDI R16,0B01000111

    STS TCCR1B,R16

    LDI R16,0X00

    STS TCCR1C,R16

    LDI R16,0B00000000

    STS TIMSK1,R16

    LDI R16,0B00000000

    OUT TCCR0A,R16

    LDI R16,0X02

    OUT TCCR0B,R16

    LDI R16,0X01

    STS TIMSK0,R16

    SEI

SALTO:NOP

    NOP

    NOP

    NOP

    NOP

    NOP

    NOP

    RJMP SALTO

OVERFLOW:

    IN R17,SREG

    PUSH R17

    LDS R17,TCNT1L

    LDS R18,TCNT1H

    LDI R16,0B10000011

    STS DACL,R17

    STS DACH,R18

    POP R17

    OUT SREG,R17

    RETI
Y recuerden enviarmeun correo a lams_007@hotmail.com o a mi
twitter @lams_007 si tiene alguna duda
ya saben estoy aqui para responderlas