Программирование ATMega8 с помощью USBASP

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 17
Зарегистрирован: Чт май 23, 2013 22:19:27

Сообщение Kolian »

Доброго времени суток!
Пытаюсь научиться программировать (хотя бы залить готовую прошивку в контроллер).
Купил программатор USBASP в Чине, пришел в упаковке, целехонький. Отдали мне контроллер ATMega8L-8PU (кто-то купил программатор, но плату с панельками так и не сделал). Хотел и платку с панельками - да не нашел, пришлось собрать как тут: клац. Вроде собрал правильно, обрывов и КЗ быть не должно.
Соединил плату и программатор вместе, на плату в гнездо 2,1 подал 12В, подключил к ПК. Программатор успешно установился. Продавец в комплект приложил линк на дрова и какие-то проги, да документацию. Вычитал я из приложенных мануалов, что нужно юзать khazama AVR Programmer. Установил, открыл. дальше в инструкции предлагают выбрать файл прошивки - его нет. Вот не задача... В гугл с такими лозунгами: "первый проект atmega8", дальше - сюда. Готового .hex файла нет на сайте. Начинаю читать статью, где говорят, что в предыдущей статье... Иду в предыдущую статью рассматривать код мигалки на C и способы его компиляции. Качаю WinAVR, инсталлирую. Снова в статью, Copy+Paste - готово. Не тут то было! Еще Makefile редактировать... Начинаем... Почти готово.
Ищем строку:

AVRDUDE_PORT = com1 # programmer connected to serial device

Заменяем на:

AVRDUDE_PORT = lpt1

Программатор stk200 использует параллельный порт (lpt).
Но у меня USB программатор. Что делать? Смотрю на время - без 20 полночь. Оставляем по дефолту, вдруг прокатит. Компилим - все ОК.
Иду в первую статью, куда попал из гугла. Там написано:
Запустим Programmers Notepad, откроем пример программы, приведенной в статье "Makefile и компиляция программы". Можно еще раз откомпилировать его командой Tools -> [WinAVR] Make All. После чего загрузим откомпилированный файл my_test.hex в память программ вашего микроконтроллера командой Tools -> [WinAVR] Make Program.

По окончании процесса внизу, в окне "Output", должно появиться сообщение об успешной загрузке
Делаю все, как написано. В итоге:
"make.exe" program
avrdude -p atmega8 -P com1 -c stk200 -U flash:w:my_test.hex
avrdude: port name "com1" is neither lpt1/2/3 nor valid number
avrdude: can't open device "com1"

avrdude: failed to open parallel port "com1"

make.exe: *** [program] Error 1

> Process Exit Code: 2
> Time Taken: 00:00
Оставляем по дефолту, вдруг прокатит.
Не прокатило....

Что ж, возвращаемся к софту от продавца. Открываю мануал, khazama AVR Programmer, где выбираю готовый .hex файл прошивки контроллера на "мигалку", который сам скомпилил в поте лица. Жму "Auto Program", получаю:

Изображение

Изображение

Изображение


Основная задача: запилить такую лампу (или несколько) до 8 марта
Текущая задача: проверить: работает ли программатор и панелька?

Пара вопросов напоследок:
  • Что делать с частотой? Как мне выставить эти джамперы (у меня переключатели, как и в варианте платы автора статьи)
  • Может ли кто-то скомпилить прошивку под мигалку и закинуть сюда? (а то времени в обрез до 8 марта, а мигалка - просто проверочная стадия)
Реклама
Родился
Сообщения: 17
Зарегистрирован: Чт май 23, 2013 22:19:27

Сообщение Kolian »

Сегодня попробовал залить программу этой мигалки по 2 способу из этой инструкции в CodeVision AVR. Та же ошибка. Помогите. Сегодня времени у меня еще на день меньше...
Реклама
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Вт фев 09, 2010 17:52:26

Сообщение codenamehawk »

У вас усб а не сом порт используется, вот его в установках и указывайте.
Попробуйте оболочку типа Sinaprog или Extreme burner для USBASP
http://www.drive2.ru/communities/e-stuff/blog/398036/
Родился
Сообщения: 17
Зарегистрирован: Чт май 23, 2013 22:19:27

Сообщение Kolian »

Завтра попробую. А как указать USB? Я предполагал, что USB вешается на виртуальный COM, сразу полез в дисп. устройств (еще тогда), но ничего не нашел или просто забыл где это смотреть.
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 17
Зарегистрирован: Чт май 23, 2013 22:19:27

Сообщение Kolian »

Попробовал в оболочке USBASP_AVRDUDE_PROG с drive2.ru - та же ошибка.
avrdude.exe: error: programm enable: target doesn't answer. 1
avrdude.exe: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.


avrdude.exe done. Thank you.
Реклама
Родился
Сообщения: 13
Зарегистрирован: Чт окт 03, 2013 19:30:03

Сообщение С_а_н_ы_ч »

Сам не давно начал этим заниматься, программатор у меня такой же. USBASP_AVRDUDE_PROG все определил с первого раза. Попробуй с командной строки зайти в папку где лежит USBASP_AVRDUDE_PROG и вбей не: avrdude -p atmega8 -P com1 -c stk200 -U flash:w:my_test.hex, а: avrdude -p m8 -c USBASP -U flash:w:my_test.hex
А khazama AVR Programmer у меня ничо не получилось.
Реклама
Родился
Сообщения: 13
Зарегистрирован: Чт окт 03, 2013 19:30:03

Сообщение С_а_н_ы_ч »

А усб нигде указывать не надо, указывается только программатор USBASP, если он поддерживается, а программой уже подразумевается что он к усб подключен.
Родился
Сообщения: 17
Зарегистрирован: Чт май 23, 2013 22:19:27

Сообщение Kolian »

Программатор заработал после прозвонки. Оказалось, что на плате с панельками отошел вывод "SCK", который был успешно припаян. Сделал я и мигалку. Взял код из этой статьи, чуть-чуть подправил синтаксис и вот что вышло:

Код: Выделить всё

/************************************************
ПРИМЕР МИГАНИЯ СВЕТОДИОДАМИ
 
*************************************************/
   #define F_CPU 1000000UL  // 1 MHz
   #include <io.h>
   #include <delay.h>

  
   void main(void)              // начало основой программы
   {
  
   DDRD = 0xff;            /* все выводы порта D сконфигурировать как выходы */
        while (1) {              // Бесконечный цикл
            PORTD = 0xff; /* установить "1" на всех линиях порта D */
            delay_ms(250);   // Ждем 0.25 сек.
            PORTD = 0x00;  /* установить "0" на всех линиях порта D */
   delay_ms(250);   // Ждем 0.25 сек.
  }       // закрывающая скобка бесконечного цикла
   }      // закрывающая скобка основной программы
Видео + исходник + проект в CodeVision AVR + файл прошивки(led3.hex): http://yadi.sk/d/_GtxNsJSJV3zz

Завтра поеду за ATtiny13.


Только беда: мне нужно купить ATtIiny в smd корпусе., а как его прошить? Где взять такой переходник с smd на dip? Просто таких контроллеров прошить надо штук пять, не припаивать же...
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 162
Зарегистрирован: Вт июн 04, 2013 14:52:20
Откуда: Крым

Сообщение Appll »

Kolian писал(а):Где взять такой переходник с smd на dip? Просто таких контроллеров прошить надо штук пять, не припаивать же...
Есть универсальные платы под PLCC и QFP. К ней подпаиваете разьем программатора. А саму микруху прижимаете биндером.
Прошили,проверили запаяли.
Из всех меломанов, хороший транзисторный звук от хорошего лампового отличить смог только осциллограф...
Родился
Сообщения: 17
Зарегистрирован: Чт май 23, 2013 22:19:27

Сообщение Kolian »

Appll писал(а):
Kolian писал(а):Где взять такой переходник с smd на dip? Просто таких контроллеров прошить надо штук пять, не припаивать же...
Есть универсальные платы под PLCC и QFP. К ней подпаиваете разьем программатора. А саму микруху прижимаете биндером.
Прошили,проверили запаяли.
Купил четыре Attiny13A ($0.9 за штуку) в SOIC корпусе. Спросил панельки-переходники с SOIC на DIP. "Были такие" - мне ответили. поинтересовался по чем... $5.3 за один переходничек. Нашел платки, на которых шаг выводов контроллера совпадает с дорожками - купил парочку ($0.1 за шт.). Думал: дело в шляпе. припаиваюсь к дорожкам, другие концы проводков в DIP панельку на плату с панельками, а контроллер прищепкой. Как ни пытался - ничего не вышло. пришлось припаять контроллер. Дорожки слишком короткие, лапки МК не становятся нормально, когда провода припаяны.

Изображение

Изображение

Изображение
_____________________________________

Но не все так гладко. Столкнулся я с проблемой: Как выставить фьюзы? У меня есть скрин фьюзов из CodeVision AVR Programmer. Но эта программа не совместима с моим программатором. Однако, в моем арсенале имеется парочка оболочек avrdude: khazahma и USBASP_AVRDUDE_PROG. Прикладываю скрины фьюзов.

Изображение
Это скрин фьюзов из CodeVision AVR Programmer (то, что выложил автор статьи о лампе)

Изображение
Выставление фьюзов в USBASP_AVRDUDE_PROG (я считал с чистого контроллера)

Изображение
Выставление фьюзов в khazahma (я считал с чистого контроллера)
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 162
Зарегистрирован: Вт июн 04, 2013 14:52:20
Откуда: Крым

Сообщение Appll »

Зачем паять провода к дорожкам? :facepalm: там же есть отверстия..... И микруха 100% прижалась бы прищепкой. Ну и можно припаять PLC ножки и вставить платку в разьем на Вашей плате.
Фьюзы....подводный камень всех МК :)))
Вообщем так - лучше почитать тему про них ( благо тут их хватает)
Из всех меломанов, хороший транзисторный звук от хорошего лампового отличить смог только осциллограф...
Друг Кота
Аватара пользователя
Сообщения: 6321
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

И не надо так кричать ! :)
Родился
Сообщения: 17
Зарегистрирован: Чт май 23, 2013 22:19:27

Сообщение Kolian »

Jack_A писал(а):И не надо так кричать ! :)
Я и не кричал вовсе. Я просто выделил основные мысли. Возможно, кому-то лень читать весь текст или некогда.
Родился
Сообщения: 17
Зарегистрирован: Чт май 23, 2013 22:19:27

Сообщение Kolian »

Так что с фьюзами? Уто-нибудь можкт показать мне каки фьюзы выставлять в khazahmaили другой оболочке? Я приложил нужные фьюзы, только в другой программе, не понимаю только как преобразовать.
Родился
Сообщения: 17
Зарегистрирован: Чт май 23, 2013 22:19:27

Сообщение Kolian »

Appll писал(а):Зачем паять провода к дорожкам? :facepalm: там же есть отверстия..... И микруха 100% прижалась бы прищепкой. Ну и можно припаять PLC ножки и вставить платку в разьем на Вашей плате.
Фьюзы....подводный камень всех МК :)))
Вообщем так - лучше почитать тему про них ( благо тут их хватает)
Уже припаял. Хорошо, что пару плат купил... Паял в час ночи, соображалка не очень работала. Еще 3 Чипа ждут своей очереди :dont_know:
Какие темы, например...
Может фьюзы дефолтные оставить, просто прошивку закачать? И попробовать.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 162
Зарегистрирован: Вт июн 04, 2013 14:52:20
Откуда: Крым

Сообщение Appll »

вот здесь найдете все что нужно
и еще соберите вот такой девайс - он Вам пригодиться )))
Из всех меломанов, хороший транзисторный звук от хорошего лампового отличить смог только осциллограф...
Родился
Сообщения: 17
Зарегистрирован: Чт май 23, 2013 22:19:27

Сообщение Kolian »

Appll писал(а):вот здесь найдете все что нужно
и еще соберите вот такой девайс - он Вам пригодиться )))
Уже нашел)) Попал в эту тему, а потом на этот сайт, только аваст начал гавкать, что вирусы, но на win 8 пустил, на XPюше сказал, что страница недоступна... Пробежался по фьюзам для своего контроллера, почитал что к чему, помогло немного))) Выставил фьюзы так:

Изображение

Прошил их и прошивку залил. Сейчас в устройство МК впаяю.
Родился
Сообщения: 17
Зарегистрирован: Чт май 23, 2013 22:19:27

Сообщение Kolian »

Заработала "лампа" :beer: . Перепаял на красный кристалл резистор с 9 на 13 Ом, но все равно красного многовато. Цвет плавно меняет: красный --> розовый --> серый --> белый --> белый с зеленым оттенком --> красный --> розовый -->...... Короче, вот фотки (не один фотик на видео запечатлеть не смог, только глаз видел, изменение цвета не такое значительное)


Изображение

Изображение

Изображение





Хотелось бы, чтобы доходило до чистых цветов (красный, синий, зеленый), плавно меняя оттенки, среди которых желтый, пурпурный, голубой и другие. Возможно ли это в данном коде?

Код: Выделить всё

/*
* MoonLamp.c
*
* Created: 29.04.2012 16:12:53
*  Author: Trol
*/
#include <avr/io.h>
#include <stdlib.h>
#include <avr/interrupt.h>
uint8_t currentColor[3];
uint8_t startColor[3];
uint8_t nextColor[3];
#define currentR currentColor[0]
#define currentG currentColor[1]
#define currentB currentColor[2]
#define startR startColor[0]
#define startG startColor[1]
#define startB startColor[2]
#define nextR nextColor[0]
#define nextG nextColor[1]
#define nextB nextColor[2]

uint16_t tickBeforeChange;
#define TIMER_FREQUENCY 9600000
#define TIMER_OVERFLOW_FREQUENCY (TIMER_FREQUENCY/0xff)

static uint8_t calculateColor(uint8_t from, uint8_t to, uint16_t tm);
static void calcNextPoint();

/**
* Timer overflow interrupt. Used for PWM implementation
* Called with TIMER_OVERFLOW_FREQUENCY frequency
*/
ISR(TIM0_OVF_vect){
static uint8_t cnt_0 = 0;  // PWM counter
static uint16_t cnt_1 = 0;  // counter for next color recalculation

if ( cnt_0 == 0 ) {
  // recalculate bright
  currentR = calculateColor(startR, nextR, cnt_1);
  currentG = calculateColor(startG, nextG, cnt_1);
  currentB = calculateColor(startB, nextB, cnt_1);
 
  cnt_1++;
  if ( cnt_1 >= tickBeforeChange ) {
   cnt_1 = 0;
   calcNextPoint();
  }
}

// update channels
uint8_t output = 0;
if ( currentR >= cnt_0 ) {
  output |= _BV(0);
}
if ( currentG >= cnt_0 ) {
  output |= _BV(1);
}
if ( currentB >= cnt_0 ) {
  output |= _BV(2);
}
PORTB = output;

cnt_0++;
}

static uint8_t calculateColor(uint8_t from, uint8_t to, uint16_t tm) {
uint32_t percent = 0xff;
percent *= tm;
percent /= tickBeforeChange;
int res = from + (to - from) * percent / 0xff;
return (uint8_t)res;
}
static uint8_t rndColor() {
return 30 + (random() % 220);
}
static void calcNextPoint() {
startR = nextR;
startG = nextG;
startB = nextB;
nextR = rndColor();
nextG = rndColor();
nextB = rndColor();
uint8_t rnd = random();
uint8_t indx = rnd % 3;
nextColor[indx] = 0;
rnd = 30 + rnd % 120; // time to change color, sec/10
tickBeforeChange = (TIMER_OVERFLOW_FREQUENCY/0xff)*rnd/10;
}

int main(void) {
nextR = 0;
nextG = 0;
nextB = 0;
calcNextPoint();

DDRB = 0xff;
TCCR0B = _BV(CS00);  // disable prescaler for timer
TIMSK0 = _BV(TOIE0); // enable timer overflow interrupts
sei();     // enable global interrupts
    while (1) { 
    }
}
Родился
Сообщения: 17
Зарегистрирован: Чт май 23, 2013 22:19:27

Сообщение Kolian »

Написал я автору, спросил в чем проблема, он посоветовал выпаять МК и добиться белого свечения СИД, подключив питание к 3-м кристаллам, методом подбора резисторов. И поделился новой прошивкой. теперь заметно, что это "Лампа настроения". Видео тут
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Сообщение Morroc »

Напишу сюда...

Столкнулся с проблемой - не шьется мега8 USBASP'ом и все тут, вообще не видится. Пришлось расковырять USBASP и запаять перемычку "Slow SCK", после чего фьюзами выставил 2 мгц внутренний генератор и тогда оно заработало нормально без "Slow SCK" (с ним уж больно медленно). Не помню точно чем я до этого шил меги8, мне казалось этим же девайсом и "Slow SCK" не требовался, может глючу.
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Ответить

Вернуться в «AVR»