Обнулить Arduino

hnick
Offline
Зарегистрирован: 10.11.2013

Ребят, такая проблема.

В поисках методов уменьшения внутренних шумов АЦП наткнулся на такой код:

 













#include < avr/sleep.h >

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  int reading;
  
  reading = analogNoiseReducedRead(0);
  Serial.println();
  delay(500);
}

int analogNoiseReducedRead(int pinNumber)
{
  int reading;
  
  ADCSRA |= _BV( ADIE );             //Set ADC interrupt
  set_sleep_mode(SLEEP_MODE_ADC);    //Set sleep mode
  reading = analogRead(pinNumber);   //Start reading
  sleep_enable();                    //Enable sleep
  do
  {                                  //Loop until reading is completed
    sei();                           //Enable interrupts
    sleep_mode();                    //Go to sleep
    cli();                           //Disable interrupts
  } while(((ADCSRA & (1 << ADSC) ) != 0)); //Loop if the interrupt that woke the cpu was something other than the ADC finishing the reading
  sleep_disable();                   //Disable sleep
  ADCSRA &= ~ _BV( ADIE );           //Clear ADC interupt
  sei();                             //Enable interrupts
  
  return(reading);
}

Записал на Freaduino Micro V1.2 (ATmega 32u4) (leonardo) и все, плата перестала отвечать. В диспечере устройств пропал COM порт для платы и она (плата) перешла в Unknown Device. Попытки отключать плату и замыкать пин Reset никакого результата не дают. При перезагрузке появляется Arduino leonardo bootloader, затем плата уходит в Unknown Device. Помогите откачать и вернуть к жизни устройство :).

hnick
Offline
Зарегистрирован: 10.11.2013

Решил проблему путем перешпрошивки bootloader'а при помощи второй ардуины (ArduinoISP).

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

конечно перестанет отвечать, у вас чтение данных незацикленно было в loop(). У вас скорей всего 1 раз прочитало, а потом по выходу из loop, крутилось в заглушке, не на что не отвечая. Да и в порт нифига не выводили.

Надо было хоть так сделать

void loop()
{
  int reading;
  while (1)
  {
   reading = analogNoiseReducedRead(0);
   Serial.println(reading);
   delay(500);
 }
}