Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AVR Atmega8 ADC输入导致崩溃_Avr_Avr Gcc_Atmega - Fatal编程技术网

AVR Atmega8 ADC输入导致崩溃

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

我试图通过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();
//### 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);
}