Turorial AVR
Turorial AVR
Turorial AVR
Facultad de Ingeniería en
INTRODUCCIÓN A BASCOM
Bascom ……………………………………………………………………………... 6
AVR ………………………………………………………………………………… 7
Su Pc ………………………………………………………………………………... 7
EL SOFTWARE DE PROGRAMACIÓN
COMUNICACIÓN
Interrupciones ………………………………………………………….....…. 82
Después de que usted ha descargado el archivo ZIP que usted necesita, debe ABRIR el
archivo. En Windows XP, para la versión de la DEMOSTRACIÓN, corra los
setupdemo.exe. (http://www.atmel.com : (http://www.ckuehnel.ch)
Usted puede seleccionar la direccion y camino dónde le gusta que BASCOM sea
instalado. Usted puede también acepte el valor predefinido que es
Usted puede escoger crear en un nuevo Grupo del Programa llamdo 'BASCOM-AVR', o
usted pueda modificar el nombre, o instale en un Grupo del Programa existente,
presione el boton Next después de que usted ha hecho su opción
3
Octavo Electrónica 2009 – 2010 FISEI - UTA
Después de que los archivos principales se instalan, algunos archivos
adicionales se instalarán.
4
Octavo Electrónica 2009 – 2010 FISEI - UTA
La carpeta del programa BASCOM se crea:
Usted puede ver los "Raed me" y archivos de la Licencia y usted puede
empezar BASCOMAVR.
FISEI
5
Octavo Electrónica 2009 – 2010 FISEI - UTA
FISEI
Lo bueno de Bascom es que se puede empezar con una versión libre Bascom, y
descargar el Bascom-AVR Demo zip-file), cuyo único límite es la 4k tamaño del código
generado (esto fue 2k hasta 2005 ). The obvious choice of AVR microcontroller would
then be one of the (2k flash) ATTiny models or the much-used (but now obsolete)
AT90S2313 which will let you get acquainted with Bascom and AVR microcontrollers.
La elección obvia de microcontrolador AVR sería uno de los flash (2K) modelos
ATTINY o el tan usado (pero ahora obsoleto) AT90S2313 que le permitirá
familiarizarse con Bascom y microcontroladores AVR.
AVR es una familia de microcontroladores de 8 bits con una amplia gama de variantes
diferentes en:
Tamaño del programa de la memoria (flash)
Tamaño de la memoria EEPROM
Número de pines I / O
Número de servicios tales como características de los chips UART y ADC
Paquete de formularios
SU PC
Su PC debe ejecutar W95 o superior, consulte la página Bascom AVR para más
detalles. Si usted quiere construir su propio programador sencillo, el PC debe tener un
puerto paralelo o en serie. Si su PC funciona NT, 2000 o XP, acceso al puerto paralelo
requiere un pequeño programa independiente. Detalles de seguir adelante.
FISEI
8
Octavo Electrónica 2009 – 2010 FISEI - UTA
El software de programación
Obtener TWinAVR.
TWinAVR de instalación
TWinAVR tiene que ser configurado para usar el Vcc generados por algunos pines del
puerto paralelo para cambiar el buffer.
FISEI
En esta ventana desactive la casilla Vcc. Esto significa que sólo se genera Vcc
TWinAVR mientras está activo. Si a continuación, utilizar esta Vcc para cambiar el
buffer 74HCT244, el bufferports será aislado TWinAVR cuando no está activo, dando
lugar a "En la programación del sistema. Aproveche esta oportunidad para comprobar la
configuración en paralelo: si el puerto no está en el estándar de la dirección "y 378",
(comprobarlo en la BIOS del PC si es necesario) cambiar la configuración LPT en
consecuencia.
FISEI
Si está utilizando Windows NT, 2000 o XP, TWinAVR no tendrán acceso directo al
puerto paralelo. Una solución es usar un programa piloto especial que proporciona
acceso directo. Uno de ellos es un programa de Userport. Debe ser instalado y la
configuración antes de utilizar TWinAVR. En primer lugar, Userport descarga.
Descomprima en un directorio, y Userport.sys copia de este directorio C: \ Windows \
System32 \ Drivers. Leer Userport.pdf. Userport.exe de inicio.
Este es el programa con el cual iniciaremos nuestro primeros pasos en el mundo de los
AVR, este programa te enseñara a configura los puertos de nuestro microcontrolador.
En primer lugar, configurar Bascom para iniciar TWinAvr con el nombre correcto de la
bandeja de archivo se produce después de una compilación exitosa.
A continuación, proceder como sigue
Inicio Bascom
Seleccione Archivo / Nuevo
FISEI
“El atmega8 posee 8kb de memoria flash, 512 bytes eçde EEPOM, y 1KB de
SRAM, posee 2 timers, 2 de 8 bits y uno de 16 bits…Posee un reloj de tiempo real
(RTC) con oscilador externo.. y 6 canales de ADC… y por supuesto comunicación
serial…”
(A medida que escribe Bascom va a cambiar el texto del programa de color de acuerdo a
las palabras clave que reconoce).
En este simple de los programas, PORTB del AVR ATMEGA8 por primera vez
configurado para funcionar como una salida. PORTB Entonces se establece en el valor
decimal 255. Los ocho bits de PORTB se establece ahora en valor binario "uno". Tenga
en cuenta que sólo la parte inferior de siete bits están disponibles en el exterior como
alfileres PB0 hasta PB6. Si se conecta cualquiera de estos pines a un LED con un
FISEI
resistor limitador de corriente a tierra, la corriente fluirá desde el AVR a los LED. El
LED está encendido. Después de esperar durante 1000 milisegundos, PORTB se
14
Octavo Electrónica 2009 – 2010 FISEI - UTA
establece en el valor decimal 0. Ahora, todos los pines se establecen en el valor binario
de "cero" y no pasará corriente del AVR a los LED. El LED está apagado. Después de
esperar otros 1000 milisegundos, se repite el ciclo. El resultado es que el LED
encenderse y apagarse.
Después de introducir el texto del programa, seleccione Archivo / Guardar como y
seleccione una ubicación y un nombre para el archivo. Supongamos que usted
seleccione 'ledflasher.bas' como un nombre de archivo. Como Bascom genera gran
cantidad de archivos después de una compilación, es una buena idea crear directorios
separados para cada proyecto Bascom que trabajar.
Bascom ahora se puede contar acerca de su configuración del controlador de AVR.
Seleccione Opciones / Compiler / Chip
Por defecto, la velocidad de reloj es de 4MHz, pero como usamos un cristal de 1MHz,
seleccione 1000000 de la lista de «frecuencia»
Ahora vamos a aprender como configurar cada bit de los diferentes puertos como salida
o entrada, para ello vamos a realizar el siguiente ejemplo.
FISEI
'* DECIR BREVEMENTO QUE DEPENDIENDO DE LOS VALORES QUE DEMOS A ESTOS
PARAMETROS
'* OBTENDREMOS SALIDAS O ENTRADAS EN UN PUERTO...
'* PARA ESTE EJEMPLO VAMOS A CONFIGURAR BIT A BIT EL PORTB PARA QUE SEAN
SALIDAS EN 0 '* LOGICO
'* POR LO QUE LOS VALORES DEBEN SER DDRn 1 Y PORTn 0..
'* Configuro todo el puerto B.0 como salida
Ddrb.0 = 1
Portb.0 = 0
' Nombre de subrutina
Parpadear:
' Activar el puerto B.0
Portb.0 = 1
' Espero 1 segundo
Wait 1
' Apagar el puerto B.0
Portb.0 = 0
' Espero 1 segundo
Wait 1
' ir a la subrutina parpadear
Goto Parpadear
End
FISEI
Una vez realizado este proyecto siga intentando con diferentes tiempos de Wait,
recuerde que son en segundos, pruebe Wait 3 verá que el parpadeo es mas lento, así
mismo ponga diferentes valores entre los 2 Wait, vera diferentes efectos. Si desea
tiempos mas pequeños debe usar Waitms, este se mide en milisegundos.
Portb = 20
Wait 3
Goto Semaforo
End
Wait 3
Goto Semaforo
End
Rojo1 = 1
Verde1 = 1
Podemos escribirlo asi:
Rojo1 = 1 : Verde1 = 1
Discoteca:
Portb = 1
Gosub Pause
Portb = 2
Gosub Pause
Portb = 4
Gosub Pause
Portb = 8
Gosub Pause
Portb = 16
Gosub Pause
Portb = 32
Gosub Pause
Portb = 64
Gosub Pause
Portb = 128
Gosub Pause
Goto Discoteca
Pause:
Waitms 300
Return
End
Dim Repe As Bit ; crea una variable y asigna un tamaño de un bit, es decir 0 o 1
Dim Repe As Byte ; crea una variable y asigna un tamaño de 8 bits, es decir 0 a 255
Dim Repe As Word ; crea una variable y asigna un tamaño de 2 bytes, es decir 0 a
65535
Para nuestro caso como queremos hacer 5 repeticiones, nos corresponde crear un BYTE
que nos permite almacenar un número hasta 255.
$regfile = "m8def.dat"
$crystal = 1000000
Config Portb = Output
Led1 Alias Pinb.0
' creo una variable llamada Repe con
' longitud BYTE
Dim Repe As Byte
Programa:
' ciclo FOR
For Repe = 1 To 5
Led1 = 1
Waitms 500
Led1 = 0
Waitms 500
Next
Wait 2
For Repe = 1 To 5
Led1 = 1
Waitms 500
Led1 = 0
Waitms 500
Next
Wait 3
Goto Programa
End
FISEI
$regfile = "m8def.dat"
$crystal = 1000000
Config Portb = Output
' creo una variable llamada I con
' longitud BYTE
Dim I As Byte
Portb = 1
Programa:
' ciclo FOR
For I = 1 To 7
Rotate Portb , Left
Waitms 150
Next
For I = 1 To 7
Rotate Portb , Right
Waitms 150
Next
Return
Goto Programa
End
FISEI
Nota: No olvide cargar al Puerto con 1, porque si no lo hace significa que vale cero (0)
y esto multiplicado por 2 siempre dará cero, en consecuencia nunca veríamos el
desplazamiento.
IF pato > 10 THEN Majo ; si la variable pato es mayor que 35 ejecuta Majo
'*** DECIR BREVEMENTO QUE DEPENDIENDO DE LOS VALORES QUE DEMOS A ESTOS
'*** PARAMETROS OBTENDREMOS SALIDAS O ENTRADAS EN UN PUERTO...
'*** PARA ESTE EJEMPLO VAMOS A CONFIGURAR BIT A BIT EL PORTB PARA QUE
'*** SEAN SALIDAS EN 0 LOGICO
'*** POR LO QUE LOS VALORES DEBEN SER DDRn 1 Y PORTn 0..
' Configuro todo el puerto B.0 como entrada, con resistencia push pull
Ddrb.0 = 0
Portb.0 = 0
' Configuro todo el puerto C.0 como salida
Ddrc.0 = 1
Portc.0 = 0
Programa:
If Pinb.0 = 0 Then Goto Encender
Goto Programa
Encender:
Portc.0 = 1
Wait 3
Portc.0 = 0
Goto Programa
End
Pulsar:
Portb = Num
If Pinc.0 = 0 Then Goto Contar
Goto Pulsar
Contar:
Num = Num + 1
Goto Pulsar
End
Si tuvo la oportunidad de ver funcionando este proyecto, se dará cuenta que cada que se
pulsa el botón el contador aumenta demasiado, esto es como se dijo antes por el AVR
trabaja a gran velocidad cada instrucción y cuando una persona presione el botón, por lo
menos necesita de 100ms de tiempo para soltarlo, en este tiempo el AVR ya sumo
alrededor de 25000 veces. Para solucionar este problema proponemos hacer un
programa de antirrobote de tecla, en el cual si presionamos el botón, este envía a un
programa que lo mantiene encerrado, únicamente sale de esta subrutina en el momento
que el pulsador deja de ser presionado, a continuación incluimos un WAITMS 200, que
es necesario para que en el momento de soltar la tecla se estabilice la señal.
$regfile = "m8def.dat"
$crystal = 1000000
Ddrc.0 = 0
Portc.0 = 1
Config Portb = Output
Dim Num As Byte
Num = 0
Pulsar:
Portb = Num
If Pinc.0 = 0 Then Goto Contar
Goto Pulsar
Contar:
If Pinc.0 = 0 Then Goto Contar
Waitms 200
Num = Num + 1
Goto Pulsar
End
Para conocer más sobre los operadores matemáticos disponible como: resta
FISEI
$regfile = "m8def.dat"
$crystal = 1000000
Ddrb.0 = 0
Portb.0 = 1
Ddrb.1 = 0
Portb.1 = 1
Ddrc.0 = 1
Portc.0 = 0
$regfile = "m8def.dat"
$crystal = 1000000
Config Portc = Output
Dim Numero As Byte
Encerar:
Numero = 0
Visualizar:
Portc = Numero
Waitms 500
If Numero = 9 Then Goto
Encerar
Numero = Numero + 1
Goto Visualizar
End
Aumentar:
If Pinb.0 = 0 Then Goto
Aumentar
Waitms 200
If Numero = 9 Then Goto Encerar
Numero = Numero + 1
Goto Visualizar
End
ponerlos en cero lógicos para que los segmentos se enciendan (recuerde que el display
es ánodo común), y los demás 1 lógico para que permanezcan apagados:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Dim I As Byte
Prog:
For I = 0 To 5
Portd = Lookup(i , Secuencia)
Waitms 500
Next
Goto Prog
End
Secuencia:
Data &B1000000 , &B1111001 , &B0100100 , &B0110000 , &B0011001 , &B0010010
mantenemos en nivel alto, al mismo tiempo sacamos el numero 7 por los bits menos
significativos del puerto B, y así consecutivamente, el tiempo que debemos mantener
Ejemplo: para sacar el número 8 en las centenas debemos sacar (176 + 8), es decir el
número 184 porque si analizamos en código binario, tenemos que los bits mas bajos
entran al CI 7447, y los bits mas altos, son los encargados de encender el display que le
corresponden a las centenas.
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Visualizar:
' activo transistor de unidades y presento el 1
Portd = 224 + 1
Waitms 5
' activo transistor de decenas y presento el 2
Portd = 208 + 2
Waitms 5
' activo transistor de centenas y presento el 3
Portd = 176 + 3
Waitms 5
FISEI
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Ddrc.0 = 1
Portc.0 = 0
Ddrc.1 = 0
Portc.1 = 1
Ddrc.2 = 0
Portc.2 = 1
Ddrc.3 = 0
Portc.3 = 1
End
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Config Portb = Output
Dim X As Byte
Texto:
For X = 1 To 20
Portd = 14 : Portb = 8
Waitms 5
Portd = 13 : Portb = 71
Waitms 5
Portd = 11 : Portb = 64
Waitms 5
Portd = 7 : Portb = 9
Waitms 5
Next
For X = 1 To 20
Portd = 14 : Portb = 127
Waitms 5
Portd = 13 : Portb = 8
Waitms 5
Portd = 11 : Portb = 71
Waitms 5
Portd = 7 : Portb = 64
Waitms 5
Next
For X = 1 To 20
Portd = 14 : Portb = 9
Waitms 5
Portd = 13 : Portb = 127
Waitms 5
Portd = 11 : Portb = 8
Waitms 5
Portd = 7 : Portb = 71
Waitms 5
Next
FISEI
For X = 1 To 20
Portd = 14 : Portb = 71
Waitms 5
Portd = 13 : Portb = 64
Waitms 5
Portd = 11 : Portb = 9
Waitms 5
Portd = 7 : Portb = 127
Waitms 5
Next
Goto Texto
End
Los módulos LCD (Display de Cristal Líquidos), son utilizados para mostrar mensajes
que indican al operario es estado de la maquina, o para dar instrucciones de manejo,
Mostar valores, etc. El LCD permite la comunicación entre las maquinas y los humanos,
este puede mostrar cualquier carácter ASCII, y consume mucho menos que los display
de 7 segmentos, existe de varias presentaciones por ejemplo de 2 líneas por 8 caracteres,
2x16, 2x20, 4x20, 4x40, etc. Sin backlight (14 pines) o con backlight (16 pines,
iluminado de pantalla), el LCD más popular es el 2x16, 2 líneas de 16 caracteres cada
una.
Fotografía de un LCD 2x16
FISEI
Bascom puede manejar los dos tipos principales de pantallas de cristal líquido:
alfanuméricos y gráficos. Por el momento, vamos a preocuparnos por el tipo más común
alfanuméricos. Este tipo de pantalla LCD puede mostrar los caracteres, números y
caracteres especiales. El tipo más común de LCD alfanumérico utiliza un Hitachi
HD44780 como controlador de pantalla. Cuando usted no está seguro acerca de qué tipo
de pantalla que están sosteniendo en sus manos, sólo tiene que mirar a las
denominaciones de chips en la espalda. Si uno de estos dice HD44780 estás a salvo.
Bascom tiene una configuración por defecto para la conexión de la pantalla LCD.
Options / Compiler / LCD
FISEI
La pantalla LCD alfanumérico estándar tiene 14 pins. Pin número 1 es la tierra. Pin
número 5 es R / W y también está conectado a tierra. Pin número 2 es Vcc, va a +5 V.
Algunos LCD no tolerará una fuente de alimentación con tensión de salida de un lento
aumento. Pin número 3 es para el contraste del LCD. Con la mayoría de las pantallas se
puede conectar el pin de contraste a tierra. Por un contraste óptimo, en algunas pantallas
se necesita una tensión ligeramente positiva en este pin. Uso de un potenciómetro entre
+5 V y tierra debe dar una configuración óptima para la mayoría de las pantallas. Los
números de PIN 4 (RS), 6 (E) y 11, 12, 13 y 14 están conectados a la controladora como
se muestra en el esquema. PIN números 7, 8, 9 y 10 se puede quedar desconectados.
Tenga en cuenta que D5, D6 y D7 son compartidos con MOSI, miso y SCK. Si usted
tiene una pantalla LCD con backlight LED que puede tener un 16 pines en el PCB del
LCD. Pins 15 y 16 son para la luz de fondo. Si estos pines no tienen otras indicaciones,
intente una alimentación de +5 V con un resistor limitador de corriente de unos pocos
cientos de ohmios para averiguar cuál es el cátodo y el ánodo. A veces la luz de fondo
LED tiene un conector separado de los otros 14 pines.
FISEI
Config Lcd = 16 * 2
Config lcdpin = PIN, DB4 = PORTB.1, DB5 = PORTB.2, DB6 = PORTB.3,
DB7 = PORTB.4, E = PORTB.5, RS = PORTB.6
Config Lcdmode = Port
Do
' borrar la pantalla
Cls
' Presento en la lcd HELLO
Lcd "Hello " ; Count
Count = Count + 1
Wait 1
Loop
End
Se debe entender que existe un cursor que aunque no lo vemos, pues es este el que
indica donde aparecerá la siguiente letra, para poder entender haremos un ejercicio
completo, así podrán aprender más del LCD y las funciones de cada uno de los
comandos. Primero que nada haremos visible el cursor y luego pondremos Wait para
poder ver el funcionamiento.
El siguiente programa muestra algunos de los comandos que pueden ser utilizados con
la pantalla LCD.
FISEI
Dar el un clic en cualquier cuadro para que este se haga negro, o clic en un cuadro negra
para que se haga blanco. Hacer un símbolo de la cruz
Cambiar el "?" por el número "0" y eliminar el comentario después del carácter '
FISEI
Deflcdchar 0 , 32 , 4 , 4 , 31 , 4 , 4 , 32 , 32
Repita este proceso otras cuatro veces (usa tu imaginación) hasta que su programa es el
siguiente:
$regfile = "m8def.dat"
$crystal = 1000000
' proporción del baud
$baud = 19200
' uso 32 predefinido para la pila del hardware
$hwstack = 32
' so 10 predefinido para la pila de SW
$swstack = 10
' uso 40 predefinido para el espacio del marco
$framesize = 40
Deflcdchar 0 , 32 , 4 , 4 , 31 , 4 , 4 , 32 , 32
Deflcdchar 1 , 32 , 2 , 20 , 14 , 5 , 8 , 32 , 32
Deflcdchar 2 , 32 , 2 , 26 , 4 , 11 , 8 , 32 , 32
Deflcdchar 3 , 32 , 17 , 10 , 4 , 10 , 17 , 32 , 32
Deflcdchar 4 , 32 , 8 , 11 , 4 , 26 , 2 , 32 , 32
Deflcdchar 5 , 32 , 8 , 5 , 14 , 20 , 2 , 32 , 32
Cls
Do
For Star = 0 To 5 Step 1
Locate 1 , 16
Lcd Chr(star)
Next Star
Loop
End
DECLARACIÓN PULSEIN. Sirve para contar el número de pulsos que ingresan por
un pin en un determinado tiempo, este a su vez lo guarda en una variable para su
posterior procesamiento, la manera de utilizarlo es la siguiente.
Locate 2 , 6
GENERACIÓN DE SONIDO
El software Bascom es capaz de sacar las frecuencias especificadas por un pin del AVR,
para esto aprenderemos la declaración SOUND.
Quiere decir sacar una frecuencia de 65635 ciclos durante 10 segundos por el puerto
B.0.
En esta práctica lo utilizaremos para generar un sonido a través de un piezoeléctrico o
por medio de un parlante.
FISEI
$regfile = "m8def.dat"
$crystal = 1000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40
' Configuro todo el puerto C.0 como salida
Ddrc.0 = 1
' led rojo
Portc.0 = 0
Speaker Alias Portc.0
Do
Sound Speaker , 125 , 4
Sound Speaker , 123 , 5
Wait 2
Loop
Pruebe con algunas combinaciones de tonos, así como también con diferentes tiempos y
verá que bien pude componer una melodía.
Esta practica tiene como objetivo generar tonos DTMF (Dual tono Multifrecuency) a
través de un AVR, como los que genera cualquier teléfono fijo o celular, estos tonos no
son nada mas que el envió de dos frecuencias especificas asignadas a cada tecla, estas
frecuencias podemos ver en la figura siguiente, lo que sucede cuando pulsamos una
tecla, es que envía una frecuencia baja y luego una segunda frecuencia del grupo alto,
esto podríamos hacerlo con la declaración PULSEOUT.
FISEI
Esta genera automáticamente los tonos duales correspondientes a cada tecla y los envía
cada una con intervalos de 50 milisegundos, aunque estos los podemos cambiar.
Para nuestro caso, para saber que puerto es el que envía la señal DTMF, debemos acudir
a la hoja de dados del ATMEGA8 y buscamos el puerto con características OC1, para
nuestro AVR es el pin B.1.
FISEI
En la figura siguiente se muestra el diagrama básico de conexión para poder hacer una
llamada telefónica:
La resistencia de 560Ohm a 1 vatio paralela a la red telefónica, sirve para simular la
carga de un teléfono normal, y con esto podremos tener el tono de marcado necesario
para hacer la llamada, además notarán que esta resistencia empieza a disipar calor en
el momento que se une a la red telefónica, esto debido a la cantidad de voltaje que
circula (60 voltios).
El relé hace la conexión y desconexión de la red telefónica, que en este caso sería
como el auricular que cuelga y descuelga el teléfono.
El filtro de 1 uF a 100 voltios, sirve para poder mejorar la onda que sale del AVR y
además como protección para el AVR. Es importante indicar que la red telefónica
suministra alrededor de 60 voltios en DC, por lo que el capacitor debe pasar de 60
voltios y además el lado positivo de la red telefónica debe ir a tierra del AVR y el
negativo hacía el pin del AVR, por lo que necesitaremos la ayuda de un voltímetro
para poder identificar la polaridad de la red.
FISEI
Este proyecto es muy utilizado en sistemas de seguridad, se puede hacer una alarma, la
cual en el momento de violar su seguridad, este realice automáticamente una llamada al
propietario, el propietario en el momento de contestar escuchará una sirena, señal
suficiente para saber que alguien ha activado la alarma, este mismo principio utilizan las
centrales de monitoreo, con la diferencia que en vez de generar un sonido de sirena, se
envía datos en forma serial como: Zona de apertura, hora, estado de batería, etc.
Como se puede ver este programa es un poco largo pero el uso de memoria es mínima
en el AVR.
El funcionamiento es sencillo, solo debemos fijarnos cual fila es la que esta en nivel
bajo y esta es la fila que se esta barriendo, si una de las condiciones encuentra la
igualdad, pues esta es la tecla pulsada.
Ejemplo: Si pulsamos la tecla 6, en algún momento se pondrá en bajo la fila B y
detectara un cambio de estado de 1 a 0 en la columna 3, por lo que:
FISEI
A=0
If Tres = 0 Then Portc = 3
En este caso quedaría un teclado con pulsadores del 0 al 9 y dos teclas de propósito
especial, la tecla asterisco (*) y la tecla numeral (#).
Teclados:
Gosub Barrido : Gosub Ptecla
If Numero = 2 Then Goto Teclatres
Goto Falso1
Teclatres:
Gosub Barrido : Gosub Ptecla
If Numero = 3 Then Goto Teclacuatro
Goto Falso2
Teclacuatro:
Gosub Barrido : Gosub Ptecla
If Numero = 4 Then Goto Openge
Goto Falso3
Openge:
For R = 1 To 2
Waitms 100
Led = 1 : Bip = 1
Waitms 100
Led = 0 : Bip = 0
Next
Door = 1
Wait 1
Door = 0
Goto Teclauno
Falso:
Gosub Barrido : Gosub Ptecla
Falso1:
Gosub Barrido : Gosub Ptecla
Falso2:
Gosub Barrido : Gosub Ptecla
Falso3:
For R = 1 To 3
Wait 1
Led = 1 : Bip = 1
Wait 1
Led = 0 : Bip = 0
Next
Goto Teclauno
End
FISEI
Reseteo Return
Next If Cuatro = 0 Then Numero = 13 :
Teclatres:
Gosub Barrido : Gosub Ptecla
If Numero = Setercer Then Goto
Teclacuatro
Goto Falso2
Teclacuatro:
Gosub Barrido : Gosub Ptecla
If Numero = Setcuart Then Goto
Openge
Goto Falso3
Openge:
For R = 1 To 2
Waitms 100
Led = 1 : Bip = 1
Waitms 100
Led = 0 : Bip = 0
Next
Door = 1
Wait 1
Door = 0
A=1:B=1:C=1:D=1
If Cuatro = 0 Then Goto Grabauno
Goto Teclauno
FISEI
En el esquema de la figura 4 aparece uno de estos motores con dos estatores, sobre cada
uno de los cuales se ha devanado una bobina (1 y U), las cuales se encuentran
conectadas directamente a unos conmutadores de control que, como se verá más
adelante, podrán ser sustituidos por las líneas de entrada y salida de nuestro ordenador
debidamente programadas. Como las bobinas se encuentran distribuidas simétricamente
en torno al estator, el campo magnético creado dependerá en magnitud de la intensidad
FISEI
de corriente por cada fase, y en polaridad magnética, del sentido de la corriente que
circule por cada bobina. De este modo el estator adquiere la magnetización
correspondiente, orientándose el rotor según ella (fig. 4a). Si el interruptor 1.1 se
Los motores paso a paso unipolares, en cuanto a construcción son muy similares a los
anteriormente descritos excepto en el devanado de su estator (fig. 5). En efecto, cada
bobina del estator se encuentra dividida en dos mediante una derivación central
conectada a un terminal de alimentación. De este modo, el sentido de la corriente que
circula a través de la bobina y por consiguiente la polaridad magnética del estator viene
determinada por el terminal al que se conecta la otra línea de la alimentación, a través
de un dispositivo de conmutación. Por consiguiente las medias bobinas de conmutación
hacen que se inviertan los polos magnéticos del estator, en la forma apropiada. Nótese
que en vez de invertir la polaridad de la corriente como se hacía en los M.P.P. bipolares
se conmuta la bobina por donde circula dicha corriente.
FISEI
Existen dos formas básicas de hacer funcional los motores paso a paso atendiendo al
avance del rotor bajo cada impulso de excitación:
Paso completo (full step): El rotor avanza un paso completo por cada pulso de
excitación y para ello su secuencia ha de ser la correspondiente a la expuesta
anteriormente, para un motor como el de la Figura 2, y que se presentada de forma
resumida en la Tabla 1 para ambos sentidos de giro, las X indican los interruptores que
deben estar cerrados (interruptores en ON), mientras que la ausencia de X indica
interruptor abierto (interruptores en OFF).
Medio paso (Half step): Con este modo de funcionamiento el rotor avanza medio paso
por cada pulso de excitación, presentando como principal ventaja una mayor resolución
de paso, ya que disminuye el avance angular (la mitad que en el modo de paso
completo). Para conseguir tal cometido, el modo de excitación consiste en hacerlo
alternativamente sobre dos bobinas y sobre una sola de ellas, según se muestra en la
Tabla siguiente para ambos sentidos de giro.
FISEI
$regfile = "m8def.dat"
$crystal = 4000000
$eeprom
Dim X As Byte
Config Portc = Output
Antihorario:
For X = 1 To 12
Portc = &B0011
Gosub Pausa
Portc = &B0110
Gosub Pausa
Portc = &B1100
Gosub Pausa
Portc = &B1001
Gosub Pausa
Next
Goto Antihorario
Pausa:
Waitms 100
Return
End
Portc = &B0100
Gosub Pausa
Portc = &B1100
UART
Simplex: se dice a la transmisión que puede ocurrir en un solo sentido, sea sólo para
recibir o sólo para transmitir. Una ubicación pude ser un transmisor o un receptor, pero
no ambos a la vez, un ejemplo claro es la radiodifusión, en donde la estación es el
transmisor y los radios son los receptores.
Print “D” envía el carácter ASCII “D” por el puerto de comunicación serial del AVR.
$baud = 19200 Digo que trabajare a 19200 bits/segundo.
$regfile = "m8def.dat"
$crystal = 1000000
$baud = 96000
Config Portb = Output
Inicio:
Portb.0 = 1
Wait 1
Portb.0 = 0
Waitms 500
' envio datos en forma serial
Print "DOG"
Goto Inicio
End
FISEI
Mybaud = 19200
Serin S , 0 , D , 0 , Mybaud , 0 , 8 , 1
' ^ 1 stop bit
' ^---- 8 data bits
' ^------ even parity (0=N, 1 = E, 2=O)
' ^-------------- baud rate
' ^-------------------- pin number
' ^----------------------- port so PORTd.0 and PORTd.1 son usados
' ^--------------------------- for strings pass 0
' ^-------------------------------- variable
FISEI
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.1 ,
Db5 = Portb.2
Config Lcdpin = Pin , Db6 = Portb.3 ,
Db7 = Portb.4
Config Lcdpin = Pin , E = Portb.5 ,
Rs = Portb.6
Config Lcdmode = Port
Inicio:
Serin Dat , 0 , D , 0 , Mybaud , 0 , 8 ,
1
Lcd "Dat"
Goto Inicio
COMUNICACIÓN I²C
I²C significa Inter-IC. e trata de un desarrollo de Philips, que comenzó en los años
ochenta. En aquellos días la electrónica de consumo, como televisores y la radio pasó
por una fase rápida de conseguir más y más usuarios. Lotes de circuitos integrados se
han añadido a estos productos como consecuencia de cableado más complicado en un
circuito impreso de hacinamiento. Philips considera que un bus serie simple era una
solución posible. En lugar de buses de acoplamiento en paralelo IC, todos estos LED's
se conectan a un bus de dos hilos. El bus de dos hilos tiene un cable de datos y de un
reloj, llaman SDA y SCL, respectivamente.
En 1992, el estándar I²C utiliza un esquema de siete bits para el direccionamiento,
permitiendo 128 CI a ser conectados a un bús.
FISEI
El número de CI en un bus I²C está limitado a 128, ya que cada IC necesita únicos siete
bits de dirección.
Estándar I²C
La norma original especifica una velocidad máxima en el bus de 100 kHz. En 1992, se
añadió un modo rápido con una velocidad máxima de 400 kHz. En 1998, una versión 2
fue lanzado. Esta versión tiene un modo de alta velocidad con un máximo de 3.4Mbit/s.
Philips tiene la patente en la I²C eso significa que otros fabricantes de chips que quieren
hacer IC I²C tienen que pagar regalías y deben firmar un acuerdo que indique que se
adhieren a los estándares I²C.
La mayoría de los controladores de AVR de Atmel tiene una interfaz de dos hilos, por
lo menos eso es lo que dice la documentación. Esto es por supuesto una interfaz I²C.
La norma I²C prescribe resistencias en SDA y la línea SCL. Este es uno de los errores
más comunes de la primera vez que utiliza una interfaz de I²C. Olvídese de los "push-
pull y su interfaz no funcionará.
FISEI
Esta es una practica muy básica para aprender sobre la interfaz I²C, consiste en guardar
datos es las cuatro primeras direcciones de la memoria serial, estas son utilizadas para el
almacenamiento de datos que pueden ser necesitados más adelante. Para el caso de la
memoria 24LC04B tiene un espacio de memoria de 4Kbytes, luego de almacenarlos los
volveremos a leer y mostrar en la pantalla LCD.
DECLARACIÓN
...
Config Pind.2 as Input
... ...
Do
... ...
...someting complicated... ...
... ...
If Pind.2 = 0 Then
Lcd "Stop!"
Goto Othertask
End If
Loop
... ...
OtherTask:
FISEI
... ...
$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 32
$swstack = 10
$framesize = 40
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2
Config Lcdpin = Pin , Db6 = Portb.3 , Db7 = Portb.4
Config Lcdpin = Pin , E = Portb.5 , Rs = Portb.6
Config Lcdmode = Port
Config Pind.6 = Output
Config Pind.2 = Input
Config Int0 = Falling
Dim Wtime As Byte
On Int0 Stopbutton
Cls
Wtime = 255
Enable Interrupts
Enable Int0
Do
Set Portd.6
Waitms Wtime
Reset Portd.6
Waitms Wtime
Loop
Stopbutton:
Lcd "stop!"
Wait 1
Cls
Return
End
FISEI
$regfile = "m8def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.1 ,
Db5 = Portb.2
Config Lcdpin = Pin , Db6 = Portb.3 ,
Db7 = Portb.4
Config Lcdpin = Pin , E = Portb.5 ,
Rs = Portb.6
Config Lcdmode = Port
Config Pind.6 = Output
Config Int0 = Low Level
On Int0 Button
Enable Interrupts
Enable Int0
Do
Set Portd.6
Wait 1
Reset Portd.6
Cls
Lcd "power apagado"
Lowerline
Lcd "push boton"
Powerdown
Loop
Button:
Cls
Lcd "despierta!"
Wait 1
Return
End
despierta el controlador
Reset Watchdog
Start Watchdog
Stop Watchdog
$regfile = "m8def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.1 ,
Db5 = Portb.2
Config Lcdpin = Pin , Db6 = Portb.3 ,
Db7 = Portb.4
Config Lcdpin = Pin , E = Portb.5 ,
Rs = Portb.6
Config Lcdmode = Port
Config Pind.6 = Output
Config Watchdog = 2048
Do
Cls
Set Portd.6
Wait 2
Reset Portd.6
Lcd "WD correr"
FISEI
Lowerline
Lcd "wait 2 secs..."
Start Watchdog
Idle
Loop
End
Octavo Electrónica 2009 – 2010 FISEI - UTA 85
Después de que el perro guardián de inicio, el controlador se pone en Idle, detener el
reloj del controlador. Como el organismo de control se ejecuta en un reloj
independiente, se puede y se restablecerá el controlador después de app dos segundos.
Este programador es muy simple y usted puede hacer dentro de 30 minutos. Lo que
necesitas es un terminal DB25 (conector macho), cable, conectores.
Las conexiones que se debe realizar son las siguientes.
CHIPS
AT90S1200
FISEI
AT90S2323
FISEI
AT90S2343
AT90S4433
FISEI
AT90S8515
FISEI
AT90PWM2-3
FISEI
ATtiny12
ATtiny13
FISEI
ATtiny22
ATtiny24
ATtiny25
FISEI
ATtiny44
ATtiny45
FISEI
ATtiny84
ATtiny85
FISEI
ATtiny261
FISEI
ATtiny2313
ATMEGA8
FISEI
ATMEGA32
FISEI
ATMEGA48
FISEI
ATMEGA88
FISEI
ATMEGA1284P
FISEI
ATMEGA162
FISEI
ATMEGA164P
FISEI
ATMEGA168
FISEI
ATMEGA169
FISEI
ATMEGA324P
FISEI
ATMEGA328P
FISEI
ATMEGA406
FISEI
ATMEGA645
FISEI
ATMEGA8535
FISEI