Доброго времени суток! Нужно было зашить прошивку в МК, выбрал ATmega8A-PU (видел что народ шьёт и весьма удачно, да и по характеристикам устроил). Но, как известно, чтобы прошить МК нужен программатор. Готовые стоят бешеных цен, так что взял ещё M74HC244, и начал паять. Вот такая платка под атмегу (20 МГц для другого нужно, никак с атмегой не связано. 4МГц - распаял место под кварц просто на всякий случай, даже кварц ещё не покупал): и по схеме сделал платку для программатора: (не кусайте за кривость, пожалуйста, недавно начал всем этим заниматься ) Написал сначала нужную программку, но потом решил сделать нечто попроще, ну так для себя, чисто порж... проверить работоспособность. ПоставилCodeVisionAVR, через визард задал выходную ножку, написал кодик: Спойлер#include <mega8.h>
// Declare your global variables here
void main(void) { // Declare your local variables here
// Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); SFIOR=(0<<ACME);
while (1) { // Place your code here //if(PORTB.1) PORTC.0 = 1; //else //PORTC.0 = 0; } }
Однако ошибка Communication error от меня не отставала. Но в один прекрасный момент всё заработало: флеш память чистилась, прошивка заливалась.... пока я случайно не задел клавиатуру и не нажал лок битс... и всё, появился у меня камень, который всегда подаёт на ножку 1 Высказав себе всё что я о себе думаю, отпаял МК и вставил новый (знал что обязательно что-нибудь пойдёт не так - купил 2). Однако как я не пытался, ошибка никак не пропадала. Delay Multiplier менял, в биосе поставил режим lpt на Bidirectional, 100 раз перепроверил правильность схемы и платы. Может кто подсказать как мне избавиться от этого проклятого Communication error?
Микроконтроллеры стоит ставить в панельки, лучше цанговые, чтобы не пришлось отпаивать по случаю. Избавиться от ошибки очень просто: купить нормальный программатор) СтОят программаторы вполне себе копейки, если заказывать у китайцев на АЛИ.
ЗЫ Кто вас учит так разводить платы?
_________________ Глупый не задает вопросы. Глупый и так все знает.
Andreey, шлейф (провода) длинные от программатора до МК? Можно попробовать резисторы на 33 ома заменить на 250-470 ом. И что-то не пойму по плате, есть или нет блокировочные конденсаторы по питанию. Желательно как можно ближе к выводам питания. На плате с МК и на программаторе. Есть?
_________________ Когда уже ничего не помогает - прочтите, наконец, инструкцию. Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII) Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
А я вот таким пользуюсь, уже больше пяти лет.. Никаких проблем. Пару лет назад сделал в качестве "довеска" переходник для программирования Мега8 (48/88), или Тини2313/90S2313: Недавно сделал USB программатор : и столкнулся с тем, что под управлением АВР- дудки этот программатор работает, а под управлением СинаПрог-а НЕТ!! Пишет, что "программатор не обнаружен", хотя в системе он висит нормально (дудка - РАБОТАЕТ!!)
(Имхо) Самая лучшая "оболочка" для STK200 - это Унипроф или Понипрог..
Ну, а так- вообще- то, удобна та программа, к которой привык..
Никто, сам научился. Если подскажете что и где не правильно и как правильно - буду благодарен.
Kavka писал(а):
Andreey, шлейф (провода) длинные от программатора до МК? Можно попробовать резисторы на 33 ома заменить на 250-470 ом. И что-то не пойму по плате, есть или нет блокировочные конденсаторы по питанию. Желательно как можно ближе к выводам питания. На плате с МК и на программаторе. Есть?
1. Не очень, 15-20 см. 2. Попробую. 3. На программаторе есть, а вот на плате с атмегой нету... 4. Так ведь шилось! Правда недолго из-за моей ошибки с локом. Не понятно почему он не шился много раз, потом начал прошивать, а потом перестал.
Так это она и есть, за исключением резисторов. За это её кто-то ругал, что запарывает камни. Так что где-то у меня с этими часами не так, то ли на ногу одеваю, то ли ремешок забыл застегнуть.
Добавлено after 6 minutes 2 seconds:
АлександрЛ писал(а):
А я вот таким пользуюсь, уже больше пяти лет.. Никаких проблем.
всё гениальное - просто Я тоже думал плюнуть на всё и сделать так.
АлександрЛ писал(а):
Недавно сделал USB программатор :
Чтобы сделать USB программатор - надо его прошить через LPT
АлександрЛ писал(а):
и столкнулся с тем, что под управлением АВР- дудки этот программатор работает, а под управлением СинаПрог-а НЕТ!! Пишет, что "программатор не обнаружен", хотя в системе он висит нормально (дудка - РАБОТАЕТ!!)
(Имхо) Самая лучшая "оболочка" для STK200 - это Унипроф или Понипрог..
Ну, а так- вообще- то, удобна та программа, к которой привык..
Я пока не привык, так что мысль попробовать другое ПО - хорошая мысль.
Я пока не привык, так что мысль попробовать другое ПО - хорошая мысль.
Попробуйте Uniprof.. Как- то он мне больше нравится, вот только надо внимательно фьюзы программировать- сначала разобраться, какие именно автор написал- "прямые" или "инверсные"..
зы.. Хотя у меня и сним была "странность" - перешивал Мегу128- Унипроф её вроде как перешил, но почему- то "не заработало", а ПониПрог- ом она перешилась и заработала нормально.. Шил как раз через "пять проводков"..
Да сколько ни читал - у одного одним прошивается, у другого - другим. Вывод я сделал такой - качай и используй всё. Что-нибудь да заработает, если ошибок в коде/фьюзах/железе нету
5 проводков не запахал. Зато есть успехи с моей стк200. Ну как успехи... Теперь он мне пишет Can't read Chip Signature because LB1=0 & LB2=0. Если считать Lock Bits, то он выдаёт такую красоту: И если согласиться, то выставляет настройки так:
Вопрос: какой собаки? Как он смог что-то залочить, когда чип был девственницей и при попытках прошиться выдавал раньше только ошибки?
*Спустя 15 минут.* Перезапустил CodeVisionAVR, увидел кнопку запрогать лок биты. запрогал. единицы. Думаю отлично. Прочитал сигнатуру, видится. Однако при прошивке флеш, выдаёт что лок биты снова стали нулями. Записать 1 в лок биты можно, правда если попытаться очистить камень, то выдаёт:
Ура! Заработало! Поставил кварц на 4МГц, код, написанный в CodeVisionAVR, прошивается понипрогом восхитительно. Биты замечательно выходят и выходят Вот только заставить кнопку работать у меня не получается.... К примеру написал PORTC.0 /*led*/ = PORTB.1 /*button*/; , но светодиод темнее ночи. Может что не так с настройками порта для кнопки?
1. Лучше не использовать нестандартную экзотику, характерную для какого-то конкретного диалекта. В обычном Си такая запись неправильна. 2. Чтобы считать реальное состояние порта, читать надо не PORTx, а PINx. Таким образом, ваш код будет выглядеть так
Код:
DDRB &=~(1<<1); //PB1 настраиваем на вход PORTC |= (1<<0); //PC0 настраиваем на выход if( PINB & (1<<1) ){ //если на PB1 лог.1, то PORTC |= (1<<0); //выдаем на PB0 лог.1 }else{ //в противном случае PORTC &=~(1<<0); //выдаем на PB0 лог.0 }
Если же есть опыт работы с макросами и препроцессором, можно написать более наглядно и кроссплатформенно
Код:
#define BTN B,1,1 #define LED C,0,1 DDR_0( BTN ); DDR_1( LED ); if( PIN_ON( BTN) )PORT_ON(LED); else PORT_OFF(LED);
С использованием моих макросов (пока приводить их не буду - без понимания основ они бесполезны), возможно легко менять порт, куда подключены кнопка и диод, и их "включенный" уровень (лог.0 или лог.1).
Сейчас этот форум просматривают: ILYAUL и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения