Перейти к содержанию

Видеокурс по AVR-микроконтроллерам для начинающих


Рекомендуемые сообщения

Кто подскажет, почему с конца программы до начала программы проходит около 4 секунд.

Программу написал специально громоздкую, руку набивал, так что не обращайте внимание.

1. //atmega16

2. #define F_CPU 1000000 //cksel = 0001 pri ckopt = 1

3. #include <avr/io.h>

4. #include <util/delay.h>

5. void preset (){

6. DDRC = 0xFF; //port B out

7. DDRD = 0xFF;

8. DDRA = 0xFF;

9. DDRB = 0xFF;

10. PORTC = 0x00; // port B = 0

11. PORTD = 0x00;

12. PORTB = 0x00;

13. PORTA = 0x00;

14. }

15. int main(void)

16. {

17. preset();

18. while(1)

19. {

20. PORTB = 0x01;

21. _delay_ms(500);// jdem 0.5c

22. PORTB = 0x02;

23. _delay_ms(500);// jdem 0.5c

24. PORTB = 0x04;

25. _delay_ms(500);// jdem 0.5c

26. PORTB = 0x08;

27. _delay_ms(500);// jdem 0.5c

28. PORTB = 0x10;

29. _delay_ms(500);// jdem 0.5c

30. PORTB = 0x20;

31. _delay_ms(500);// jdem 0.5c

32. PORTB = 0x40;

33. _delay_ms(500);// jdem 0.5c

34. PORTB = 0x80;

35. _delay_ms(500);// jdem 0.5c

36. PORTB = 0x00;

37. PORTD = 0x01 ;

38. _delay_ms(500);// jdem 0.5c

39. PORTD = 0x02 ;

40. _delay_ms(500);// jdem 0.5c

41. PORTD =0x04;

42. _delay_ms(500); // jdem 0.5c

43. PORTD = 0x08;

44. _delay_ms(500); // jdem 0.5c

45. PORTD = 0x10;

46. _delay_ms(500); // jdem 0.5c

47. PORTD = 0x20;

48. _delay_ms(500); // jdem 0.5c

49. PORTD = 0x40;

50. _delay_ms(500); // jdem 0.5c

51. PORTD = 0x80;

52. _delay_ms(500); // jdem 0.5c

53. PORTD = 0x00;

54. PORTC = 0x01 ;

55. _delay_ms(500);// jdem 0.5c

56. PORTC = 0x02 ;

57. _delay_ms(500);// jdem 0.5c

58. PORTC = 0x40 ;

59. _delay_ms(500);// jdem 0.5c

60. PORTC = 0x80 ;

61. _delay_ms(500);// jdem 0.5c

62. PORTC = 0x00;

63. PORTA = 0x80;

64. _delay_ms(500);// jdem 0.5c

65. PORTA = 0x40;

66. _delay_ms(500);// jdem 0.5c

67. PORTA = 0x20;

68. _delay_ms(500);// jdem 0.5c

69. PORTA = 0x10;

70. _delay_ms(500);// jdem 0.5c

71. PORTA = 0x08;

72. _delay_ms(500);// jdem 0.5c

73. PORTA = 0x04;

74. _delay_ms(500);// jdem 0.5c

75. PORTA = 0x02;

76. _delay_ms(500);// jdem 0.5c

77. PORTA = 0x01;

78. _delay_ms(500);// jdem 0.5c

79. PORTA = 0x00;

80. }

81. }

Изменено пользователем endry81
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Господа! Прошу ногами не пинать сильно! Вопрос по уроку №3: почему при запуске симулятора в протеусе квадратики рядом с ножками мигают синим и серым цветом, а не синим и красным?

Схема

e11bc481b8f419b30bb5ea91336fff47.png

Код

#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
void preset()
{
DDRB = 0xff;
PORTB = 0x00;
}
int main(void)
{
preset;
   while(1)
   {
    PORTB = 0xff;
 _delay_ms(1000);
    PORTB = 0b00000000;
 _delay_ms(1000);
   }
}

Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

А Вы контроллеру прошивку указали?... + насколько мне память не изменяет - вызов функции идет со скобками... т.е. preset(); , а не preset; у Вас код неправильный указан....

Изменено пользователем MadLor
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Всем привет. Подскажите кто знает, что за ошибка вылетает при компиляции через avr studio

[ERROR] Failed to launch. Missing file: C:\Users\atmel studio\6.2\fishingalarm\fishingalarm\Debug\fishingalarm.elf

Ссылка на комментарий
Поделиться на другие сайты

Пишет что не найден файл... И путь какой-то странный... Вы что работаете под пользователем - atmel studio ?

Изменено пользователем MadLor
Ссылка на комментарий
Поделиться на другие сайты

Приветствую, огромное спасибо за видео уроки! Вопрос по ATmel Studio 6 (а так же 4 и 5). После написания проги не могу сохранить ее в расширении .HEX для проверки в Proteuse. Предлагает в .c .h .txt и др. Что не так делаю?

post-192800-0-44081500-1437829420_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

Фууххх, наконец доделал домашку по 6 уроку. Вроде работает.)

#define F_CPU 8000000
#include
#include
#include
#include "n5110.h"
const dly = 50;//Задержка прорисовки


void preset()//Настройка дисплея
{
Lcd_init();
Lcd_clear();
Lcd_update();
}

void thermometer()//Рисуем градусник
{

for (int i = 1;i<=6;i++)
{
Lcd_circle (18,41,i,PIXEL_ON);//Рисуем окружности
Lcd_update();
_delay_ms (dly);
}
Lcd_rect(14,45,9,9,PIXEL_ON);//Заполняем пустые квадраты
Lcd_update();
_delay_ms (dly);
Lcd_rect_empty (16,5,20,35,PIXEL_ON);//Рисуем рамку
Lcd_line(17,35,19,35,PIXEL_OFF);//Удаляем лишнии пиксели
Lcd_update();
_delay_ms (dly);
for (int i = 1;i<33;i++)//Заполняем рамку
{
Lcd_rect (17,35,i,3,PIXEL_XOR);
Lcd_update();
_delay_ms (dly);
}
Lcd_rect (17,35,31,3,PIXEL_OFF);//Очищаем рамку
Lcd_pixel(18,3,PIXEL_ON);
Lcd_pixel(18,4,PIXEL_OFF);
Lcd_update();
for (int i=36;i>0;i-=10)//Рисуем длинные деления
{
Lcd_line (3,i,15,i,PIXEL_ON);
Lcd_update();
_delay_ms (dly);
}
Lcd_line(8,34,8,30,PIXEL_ON); //Рисуем 0
Lcd_line(10,34,10,30,PIXEL_ON); //
Lcd_pixel(9,34,PIXEL_ON); //
Lcd_pixel(9,30,PIXEL_ON); //
Lcd_update();
_delay_ms (dly);

Lcd_line(5,24,5,20,PIXEL_ON); //Рисуем 1
Lcd_pixel(4,24,PIXEL_ON); //
Lcd_pixel(6,24,PIXEL_ON); //
Lcd_pixel(4,21,PIXEL_ON); //
Lcd_line(8,24,8,20,PIXEL_ON); //Рисуем 0
Lcd_line(10,24,10,20,PIXEL_ON); //
Lcd_pixel(9,24,PIXEL_ON); //
Lcd_pixel(9,20,PIXEL_ON); //
Lcd_update();
_delay_ms (dly);

Lcd_line(4,14,6,14,PIXEL_ON); //Рисуем 2
Lcd_line(4,12,6,12,PIXEL_ON); //
Lcd_line(4,10,6,10,PIXEL_ON); //
Lcd_pixel(4,13,PIXEL_ON); //
Lcd_pixel(6,11,PIXEL_ON); //
Lcd_line(8,14,8,10,PIXEL_ON); //Рисуем 0
Lcd_line(10,14,10,10,PIXEL_ON); //
Lcd_pixel(9,14,PIXEL_ON); //
Lcd_pixel(9,10,PIXEL_ON); //
Lcd_update();
_delay_ms (dly);

Lcd_line(4,4,6,4,PIXEL_ON); //Рисуем 3
Lcd_line(4,2,6,2,PIXEL_ON); //
Lcd_line(4,0,6,0,PIXEL_ON); //
Lcd_pixel(6,3,PIXEL_ON); //
Lcd_pixel(6,1,PIXEL_ON); //
Lcd_line(8,4,8,0,PIXEL_ON); //Рисуем 0
Lcd_line(10,4,10,0,PIXEL_ON); //
Lcd_pixel(9,4,PIXEL_ON); //
Lcd_pixel(9,0,PIXEL_ON); //
Lcd_update();
_delay_ms (dly);

for (int i=31;i>1;i-=10)//Рисуем короткие деления
{
Lcd_line (13,i,15,i,PIXEL_ON);
Lcd_update();
_delay_ms (dly);
}
Lcd_prints (5,3,FONT_1X,(unsigned char*)PSTR("T="));//Буква "Т"
Lcd_prints (10,3,FONT_1X,(unsigned char*)PSTR("C"));//Буква "С"
//Рисуем знак цельсия
Lcd_pixel(56,25,PIXEL_ON);
Lcd_pixel(58,25,PIXEL_ON);
Lcd_pixel(57,24,PIXEL_ON);
Lcd_pixel(57,26,PIXEL_ON);
Lcd_update();
}

int main(void)
{
preset();
thermometer();
int T;//Значение температуры
char buffer [2];//Строковое значение температуры
while(1)
{
T = rand()%31;//Случайное значение температуры от 0 до 30
Lcd_rect (17,35,T,3,PIXEL_XOR);//Показывает на градуснике
itoa(T,buffer,10);
if (T<10)//Если значение температуры - 1 разряд, то перед ним ставим "0"
{
Lcd_prints (7,3,FONT_1X,(unsigned char*)PSTR("0"));
Lcd_print (8,3,FONT_1X,(unsigned char*)buffer);
}
else//Если 2 разряда, то "0" не ставим )
{
Lcd_print (7,3,FONT_1X,(unsigned char*)buffer);
}
Lcd_update();
_delay_ms(1000);
Lcd_rect (17,35,T,3,PIXEL_XOR);
}
}

Только не понял, после компиляции, студия показывает размер чуть больше 4-х КБ.

Program Memory Usage : 4206 bytes 51,3 % Full

Data Memory Usage : 515 bytes 50,3 % Full

А Windows 12 КБ

Как так? Ведь насколько я понял, именно этот файл прошивается в МК?

И ещё вопрос. Судя по описанию, функция rand() даёт рандомные значения,

но всегда в одном и том же порядке. И что бы это исправить, её задают с

помощью функции time(). Но файла time.h я не нашёл. Его нужно скачивать отдельно?

P.S. спасибо за видеоуроки!

Изменено пользователем Cheshire
Ссылка на комментарий
Поделиться на другие сайты

Доделал 7-ой урок! Все супер :spiteful: . Но возник один вопрос. Опорное напряжение камушка 2,56 Вольт, а у меня вышло 2,05 Вольт в тестовом режиме. При уменьшении напряжения на лапке АЦП от 2,05Вольта все норм, как напряжение превышает значение 2,05В (от 2,05 - 2,56 и т.д.) добавляется знак минус и значения уходят вниз. Что за парадокс? В чем "синус"? :unknw:

post-192800-0-93218700-1438173893_thumb.jpg

post-192800-0-69020200-1438173896_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

Это из за переполнения переменной в которое ацп складываете, измените ее тип. Или уменьшите число складывания до 20, соответственно и делить потом на 20 надо.

Не знаеш как? Спроси у Google'а !!!

Ссылка на комментарий
Поделиться на другие сайты

Подскажите пожалуйста! Не могу разобраться :umnik2: :umnik2:

Хочу чтобы контроллер реагировал когда на 2 лапки приходит единица. Т.е. отрабатывает только в том случае если на двух выводах единица...

#define F_CPU = 80000000;
#include <avr/io.h>
// предварительные настройки
void preset()
{
DDRB = 0x00; //Порт B работает на вход
PORTB = 0x00; //Подтягивающие сопротивление отключено

DDRD = 0xFF; //Порт С работает на выход
PORTD = 0x00; //Значение всех бит 0

}


int main(void)
{
preset();
while(1)

{
if (PINB &= (1<<PC1) & (1<<PC0))


{
PORTD = (1<<PC0) | (1<<PC1);
}

else
{
PORTD = (0<<PC0) | (0<<PC1);
}

}
}

Подскажите, где ошибаюсь?

Если в условии вместо "и" прописать "или", то работает! (т.е. если на какой-то из лапок 1, контроллер срабатывает), а когда "и", то не работает(((((

Ссылка на комментарий
Поделиться на другие сайты

&&

&& вместо и? А в чем разница?

Если в условии вместо "и" прописать "или", то работает!
Ну и в чём тогда проблема, если работает ? :)

Ну в смысле все работает с "или" :rolleyes: Т.е. при приходе единицы на одну из лапок, срабатывает условие. А нужно, чтобы срабатывало когда единица на двух ножках одновременно :rolleyes:

Изменено пользователем Sniper53
Ссылка на комментарий
Поделиться на другие сайты

Ну вообще, как-то странно, когда одну ногу уже смогли опросить, а две нет. Опрашивайте её также, как и первую, и будет Вам счастье :) Если путаетесь, то сделайте тупо - два условия.

&& вместо и?
Вообщето, "&&" - это и есть логическое "И".

Почитайте уже, наконец, литературу по языку.

Ссылка на комментарий
Поделиться на другие сайты

Добрый день. Помогите пожалуйста. Я организовал на порту В таймер0, поэтому порт В занят. Я переделал в файле .h дисплея как вы говорили на порт А

#define LCD_PORT PORTA

#define LCD_DDR DDRA

// Распиновка порта

#define LCD_DC_PIN PA1 // DC

#define LCD_CE_PIN PA2 // SCE

#define SPI_MOSI_PIN PA3 // SDIN

#define LCD_RST_PIN PA4 // RESET

#define SPI_CLK_PIN PA5 // SCLK

Врезультате у меня не запускается таймер0. Как только я убираю из моего основного файла Lcd_init, то таймер работает.

Ссылка на комментарий
Поделиться на другие сайты

Если честно, я бы не пользовался тем вариантом работы с лцд, который сейчас у вас. Он сделан криво и работает только в оригинальном варианте. Любая смена портов - и ничего не работает.

В "правильном" варианте не используется пин chip enable (он на земле висит). Сейчас не вспомню откуда его брал.

Ссылка на комментарий
Поделиться на другие сайты

Проще из своего проекта выдернуть ;)

Завтра, если не забуду. Все на рабочем компе.

Изменено пользователем strifonoff
Ссылка на комментарий
Поделиться на другие сайты

Ну вообще, как-то странно, когда одну ногу уже смогли опросить, а две нет. Опрашивайте её также, как и первую, и будет Вам счастье :) Если путаетесь, то сделайте тупо - два условия.

&& вместо и?
Вообщето, "&&" - это и есть логическое "И".

Почитайте уже, наконец, литературу по языку.

Спасибо!! Обязательно почитаю!!

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • В данном случае самое дешёвое решение например здесь
    • Всем привет. Как-то видел на ютубе ролик, где показывали чип, вроде 8-ми выводной, трансивер со встроенным модулятором/демодулятором и минимумом обвеса. Последние пару дней искал и не нашёл, может кто знает ФИО этой микросхемы? Суть такова. Ещё в начале 90-х делал проводное дистанционное управление на микросхемах LM567. Работает безотказно, помехоустойчивость высокая, ни одного сбоя за всё Время эксплуатации. Упрощенная схема верхняя, в приложенном файле. Теперь хочу перевести на беспроводную связь, как на нижнем рисунке. В общем, нужен совет по выбору, микросхемы с минимумом обвеса или готового модуля, чтобы в режиме передачи он/а имел/а вход для подачи сигнала, а при приёме выход НЧ. Пояснение к схеме. Не стал писать порядковые номера элементов. Там, где написано С1, там везде конденсатор одного номинала, как и резисторы. Т.е. где указан R1 там тоже везде стоит один номинал. Если кто не в теме, то LM567 - микросхема тонального декодера со встроенным генератором. Нажимаем в передатчике DA1 одну из кнопок и на выходе имеем некоторую частоту, определяемую элементами задающей RC цепи. Приёмники DA2 - DA4 тоже генерируют частоту и тоже определяемую этими же по схеме элементами. Срабатывает та микросхема, на входе которой частота совпадает с выходной частотой передатчика. В принципе, в верхней схеме хватило бы и два ключа, т.к. нажатие сразу двух кнопок включает резисторы R1 и R2 в параллель и формируется своя частота. Т.е. в приёмнике DA4 нужно ставить номинал резистора, равный параллельному включению двух резисторов R1 и R2. Но тема не об этом. Я понимаю, что сейчас есть цифра и можно передавать коды, но, что имею, то имею и хочу запустить такую схему, что на приложенном рисунке внизу. Вопрос стоит о более простом решении ВЧ части - трансивера. Надеюсь, что поможете решить поставленную задачу. Спасибо.          
    • Это же балалайка-потаскушка  Там все просто,по даташитам микросхем можно сориентироваться. @zezar ,а в чем дефект то?
    • какой размер колец? или проще, можно ссылочку чтобы посмотреть
    • @Romanchek82 в данной ситуации скорее "подложена под ножку стола у дядюшки Ляо")
    • КИТ на Озоне, 2 канала за 500р. РФ. Я сам с конструктора начинал, там и опыт паять получите.  не надо с платы, схемы начинать, блок питания сначала соберёте, КИТ распаяйте, в корпус всё оформите. Одно до ума изделие доведите. Там и поймёте, куда дальше двигаться. А по схеме, ЕЩЁ раз, они есть на любое ОУ в даташит. По "ушникам", пятиножки в бОльшем случае - достаточно (по ссылке) прежде, чем Сухову, Нечаеву,.. в ж. "Радио" писать, готовился, после школы в библиотеку, вечерами за паяльник... пока обратная связь приходила (письма), уже многое исправил, да, не методом тыка, а через понимание физических процессов.  Быстро это только ЕГЭ, описательный, творческий процесс отсутвует (мозгами шевелить, статьи анализировать, углубляться и видеть перспективу).  Паять совет не нужен, ручками, ручками, готовый кит и в корпус.
  • Похожий контент

×
×
  • Создать...