Preguntas y comentarios Software BASCOM

Hellmut1956

Referente
Mensajes
1.300
Puntos
36
Ubicación
Mammendorf, Alemania
Hola amigos

Favor poner aquí toda pregunta, comentario, sugerencia o problema que enfrenten. est hilo es para hablar sobre lo que aprece en el hilo de la software en este foro!
 
Sé que te daré más trabajo, pero si quiero aprender no conozco otra forma.

En principio te diré que el código es más o menos entendible (partiendo de la base que desconozco el basic).

Has obviado que desconocemos el bascom avr y por lo tanto no sabemos ni como configurarlo para poder empezar (no me refiero a los fuses que si lo explicaste bien) , más bien al programa en general.

Echo de menos un esquema eléctrico de los circuitos que propones (no estaría de más, así nos familiarizaremos con las conexiones del micro)

Esto es solo el comienzo.

Saludos y a seguir que quiero aprender a programas los atmel.
 
Adelante, que no hay mejor forma de aprender que preguntando!

Déjame empezar por los esquemas! Los esquemas son los de la "Tarjeta experimental" de la cual todos los esquemas están disponibles. Es que eso es la función de la tarjeta experimental, brindar una plataforma común en la cual podamos ejecutar los programas y que contenga todo aquello que se requiera para experimetar con las posibilidades del controlador y del compilador!

A diferencia del horror para novatos de configurar la "cedena de instrumentos", en inglés toolchain" que se conoce de los compiladores para el lenguage "C" por ejemplo.

Aquí es sencillísimo. Arranca el programa, entre el programa copiandolo del hilo, presiona el botón de compilación, y listo. Conecta el adaptador al ordenador y a la tarjeta experimental, selecciona el botón en el programa para grabar y listó est`´a. el resto lo encuentras en el hilo.
 
Querido profesor ( no pensar que estamos de mariconeo ………. :P :P :P ).



Enterado que tendré que poner el esquema de la placa experimental como fondo de pantalla.

En parte tienes razón en cuanto a sacar el hex del compilador doy prueba de ello con esta simulación.

En cuanto a sacarle todo el jugo al programa no tanto, pero seguiré estudiando
 

Archivos adjuntos

  • test 1,simulado proteus.jpg
    test 1,simulado proteus.jpg
    163,1 KB · Visitas: 113
Hola amigo

Aquí estoy para ayudar y para aprender yo mismo! Tomemos la acción de "sacarle el jugo" a todos los prógramas que he e hiré surtiendo en el hilo correspondiente!
Com se puede ver muy bien en tu esquema, un "1" en la salida del pin pone una tensión de 5V por sobre el LED, la resistencia debería ser de 110 Ohm limita la corriente a algo menos de 20mA, un valor alto pero dentro de los límites del LED y un valor tolerable para el controlador! Yo le pondría mínimo una resistencia de 1k, lo que reduce la luminosidad del LED por muy poco, pero reduce la corriente que debe ser suministrada por el controlador. Esto es importante por varias razones. La una es que no se pierde función en forma relevante, la luminosidad del LED, y segundo es que se reduce el estrés térmico del controlador y del circuito detras del pin en el controlador. Es buena práctica limitar el flujo de corriente por cualquier componente. Flujo de corriente es generar calor, y calor acelera el envejecimiento y el estrés de una componente.

Un cordial saludo

Hellmut
 
Hola de amigo, aquí de nuevo para molestar un poquito.

Empiezo.

Una curiosidad si ves la simulación de arriba, se puede observar que el pin reset tiene valor 1, como puede ser?....igual es problema del proteus.


Una sugerencia (ya sé que es trabajo extra para ti), podrías poner las sentencias que vamos utilizando en el otro hilo (junto con la sintaxis y un breve ejemplo).


Un comentario como profesor en bascom avr no te puedo evaluar ahora mismo, ya que es mi segundo día de clase, pero como persona creo que sí, ya que hasta el día de hoy y después he haber seguido todos tus hilos y comentarios que haces en torno a nuestro hobby , veo que siempre intentas ayudar sin esperar nada a cambio y eso solo lo hace las BUENAS PERSONAS (que conste que esto no lo digo para que me subas la nota…..jajajaj)


Balance de mi segundo día.

Creo que avanzo paso a paso (aunque hay poca información del bascom en castellano y esto me limitara).

Hoy he creado mi primer programa basándome en las pocas “sentencias que se” y por supuesto en el primer ejemplo.


Lo título: SEMAFORO .como su propio nombre indica lo que hace es apagar y encender tres led en una secuencia semafórica.

Quiero que veas el código y me digas como lo puedo mejorar, ya que todo código es susceptible de ser mejorado.

Funciona ya que lo simule en proteus dejo video para quien lo quiera ver.


http://www.youtube.com/watch?v=oO8Of3c70dE" onclick="window.open(this.href);return false;

PD desde aquí pido a todos los que tenga información de BASCON AVR en castellano que por favor se ponga en contacto con este hilo.

Saludos a todos y por supuesto al profe.

Código:
'Proyecto: Semaforo por un novato
'
'Controlador: ATMega 8-16
'Bascom-Versión: 1.11.9.0
'
'Programa 1: semaforo
'
'Hardware:
'
'LED Rojo conectado a Port D.0
' LED Amarillo conectado a Port D.1
'  LED Verde conectado a Port D.2
'
'
'
'15-04-2010 Carptroya
'
'******************************************************

'======================================================
'Configuración del sistema
'======================================================
'Definiciones para el Mega 8
$regfile "m8def.dat"

'Definición del la frecuencia (1Mhz)
$crystal = 1000000

'======================================================
'Configuraciones
'======================================================
Config Portd.0 = Output
 Config Portd.1 = Output
 Config Portd.2 = Output
'======================================================
'Declaraciones
'======================================================
 Rojo Alias Portd.0
 Amarillo Alias Portd.1
  Verde Alias Portd.2
'======================================================
'Inicialización
'======================================================
 Rojo = 1
 Amarillo = 0
 Verde = 0

'======================================================
'Bucle principal del Programa
'======================================================

Do
  Verde = 0

  Rojo = 1

Wait 5

Rojo = 0
Amarillo = 1


Wait 1

Amarillo = 0
Verde = 1

Wait 3

Loop



'Fin del programa
End
 
Empecemos con lo bueno. El programa lo verifiqué con el compilador BASCOM y no tiene errores sintácticos.

Segundo, es bueno que uses el esquema que proporcioné, pues esto facilita la lectura y ayuda a no olvidarse de nada.

Se pueden definir todos los pines de un portal como salidas, lo que acorta el código escrito.

Config Portd = Output

Puesto en tu programa funciona.

Lo siguiente, que es puramente formal. Asignas valores a las variables en la inicialización y en el programa nunca vuelves a utilizar ese combinación. El resultado es, que prácticamente la configuración de la inicialización nunca será visible. Es buena práctica inicializar las variables, pero yo las pondría en tu caso a todas en "0" y sumaría la combinación de la inicialización a la lista debajo.

Usando la sentencia Wait significa que el controlador debe esperar sin acción alguna durante el número de milisegundos indicado por el dígito. Tener un LED encendido por 1ms o 5 ms es un tiempo tan corto que prácticamente no es perceptible. La impresión visual será que los 3 LEDs están encendidos permanentemente.

Favor, pública la lista de sentencias que deseas tener traducida y con mucho gusto así lo haré. Has leído los programas que he publicado en el hilo de software? Allí estoy mostrando paso a paso como usar diferentes funciones del controlador y las instrucciones de BASCOM correspondientes.

Tomando el formato de las sentencias traducidas me imagino que se podrá deducir por analogía la información de otras sentencias usando el manual de referencia de BASCOM en inglés.
 
Respondo:

WAIT según manual = espera en segundos.
WAITMS “ =espera en milisegundos
WAITUS “ =espera en microsegundos.

Te lo digo para todo aquel que lea no se confunda.

El código que puse anteriormente está basado en el primer post de tu hilo “Tarjeta Experimental – Software”.

En cuando a traducidas me refería a las que pones en los distintos código, que aunque están bien explicadas no estaría de mas para tener un manual de consulta.

Ahora estoy estudiando el segundo ejemplo que es leer el interuptor , ya te comunicare mis dudas al respecto.

saludos
 
Esta sentencia la utilizaste en los dos primeros ejemplos.

Entiendo corrígeme si estoy equivocado.

TOGGLE invierte el valor de un bit o variable numérica.


Ejemplo A=0 …………..A=1
Ejemplo variable motor =00000001 (binario)…………..motor=11111110

Sé que esta no es la sintaxis en bascom que habrá que definir con la sentencia DIM por eso ya te pido que me diga como poder hacerla y que me ponga un ejemplo para comprender mejor.

Continuara….
 
IF THEN…………..ELSE
END IF

Pregunto:

Es una sentencia condicional si se cumple la condición de IF continua el programa, y si no es así salta a la línea ELSE ¿? Y para termina con la sentencia se utiliza END IF………..continuando con el programa peincipal?



saludos
 
Te planteo un ejercicio al respecto.

Será el que desarrolle con los servo pero ahora con este micro atmega8.
Serán dos pulsadores. Si ninguno esta pulsado pondrá el servo en el centro si pulsamos uno hacia la izquierda y si pulsamos otro a la derecha.

Para esto con la sentencia IF THE creo que es suficiente (igual hay otra mas efectivas).

No sé si lo que digo es una burrada pero preguntando se aprende.

Paso a continuación a ponerte el programa principal , se supone que tenemos definido todo lo demás.

La idea es esta :

D0

IF pulsador1=1 THE

servo a la derecha

ELSE
END IF

IF pulsador2=1 THE


Servo izquierda

ELSE

END IF

Servo centro
LOOP
END.


Espero tus respuestas saludos.
 
Entre el "ELSE" y "ENDIF" pones el servo centro.
Es buena práctica de programación darle a un programa una acción definid para el caso "otros", que es lo que hace "ELSE".
Como sentencia para poner el servo en la posición deseada usas la sentencia "PULSEOUT".
Lo que falta es la repetición de esta acción cada 20ms, lo que se haria fuera de la sentencia "IF ... Then ... ELSE ... ENDIF" . Para esto podrías usar un contador!
 
Amigo hellmut este código seguro que no es muy ortodoxo, pero me funciono.

Cuando tengas tiempo me gustaría que lo simulases.


Código:
   '******************************************************
'Projekt: Atmel-Tarjeta Experimental
'
'Prozessor: ATMega 8-16
'Bascom-Version: 1.11.9.8
'
'Programm 2: comprobador servo
'
'Hardware:
'
'  Interuptor derecho Pin portd.0
'
'   interuptor izquierdo Pin portd.1
'
'   interuptor centro Pin  portd.2
'
'  servo Pin portd.7
'
'
' 17-04-2010  Carptroya
'
'******************************************************

'======================================================
'Konfiguración de Sistema
'======================================================
'Definición del  Mega 8
$regfile "m8def.dat"

'Indicación de la frecuencia de operación del controlador (1Mhz)
$crystal = 1000000

'======================================================
'Configuraciones
'======================================================
Config Portd.0 = Input
 Config Portd.1 = Input
   Config Portd.2 = Input
Config Portd.7 = Output

'======================================================
'Declaraciones
'======================================================
Derecho Alias Pind.0
Izquierdo Alias Pind.1
Centro Alias Pind.2
Servo Alias Portd.7

'======================================================
'Inicialisaciones
'======================================================
Derecho = 1
Izquierdo = 1
Centro = 1
Servo = 0

'======================================================
'Programa principal
'======================================================

Do




If Derecho = 0 Then

   Servo = 1
   Waitms 2
   Servo = 0
   Waitms 18
Else

End If

If Izquierdo = 0 Then

   Servo = 1
   Waitms 1
   Servo = 0
   Waitms 19
Else

End If

If Centro = 0 Then

   Servo = 1
   Waitus 1500
   Servo = 0
   Waitus 18500
Else

End If

Loop

'Fin del programa
End

Por otro lado me gustaría que tu hicieses el mismo programa con las sentencias correctas.

Espero tus criticas, saludos
 
Intentando depurar el código estuve leyendo un manual con ejemplos (tu sabes cual es),en

el cual me di cuenta que la sentencia “ ELSE”se puede quitar , acto seguido lo comprobé y es afirmativa mi deducción.

Por lo tanto el código expuesto por mi se puede utilizar sin ELSE.

Errores que cometí, el primero fue de sintaxis ya que a la sentencia WAIT le puse un “=”para definir un tiempo, con lo cual al compilar me daba error.

El segundo fue que yo utilizaba IF portd.0 THE………con lo cual nunca podría entrar en la sentencia, lo correcto fue poner IF PIND.0 THE y ya todo funciono correctamente.

También quiero decir que utilizando el código con wait para las demora o retardos dejamos inoperativo el micro , ya que tiene que estar esperando si hacer otra cosa y por lo tanto solo podríamos controlar un solo servo.

La solución para esto sería poder utilizar las interrupciones con los módulos trimer, ya que según su datashill tiene tres módulos, dos de 8 bits y uno de 16 .

Desde aquí te pido que por favor, cuando tengas tiempo comentes como configurar los trimer y las sentencias relacionadas con el , asi como unos pequeños ejemplos para entenderlo mejor.

PD. Perdona por preguntar y darte tanto trabajo.


saludos
 
Atrás
Arriba