AVR Atmega8 ADC输入导致崩溃
我试图通过ATmega8的ADC0读取电压电平,因为我查询的是一个1针4x4矩阵键盘。问题是每次我向ADC施加高于GND的电压时,Atmega都会停止工作。PWM输出仍在工作,但无法通过i2c进行通信,且LCD显示清晰。 我的接线很简单,AREF和AVCC设置为5V,GND设置为GND,PC0是我的输入。有什么我没注意到的吗?谢谢你的帮助。 这是我的密码:AVR Atmega8 ADC输入导致崩溃,avr,avr-gcc,atmega,Avr,Avr Gcc,Atmega,我试图通过ATmega8的ADC0读取电压电平,因为我查询的是一个1针4x4矩阵键盘。问题是每次我向ADC施加高于GND的电压时,Atmega都会停止工作。PWM输出仍在工作,但无法通过i2c进行通信,且LCD显示清晰。 我的接线很简单,AREF和AVCC设置为5V,GND设置为GND,PC0是我的输入。有什么我没注意到的吗?谢谢你的帮助。 这是我的密码: void Initialisierung(void) { char text [2]; lcd_init(); cli(); //### T
void Initialisierung(void)
{
char text [2];
lcd_init();
cli();
//### TWI
init_twi_slave(SLAVE_ADRESSE); //TWI als Slave mit Adresse slaveadr starten
sei();
lcd_setcursor( 0, 1 );
lcd_string(">Booting...");
lcd_setcursor( 0, 2 );
itoa (SLAVE_ADRESSE,text,16);
lcd_string("I2C Adress=0x");
lcd_string(text);
for (int Index=0; Index<85; ++Index) {
rxbuffer[Index] = 0x20;
}
rxbuffer[81]=0xFF;
rxbuffer[82]=0xFF;
rxbuffer[83]=0xFF;
rxbuffer[84]=0xFF;
}
//update LCD
void lcd_update(void){
for (int o=1;o<=4; o++)
for (int i=1; i<=20; i++){
lcd_setcursor( i-1, o );
lcd_data(rxbuffer[i+((o-1)*20)]);
}
}
void初始化(void)
{
字符文本[2];
lcd_init();
cli();
//###TWI
init_twi_slave(slave_adrese);//twi als slave mit adrese slaveadr starten
sei();
lcd_设置光标(0,1);
lcd_字符串(“>引导…”);
lcd_设置光标(0,2);
itoa(奴隶地址,文本,16);
lcd_字符串(“I2C地址=0x”);
lcd_字符串(文本);
对于(int Index=0;Index我最终得到了它:
我使用中断设置ADC,但不能自由运行:
ADCSRA =(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADIE)| (1<<ADPS0);
谢谢您的时间;)ATMEGA 10位上的ADC不是吗?不管您的文本如何,变量只够容纳一个字符。如果ADC寄存器大于0x0F,则会溢出该缓冲区。(还请记住,C字符串始终需要一个额外字符作为尾随\0)是的,ADC为10位,但在禁用输出的情况下,Mega8在初始化方法中崩溃,您也在执行itoa(从地址,文本,16);
带有一个小缓冲区。该字符串是否显示在您的lcd上?是的,该字符串显示正确。我现在改为ISR,ADC正在工作,但除此之外,ISR似乎正在阻止一切:ADMUX=(1
ADCSRA =(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADIE)| (1<<ADPS0);
ADCSRA |= (1<<ADSC);
ISR(ADC_vect)
{
char text[5];
itoa (ADC,text,16);
lcd_setcursor( 0,4 );
lcd_string(text);
}