TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: stk500 en 06 de Abril de 2011, 14:23:00
-
Despues de tantos meses buscando informacion sobre CONTROL REMOTO, PWM y LED aqui os presentares todos mis proyectos.
'************************************
'* Control Remote Tester *
'* 07.09.2008 *
'************************************
$regfile = "attiny2313.dat" ' elegi el 2313 porque es facil de conseguir
$crystal = 4000000 'Usamos cristal interno
$lib "mcsbyte.lbx"
$hwstack = 32
$swstack = 10 '
$framesize = 40
'$sim
' Configuration de el LCD
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2 'Pins (Port B) für LCD-Modul definieren
Config Lcd = 16 * 2 'Uso LCD 16x2
'Config Portb = Output
'configuramos el Puerto D.2 como entrada
Config Pind.2 = Input 'puerto D.2 para el iR TSOP1738
Config Rc5 = Pind.2 'definimos el puerto D.2 como RC5
Portd.2 = 1 'Activamos la resistencia interna
Enable Interrupts 'activamos la interrupciones
'Definimos variables
Dim Direcion As Byte
Dim Comando As Byte
Cursor Off Noblink 'Desactivamos el cursor
Cls
Locate 1 , 1 'borramos el contenido del LCD
Lcd " Control " 'nuestros textos
Locate 2 , 2
Lcd "Remoto Tester "
Waitms 2500
Cls
Locate 1 , 1
Lcd "Solo RC5 "
Locate 2 , 2
Lcd "Protocologo "
Waitms 2500
Cls
Locate 1 , 1
Lcd " Esperando "
Locate 2 , 2
Lcd "Comandos "
Do
Config Pind.2 = Input 'Puerto D.2 entrada
Getrc5(direcion , Comando) 'recibimos datos
If Direcion <> 255 Then 'si recibimos una direcion
Comando = Comando And &B01111111 'toggle bit
Cls 'borramos el contenido anterior del LCD
If Direcion = 0 Then 'direcion para TV
Locate 1 , 1
Lcd "Television"
Locate 2 , 1
Lcd "DIR.:" ; Direcion ; " CMD.:" ; Comando 'recibimos direcion y comando
End If
If Direcion = 5 Then 'Direcion para Video grabador
Locate 1 , 1
Lcd "Video grabador 1"
Locate 2 , 1
Lcd "DIR.:" ; Direcion ; " CMD.:" ; Comando 'recibimos direcion y comando
End If
If Direcion = 6 Then 'Direcion para Video grabador
Locate 1 , 1
Lcd "Video grabador 2"
Locate 2 , 1
Lcd "DIR.:" ; Direcion ; " CMD.:" ; Comando 'recibimos direcion y comando
End If
If Direcion = 8 Then 'Direcion para Receptor de Satelite
Locate 1 , 1
Lcd "SAT-Receptor 1"
Locate 2 , 1
Lcd "DIR.:" ; Direcion ; " CMD.:" ; Comando 'Recibimos comando y direcion
End If
If Direcion = 9 Then 'Direcion para Camara de Video
Locate 1 , 1
Lcd "Camara de Video"
Locate 2 , 1
Lcd "DIR.:" ; Direcion ; " CMD.:" ; Comando 'Recibimos direciones y comandos
End If
If Direcion = 10 Then 'Direcion para Receptor de Satelite
Locate 1 , 1
Lcd "SAT-Receptor 2"
Locate 2 , 1
Lcd "DIR.:" ; Direcion ; " CMD.:" ; Comando 'Recibimos direciones y comandos
End If
If Direcion = 17 Then 'Direcion para el Receptor de Radio
Locate 1 , 1
Lcd "Receptor/ Radio"
Locate 2 , 1
Lcd "DIR.:" ; Direcion ; " CMD.:" ; Comando 'Recibimos direciones y comandos
End If
If Direcion = 18 Then 'Direcion para grabador de Cassete
Locate 1 , 1
Lcd "Cassete"
Locate 2 , 1
Lcd "DIR.:" ; Direcion ; " CMD.:" ; Comando 'Recibimos direciones y comandos
End If
If Direcion = 20 Then 'Direcion para el reproducto de CD
Locate 1 , 1
Lcd "Rep.CD"
Locate 2 , 1
Lcd "DIR.:" ; Direcion ; " CMD.:" ; Comando 'Recibimos direciones y comandos
End If
If Direcion = 21 Then 'Direcion para el Gira Disco
Locate 1 , 1
Lcd "Gira Disco"
Locate 2 , 1
Lcd "DIR.:" ; Direcion ; " CMD.:" ; Comando 'Recibimos direciones y comandos
End If
End If
Loop
End
(http://img852.imageshack.us/img852/2297/rc5tester.jpg)
(http://img3.imageshack.us/img3/367/rc5tabla.jpg)
(http://img852.imageshack.us/img852/1372/rc5tsop1736sp.gif)
(http://img859.imageshack.us/img859/5897/rc5tsop1736pin.gif)
Como veran esta todos muy detallados y facil de comprender
a continuacion os presento tambien un receptor iR para controlar LED, aqui se controla 4 Led (Rojo,Verde,Azul y Amarillo)
(http://img151.imageshack.us/img151/8368/receptorirparaledrgby.jpg)
Aqui a el codigo
'______________________________________________________________________
'Receptor iR para Led RGBY
' compiler con Bascom AVR Version 2.0.4.0
'No comercial
'Gracias a los amigos bascom-forum.de por su gran ayudas
' Rafael Biad Jimenez
'27.03.2011
'Atmega168 tiene 6 PWM HW
'Atencion este Receptor solo Funciona con el Protocologo RC5 de Philips
' o con el mando a distancia VIVANCO UR9 con otros no lo he probado
'Si quieren saber si vuestros mando a distancia usa este protocolo puede montar
' el control de mando Tester, asi sabran que direcion recibe y tambien el comando
' o los comandos.
'_____________________________________________________________________
$regfile = "m168def.dat" ' aqui usamos el Atmega168 que posee 6 PWM Hw
$crystal = 8000000 'Interne Fuses Clock Division by 8
$hwstack = 40
$swstack = 16
$framesize = 32
$lib "mcsbyte.lbx " 'usaremos la libreria byte para optimatizar el codigo
'Configuration de los puertos
Config Portb.1 = Output ' LED1 Rojo
Config Portb.2 = Output 'LED2 Verde
Config Portb.3 = Output 'LED3 Azul
Config Portd.3 = Output 'LED4 Amarillo
Config Portd.2 = Input ' irR TSOP1738
Config Rc5 = Pind.2 'aqui activamos la resistencia interna del puerto D2
'Config Timer1 y Timer2 para PWM . atencion Timer0 trabaja interno con el protocologo GetRC5 de Bascom
'Timer0 trabaja con el protocologo RC5
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Config Timer2 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
'Declaration Variable
Dim Pwmval1 As Byte ' Variable para Pwm1( PortB.1=OC1A )
Dim Pwmval2 As Byte ' Variable para Pwm2( PortB.2-=OC1B)
Dim Pwmval3 As Byte 'Variable para Pwm(PortB.3=OC2A)
Dim Pwmval4 As Byte 'Variable para Pwm(Port.D=OC2B
Dim Direcion As Byte 'Variable para la direcion RC5
Dim Comando As Byte
'Variable para los Comandos de RC5
' Todos pwm comienzan desde 0
Pwmval1 = 0
Pwmval2 = 0
Pwmval3 = 0
Pwmval4 = 0
Enable Interrupts ' permitimos todas las interrupciones
'_______________________________________________________________
Do
Getrc5(direcion , Comando) ' aqui llamamos el generador internos del protocologo RC5
If Direcion = 5 Then ' Aqui usamos la direcion 5 para la grabador de Videos
Comando = Comando And &B01111111 ' Comando para Recibir todos en 36Khz
End If
Select Case Comando
Case 0 :
Toggle Portb.0 ' Aqui invertimos el estatuto de la entrada iR
'__ Control para los pulsadores del mando a distancia
Case 1 : 'Tecla numero 1 para el mando a distancia
If Pwmval1 < 246 Then ' Funcion Aumenta el Dusty de 0% a 100%
Pwmval1 = Pwmval1 + 5 ' + LED ROJO
Else
End If
Case 2 : 'Tecla numero 1 para el mando a distancia
If Pwmval1 > 0 Then 'Disminuye el Dusty de 100% a 0%
Pwmval1 = Pwmval1 - 5 ' - LED ROJO
Else
End If
Case 3: 'Tecla numero 3 la misma funcion p:
If Pwmval2 < 246 Then
Pwmval2 = Pwmval2 + 5 ' + LED VERDE
Else
End If
Case 4 :
If Pwmval2 > 0 Then ' - LED VERDE
Pwmval2 = Pwmval2 - 5
Else
End If
Case 5 :
If Pwmval3 < 246 Then ' + LED AZUL
Pwmval3 = Pwmval3 + 5
Else
End If
Case 6 : ' - LED AZUL
If Pwmval3 > 0 Then
Pwmval3 = Pwmval3 - 5
Else
End If
Case 7 : ' + LED AMARILLO
If Pwmval4 < 246 Then
Pwmval4 = Pwmval4 + 5
Else
End If
Case 8 : ' - LED AMARILLO
If Pwmval4 > 0 Then
Pwmval4 = Pwmval4 - 5
Else
End If
' Aumentando todos PWMVAL-1-2-3-4 desde 0% a 100%
Case 32: ' Comando Canal arriba aumenta todos los PWM desde 0% a 100%
If Pwmval1 < 246 Then 'Disminuye el Dusty de 100% a 0%
Pwmval1 = Pwmval1 + 5 ' - LED ROJO
Else
End If
If Pwmval2 < 246 Then ' - LED VERDE
Pwmval2 = Pwmval2 + 5
Else
End If
If Pwmval3 < 246 Then '-Azul
Pwmval3 = Pwmval3 + 5
Else
End If
If Pwmval4 < 246 Then '-Amarillo
Pwmval4 = Pwmval4 + 5
Else
End If
' Disminuyendo todos PWMVAL-1-2-3-4 desde 100% a 0%
Case 33: ' Canal abajo disminuye todos los PWM desde 100% a 0%
If Pwmval1 > 0 Then 'Disminuye el Dusty de 100% a 0%
Pwmval1 = Pwmval1 - 5 ' - LED ROJO
Else
End If
If Pwmval2 > 0 Then ' - LED VERDE
Pwmval2 = Pwmval2 - 5
Else
End If
If Pwmval3 > 0 Then ' -Azul
Pwmval3 = Pwmval3 - 5
Else
End If
If Pwmval4 > 0 Then
Pwmval4 = Pwmval4 - 5 ' -Amarillo
Else
End If
End Select
Pwm1a = Pwmval1
Pwm1b = Pwmval2
Ocr2a = Pwmval3
Ocr2b = Pwmval4
:
Loop (http://img59.imageshack.us/img59/1229/receptordecomandorc51.jpg)
(http://img508.imageshack.us/img508/7956/receptordecomandorc52.jpg)
(http://img864.imageshack.us/img864/7931/receptorled.jpg)
y aqui un Video
-
¡Como te diviertes, abuelo!
Enhorabuena, muy chulo el vídeo.
-
Un proyecto realmente luminoso. Felicidades por el éxito.
-
¡Como te diviertes, abuelo!
Enhorabuena, muy chulo el vídeo.
:5] si tu suspiera la mala noche que he pasado leyendo y esperimentando con los proyectos hasta cogerle el truco :5]
Gracias por tu opinion tio
-
Un proyecto realmente luminoso. Felicidades por el éxito.
gracias y esperen mas cosas
le voy a poner una chincheta :P
-
:)
Valla envidia de la sana..me alegra que ya estés rodando con los Atmel, yo hasta ahora no puedo..debido a que me entusiasme mucho con freescale , compré varios HCS08, un programador OSBDM con JB 16..y como el windows hizo que perdiera mi disco duro con valiosa información, pued ahora solo estoy con linux..y resulta que Freescale en linux está bastante flojo..a pesar de su CW10.1, hasta ahora no puedo hacer funcionar el OSBDM y paso de instalar windows solo por eso....asi que decidí mirar los atmel..y lo que he leído me parece muy bueno, solo que acá venden los AT89S51 de 40 pines, muy barato..pues que querido empezar pero la falta de tiempo no deja a veces..quiero aprovechar este hilo y preguntarte, si para programar los Atmel como el que te menciono hay que primero programar los fusibles de configuración, antes de meterle el programa de prueba? y si eso hay que hacerlo siempre que se cambie de código?
Saludos y en hora buena
-
:)
Valla envidia de la sana..me alegra que ya estés rodando con los Atmel, yo hasta ahora no puedo..debido a que me entusiasme mucho con freescale , compré varios HCS08, un programador OSBDM con JB 16..y como el windows hizo que perdiera mi disco duro con valiosa información, pued ahora solo estoy con linux..y resulta que Freescale en linux está bastante flojo..a pesar de su CW10.1, hasta ahora no puedo hacer funcionar el OSBDM y paso de instalar windows solo por eso....asi que decidí mirar los atmel..y lo que he leído me parece muy bueno, solo que acá venden los AT89S51 de 40 pines, muy barato..pues que querido empezar pero la falta de tiempo no deja a veces..quiero aprovechar este hilo y preguntarte, si para programar los Atmel como el que te menciono hay que primero programar los fusibles de configuración, antes de meterle el programa de prueba? y si eso hay que hacerlo siempre que se cambie de código?
Saludos y en hora buena
Muchas gracias Marvicdigital,
pues que lastima que no seguiste con los Atmel ya que hay tantas informacion como los Pic y muy buenos otros proyectos.
pues bien respecto a tu pregunta sobre programar los Fuses, los fuses de los atmel lo puede programar ante o despues de programar el Flash, pero ,pero pero, muchos cuidados con el SPI , este Fuse nunca debe desactivarlo sino tiene el programador para activarlo otras vez, debe saber que los Atmel se pueden programar de varias manera lee aqui http://www.todopic.com.ar/foros/index.php?topic=33743.0 por eso me compre el programador STK500 :P
otros Errores que cometemos los que aprendemos es al programar el micro con Cristal exterior y al volver programar no olvidamos de ponerl el cristal ya que sin el cristal no podra programarlo otra vez.
espero haberte sacado de tu dudas, si tiene mas dudas por aqui estamos.
Saludos y gracias por tu comentarios.
-
Somos pocos que trabajan con Atmel.
-
¡Como te diviertes, abuelo!
Enhorabuena, muy chulo el vídeo.
:5] si tu suspiera la mala noche que he pasado leyendo y esperimentando con los proyectos hasta cogerle el truco :5]
Gracias por tu opinion tio
Pero eso es la diversión! :-/ Romperse el coco hasta que sale! :mrgreen: Felicidades que ha quedado magnifico!!
Saludos!
-
:mrgreen: muchas gracias Maestro Suky :mrgreen: y vendran mas cosas, estoy en eso
Saludos
-
Somos pocos que trabajan con Atmel.
Eso debe ser por que no existe algo igual al CCS, es que vamos eso de que te hagas un codigo escribiendo solo:
#configure RS-232 Tx,_Rx, Datos enviados, datos recibidos, si son iguales entonces #Escribir_LCD "son iguales", si no entonces, Printer_USB "error en puerto usb·..
:D
Algo asi..yo me atrevo a decir y pasar por ignorante, a que existe mas proyectos de PIC por el CCS, que si fuera por solo C o Assembler, creo que tendríamos una décima parte de lo que existe hoy en día .. :mrgreen:
Ya me estoy preparando para unirme a la corriente Atmel...
Saludos
-
Felicitaciones RAFA!!!!
y gracias por compartirlo.