TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: The_Chosen en 28 de Febrero de 2008, 12:01:24
-
Hola amigos, en estos momentos estoy simulando un Atmega 16 en proteus isis:
(http://img144.imageshack.us/img144/112/atmega16op6.png)
EL problema surge con ese modelo, trato de prender un simple led con un botón, pero no me resulta.
También les digo que estoy programando con el AVR-gcc integrado en el AVRstudio 4.
Les dejo el código, ojalá puedan ayudarme a encontrar ese error pequeño, tiene que ser bien chico porque hasta ahora no lo veo :D
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
void main() {
unsigned char i;
//CONFIGURO PINCO COMO SALIDA
DDRB |= 1<<DDB0;
_delay_ms(250);
//PARPADEO LEDS DOS VECES
PORTB |= 1<<PB0;
_delay_ms(250);
PORTB &= ~(1<<PB0);
_delay_ms(250);
PORTB |= 1<<PB0;
_delay_ms(250);
PORTB &= ~(1<<PB0);
// CONFIGURO PINB1 COMO ENTRADA
DDRB &=~(1<<DDB1);
//coloco la resistencia pull-up
PORTB |= 1<<PB1;
for( ;; )
{
asm volatile("nop");
i= PINB & (1<<PB1);
if (i)
{ PINB |=(1<<PB0);
}
}
}
-
Hola
Deberías empezar simulándolo en AVR Studio. Proteus tiene errorcillos de simulación, a mi nunca me dejó simular el pic18f452.
-
Hola
Deberías empezar simulándolo en AVR Studio. Proteus tiene errorcillos de simulación, a mi nunca me dejó simular el pic18f452.
SI, tienes razón, simulé en avr studio y me impresionó el detalle con que sale cada registro. A pesar de que proteus es bueno, igual tiene algunos errores, pero encontré el error al final.
en el ciclo IF en vez de PINB |=(1<<PB0) debi colocar PORTB |=(1<<PB0)
jejjee.
Bueno, seguiré en esto :P
-
Hola
Deberías empezar simulándolo en AVR Studio. Proteus tiene errorcillos de simulación, a mi nunca me dejó simular el pic18f452.
o Tambien lo puedes simular con el AVR SIMULATOR IDE..q hasta orita me entero de su esistencia..tien la misma interfz del psi
edito:perdon este es en basic no en c..
-
Bueno, ahora estoy simulando una pantalla LCD, y para ello encontré una librería LCD lista para usar. AHora el problema que me surgió es que al usar algunas instrucciones propias de la librería, como lcd_init, el compilador no los reconoce.
Lo anterior me sugiere que instalé mal la librería, porque son dos archivos que copié en una de las carpetas del WINavr, lcd.h y lcd.c y luego hice un #include <util/lcd.h> y nada más
¿Alguien podría explicarme como puedo instalar correctamente esta librería ? : :?
-
Hola amigo, por lo que meciona seguro que ha emplanado mal las libreria, lee bien en ayuda y te dara cuenta deberia usar la libreria en el mismo archivo donde tiene escrito el programa, aunque te aconsejo que use AVstudio4 y integra el Winavr tambien, si te da problema ponlo todos por aqui asi te lo podria probar
Saludo
-
Cambia el include a:
#include "patch/lcd.h"
Donde patch es el camino completo a la librería.
Un saludo
-
Hola amigo, por lo que meciona seguro que ha emplanado mal las libreria, lee bien en ayuda y te dara cuenta deberia usar la libreria en el mismo archivo donde tiene escrito el programa, aunque te aconsejo que use AVstudio4 y integra el Winavr tambien, si te da problema ponlo todos por aqui asi te lo podria probar
Saludo
Hola stk500 ya había leído la ayuda con anterioridad, y claro, señala que instales la librería en la carpeta de tus proyectos. Pero aún así el compilador no reconoce lcd.h. Yo uso el AVRstudio 4 SP2 integrado con el WINavr en todo caso.
Cambia el include a:
#include "patch/lcd.h"
Donde patch es el camino completo a la librería.
Un saludo
Hola jfh900, ya había hecho eso, coloqué lo siguiente #include <Inicioatmel/AVRlib/lcd.h> pero igual sigo en las mismas.
Les relato algo más.
En la ayuda del AVRlib :
http://www.mil.ufl.edu/~chrisarnold/components/microcontrollerBoard/AVR/avrlib/docs/html/index.html
Sale que debo crear o modificar la variable de entorno AVRLIB. Me metí a editar el registro directamente, y cambié el directorio original :
AVRLIB = D:\Inicioatmel\AVRlib
por esto :
AVRLIB = D:/Inicioatmel/AVRlib
Seguido de eso le hice unas pruebas recomendadas en la misma ayuda, las cuales arrojaron como resutaldo final que la libraría AVRlib está lista para usarse, es decir estaría todo OK, pero igual no puedo compilar correctamente :S :
* Open a Command Prompt (find it in your Start Menu or select Run, and run cmd.exe)
* Change directories to the location where you installed AVRlib. For example:
cd c:\Code\AVR\AVRlib
* Go into the examples directory. cd examples
* Pick an example to try compiling such as rprintf and change to that directory. cd rprintf
* Type make clean at the prompt
* Type make
* If your output looked like this then you just compiled your first AVRlib program:
C:\Code\AVR\avrlib\examples\rprintf>make
avr-gcc -c -g -Os -Wall -Wstrict-prototypes -Ic:/code/avr/avrlib -Wa,-ahlms=rpri
ntftest.lst -mmcu=atmega323 -I. rprintftest.c -o rprintftest.o
avr-gcc -c -g -Os -Wall -Wstrict-prototypes -Ic:/code/avr/avrlib -Wa,-ahlms=c:/c
ode/avr/avrlib/buffer.lst -mmcu=atmega323 -I. c:/code/avr/avrlib/buffer.c -o c:/
code/avr/avrlib/buffer.o
avr-gcc -c -g -Os -Wall -Wstrict-prototypes -Ic:/code/avr/avrlib -Wa,-ahlms=c:/c
ode/avr/avrlib/uart.lst -mmcu=atmega323 -I. c:/code/avr/avrlib/uart.c -o c:/code
/avr/avrlib/uart.o
avr-gcc -c -g -Os -Wall -Wstrict-prototypes -Ic:/code/avr/avrlib -Wa,-ahlms=c:/c
ode/avr/avrlib/rprintf.lst -mmcu=atmega323 -I. c:/code/avr/avrlib/rprintf.c -o c
:/code/avr/avrlib/rprintf.o
avr-gcc -c -g -Os -Wall -Wstrict-prototypes -Ic:/code/avr/avrlib -Wa,-ahlms=c:/c
ode/avr/avrlib/timer.lst -mmcu=atmega323 -I. c:/code/avr/avrlib/timer.c -o c:/co
de/avr/avrlib/timer.o
avr-gcc -c -g -Os -Wall -Wstrict-prototypes -Ic:/code/avr/avrlib -Wa,-ahlms=c:/c
ode/avr/avrlib/vt100.lst -mmcu=atmega323 -I. c:/code/avr/avrlib/vt100.c -o c:/co
de/avr/avrlib/vt100.o
avr-gcc c:/code/avr/avrlib/buffer.o c:/code/avr/avrlib/uart.o c:/code/avr/avrli
b/rprintf.o c:/code/avr/avrlib/timer.o c:/code/avr/avrlib/vt100.o rprintftest.o
-Wl,-Map=rprintftest.map,--cref -mmcu=atmega323 -o rprintftest.elf
avr-objcopy -O ihex -R .eeprom rprintftest.elf rprintftest.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section
-lma .eeprom=0 -O ihex rprintftest.elf rprintftest.eep
avr-size rprintftest.elf
text data bss dec hex filename
9596 0 192 9788 263c rprintftest.elf
Errors: none
rm c:/code/avr/avrlib/vt100.o c:/code/avr/avrlib/rprintf.o c:/code/avr/avrlib/ua
rt.o c:/code/avr/avrlib/timer.o c:/code/avr/avrlib/buffer.o
C:\Code\AVR\avrlib\examples\rprintf>
AVRlib is ready to use!
¿Qué error podría estar cometiendo ?
-
Tienes que poner las comillas y quitar los paréntesis.
Esta es su Sintaxis:
Directiva #include:
La directiva "#include", como ya hemos visto, sirve para insertar ficheros externos dentro de nuestro fichero de código fuente. Estos ficheros son conocidos como ficheros incluidos, ficheros de cabecera o "headers".
Sintaxis:
#include <nombre de fichero cabecera>
#include "nombre de fichero de cabecera"
#include identificador_de_macro
El preprocesador elimina la línea "#include" y, conceptualmente, la sustituye por el fichero especificado. El tercer caso haya el nombre del fichero como resultado de aplicar la macro.
El código fuente en si no cambia, pero el compilador "ve" el fichero incluido. El emplazamiento del #include puede influir sobre el ámbito y la duración de cualquiera de los identificadores en el interior del fichero incluido.
La diferencia entre escribir el nombre del fichero entre "<>" o """", está en el algoritmo usado para encontrar los ficheros a incluir. En el primer caso el preprocesador buscará en los directorios "include" definidos en el compilador. En el segundo, se buscará primero en el directorio actual, es decir, en el que se encuentre el fichero fuente, si no existe en ese directorio, se trabajará como el primer caso.
Si se proporciona el camino como parte del nombre de fichero, sólo se buscará es el directorio especificado.
Un saludo
-
mmm, le coloqué #include "D:/Inicioatmel/AVRlib/lcd.h" y a pesar que ya no me lanza el error "No such file or directory" igual no me reconoce los parámetros básicos como por ejemplo "lcd_init(LCD_DISP_ON)" y me dice :
D:\Inicioatmel\datalogger\default/../datalogger.c:19: undefined reference to `lcd_init'.
Les adjunto ambos archivos: lcd.h y lcd.c
-
¿Que compilador utilizas?
Un saludo
-
¿Que compilador utilizas?
Un saludo
Uso el AVR-gcc que está integrado al AVRstudio4.
Otro dato que no les comenté es que la librería que estoy utilizando es la de Procyon http://www.mil.ufl.edu/~chrisarnold/components/microcontrollerBoard/AVR/avrlib/
Su librería lcd.h me lanzaba muchos errores así que la cambié por otra (corté y pegué :P ):
http://homepage.hispeed.ch/peterfleury/avr-software.html
que está más actualizada y es la que adjunté al post anterior.
-
¿Es el AVR Studio 4.13 SP2 la versión que tienes?
Haber si lo puedo compilar.
-
¿Es el AVR Studio 4.13 SP2 la versión que tienes?
Haber si lo puedo compilar.
Exacto, versión 4.13 SP2 build 571.
-
¿Es el AVR Studio 4.13 SP2 la versión que tienes?
Haber si lo puedo compilar.
Exacto, versión 4.13 SP2 build 571.
No hay caso, siempre el mismo error :
D:\Inicioatmel\datalogger\default/../datalogger.c:19: undefined reference to `lcd_init'
D:\Inicioatmel\datalogger\default/../datalogger.c:24: undefined reference to `lcd_clrscr'
D:\Inicioatmel\datalogger\default/../datalogger.c:27: undefined reference to `lcd_puts'
D:\Inicioatmel\datalogger\default/../datalogger.c:33: undefined reference to `lcd_gotoxy'
:S Realmente no entiendo que pasa
-
Bueno no se si le servira eso a alguien
aqui dejo un muy simple ejercicio que e hecho
Prender Un Led Pulsando Un Botton Con Atmega8
Lo e hecho Con El AvrStudio y simulado con proteus
para ver si efectivamente funcionna
lo e subido a un rapidshare
http://rapidshare.com/files/96212616/Prender_Un_Led_Pulsando_Un_Botton_Con_Atmega8.zip.html
;.................................................
; Prender Un Led Pulsando Un Botton
;-------------------------------------------------------
; Declaraciones estandar para este micro Atmega8:
.include "m8def.inc"
;-------------------------------------------------------
; Definicion de constantes y variables
; ------------------------------------------------------
; Pila
.equ PILA =0x0FF
;-----------------------------------------------------
.DSEG
; MEMORIA RAM
.ORG (PILA+1)
;----------------------------------------------------
; Vectores de interrupcion
;----------------------------------------------------
.CSEG
.ORG 0x0000
rjmp RESET ; RESET
; --------------------------------------------------------
; RUTINA DE RESET
; --------------------------------------------------------
RESET: cli
ldi r16,HIGH ( PILA )
out SPH,r16
ldi r16,LOW (PILA )
out SPL,r16
;*******DESDE AQUÍ VUESTRO CODIGO*****
ldi r18,0x01 ; carga 00000001 0= Entrada 1=Salida
out DdrB,r18 ; r18 es enviado a DdrB (Configura Salida De Direcion Puerto.B)
out PortB,r18 ; r18 es enviado a PortB (Configura Salida Datos De Puerto.B)
rjmp stop
;****HASTA AQUÍ VUESTRO CODIGO********
STOP: rjmp STOP ;FIN DEL PROGRAMA
-
Listo, solucioné el problema :P. Ya no tengo errores de compilación. Tenia que guardar el archivo lcd.c en el apartado "source files" del avrstudio :D, y colocar #include "d:/Inicioatmel/AVRlib/lcd.h" :D
Lo malo que ahora me surgió otro problema, dos pines del puerto C no los puedo configurar como pin I/O, son los puertos PC6 y PC7. Según la hoja de datos tengo que poner a nivel bajo el bit AS2 del registro ASSR "Asynchronous Status Register" ASSR &= ~(1<<AS2), pero ni eso funciona :?