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:
- 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.
- 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
- 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
Tweet