Hola que tal, adentrandome en la programacion de AVR's, estoy trabajando en un programa que se supondria es sencillo, sin embargo salio lo contrario.
Bien explico; la idea es hacer en C (uso codevision) un programa para un conteo leido por un PINC (en este caso uso el puerto C), y que lo muestre en un lcd 2x16, que valla contando de 0 a 999, uso un atmega48, realmente solo lo he simulado por ahora.
Tengo poblemas porque no me muestra el caracter si le pongo la variable (var1), pero si lo pongo en hexadecimal si lo muestra el lcd, ahora, se supone que debe incrementar el dato cada vez que se oprima el pushboton, pero no logro que se muestre, a lo mejor estoy usando otro tipo de variable, pero estoy seguro que con "char" deberia funcionar, bien les dejo el pequeño condigo y un link donde esta armado en proteus, ojala me puedan auxiliar.
No es justificacion, pero a penas he comenzado con C y he estado estudiando estas ultimas hrs, quiza es porq deba despejarme un poco y despues piense mejor, suele pasar, pero si alguien sabe mas, que mejor, saludos! gracias
/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.6 Evaluation
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : codevision_contador_m48_01
Version : 1.00
Date : 09/04/2010
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:
Chip type : ATmega48
Clock frequency : 1.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
*****************************************************/
#include <mega48.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x05 ;PORTB
#endasm
#include <lcd.h>
// Declare your global variables here
#define sensor PINC.0
bit sensorp;
bit sensora;
unsigned char var1;
const char tablanumeros[var1]={
0x30,
0x31,
0x32,
0x33,
0x34,
0x35,
0x36,
0x37,
0x38,
0x39,
};
void main(void)
{
// Declare your local variables here
// Crystal Oscillator division factor: 8
#pragma optsize-
CLKPR=0x80;
CLKPR=0x03;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTC=0x7F;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2A output: Disconnected
// OC2B output: Disconnected
ASSR=0x00;
TCCR2A=0x00;
TCCR2B=0x00;
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
// Interrupt on any change on pins PCINT8-14: Off
// Interrupt on any change on pins PCINT16-23: Off
EICRA=0x00;
EIMSK=0x00;
PCICR=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=0x00;
// Timer/Counter 2 Interrupt(s) initialization
TIMSK2=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
ADCSRB=0x00;
// LCD module initialization
lcd_init(16);
while (1)
{
lcd_gotoxy(15,0);
lcd_putchar(0x30);
delay_ms(200); //Delay de 1 segundo para poder ver el efecto
if (sensor==0)
{
var1++;
lcd_clear();
lcd_gotoxy(15,0);
lcd_putchar(var1);
delay_ms(4000);
}
};
}
liga a codigo y simulacion