K
keke
Guest
hi..........
saya mempunyai masalah untuk mengambil sekaligus menampilkan besar nilai dari adc ke hiperterminal. sebelumnya program saya letakkan pada while(1) tidak masalah, program dapat di jalankan.
tetapi ketika program saya letakkan untuk interuph adc ternyata tidak bisa di eksekusi, mukin ada kesalahan pada bagian mananya. berikut program yang saya buat:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.9 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 6/22/2010
Author : Grishnackh
Company : Ice XP Inc.
Comments:
Chip type : ATmega16L
Program type : Application
AVR Core Clock frequency: 11.059200 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>
#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 7
unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
#define ADC_VREF_TYPE 0x00
#define RELAY_1 PORTC.7
#define RELAY_2 PORTC.6
#define RELAY_3 PORTC.5
#define RELAY_4 PORTC.4
#define RELAY_5 PORTC.3
#define RELAY_6 PORTC.2
#define RELAY_7 PORTC.1
// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
static unsigned char input_index=0;
// Read the AD conversion result
adc_data[input_index]=ADCW;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
input_index=0;
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
}
// Declare your global variables here
{
data1=read_adc(0);
printf("nilai adc = %d\n",data1);
if((data1>=165)&&(data1<=175))
printf("daya yg dipakai = 100 watt\n");
else if((data1>=176)&&(data1<=185))
printf("daya yg di pakai = 65 watt\n");
else
printf("tidak ada daya yg di pakai\n");
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A 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
PORTA=0x00;
DDRA=0x00;
// 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
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=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
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 86.400 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);
ADCSRA=0xCF;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
data=getchar();
printf("\keyboard=%c \n",data);
if(data=='a')
{
printf("listrik nyambung");
RELAY_1=1;
}
if(data=='b')
{
printf("listrik putus");
RELAY_1=0;
}
if(data=='c')
{
printf("listrik nyambung");
RELAY_2=1;
}
if(data=='d')
{
printf("listrik putus");
RELAY_2=0;
}
if(data=='e')
{
printf("listrik nyambung");
RELAY_3=1;
}
if(data=='f')
{
printf("listrik putus");
RELAY_3=0;
}
if(data=='g')
{
printf("listrik nyambung");
RELAY_4=1;
}
if(data=='h')
{
printf("listrik putus");
RELAY_4=0;
}
if(data=='i')
{
printf("listrik nyambung");
RELAY_5=1;
}
if(data=='j')
{
printf("listrik putus");
RELAY_5=0;
}
if(data=='k')
{
printf("listrik nyambung");
RELAY_6=1;
}
if(data=='l')
{
printf("listrik putus");
RELAY_6=0;
}
if(data=='m')
{
printf("listrik nyambung");
RELAY_7=1;
}
if(data=='n')
{
printf("listrik putus");
RELAY_7=0;
}
};
}
tolong bantuannya please......
saya mempunyai masalah untuk mengambil sekaligus menampilkan besar nilai dari adc ke hiperterminal. sebelumnya program saya letakkan pada while(1) tidak masalah, program dapat di jalankan.
tetapi ketika program saya letakkan untuk interuph adc ternyata tidak bisa di eksekusi, mukin ada kesalahan pada bagian mananya. berikut program yang saya buat:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.9 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 6/22/2010
Author : Grishnackh
Company : Ice XP Inc.
Comments:
Chip type : ATmega16L
Program type : Application
AVR Core Clock frequency: 11.059200 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>
#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 7
unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
#define ADC_VREF_TYPE 0x00
#define RELAY_1 PORTC.7
#define RELAY_2 PORTC.6
#define RELAY_3 PORTC.5
#define RELAY_4 PORTC.4
#define RELAY_5 PORTC.3
#define RELAY_6 PORTC.2
#define RELAY_7 PORTC.1
// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
static unsigned char input_index=0;
// Read the AD conversion result
adc_data[input_index]=ADCW;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
input_index=0;
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
}
// Declare your global variables here
{
data1=read_adc(0);
printf("nilai adc = %d\n",data1);
if((data1>=165)&&(data1<=175))
printf("daya yg dipakai = 100 watt\n");
else if((data1>=176)&&(data1<=185))
printf("daya yg di pakai = 65 watt\n");
else
printf("tidak ada daya yg di pakai\n");
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A 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
PORTA=0x00;
DDRA=0x00;
// 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
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=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
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 86.400 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);
ADCSRA=0xCF;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
data=getchar();
printf("\keyboard=%c \n",data);
if(data=='a')
{
printf("listrik nyambung");
RELAY_1=1;
}
if(data=='b')
{
printf("listrik putus");
RELAY_1=0;
}
if(data=='c')
{
printf("listrik nyambung");
RELAY_2=1;
}
if(data=='d')
{
printf("listrik putus");
RELAY_2=0;
}
if(data=='e')
{
printf("listrik nyambung");
RELAY_3=1;
}
if(data=='f')
{
printf("listrik putus");
RELAY_3=0;
}
if(data=='g')
{
printf("listrik nyambung");
RELAY_4=1;
}
if(data=='h')
{
printf("listrik putus");
RELAY_4=0;
}
if(data=='i')
{
printf("listrik nyambung");
RELAY_5=1;
}
if(data=='j')
{
printf("listrik putus");
RELAY_5=0;
}
if(data=='k')
{
printf("listrik nyambung");
RELAY_6=1;
}
if(data=='l')
{
printf("listrik putus");
RELAY_6=0;
}
if(data=='m')
{
printf("listrik nyambung");
RELAY_7=1;
}
if(data=='n')
{
printf("listrik putus");
RELAY_7=0;
}
};
}
tolong bantuannya please......