T.E.S.T.C.O.P.Y. • Просмотр темы - Автономный программатор на AVR с поддержкой FLASH карт

Автономный программатор на AVR с поддержкой FLASH карт

Инструменты, которыми мы пользуемся в работе. Обсуждаем их недостатки и преимущества.

Прилепить пост

Сообщение Kent » Вт янв 17, 2012 5:19 am

"Автоэлектрик" -сделан в Китае

Коллективное бессознательное

За это сообщение автора Kent поблагодарил:
КЭПула
Рейтинг: 2.7%
 
Аватар пользователя
Kent   
Ученик

Прилепить пост

Сообщение genafon » Чт янв 19, 2012 12:53 pm

Подскажите пожалуйста, на схеме SMD компоненты это резисторы? каким номиналом должны быть?
под мк два таких и ещё обрисованы как обычный резистор, это на выбор? или смд или обычный можно ставить? или как?
Спасибо заранее
Аватар пользователя
genafon   
Осматривается
  • Не в сети

Прилепить пост

Сообщение andrey.vadimovich » Чт янв 19, 2012 1:41 pm

да это резисторы номиналом по 1кОм (это те что под МК) - ставить можно либо СМД либо ДИП, как удобнее, а тот, что идет к 15 ноге - токоограничительный для подсветки дисплея, тут уж нужно datasheet смотреть.
Аватар пользователя
andrey.vadimovich   
Добрался до абсорбера
  • Не в сети

Прилепить пост

Сообщение mcu-by » Пн фев 20, 2012 3:52 pm

Можно ли посмотреть на часть исходника где реализован обмен с карточкой; или хотя бы узнать, в каком виде он реализован - SPI в режиме USART или программный SPI ?
спасибо!
Аватар пользователя
mcu-by   
Осматривается
  • Не в сети

Прилепить пост

Сообщение Gomz » Пн фев 20, 2012 9:06 pm

mcu-by писал(а):Можно ли посмотреть на часть исходника где реализован обмен с карточкой; или хотя бы узнать, в каком виде он реализован - SPI в режиме USART или программный SPI ?
спасибо!

Не знаю как реализована программа у andrey.vadimovich, но если вам не принципиально, то вот код программы для работы Мega16 с SD картой
Код: выделить все
     
  #include <avr/io.h> //Cтандартная библиотека ввода/вывода
   #include <string.h> //Библиотека для работы с строками
       
      #define DI 0
      #define DO 1
      #define CLK 2
      #define CS 3
      #define INS 4
      #define WP 5
  char buffer [512]={}; //Буфер данных для записи/чтения

      //Программа инициализации UART
      void uart_init(void)
      {
      UBRRH = 0x00; //256000 битрейт, 1 стоп бит, без проверки четности
      UBRRL = 0x01;
      UCSRA = 0x00;
      UCSRB = (1<<RXEN)|(1<<TXEN); //Прием и передача разрешена
      UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
      }
      //Программа передачи байта по UART

      void uart_transmit(unsigned char data)
      {
      while ( !( UCSRA & (1<<UDRE)) );
      UDR = data;
      }

      //Программа приема байта по UART

      unsigned char uart_receive (void)
      {

      while ( !(UCSRA & (1<<RXC)) );

      return UDR;
      }

      //Программа передачи строки по UART

      void uart_transmit_message(char* msg)

      { unsigned char i;

      i=0; //Начальное значение переменной

      //Цикл до перебора всех элементов строки

      while ((i<256)&(msg[i]!=0x00) )
      {

      //Отправка поэлементно символов строки

      uart_transmit(msg[i]);

      i++; //Увеличиваем номер элемента строки
      }
      }

      //Программа передачи байта карте SD|MMC

      void spi_transmit (unsigned char data)
      {

      unsigned char i;

      for (i=0;i<8;i++) //Цикл перебора битов отправляемого байта
      {

      if ((data&0x80)==0x00) //Если все данные переданы

      PORTB&=~_BV(DI); //Выставить бит данных

      else

      PORTB|=_BV(DI);

      data=data<<1;

      PORTB|=_BV(CLK); //Импульс

      asm("nop"); //Пауза в 1 такт

      PORTB&=~_BV(CLK);
      }
      }
       
      //Программа приема байт от карты SD|MMC

      unsigned char spi_receive (void)
       {

      //Декларация переменных

      unsigned char i, res=0;

      for(i=0;i<8;i++)
      {

      PORTB|=_BV(CLK); //Фронт импульса

      res=res<<1;

      if ((PINB&_BV(DO))!=0x00)

      res=res|0x01; //Считать бит данных

      PORTB&=~_BV(CLK); //Спад испульса

      asm("nop");
      }

      return res;
      }

      unsigned char sd_cmd(char b0, char b1, char b2, char b3, char b4, char b5)

      //Отправка команды карте SD|MMC

      { unsigned char res;

      long int count;

      spi_transmit (b0); //Передать индекс команды

      spi_transmit (b1); //Передать аргумент
      spi_transmit (b2);
      spi_transmit (b3);
      spi_transmit (b4);
      spi_transmit (b5); //Передать CRC

      count=0;

      do {    //Подождпть R1 ответа
      res=spi_receive();

      count=count+1;

      } while ( ((res&0x80)!=0x00)&&(count<0xffff) );

      return res;
      }
 
      unsigned char sd_card_init(void)
 
      { unsigned char i,temp;

      long int count;
 
      if ((PINB&_BV(INS))!=0x00) return 1; //Проверка карты в слоту
 
      for (i=0;i<10;i++) //80 импульсов

      spi_transmit (0xff);
 
      PORTB&=~_BV(CS); //CS опустить      temp=sd_cmd (0x40,0x00,0x00,0x00,0x00,0x95); //CMD0

      if (temp!=0x01) return 3; //Выйти, если ответ не 0х01

      spi_transmit (0xff);

      count=0;

      do{

      temp=sd_cmd (0x41,0x00,0x00,0x00,0x00,0x95); //CMD1

      spi_transmit (0xff);

      count=count+1;

      } while ( (temp!=0x00)&&(count<0xffff) ); //Ждем 0x01 ответа R1
       
      if (count>=0xffff) return 4;

      return 0;
      }

      unsigned char read_block (char* buff, unsigned char a1, unsigned char a2, unsigned char a3, unsigned char a4)

      { unsigned char temp;

      long int count;

      if ((PINB&_BV(INS))!=0x00) return 1; //Проверка карты в слоту

      temp=sd_cmd (0x51,a1,a2,a3,a4,0x95); //CMD17

      if (temp!=0x00) return 5; //Выйти, если ответ не 0x00

      spi_transmit (0xff);

      count=0;

      do{ //Ждем начала пакета данных

      temp=spi_receive();

      count=count+1;

      } while ( (temp!=0xfe)&&(count<0xffff) );

      if (count>=0xffff) return 5;
 
      for (count=0;count<512;count=count+1) //Сохраняем данные
 
      buff[count]=spi_receive();

      spi_receive(); //Сохраняем CRC

      spi_receive();

      return 0;
      }

      unsigned char write_block (char* buff, unsigned char a1, unsigned char a2, unsigned char a3, unsigned char a4)

      { unsigned char temp;

      long int count;

      if ((PINB&_BV(INS))!=0x00) return 1; //Проверка карты в слоту

      if ((PINB&_BV(WP))!=0x00) return 2; //Проверка write protect

      temp=sd_cmd(0x58,a1,a2,a3,a4,0x95); //CMD24

      if (temp!=0x00) return 6; //Выйти, если ответ не 0x00

      spi_transmit (0xff);

      spi_transmit (0xfe); //Начало пакета данных

      for (count=0;count<512;count=count+1) //Отослать данные

      spi_transmit(buff[count]);

      spi_transmit (0xff); //Отослать CRC

      spi_transmit (0xff);

      temp=spi_receive();

      if ((temp&0x05)!=0x05) return 6; //Выйти, если данные не приняты

      count=0;

      do { //Ждем окончания busy состояния

      temp=spi_receive();

      count=count+1;
      }

     while ( (temp!=0xff)&&(count<0xffff) );

      if (count>=0xffff) return 6;
 
      return 0;
      }

      int main(void)

      { unsigned char temp;

      int i;

      PORTB=_BV(CS)|_BV(DO)|_BV(DI)|_BV(WP)|_BV(INS); //Инициализация портов

      DDRB=_BV(CS)|_BV(DI)|_BV(CLK);

      uart_init(); //Инициализация UART
 
      temp=sd_card_init(); //Инициализация карты

      if (temp==0x00)
      {

      uart_transmit_message("sd_card_init: initialization succes\r\n");

      for (i=0;i<512;i=i+1)

      buffer[i]=0x30+(i%10); //Заполнить буфер 12345...

      temp=write_block(buffer,0x00,0x00,0x02,0x00);//Записать буфер

      if(temp==0x00) uart_transmit_message("write_block: block writte succes\r\n");

      else if (temp==1) uart_transmit_message("write_block: fail, no card in the slot\r\n");

      else if (temp==2) uart_transmit_message("write_block: fail, card write protected\r\n");

      else uart_transmit_message("read_block: CMD24 fail\r\n");
 
      temp=read_block(buffer,0x00,0x00,0x02,0x00); //Считать буфер

      if(temp==0x00) {

      uart_transmit_message("read_block: data block read succes:\r\n");

      for (i=0;i<512;i=i+1) //Выслать буфер по UART

      uart_transmit(buffer[i]);
      }

      else if (temp==0x01) uart_transmit_message("read_block: fail, no card in the slot\r\n");

      else uart_transmit_message("read_block: CMD17 fail\r\n");
      }

      else if (temp==0x01) uart_transmit_message("sd_card_init: fail, no card in the slot\r\n");

      else if (temp==0x03) uart_transmit_message("sd_card_init: CMD0 fail\r\n");

      else uart_transmit_message("sd_card_init: CMD1 fail\r\n");

      while (1);

      return 1;
      }
Аватар пользователя
Gomz   
Заправил картридж
  • Не в сети

Прилепить пост

Сообщение Next-777 » Пн апр 30, 2012 10:58 pm

Добрый вечер) Сори, что влажу в вашу тему, хочу собрать себе подобный программатор, но атмеловский камень ждать ещё месяц(с китая) в наличии есть pic16f877. покупал ещё давно, видел на этом форуме статью, ребята доработали прог со старткопи http://www.startcopy.ru/repair/progr_i2c.htm, но сейчас никак не могу найти, если у кого-то осталась доработанная схема, печатка и прошивка на контроллер, скинте пожалуйста на мыло. Спасибо))) berkut9@bk.ru
Аватар пользователя
Next-777   
Заправил чернильницу
  • Не в сети

Прилепить пост

Сообщение AndyWach » Вс сен 09, 2012 7:11 am

Извините что не в тему, но не знаете ли почему затерли тему автономного программатора на PIC12F629? Остались ли у кого схемы, прошивки, платы, копия статьи, можете скинуть.
Аватар пользователя
AndyWach   
Осматривается
  • Не в сети

Прилепить пост

Сообщение kvg » Вс сен 09, 2012 7:56 am

посмотрю позже, может что осталось..
Аватар пользователя
kvg   
Администратор сайта и форума

Прилепить пост

Сообщение КЭПула » Вс сен 09, 2012 8:27 am

AndyWach то не программатор, то обнулятор :-):
то также демо версия
Ну чё там у хахлов ?
Аватар пользователя
КЭПула   
КЭП-BSD

Прилепить пост

Сообщение kvg » Вс сен 09, 2012 8:36 am

Тогда не буду искать.:)
Аватар пользователя
kvg   
Администратор сайта и форума

Прилепить пост

Сообщение КЭПула » Вс сен 09, 2012 12:09 pm

kvg утверждать на 100 процентов не буду, знакомый спаял тот на пику и работать перестал нистого нисего по его словам.
Ну чё там у хахлов ?
Аватар пользователя
КЭПула   
КЭП-BSD

Прилепить пост

Сообщение Vigi » Вс сен 09, 2012 8:16 pm

Аватар пользователя
Vigi   
Починил струйный принтер

Прилепить пост

Сообщение AndyWach » Чт сен 13, 2012 2:21 pm

КЭПула писал(а):AndyWach то не программатор, то обнулятор :-):
то также демо версия


Обнулятор и не демо версия вовсе, у меня он работает но там было еще несколько версий и прошивок, а статью забыл сохранить.

Тема называлась: "Обнулятор" для чипов картриджей SCX-4200 и WC 3119, ML-1661 - http://testcopy.ru/forum/viewtopic.php? ... ead#unread
Аватар пользователя
AndyWach   
Осматривается
  • Не в сети

Прилепить пост

Сообщение manik.76 » Чт сен 13, 2012 3:36 pm

у мну работает, правдв пока для 4200 и 3119, но работает, думаю залить на 6110 для всех цветов, имхо работает. КЭП подтверди???
Аватар пользователя
manik.76   
Over 9000 заправок

Прилепить пост

Сообщение КЭПула » Чт сен 13, 2012 4:06 pm

какой именно программатор ?
если этот что на AVR то да прошивать будет, главное выбрать цвета
планирую добавить такую кнопку http://www.ibc-web.ru/do-it-perfect/ :hi_hi_hi:
Ну чё там у хахлов ?
Аватар пользователя
КЭПула   
КЭП-BSD

Пред.След.

Вернуться в Инструментарий

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

вверх
вниз
x

#{title}

#{text}