avrdude: Yikes! ATtiny85

Тема в разделе "Микроконтроллеры AVR", создана пользователем Daniil, 1 мар 2015.

  1. Daniil

    Daniil Гуру

    Здравствуйте!
    Балуюсь с тини85.
    Алгоритм моих действий такой:
    пока не получу удовлетворительный результат повторять:
    {Прошиваю программу
    тестю
    подправляю программу}
    конец алгоритма.
    Для этого использую Arduino Nano как программатор, а оболочка для avrdude SinaProg.
    В какой то момент появилась ошибка:
    Код (Text):
    avrdude -C avrdude.conf -c avrisp -P com7 -b 19200 -p t85 -U flash:w:"C:\Users\Daniil\YandexDisk\attiny\prj\mb\mb.hex":a -q



    avrdude: AVR device initialized and ready to accept instructions
    avrdude: Device signature = 0x000000
    avrdude: Yikes!  Invalid device signature.
            Double check connections and try again, or use -F to override
            this check.


    avrdude done.  Thank you.
     
    Не подскажете в чём проблема?
    Пока решаю её с помощью замены тини85. Но новая не продержалась и недели, как появилась ошибка.
     
  2. Daniil

    Daniil Гуру

    Стало совсем плохо - беру новый МК, прошиваю, больше он не работает? фьюзы не прошиваю, не успеваю.
    Что это может значить?
     
  3. Daniil

    Daniil Гуру

    Вынес все MISO, MOSI, CLK, SS, GND, Vcc на отдельную плату, прошил на ней.
    Пробовал подпихивать кварц. (на arduino.ru читал, что у кого то фьюзы сбивались).
    Купил последнюю тиньку в чип и дипе.
    Код (Text):
    ATtiny85 memory use summary [bytes]:
    Segment  Begin    End      Code  Data  Used    Size  Use%
    ---------------------------------------------------------------
    [.cseg] 0x000000 0x001000    536  2630  3166    8192  38.6%
    [.dseg] 0x000060 0x000097      0    55    55    512  10.7%
    [.eseg] 0x000000 0x000000      0      0      0    512  0.0%
     
    Сигнатура не читается после заливки кода.
    Что может быть в коде, что так получается? Я вылезаю за допустимые рамки?
     
  4. Unixon

    Unixon Оракул Модератор

    Судя по всему, что-то не то с программатором. Вообще, прежде, чем прошивать новый чип, сначала считывайте его с ключиками -v -v (подробный вывод: чем больше -v, тем подробнее) и никогда не пользуйтесь ключом -F. Если чтение прошло нормально и у вас совпадает сингнатура и есть корректное содержимое флэша, епрома, фьюзов и локов, только после этого можно начинать писать в контроллер. Если уже при чтении произошли ошибки, значит при записи проблема снова проявится и, вероятно, с худшими последствиями.
     
  5. Daniil

    Daniil Гуру

    Спасибо за ответ.
    Я склонен полагать, что проблема была именно в программе (алгоритме), т.к. я решил заново создать проект (за основу взята всё таже программа dark_simpsona, но при этом более осторожно редактировал) - играюсь дальше, пока проблем нет.
     
    Последнее редактирование: 12 мар 2015
  6. Daniil

    Daniil Гуру

    Опять началось. Есть код, сгенерированный в CodeVisionAvr
    Код (Text):
    #include <io.h>

    #define  SetBit(reg, bit)          reg |= (1<<bit)
    #define  ClearBit(reg, bit)      reg &= (~(1<<bit))
    #define  InvBit(reg, bit)          reg ^= (1<<bit)
    #define  BitIsSet(reg, bit)      ((reg & (1<<bit)) != 0)
    #define  BitIsClear(reg, bit)    ((reg & (1<<bit)) == 0)

    // Declare your global variables here

    // Pin change interrupt service routine
    interrupt [PC_INT0] void pin_change_isr(void)
    {
        // Place your code here
     
    }

    // Analog Comparator interrupt service routine
    interrupt [ANA_COMP] void ana_comp_isr(void)
    {
        // Place your code here
        if (BitIsClear(ACSR,ACO))
        {
            ClearBit(PORTB,3);
        }
        else
        {
            SetBit(PORTB,3);
        }

    }

    void main(void)
    {
        // Declare your local variables here

        // Crystal Oscillator division factor: 256
        #pragma optsize-
        CLKPR=(1<<CLKPCE);
        CLKPR=(0<<CLKPCE) | (1<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
        #ifdef _OPTIMIZE_SIZE_
        #pragma optsize+
        #endif

        // Input/Output Ports initialization
        // Port B initialization
        // Function: Bit5=In Bit4=In Bit3=Out Bit2=In Bit1=In Bit0=In
        DDRB=(0<<DDB5) | (0<<DDB4) | (1<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
        // State: Bit5=T Bit4=T Bit3=0 Bit2=T Bit1=T Bit0=T
        PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

        // Timer/Counter 0 initialization
        // Clock source: System Clock
        // Clock value: Timer 0 Stopped
        // Mode: Normal top=0xFF
        // OC0A output: Disconnected
        // OC0B output: Disconnected
        TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
        TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (0<<CS00);
        TCNT0=0x00;
        OCR0A=0x00;
        OCR0B=0x00;

        // Timer/Counter 1 initialization
        // Clock source: System Clock
        // Clock value: Timer1 Stopped
        // Mode: Normal top=0xFF
        // OC1A output: Disconnected
        // OC1B output: Disconnected
        // Timer1 Overflow Interrupt: Off
        // Compare A Match Interrupt: Off
        // Compare B Match Interrupt: Off
        PLLCSR=(0<<PCKE) | (0<<PLLE) | (0<<PLOCK);

        TCCR1=(0<<CTC1) | (0<<PWM1A) | (0<<COM1A1) | (0<<COM1A0) | (0<<CS13) | (0<<CS12) | (0<<CS11) | (0<<CS10);
        GTCCR=(0<<TSM) | (0<<PWM1B) | (0<<COM1B1) | (0<<COM1B0) | (0<<PSR1) | (0<<PSR0);
        TCNT1=0x00;
        OCR1A=0x00;
        OCR1B=0x00;
        OCR1C=0x00;

        // Timer(s)/Counter(s) Interrupt(s) initialization
        TIMSK=(0<<OCIE1A) | (0<<OCIE1B) | (0<<OCIE0A) | (0<<OCIE0B) | (0<<TOIE1) | (0<<TOIE0);

        // External Interrupt(s) initialization
        // INT0: Off
        // Interrupt on any change on pins PCINT0-5: On
        GIMSK=(0<<INT0) | (1<<PCIE);
        MCUCR=(0<<ISC01) | (0<<ISC00);
        PCMSK=(0<<PCINT5) | (0<<PCINT4) | (1<<PCINT3) | (0<<PCINT2) | (0<<PCINT1) | (0<<PCINT0);
        GIFR=(0<<INTF0) | (1<<PCIF);

        // USI initialization
        // Mode: Disabled
        // Clock source: Register & Counter=no clk.
        // USI Counter Overflow Interrupt: Off
        USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC);

        // Analog Comparator initialization
        // Analog Comparator: On
        // The Analog Comparator's positive input is
        // connected to the Bandgap Voltage Reference
        // The Analog Comparator's negative input is
        // connected to the AIN1 pin
        // Interrupt on Output Toggle
        ACSR=(1<<ACD) | (1<<ACBG) | (0<<ACO) | (0<<ACI) | (1<<ACIE) | (0<<ACIS1) | (0<<ACIS0);
        ADCSRB=(0<<ACME);
        // Digital input buffer on AIN0: Off
        // Digital input buffer on AIN1: Off
        DIDR0=(1<<AIN0D) | (1<<AIN1D);

        // ADC initialization
        // ADC disabled
        ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);


        // Global enable interrupts
        #asm("sei")

        while (1)
        {
            // Place your code here

        }
    }
    Добавил только обработку прерывания компаратора, прошиваю и опять после прошивки проблема с сигнатурой.
     
  7. Daniil

    Daniil Гуру

    Сейчас ничего не менял в плане соединительных проводов, прошил старый проект на новый мк и всё в порядке...
     
  8. некит

    некит Нуб

    Добрый день.

    Аналогичная проблема с прошивкой мк attiny85.

    Для этого нашел схему с пинами этой платы, прочитал и посмотрел множество статей и роликов. Решил залить на мк базовый скейч Fade, залил на свою Arduino Uno Arduino ISP, выбрал нужную мне плату и....

    И тут началось самое интересное. При компиляции файла Fade выдала вот такую ошибку:

    Yikes! Invalid device signature.

    Double check connections and try again, or use -F to override

    this check.

    Перепробовал множество вариантов: менял тиньку, менял arduino, менял конденсатор. Все без толку.

    В чем может быть проблема?

    (Пользовался второй схемой)

    [​IMG]
     
  9. Daniil

    Daniil Гуру

    Не знаю(
    У меня прошивалось из ардуины, но потом я сразу начал писать программы на С. Прошивал без проблем. Потом перешел на асм, т.к. уже был готовый код на асме, но в какой то момент появились эти yikes. Создал новый проект, все туда скопировал и сделал минимальные правки, все прошивалось. Потом я решил, что нужен управитель этой системе, решил запрогать еще 1 мк, сразу начал на Си и сразу же yikes. Решил заново, но на асме - проблем не было долго, прошивал много раз, но в какой то момент опять yikes.
    Для тестов решил прошивать на отдельной схеме только для прошивания, но и там yikes(

    Я не еще не отследил причину такого эффекта. Думаю попробовать нормальным программатором, но пока не решился покупать, а до пайки еще не дошел, да и не знаю, решит ли это проблему.

    P.S. Си это avr studio 6 + CodeVision AVR (от hp). Асм это ассемблер avr studio 4. И в Си, и в асм имеется курение даташита, сайтов и пары книг.
     
    Последнее редактирование: 4 авг 2015
  10. Daniil

    Daniil Гуру

    Скорее всего прошивать с помощью ардуины надо как то аккуратнее. Я сменил программатор, пока нареканий нет.
     
  11. DrProg

    DrProg Вечный нерд

    На чем пишите для 85?
     
  12. Daniil

    Daniil Гуру

    Пишу на Асм, ипользую AVR Studio 6