Страница 1 из 2
А что, в МК код выполняется как то по особому? [Си]
Добавлено: Пн окт 13, 2014 18:37:22
Кот Серко
На Си я программирую не долго, около двух лет, но все же, не на столько глуп, чтобы не правильно понять такую программу:
Код: Выделить всё
/*
* ledblinking.c
*
* Created: 3/30/2011 9:36:30 AM
* Author: sfg
*/
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB=0xFF; //all pins of PORTB declared as output
PORTB=0x00;
while(1)
{
//TODO:: Please write your application code
PORTB=0xFF; //High State
_delay_ms(2000); //delay
PORTB=0x00; //low state
_delay_ms(2000); //delay
}
}
Собственно, вроде все ясно. Устанавливаем порт Б как порт вывода. Зануляем. В БЕСКОНЕЧНОМ цикле мигаем светодиодом, подымая и опуская напряжение.
Скомпилировал для (ATmega32A), залил (Только flash, да?), на отладочной плате помигало две лампочки из порта Б и потухло. Все.
Ну, где я накосячил?

Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Пн окт 13, 2014 19:01:57
pyzhman
Искать между залил (включая) и на отладочной плате.
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Пн окт 13, 2014 19:07:25
Кот Серко
pyzhman писал(а):Искать между залил (включая) и на отладочной плате.
Чего то я не понимаю. Пробовал залить флеш, eeprom, elf. Все точно так же, помигает и перестанет.
Скрин прикрепил.
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Пн окт 13, 2014 19:13:37
pyzhman
А что за Failed там бултыхается внизу?
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Пн окт 13, 2014 19:19:30
Кот Серко
pyzhman писал(а):А что за Failed там бултыхается внизу?
Хм, хз. Вот попробовал прошить только флеш:
Код: Выделить всё
Getting isp parameter.. SD=0x06 .. OKOK
Reading FLASH input file.. OK
Setting mode and device parameters.. OK!
Entering programming mode.. OK!
Erasing device.. OK!
Programming FLASH .. OK!
Reading FLASH .. OK!
FLASH contents is equal to file.. OK
Leaving programming mode.. OK!
А вот эльф:
Код: Выделить всё
Getting isp parameter.. SD=0x06 .. OK
Validating ELF input file.. OK!
Reading FLASH input..OK!
No EEPROM contents in ELF file.
No FUSE contents in ELF file.
No LOCKBITS contents in ELF file.
No SIGNATURE contents in ELF file.
Setting mode and device parameters.. OK!
Entering programming mode.. OK!
Erasing device.. OK!
Programming FLASH .. OK!
Reading FLASH .. OK!
FLASH contents is equal to file.. OK
Leaving programming mode.. OK!
Вроде нет ни каких фейлов...
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Пн окт 13, 2014 19:23:19
mas123
Кот Серко писал(а):Ну, где я накосячил?

Прверяем фьюзы:
- не включен ли режим bootloader'а при его отсутствии?
- проверяем настройку генератора: а припаян-ли кварц и выставлен ли фьюзами на нужную частоту? Или выставлены ли фьюзы на RC-генератор?
Далее: _delay_ms(2000); //delay - а сколько тактов этот цикл выполняется?
Обычно, в проекте есть #define с тактовой частотой - от неё и вычисляется сколько тактов надо ждать, чтобы прошло время Ы.
Если F_CPU не определено - компилятор мало того, что возьмёт её равно 1 МГц, так ещё и warning должен выбросить...
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Пн окт 13, 2014 19:36:56
Кот Серко
mas123 писал(а):Кот Серко писал(а):Ну, где я накосячил?

Прверяем фьюзы:
- не включен ли режим bootloader'а при его отсутствии?
Я слышал с ними легко сломать МК, по этому, трогать не стал, сфоткал как есть, первый файл в прикреплении.
mas123 писал(а):
- проверяем настройку генератора: а припаян-ли кварц и выставлен ли фьюзами на нужную частоту? Или выставлены ли фьюзы на RC-генератор?
Кварц есть внешний, на программаторе. Маркировка "4,000", видимо 4 мегагерца.
mas123 писал(а):
Далее: _delay_ms(2000); //delay - а сколько тактов этот цикл выполняется?
Обычно, в проекте есть #define с тактовой частотой - от неё и вычисляется сколько тактов надо ждать, чтобы прошло время Ы.
Если F_CPU не определено - компилятор мало того, что возьмёт её равно 1 МГц, так ещё и warning должен выбросить...
Нет, дефайна нет и нет ни каких ворнингов. Странно...
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Пн окт 13, 2014 19:55:37
mas123
Кот Серко писал(а):Я слышал с ними легко сломать МК, по этому, трогать не стал, сфоткал как есть, первый файл в прикреплении.
Шикарно. Это что получается: "я не знаю как настроен камень, но я считаю, что компилятор С работает неправильно".
Мой совет - отложи компилятор в сторону, открой даташит на камень и изучи.
Легко сломать можно и компутер, а от электричества вообще можно удар током получить - тебя же это не останавливает?
Кот Серко писал(а):Кварц есть внешний, на программаторе. Маркировка "4,000", видимо 4 мегагерца.
ВИДИМО? 
Т.е. ты даже не знаешь как включен контроллер и какие номиналы элементов?
Контроллер плевал на твой кварц - фьюзы чётко говорят: RC-генератор, 1 МГц. И проверь-ка фьюзы BOOTRST и BOOTSZx
Кот Серко писал(а):Нет, дефайна нет и нет ни каких ворнингов. Странно...
Вот же кусок кода:
Код: Выделить всё
#ifndef F_CPU
/* prevent compiler error by supplying a default */
# warning "F_CPU not defined for <util/delay.h>"
# define F_CPU 1000000UL
#endif
Если варнинг не вылетает - то какое значение у F_CPU?
ЗЫ: а неужели даже не возник вопрос - как работает функция delay_ms(), ежели у контроллера может быть частота генератора от 1 до 16 МГц?
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Пн окт 13, 2014 19:59:52
СКАЗОЧНИК
А у Атмеги 32 по уполчанию на каком порту ДЖИТАГ весит? Нашел, на Д.
И настроена на на РС цепочку внутреннюю на 1 МГц. Внешний кварц не использует.
Исходя из Ворнинга, надо просто найти и подключить библиотеку с Делаями. )))

Ответили уже...
А мигали они видимо, когда программирование шло... ))))
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Пн окт 13, 2014 20:05:05
mas123
СКАЗОЧНИК писал(а):А у Атмеги 32 по уполчанию на каком порту ДЖИТАГ весит?
PORT C, PC2...PC5
СКАЗОЧНИК писал(а):Исходя из Ворнинга, надо просто найти и подключить библиотеку с Делаями. )))
Варнинга якобы нет, хотя должен быть. А сама либа подключена в #include.
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Пн окт 13, 2014 20:11:26
СКАЗОЧНИК
mas123 писал(а):PORT C, PC2...PC5
Блин, я лошара.

А на Д - Юарт?
Тьфу, бля. Пошел я спать...
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Вт окт 14, 2014 09:37:55
mail_robot
альтернативные функции порта B надо смотреть и в каких случаях они активируются по умолчанию. Почти все они работают в режиме оверрайд в приоритете над регистром данных порта.
Мануал атмеловский конеш просто шедеврален.....

Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Вт окт 14, 2014 16:47:11
YS
Про фьюзы я
уже писал специально для таких случаев.
Чтобы использовать _delay_ms(), надо, как уже говорили, корректно задать макрос F_CPU - его значение должно соответствовать реальной рабочей частоте МК в Герцах. Обычно это делается в настройках IDE, а не прямо дефайном в коде, а IDE уже подставляет его как параметр в командную строку компилятора.
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Сб окт 18, 2014 16:19:40
Кот Серко
Спасибо за ссылки, почитал на неделе, но разобраться так и не смог. У меня в программаторе ко всем портам подтянуты светодиоды, чтобы они отображали логический 0/1. Следующая программа должна активировать все ножки порта "Б":
Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB=0xFF; //all pins of PORTB declared as output
PORTB=0x00;
while(1)
{
//TODO:: Please write your application code
PORTB=0xFF; //High State
_delay_ms(200); //delay
PORTB=0x00; //low state
_delay_ms(200); //delay
}
}
Частота - 1 МГц, atmega32, в настройках все это проставил. Кварц внутренний. Фьюзы - OCDEN, SPIEN. BOOTSZ 2048 at $3800 (может не по тому адресу прошивает?). Подскажите, в чем проблема? Ну ни как не выходит прошить, все правильно вроде же...
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Сб окт 18, 2014 16:46:59
ks0
Светодиоды, надеюсь, через резисторы?
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Сб окт 18, 2014 16:53:52
mas123
Кот Серко писал(а):BOOTSZ 2048 at $3800 (может не по тому адресу прошивает?)
Вот насчет бута - надо смотреть подробнее.
Толку тебе от BOOTSZ? Ты же не пишешь загрузчик!
Фьюз BOOTRST должен быть в состоянии "незапрограммирован" - т.е. "1" по даташиту (в каком состоянии его выводит программатор - всегда проверяй, вдруг в инверсном).
А по какому адресу прошивает - посмотри в свой HEX файл или в .map.
Более чем уверен, что у тебя собрано как обычная программа - т.е. запуск с адреса 0x0000
А, ну да - и покажи-ка схему своего "устройства".
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Сб окт 18, 2014 16:57:12
ks0
OCDEN еще нафиг нужен? Может он как в десктопных IDE тормозит на первой строке если точки останова не заданы?
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Сб окт 18, 2014 17:04:36
mas123
ks0 писал(а):OCDEN еще нафиг нужен?
Логично. Я бы на месте аффтора выставил бы все фьюзы по дефолтному, из даташита.
Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Сб окт 18, 2014 17:11:04
Кот Серко
ks0 писал(а):OCDEN еще нафиг нужен? Может он как в десктопных IDE тормозит на первой строке если точки останова не заданы?
Попробовал выключить, не помогло.
ks0 писал(а):Светодиоды, надеюсь, через резисторы?
Да, на платке они через резисторы подключены. Плату я не паял, брал готовый программатор.
mas123 писал(а):Кот Серко писал(а):BOOTSZ 2048 at $3800 (может не по тому адресу прошивает?)
Вот насчет бута - надо смотреть подробнее.
Толку тебе от BOOTSZ? Ты же не пишешь загрузчик!
Фьюз BOOTRST должен быть в состоянии "незапрограммирован" - т.е. "1" по даташиту (в каком состоянии его выводит программатор - всегда проверяй, вдруг в инверсном).
А по какому адресу прошивает - посмотри в свой HEX файл или в .map.
Более чем уверен, что у тебя собрано как обычная программа - т.е. запуск с адреса 0x0000
А, ну да - и покажи-ка схему своего "устройства".
Адрес 0, если я все правильно понял. BOOTRST тоже потыкал, все по старому

Re: А что, в МК код выполняется как то по особому? [Си]
Добавлено: Сб окт 18, 2014 17:16:44
ks0
Че за плата, че за программатор. Откуда питание берется на плате, программатор после прошивки отключен? Китайский usbasp вроде резет постоянно на земле держит.