Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Ответить

Re: "РЕАНИМАТОР" для AVR

Чт фев 20, 2014 21:39:21

Тогда ещё я ЛУТ-ом не владел. Поэтому печатка нарисована маркером по линейку. К сожалению не могу Вам помочь (((

Re: "РЕАНИМАТОР" для AVR

Пт фев 21, 2014 03:27:42

Ну на ответ, даже и не надеялся... Спасибо и на этом :))

Re: "РЕАНИМАТОР" для AVR

Чт май 01, 2014 17:51:47

Собрал работал...через две недели перестал... перепроверил всё в норме.. мозги уже за "кипели".
куда ещё капнуть...??

Re: "РЕАНИМАТОР" для AVR

Чт май 01, 2014 23:35:40

КАпай куда хочешь.........
( Зачем задавать дурацкие вопросы (ни схемы, ни измерений) ? )
Вероятно, где-то плохая пайка, значит, проверил не всё....собери второй раз... :)
Вытащи контроллер, прозвони весь монтаж, проверь работу ключей....

Re: "РЕАНИМАТОР" для AVR

Сб май 03, 2014 17:42:26

вот по этой собрал..
Вложения
22.JPG
(147.84 KiB) Скачиваний: 1641

Re: "РЕАНИМАТОР" для AVR

Сб май 03, 2014 19:14:51

Выложите макрофото именнно вашей собранной платы. Может чего и усмотрим.

Перепрошить контроллер пробовали?

Re: "РЕАНИМАТОР" для AVR

Вс май 04, 2014 17:17:28

Перепрошить контроллер пробовали?


только и это и помогло....нотя странно контроллер был прошит и всё работало..и в один момент всё перестало... всем спасибо ..

Re: "РЕАНИМАТОР" для AVR

Ср июн 11, 2014 11:25:05

Доброе утро!
Вчера тоже собрал "доктора", всю ночь пытался понять почему не работает.
Проверял плату, менял прошивки но всё равно не хочет работать.
Проверял на attiny2313, attiny13, attiny85, atmega16 (все мк 100% рабочие) с ними не работает, но с atmea8 (smd) (3 штуки проверил и на обоих прошивках ) всё прекрасно работает.
Плату делал под себя с usb и преобразователем в diptrace (версия схемы v2e).

С прошивкой 2.11 доходит до "Init programming..." и всё.
С прошивкой 2.09:

AUTOMATIC HVPP MODE
Init programming... DONE
Read signature... 00 94 00 - FAIL!
Trying T2313 pinout..00 94 00 - FAIL!
No chip in socket or chip does not responding

И загорается красный светодиод.

В ключах стоят (BC807-40, BC817-40) думаю на них. Кто нибудь собирал на этих транзисторах?
Что где искать? Мозгов уже не хватает.
Подскажите кто с таким сталкивался.

(Если нужно то схему и печатку, а также фото могу выложить).

Re: "РЕАНИМАТОР" для AVR

Ср июн 11, 2014 12:25:23

nillsoft писал(а):С прошивкой 2.11 доходит до "Init programming..." и всё.

В курсе, что последняя прошивка требует изменения в классической схеме?

Re: "РЕАНИМАТОР" для AVR

Ср июн 11, 2014 12:36:34

Видимо пропустил, а какие?
Последний раз редактировалось AlekseyEnergo Пн июн 16, 2014 03:56:46, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.7 правил форума. Подредактировал. Предупредил!!

Re: "РЕАНИМАТОР" для AVR

Ср июн 11, 2014 12:39:49

Подтяжка портов связи с компом. В оригинальном описании это где-то есть.

Re: "РЕАНИМАТОР" для AVR

Ср июн 11, 2014 12:53:26

А это причём в моём случае?
Последний раз редактировалось AlekseyEnergo Пн июн 16, 2014 03:57:48, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.7 правил форума. Подредактировал.

Re: "РЕАНИМАТОР" для AVR

Ср июн 11, 2014 13:50:41

RTFM.

Re: "РЕАНИМАТОР" для AVR

Ср авг 06, 2014 10:07:39

При реализации фус доктора столкнулся с таким результатом:
при включении без пациента все соответствует нормальной работе в совокупности с Терминальной программой.
при попытке реанимировать ATtiny2313 выдает:
Init programming... DONE
Read signature... 97 97 97 - FAIL!
Trying T2313 pinout..06 91 02 - FAIL!
При этом кратковременно на пациента подается 12 вольт и постоянно подано 5 вольт, причем после транзисторного ключа напряжение падает до 4,5-х вольт.
Запитывал пациента и от отдельного БП 5V.
Подскажите, кто знает, почему падает напряжение после 5 вольтового ключа?
Контроллер зашит последней версией atmega_fusebit_doctor_2.11_m8 для Атмега 8
Извините за некоторе копирование со 9 стр. У меня точно же такая ситуация.
Кто может и знает прошу откликнуться.
С уважением, Виталий.
Вложения
Atmega8.zip
Последняя версия Доктора
(11.7 KiB) Скачиваний: 522

Re: "РЕАНИМАТОР" для AVR

Чт авг 07, 2014 08:36:51

У меня была проблема в печатке. "МикроСопля" была.
Т.к. терминал писал, что нет чипа, то я искал обрыв на плате. Когда звонил между собой дороги, то же всё ОК: кз нигде не было. Но в последствии оказалось что "сопля" была ПОСЛЕ резисторов и когда я звонил от начала, то всё было нормально(сопротивление то было, мало ли через что оно там есть). Потом посмотрел плату на просвет и увидел... Убрал - всё заработало.

Re: "РЕАНИМАТОР" для AVR

Ср сен 24, 2014 22:42:22

Вот такое получилось.
Изображение
Изображение
Изображение
Изображение

Re: "РЕАНИМАТОР" для AVR

Сб сен 27, 2014 16:01:20

Теперь осталось выложить файл печатки для общественности, да лучше со схемой :)) А то получается похвастался, а мы теперь логти кусать должны :))
Получилось шикарно! Я так понимаю, там вместо UART сразу USB? А COM тогда зачем? И адаптеры там вообще не нужны, или всё таки для каких-то чипов надо (гребёнка-то осталась)? С наскоку не пойму, тем более по фото.

Re: "РЕАНИМАТОР" для AVR

Чт ноя 06, 2014 00:31:54

Дело было вечером, делать было есть чего.
Попросили меня помочь ATmega32 прошить. Ну, думаю, чего не помочь? Помогу.
С утра смотался на рынок. И как в приказке, пошли дурака за бутылкой он одну и принесет. Вот и я одну купил. Дело то привычное. Меги шил то не раз.
Вот вечером, окруженный вниманием домочадцев, и в объятиях пристального внимания я усаживаюсь творить добро.
И вот не задача. Отвечая младшенькому на его очередной вопрос, по невнимательности, нажимаю на прошить Фьюзы и прошиваю их "0".
Конечно танцы с бубном далеко за полночь не увенчались успехом, и следующий день - день сурка ... правда новый чип удачно был прошит и отправлен.
Все то ничего, но раньше чип стоил 1 бакс, а нонче за него с меня содрали почти 4$.
Не то, чтоб жаба душить начала, но справедливости ради вот я вспомнил, что у меня, по ранней неопытности еще штук несколько подобных валяется.
Было решено повозится ради интереса.
Конечно везде и все рекламируют Фьюз Доктор.
Также и на эту статью я попал через поиск http://radiokot.ru/lab/controller/48/
Но нет возможности сейчас совсем травить платы и паять. А Ардуино мирно стоит на полочке.
Вот и решил переписать выложенный здесь http://www.radiokot.ru/forum/viewtopic.php?f=25&t=19601 исходник в полезность.

Проанализировав это
Изображение

Сначала собрал схемку
Изображение

Изображение

Но резисторы и транзисторы оказались в гараже, а хотелось быстрее все сделать.
Получилось вот так

Изображение

Это подключение к программатору для проверки успешности процесса и программирования.
Изображение

Код переписал под Arduino UNO

Код:
// Проект "РЕАНИМАТОР AVR". Автор: Черняков С.С. chernyako-sergej@yandex.ru Евпатория апрель 2009
// Ардуино адаптация ZBUK@bk.ru
// - #include <avr/io.h>
// - #include <util/delay.h>

// #define PORT_DATD PORTD  /*Двунаправленная шина данных*/

int RDY_BSY = A5;  //#define RDY_BSY - Вход "состояние программируемого МК". 0-занят (выполняется предыдущая команда), 1-готов к приёму следующей команды
int OE = 12;       //#define OE      - Выход "управление режимом работы шины данных PORT_DATA" 0-выход, 1-вход
int WR = 11;       //#define WR      - Выход "сигнал записи" 0-активный уровень
int BS1 = 10;      //#define BS1     - Выход "выбор байта" 0-младший байт, 1-старший байт
int XA0 = 9;       //#define XA0     - Выход "определение действия по положительному импульсу на выводе XTAL1
int XA1 = 8;       //#define XA1     - Выход "определение действия по положительному импульсу на выводе XTAL1
/*ХА1=0, ХА0=0 - загрузка адреса ячейки памяти (младшего или старшего байта, в зависимости от уровня сигнала BS1)*/
/*ХА1=0, ХА0=1 - загрузка данных (младшего или старшего байта, в зависимости от уровня сигнала BS1)*/
/*ХА1=1, ХА0=0 - загрузка команды*/
/*ХА1=1, ХА0=1 - нет действия, режим ожидания*/
int PAGEL = A0;     //#define PAGEL  - Выход "сигнал загрузки страницы памяти"
int Vpp_12V = A1;   //#define Vpp_12V- Выход "напряжение 12 В"
int BS2 = A2;       //#define BS2    - Выход "выбор байта" 0-младший байт, 1-старший байт
int XTAL1 = A3;     //#define XTAL1  - Выход "тактовый сигнал"
int Vcc_5V = A4;    //#define Vcc_5V - Выход "напряжение 5В
//       RDY_BSY    OE       WR        BS1      XA0      XA1      PAGEL    Vpp_12V    BS2    XTAL1    Vcc_5V    -   сигналы
//          13      12       11        10       09       08        A0        A1       A2       A3      A4       -   разряды 
int ledPin =  13;  // номер выхода, подключенного к светодиоду



void setup()
{
  DDRD = B11111111;            // установить ноги порта D с 0 по 7 как цифровые выходы /*Двунаправленная шина данных подключаем к PB7-PB0*/
  pinMode(RDY_BSY, INPUT);     // устанавливает режим работы - выход для RDY_BSY входа
  pinMode(OE, OUTPUT);         // устанавливает режим работы - выход для OE вЫхода
  pinMode(WR, OUTPUT);         // устанавливает режим работы - выход для WR вЫхода
  pinMode(BS1, OUTPUT);        // устанавливает режим работы - выход для BS1 вЫхода
  pinMode(XA0, OUTPUT);        // устанавливает режим работы - выход для XA0 вЫхода
  pinMode(XA1, OUTPUT);        // устанавливает режим работы - выход для XA1 вЫхода
  pinMode(PAGEL, OUTPUT);      // устанавливает режим работы - выход для PAGEL вЫхода
  pinMode(Vpp_12V, OUTPUT);    // устанавливает режим работы - выход для Vpp_12V вЫхода
  pinMode(BS2, OUTPUT);        // устанавливает режим работы - выход для BS2 вЫхода
  pinMode(XTAL1, OUTPUT);      // устанавливает режим работы - выход для XTAL1 вЫхода
  pinMode(Vcc_5V, OUTPUT);     // устанавливает режим работы - выход для Vcc_5V вЫхода
  pinMode(ledPin, OUTPUT);     // устанавливает режим работы - выход для ledPin вЫхода ИЛИ КНОПКА INPUT
}


//---Перевод МК семейства MEGA (кроме ATmega161, ATmega163, ATmega323) в режим параллельного программирования---
void set_prog() //void set_prog (void)
{
  //---Перевод МК ATmega8 в режим параллельного программирования (если запрограммирована ячейка RSTDISBL)---
  //      DDRC  = 0b01111111;//RDY_BSY - вход, остальные выходы
  //   PORTC = 0b11100000;//Подать на выходы PAGEL, XA1, XA0, BS1 лог. 0
  //       RDY_BSY    OE        WR        BS1      XA0      XA1      PAGEL      BS2   -   сигналы
  // PORTC    7        6         5         4        3        2         1         0    -   разряды порта

  digitalWrite(PAGEL, LOW);    //Подать на выходы PAGEL лог. 0
  digitalWrite(XA1, LOW);      //Подать на выходы XA1 лог. 0
  digitalWrite(XA0, LOW);      //Подать на выходы XA0 лог. 0
  digitalWrite(BS1, LOW);      //Подать на выходы BS1 лог. 0
  digitalWrite(BS2, LOW);      //Подать на выходы BS2 лог. 0
  digitalWrite(RDY_BSY, HIGH); //Подать на выходы RDY_BSY лог. 1
  digitalWrite(OE, HIGH);      //Подать на выходы OE лог. 1
  digitalWrite(WR, HIGH);      //Подать на выходы OE лог. 1
  delay(100);                  //Выждать не менее 100 nс
  //         DDRD = 0b00000111; //Выходы XTAL1, 12V, 5V
  //                                                      Vcc_5V    Vpp_12V    XTAL1  -   сигналы
  // PORTD    7        6         5         4        3        2         1         0    -   разряды порта
  //   PORTD |= 0b00000110;//Подать на МК ОДНОВРЕМЕННО Uпит, а на вывод RESET U = 12В
  digitalWrite(Vcc_5V, HIGH);  //Подать на выходы Vcc_5V лог. 1
  digitalWrite(Vpp_12V, HIGH); //Подать на выходы Vpp_12V лог. 1
  delay(10000);                  // _delay_us(100);    //Выждать не менее 100 nс
  digitalWrite(Vcc_5V, LOW);  //Подать на выходы Vcc_5V лог. 0
  digitalWrite(Vpp_12V, LOW); //Подать на выходы Vpp_12V лог. 0
  digitalWrite(XTAL1, HIGH);
  delay(10);
  digitalWrite(XTAL1, LOW);    //Подать на выходы XTAL1 лог. 0
  delay(100); 
  //DDRA = 0b11111111;//Выход шины данных
}

//---Загрузка команды---
void loadcommand(byte command) //void loadcommand (unsigned char command)
{
  digitalWrite(XA1, HIGH);      // PORTC |=  _BV(XA1);
  digitalWrite(XA0, LOW);       /* // PORTC &= ~_BV(XA0); Установить выводы ХА1, ХА0 в состояние 10 загрузка команды */
  digitalWrite(BS1, LOW);       // PORTC &= ~_BV(BS1); Подать на вывод BS1 лог.0
  PORTD = command;              // PORT_DATA = command; Выставить на шину DATA код команды
  digitalWrite(XTAL1, HIGH);
  delay(10);
  digitalWrite(XTAL1, LOW);     //PORTD |=  _BV(XTAL1);_delay_us(10);PORTD &= ~_BV(XTAL1);//Подать на вывод XTAL1 положительный импульс
}

//---Загрузка данных---
void load_data(byte data)
{
  //void load_data (unsigned char data)
  digitalWrite(XA1, LOW);           //PORTC &= ~_BV(XA1);
  digitalWrite(XA0, HIGH);          //PORTC |=  _BV(XA0);//Установить выводы ХА1, ХА0 в состояние "01" загрузка данных
  digitalWrite(BS1, LOW);       //PORTC &= ~_BV(BS1);//Подать на вывод BS1 лог.0
  PORTD = data;                 //PORT_DATA = data;//Выставить на шину DATA код команды
  digitalWrite(XTAL1, HIGH);
  delay(10);
  digitalWrite(XTAL1, LOW);     //PORTD |=  _BV(XTAL1);_delay_us(10);PORTD &= ~_BV(XTAL1);//Подать на вывод XTAL1 положительный импульс
}

void loop() //int main (void)

  byte  command = 0;
  byte  data = 0;
  byte  low_fuse = 0;
  byte  high_fuse = 0;     //    unsigned char low_fuse, high_fuse;

  int buttonState = 0;               // variable for reading the pushbutton status   
  int CIPState = 0;
  //    PORTD |= _BV(PD6);//Вход с подтягивающим резистором - кнопка для перезаписи
  pinMode(ledPin, INPUT);            // устанавливает режим работы - OUTPUT для ledPin --- ИЛИ  INPUT ДЛЯ КНОПКИ
  digitalWrite(ledPin, HIGH);        // включить подтягивающий резистор ДЛЯ КНОПКИ
  //    DDRB |= _BV(PB3);//Выход на светодиод, индицирующий успешную перезапись
  while(1)                          //Бесконечный цикл
  {
    buttonState = digitalRead(ledPin); 
    if (buttonState == LOW)        //Если нажата кнопка "PROG"
    {
      pinMode(ledPin, OUTPUT);          // устанавливает режим работы - OUTPUT для ledPin --- ИЛИ  INPUT ДЛЯ КНОПКИ
      digitalWrite(ledPin, LOW);        // выключить подтягивающий резистор
      do                        //Начинаем цикл программирования
      {
        set_prog();        //Войти в режим паралельного программирования
        //Стирание кристалла
        loadcommand(0b10000000); //Загрузить команду "Стирание кристалла"
        digitalWrite(WR, HIGH);// PORTC |= _BV(WR);//Подать на вывод WR лог.1 (задний фронт)
        CIPState = digitalRead(RDY_BSY);
        while(CIPState == LOW)
         {
          CIPState = digitalRead(RDY_BSY);
          }//while(bit_is_clear(PINC, RDY_BSY));

        //Запись младшего конфигурационного байта
        loadcommand(0b01000000);//Загрузить команду "Запись конфигурационных ячеек"
        load_data(0b11100001);  //Загрузить младший конфигурационный байт
        digitalWrite(BS1, LOW);// PORTC &= ~_BV(BS1);//Сбросить BS1 в лог.0
        digitalWrite(BS2, LOW);// PORTC &= ~_BV(BS2);//Сбросить BS2 в лог.0
        digitalWrite(WR, LOW); // PORTC &= ~_BV(WR);//Подать на вывод WR лог.0 (передний фронт)
        delay(200);             // _delay_us(20);    //Длительность импульса
        digitalWrite(WR, HIGH);// PORTC |= _BV(WR);//Подать на вывод WR лог.1 (задний фронт)
        //  while(bit_is_clear(PINC, RDY_BSY));//и ждать появления на выводе RDY/BSY сигнала лог.1
        CIPState = digitalRead(RDY_BSY);
        while(CIPState == LOW)
        {
          CIPState = digitalRead(RDY_BSY);
        }
        delay(100); //_delay_us(100);

        //Запись старшего конфигурационного байта
        loadcommand(0b01000000);  //Загрузить команду "Запись конфигурационных ячеек"
        load_data(0b11011001);     //Загрузить старший конфигурационный байт
        digitalWrite(BS1, HIGH);//PORTC |= _BV(BS1);//Установить BS1 в лог.1
        digitalWrite(BS2, LOW); //PORTC &= ~_BV(BS2);//Сбросить BS2 в лог.0
        digitalWrite(WR, LOW);  //PORTC &= ~_BV(WR);//Подать на вывод WR лог.0 (передний фронт)
        delay(20);              //_delay_us(20);//Длительность импульса
        digitalWrite(WR, HIGH); //PORTC |= _BV(WR);//Подать на вывод WR лог.1 (задний фронт)
        //while(bit_is_clear(PINC, RDY_BSY));//и ждать появления на выводе RDY/BSY сигнала лог.1
        CIPState = digitalRead(RDY_BSY);
        while(CIPState == LOW)
        {
          CIPState = digitalRead(RDY_BSY);
        }
        digitalWrite(BS1, LOW);              //    PORTC &= ~_BV(BS1);//Сбросить BS1 в лог.0
        delay(100);                          //    _delay_us(100);

        //Чтение младшего конфигурационного байта
        loadcommand(0b00000100);
        //   DDRA  = 0x00;//Порт А перевести на вход   
        DDRD = B00000000;            // установить ноги порта D с 0 по 7 как цифровые входы /*Двунаправленная шина данных подключаем к PB7-PB0*/
        PORTD = 0xFF;                //с подтягивающими резисторами
        digitalWrite(OE, LOW);       //PORTC &= ~_BV(OE);//Сбросить ОЕ
        digitalWrite(BS2, LOW);      //PORTC &= ~_BV(BS2);//        BS2
        digitalWrite(BS1, LOW);      //PORTC &= ~_BV(BS1);//        BS1 в лог.0
        delay(250);                  //_delay_us(250);
        low_fuse = PIND;             //Считать значение младшего конфигурационного байта

        //Чтение старшего конфигурационного байта
        digitalWrite(OE, LOW);       //PORTC &= ~_BV(OE);//Сбросить OE в лог.0
        digitalWrite(BS2, HIGH);     //PORTC |= _BV(BS2);//Установить BS2
        digitalWrite(BS1, HIGH);     //PORTC |= _BV(BS1);//           BS1  в лог.1
        delay(250);                  //_delay_us(250);
        high_fuse = PIND;            //Считать значение старшего конфигурационного байта
        digitalWrite(OE, HIGH);      //PORTC |= _BV(OE);//Установить OE в лог.1

        DDRD = 0xFF;                 //Порт А - выход
        PORTD = 0;
        PORTB = 0;
        PORTC = 0; //Обнулить порты для предотвращения паразитного питания (через порты)
        //PORTD &= 0b11111000;//Снять питание
      }
      while((low_fuse != 0b11100001) || (high_fuse != 0b11011001));//Закончить цикл программирования если запись произведена успешно
      digitalWrite(ledPin, HIGH);        //PORTB |= _BV(PB3);   //и подсветить светодиод
    }
  }
}



В итоге: заливаем прошивку в Ардуино.
Видим горящий светодиод на самой плате Ардуино.
Жмем кнопку "PROG". Он тухнет.
(В моем случае я ставил задержку в программе на несколько сек. перед тем как я руками нажму кнопки подачи +12В и +5В.
Я жму и держу кнопки питания пока не загорится опять светодиод на плате - говоря, что все прошито)
В случае родной схемы то через секунду загорается опять светодиод на плате - говоря, что все прошито.
Там, как и писал автор, стирается блокировка и память. И шьются фьзы как у заводской установки.

Огромное спасибо автору Черняков С.С. chernyako-sergej@yandex.ru Евпатория за Проект "РЕАНИМАТОР AVR" и за исходники.
Вложения
reanimationAVR.rar
(32.9 KiB) Скачиваний: 763

Re: "РЕАНИМАТОР" для AVR

Ср ноя 12, 2014 22:06:07

Получилась бы своя небольшая статья. А возможно и призовая.

Re: "РЕАНИМАТОР" для AVR

Ср ноя 12, 2014 22:48:47

Спасибо за совет. Вроде разместил :)
Ответить