Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

05/03/2010 #1


contador 0 a 100,000 con lcd
Hola que tal he estado trabajando ya casi una semana en un programa para poder hacer un contador con un AVR (atmega32) y un LCD 2*16, cada vez que se presione un push botton, inicia y logre que contara hasta 9 (por cierto lo estoy haciendo en ensamblador), el problema es que al momento que llega a 9 debe avanzar un espacio para el otro digito, lo cual tambien lo hace, lo que no puedo conseguir es como retroceder al digito anterior y ponerlo a uno, y de nuevo cada vez que llegue a 9, incremente el anterior para contar a 2, osea un veinte , esto si me tiene algo confundido..espero que alguien pueda ayudarme a concluirlo, tambien si alguien tiene una propuesta similar en C, es bienvenido gracias saludos banda.
bien les dejo el codigo y el archivo en proteus, ok
http://cid-ab8ef72f672ad64b.skydrive...omRichUpload=1

ENLACE correcto oops

Código:
http://cid-ab8ef72f672ad64b.skydrive.live.com/browse.aspx/.Public
05/03/2010 #2
Excluido


Respuesta: contador 0 a 100,000 con lcd
que complicada la bajada... lo hubieras dejado directamente aqui... deja reviso en donde te fallo la logica.
06/03/2010 #3


Respuesta: contador 0 a 100,000 con lcd
ok gracias, pondre el codigo por aqui para que no sea tanto rollo la descarga, saludos

Código:
.include "m32def.inc"
;contador 0 a 9, proximamente hasta 999
.org 0000

;configura puertos
	ser r16			
	out DDRB,r16	;salida
	out DDRD,r16	;salida
	ldi r17,$FE		;como entrada una sola pata FE		
	out DDRC,r17	
	rcall unseg		
	clr r16
	clr r17
;configuracion LCD 2x16

	ldi r16,$38		;configura de 8 bits a dos lineas
	rcall instru	
	ldi r16,$0e		;manda el cursor abajo
	rcall instru 	
	ldi r16,$02		
	rcall instru	
	ldi r16,$01		;limpia lcd
	rcall instru	

;escribe 0-9
cero:
	ldi r20,$30		;carga $30=48d, 110000bin. CERO EN ASCII
	mov r16,r20		
	rcall dato		;manda ASCII a LCD
	;rcall unseg		
	;ldi r16,$80		;Regreso a home
		
condicion:
	ldi r24,$01
	out portC,r24	
	in r23,pinC		;lee el pin
	cpi r23,$00		;si es 0 empieza el conteo
	breq loopu
	brne condicion

loopu:
	rcall clear
	inc r20
	mov r16,r20
	rcall dato
	rcall unseg

	cpi r16,$39
	breq avanza

	rjmp condicion
avanza:
	rcall cero
	clr r16
	cbi portD,0 ;pin D0 q va a RS
	ldi r16,$14
	out portB,r16
	sbi portD,1 	;por la pata uno q es la q va a E
	cbi portD,1
	;rcall dosms

	rjmp cero
	
	rjmp condicion
	;ret
	
;limpia el lcd
clear:
	clr r16
	cbi portD,0 ;pin D0 q va a RS
	ldi r16,$10
	out portB,r16
	sbi portD,1 	;por la pata uno q es la q va a E
	cbi portD,1
	rcall dosms
	ret

;subrutina:instruccion a LCD
instru:
	cbi portD,1		;RS igual a 0, CBI pone a 0 el reg
	rjmp envio
;subrutina dato a lcd
dato:
	sbi portD,0		;RS igual a 1 
	rjmp envio
;subrutina envia dato a lcd
envio:
	sbi portD,1		;E= 1, SBI pone a 1 el reg
	out portB,r16	
	rcall dosms		;espera 2 ms escritura
	cbi portD,1		;E=0  
	rcall dosms		
	ret

					;retorno a subrutina

;****************************************************************
;subrutina de 2ms
;8000 ciclos. delayin 7998 cycles
dosms:
	ldi r17,$1f		;carga con 31 decimal y 11111 binario
WGLOOP0:
	ldi r18,$55		;$55 = 85d = 1010101 bin
WGLOOP1:
	dec r18
	brne WGLOOP1
	dec r17
	brne WGLOOP0
	;delaying 2 cycles
	nop 
	ret
;========================================================================================
;subrutina de 1seg
;4,000,000 cyclos
;delayin 3 999 996 cycles
unseg:
	ldi r17,$04		;24
WGLOOP3:
	ldi r18,$BC		;$BC=188d=10111100bin
WGLOOP4:
	ldi r19,$C4		;$C4=196d=11000100bin
WGLOOP5:
	dec r19
	brne WGLOOP5
	dec r18
	brne WGLOOP4
	dec r17
	brne WGLOOP3
;delayin 3cycles
	ldi r17,$01
WGLOOP6:
	dec r17
	brne WGLOOP6
;delaying 1 cycle
	ret
;---------------------------------------------------------------------------------------
13/03/2010 #4

Avatar de Otterstedt

Respuesta: contador 0 a 100,000 con lcd
A ver... Esto quiza te ayude... Supongamos que quieres contar hasta 999...
Lo que debes hacer es mostrar la unidad, hasta que llegues a 9...
Cuando ahora deba poner 10, primero muestras la decena (1) y luego la unidad (0)...
Se entiende??? Escribes de izquierda a derecha... No pienses que por mostrar primero la decena vas a llegar a ver 19 y luego 10... Si los tiempos son correctos no llegaras a notar el 19 y el paso de 09 a 10, lo hará instantaneamente...
Me explico?
Lo mismo cuando llegues a 99 y luego debas mostrar el 100...
Primero muestras la centena (1), luego la decena (0) y por ultimo la unidad(0)...
Si no se entiende mandame un mp...
Saludos!
13/03/2010 #5

Avatar de pepechip

Respuesta: contador 0 a 100,000 con lcd
Hola
aqui te dejo un ejemplo para incrementar el tiempo de un reloj:

;************************************************* ************
;****************** INCREMENTAR TIEMPO *************************
;************************************************* ************
Incrementar_Tiempo
;Sumar_Unidad_Segundo
incf Unidad_Segundo,F ; rutina de incremento
movf Unidad_Segundo,W ; incremento las unidades
sublw 0x0A ; realizo la resta 10-unidades_Minuto
btfss STATUS,Z ; si W=10, entonces Z=0
goto Fin_Incrementar
;Sumar_Decenas_Segundo
clrf Unidad_Segundo ;como unidades_minuto vale 10, lo pongo a 0
incf Decena_Segundo,F ; rutina de incremento
movf Decena_Segundo,W ; incremento las decenas
sublw 0x06 ; realizo la resta 6-decena_segundo
btfss STATUS,Z ; si W=6, entonces Z=0
goto Fin_Incrementar
;Sumar_Unidad_Minuto
clrf Decena_Segundo ;como unidades_segundo vale 6, lo pongo a 0
incf Unidad_Minuto,F ; rutina de incremento
movf Unidad_Minuto,W ; incremento las unidades
sublw 0x0A ; realizo la resta 10-unidades_Minuto
btfss STATUS,Z ; si W=10, entonces Z=0
goto Fin_Incrementar

;sumar_Decenas_Minuto
clrf Unidad_Minuto ;como unidades_minuto vale 10, lo pongo a 0
incf Decena_Minuto,F ; rutina de incremento
movf Decena_Minuto,W ; incremento las decenas
sublw 0x0A ; realizo la resta 10-decenas de minuto
btfss STATUS,Z ; si W=10, entonces Z=0
goto Fin_Incrementar
clrf Decena_Minuto ; como unidades_minuto vale 10, lo pongo a 0

Fin_Incrementar nop
call Visualizar_Tiempo
goto Comparar_Tiempo
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.