Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » Atmega8 программирование

Страниц (3): [1] 2 3 »
 

1. vladimircape - 25 Марта, 2014 - 01:22:38 - перейти к сообщению
Добрый день.
Припаял на PD7 ногу светодиод, микроконтроллер ATMEGA8A-PU
Подскажите правильно ли написана программа, и какую лучше книжку почитать по программированию на С, но не тому С что для Ардуино, там всё для меня уже ясно.
CODE:

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>

void init_io(void);

void init_io(void)
{
DDRD = (1<< PD7);
}

int main(void)
{
init_io();
for (;;)
{
PORTD |= (1 << 0);
_delay_ms(100);
PORTD = 0;
_delay_ms(100);
}
}

Заливал я так через usbasp
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=blink_led.lst -std=gnu99 blink_led.c -o blink_led.o

avr-gcc -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=blink_led.o -std=gnu99 blink_led.o --output blink_led.elf -Wl,-Map=blink_led.map,--cref -lm

avr-objcopy -O ihex -R .eeprom blink_led.elf blink_led.hex

avrdude -p m8 -P COM3 -c usbasp -b 19200 -U flash:w:blink_led.hex


Но залилось успешно был только один warning cannot set sck period ,но светодиод не замигал. питался от самого usbasp ,проверял 5вольт питания есть.


Подскажите еще как на МК понять где аналоговые входы/выходы, а где цифровые, и где ШИМ, и где и как применяются, вкратце.

Моя цель подключить ,ИК дальномер, серву и L239D для управления 2мя двигателями

Что-то на ардуине всё проше, но по настоящему надо писать без всяких ардуин ,вот и учусь
2. mihail - 25 Марта, 2014 - 02:06:31 - перейти к сообщению
Вы настроили седьмую ножку порта D как выход
DDRD = (1<< PD7);

А здесь пытаетесь работать с нулевой ножкой порта D
PORTD |= (1 << 0);

Но она настроена как вход. Да и светодиод к ней не подключен.

Так должно все мигать
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>

void init_io(void);

void init_io(void)
{
DDRD = (1<< PD7);
}

int main(void)
{
init_io();

for (;;)
{
PORTD |= (1 << PD7);
_delay_ms(1000);
PORTD &= ~(1 << PD7);
_delay_ms(1000);
}
}


Книга http://easyelectronics.ru/shpak-...ontrollerov.html
Еще http://easyelectronics.ru/revich...-assemblera.html
Datasheet на ATmega8 http://www.atmel.com/images/atme..._l_datasheet.pdf
3. Vladimir72 - 25 Марта, 2014 - 14:34:37 - перейти к сообщению
vladimircape хорошие видео уроки для начинающих https://www.youtube.com/watch?v=...n6O2RYCqLisJl-W6
4. vladimircape - 25 Марта, 2014 - 22:28:41 - перейти к сообщению
спасибо ,всё работает, и за литературу спасибо
5. Петр Киселев - 07 Апреля, 2014 - 19:35:59 - перейти к сообщению
mihail, Добрый вечер!
Хотел запустить ваш скетч (от 25 марта) на Pro mini Ардуино, но не получилось. Что это за код? Просто мигание светодиода?
Выдает при компиляции в программе желтым строчку
DDRD = (1<< PD7);
и внизу еще три красные строки.
(Добавление)
Правда у меня на Pro mini стоит не 8, а 328. Но это, вроде, не должно помешать. Так ведь?
6. killgur - 07 Апреля, 2014 - 21:14:07 - перейти к сообщению
Петр Киселев пишет:
mihail, Добрый вечер!
Хотел запустить ваш скетч (от 25 марта) на Pro mini Ардуино, но не получилось. Что это за код? Просто мигание светодиода?
Выдает при компиляции в программе желтым строчку
DDRD = (1<< PD7);
и внизу еще три красные строки.
(Добавление)
Правда у меня на Pro mini стоит не 8, а 328. Но это, вроде, не должно помешать. Так ведь?


Это не для ардуино это на языке Си программа
чтобы заработало для дуины надо переписать на ее языке программирования.
7. Петр Киселев - 10 Мая, 2014 - 11:48:14 - перейти к сообщению
killgur, спасибо за разъяснения по коду!
А я, по простоте душевной, думал что компилирование пройдет и код заработает. Не вышло!
8. soob - 10 Сентября, 2015 - 09:25:23 - перейти к сообщению
Доброго времени суток Улыбка
Возобновил свое обучение программированию Улыбка
Народ, у меня пару вопросов, нужна помощь =)
В общем у меня есть
-Среда разработки CVAVR 2.05.0
-Программатор китайский USB-ISP-USBasp
-Есть отладочная плата под Atmega8 с кварцем на 4 МГц и 4-мя светодиодами.

Вопрос по программе
-- язык программирования выбрал СИ (более разборчив для меня). Так вот, в чем разница между #include <mega8.h> и #include <avr/io.h>? У меня работает только первый вариант.

По прощиванию
-- мега в на отладчике прошивается без проблем, но не смог залить программу в плоскую мегу8. Тут нужен какой-то особый подход или это из-зи отсутствия внешнего генератора (соединял соответствующие выводы МК к программатору без доп кварца)?
9. fortekom - 10 Сентября, 2015 - 10:33:22 - перейти к сообщению
soob пишет:
в чем разница между #include <mega8.h> и #include <avr/io.h>?

Это подключение библиотек, проверь наличия папки avr и нахождения в ней io.h

soob пишет:
-- мега в на отладчике прошивается без проблем, но не смог залить программу в плоскую мегу8.

Может она не новая, и до этого была прошита больше чем 4Мгц
На программаторе должен быть джампер попробуй с ним и без него.
Прошиваешь программой - Khazama AVR Programmer?
Плоскую через какой адаптер подключал?
10. soob - 10 Сентября, 2015 - 10:51:55 - перейти к сообщению
fortekom пишет:
Это подключение библиотек, проверь наличия папки avr и нахождения в ней io.h

у меня этот файл в папке "inc" где и все остальные "*.h", a папки "avr" нет

fortekom пишет:
Может она не новая, и до этого была прошита больше чем 4Мгц

Должна быть новая, я ее с интернет магазина заказывал. (была завернута в фольгу)

fortekom пишет:
Прошиваешь программой - Khazama AVR Programmer?

да она самая

fortekom пишет:
Плоскую через какой адаптер подключал?

Если вы про программатор, то использую тот что на картинке. До этого был самодельный с easyelectronics.ru

Вечером попробую прошить еще раз и отпишусь.
11. fortekom - 10 Сентября, 2015 - 11:45:27 - перейти к сообщению
1. Микроконтроллер не программируется – проверьте положение джампера, по умолчанию он должен быть
установлен.
2. Джампер установлен но устройство не программируется – проверьте правильность подключения
интерфейса ISP. Проверьте наличие питания программируемого устройства и убедитесь что вывод GND программатора соединен с общим проводом (минусом питания) программируемого устройства.

При разомкнутом джампере — частота SCK будет высокой = 375 кГц, при замкнутом — пониженной = 8 кГц.
Это сделано для программирования микроконтроллеров с низкой частотой тактирования (меньше 1.5 МГц).
Обратите внимание что в основном все микроконтроллеры по умолчанию запрограммированы заводом-изготовителем на тактирование от внутреннего генератора частотой 1Мгц, что требует установленного джампера на программаторе.
12. Billi - 06 Января, 2016 - 00:35:35 - перейти к сообщению
Приветствую специалистов в оживлении вражеских засланцев. Увлёкся созданием разнообразных игрушек(светодинамических автоматов, не сложной автоматики, и другими применениями радиоэлектроники). Имеется опыт в сборке, настройке цифровых и аналоговых устройств. В общем не совсем "чайник".Выбор пал на мегу 8 - не большой корпус, достаточное количество ног и.т.д. На данный момент тормознул вот в каком вопросе: делаю "вывеску" - сама программа управления лампочками уже готова и отлажена,работает в циклическом виде. Надо стартовать начало программы с конечником двери. Реализация конечника тоже не составит трудности: 3 нога порта С (26 вывод) будет размыкаться с минусом. Надо чтобы контроллер "увидел" разомкнутый порт и запустил программу. Ногу PORTC.3 укзал как вход и подтянул PULL-UP, но +5V не появилось. Прогу пишу в CodeVisionAVR C Compiler. Это первое что мне попалось в инете с мало-мальским описанием и примерами. Пару не сложных устройств уже сваял и активно пользую. Почитываю инет, но пока не нашел внятных разъяснений: код отличается в разных компиляторах. На строчки из другого компилятора мой ругается ерорами и воингами. Прерывания пока не планирую использовать-неожиданных "нежданчиков" пока нет необходимости.
Синтаксис тоже не везде понятен.
13. Петр Киселев - 06 Января, 2016 - 07:55:26 - перейти к сообщению
Billi пишет:
Надо чтобы контроллер "увидел" разомкнутый порт и запустил программу.

У концевика должен быть еще и замыкающийся контакт. Попробуй использовать его, подавая питание на контроллер.
14. Billi - 06 Января, 2016 - 10:29:06 - перейти к сообщению
Есть же проще: PULL-up, подтяжку можно и внешними элементами создать. Трудность в написании нужных строчек в коде программы: опрос нажатия,пдтверждение нажатия, переход к программе, возврат на опрос нажатия.
15. Петр Киселев - 06 Января, 2016 - 14:02:41 - перейти к сообщению
Не знаю для чего тебе все это надо, поэтому и предложил включать питание МК в определенный момент (например, на открытие двери, как в "умном доме"Подмигивающий. А остальное время - экономия питания.
Но, делай, как тебе надо!