Jump to content
admin

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

Recommended Posts

kobraz, в тридцать я только заимел книгу по МК51. Была нужда - изучил и ассемблер, и компиляторы... Нужда исчезла, желания не стало - все забросил и забыл. Теперь просто лень.

Так что, Вы правы - нет необходимости и есть отговорки (семья, работа, ...). Вот и ленимся. :(

Share this post


Link to post
Share on other sites

Приветствую!

Моя домашняя работа по LCD 5110 (он же 3310).

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

// CPU = ATMega8A
#define F_CPU 8000000
#include <avr/io.h>
#include <stdlib.h>
#include <util/delay.h>
#include "n5110.h"
void startup()
{
Lcd_init();
Lcd_clear();
for (int i=1; i<=6; i++)
{
 Lcd_circle(8,24,i,PIXEL_ON);
}
Lcd_circle(78,24,5,PIXEL_ON);
Lcd_rect_empty(8,21,73,27,PIXEL_ON);
Lcd_line(20,18,20,30,PIXEL_ON);
Lcd_line(40,18,40,30,PIXEL_ON);
Lcd_line(60,18,60,30,PIXEL_ON);
Lcd_prints(4,1,FONT_1X,(unsigned char*)PSTR("Thermo"));
Lcd_prints(2,4,FONT_1X,(unsigned char*)PSTR("20"));
Lcd_prints(6,4,FONT_1X,(unsigned char*)PSTR("40"));
Lcd_prints(10,4,FONT_1X,(unsigned char*)PSTR("60"));
Lcd_update();
}
int main(void)
{
   startup();
while(1)
   {
 for (int i=21; i<=60; i++)
 {
  Lcd_rect(10,27,6,i,PIXEL_ON);
  Lcd_update();
  _delay_ms(50);
 }
   }
}

Share this post


Link to post
Share on other sites

в целом разделение на статику и динамику сделали правильно!

Мне вот интересно - почему все делают бегущий уровень прямоугольником а не линией? Добавляя по 1 к координатам У

Lcd_line(10, 20+i, 15, 20+i, PIXEL_ON)

?


коплю на мечту - Днепр К750

Share this post


Link to post
Share on other sites

Вебинар «Каждому ключу — свой драйвер» (13.08.2020)

Компания КОМПЭЛ приглашает вас принять участие в вебинаре, который будет посвящен теме драйверов управления транзисторами компании Infineon. Мы рассмотрим четыре различных технологии изготовления микросхем драйверов, в чём их отличия и особенности.

Подробнее

Такую функцию лучше делать в цикле, что-бы не было пропусков линий, и визуально получается красивее.

Share this post


Link to post
Share on other sites

Новый ХИТ FANSO CR123A/SN

Параметры новой батарейки показывают прекрасные результаты. Она используется для приложений с повышенными импульсами тока. Широко применяется в охранно-пожарных датчиках, устройствах телеметрии, поисковых маячках, LED-фонарях и других промышленных и бытовых устройствах.

Подробнее

Сетевой источник питания с расширенным диапазоном входных напряжений на основе VIPER26xK

Питание стационарных устройств чаще осуществляется напряжением 220 В, получаемым от одной фазы трехфазной промышленной сети. Однако существует ряд приложений, которым необходима энергия из всех трех фаз, в т.ч. и в аварийных режимах. Решение этой задачи обычно требует введение в модули питания дополнительных узлов, увеличивающих как их размеры, так и стоимость. Упростить схемы источников питания от трехфазной сети переменного тока либо от других высоковольтных источников, позволяет использование преобразователей с расширенным диапазоном входного напряжения.

Подробнее

прочитал немного понял что это такое

но смущает использование много незнакомых слов для меня

Share this post


Link to post
Share on other sites

сидел только что разбирался как линиями сделать

очень умно в жизни бы не догадался

и хотел бы разобраться с этими { } скобами

так как понимаю ихнюю суть но не до конца как они работают

Share this post


Link to post
Share on other sites
void Test() //Функция Тест (в круглых скобках принимаемый параметр. Если в них пусто - ничего не принимаем)
{
//между скобками находится то что ета функция делает
}
Пример
void MyLine(int pozition_X, pozition_Y)
{
Lcd_clear();
Lcd_prints(pozition_X, pozition_Y, FONT_1X, (unsigned char*)PSTR("Hellow"))
Lcd_update();
}
Использование
MyLine(0, 1);
Очистит екран и выведет в первой строке надпись Hellow


коплю на мечту - Днепр К750

Share this post


Link to post
Share on other sites

всем привет

чего такая тишина ?

наверное выходные :)

жду следующего ура

когда планируется выпустить ?

Share this post


Link to post
Share on other sites

Выполняю домашнее задание. Ошибка.

04_05_2014_17_31_08.jpg

Что делать?

P.S. Файл _mingw.h в папке include есть.

Edited by Tantrum

Share this post


Link to post
Share on other sites

В папке include есть и тот и тот уже. Но когда скачивал, был с черточкой.

Share this post


Link to post
Share on other sites

его надо прописывать в таких "" кавычках. можно даже полный путь "c:\bla-bla\file.h"

Share this post


Link to post
Share on other sites

полный путь необязательно если файл находиться в папке с проектом.

А вот кавычки для своих библиотек таки надо использовать ""

Я кстати говорил об этом в видеоуроке!

Ну и до кучи!

Господа - отснял наконец-то заключительную часть видео уроков с теорией!

АЦП - Теория и практика!

Тема очень широкая, сложная и простая одновременно. Старался разложить по полочкам все нюансы.

Так что смотрите не спеша!

А дальше - будем уже применять знания на практике! Разрабатывать схему, дописывать код... паять устройство!

Одним словом - кто прошел все уроки и делал домашку - соберет устройство без проблем :)


коплю на мечту - Днепр К750

Share this post


Link to post
Share on other sites

Да, только что досмотрел последние уроки.

А это домашнее задание еще самое первое.....

Вообще эта библиотека там нужна..? (mingw.h)

Edited by Tantrum

Share this post


Link to post
Share on other sites

Ошибка осталась...

Извините - но я не в курсе что это за библиотека и для чего она :(

Просмотрите начало видео урока по работе с ЛЦД - там подробно показано как работать с внешними библиотеками!

Сделайте все как надо и если ошибка останется выложите код и ошибку!

Edited by kobraz

коплю на мечту - Днепр К750

Share this post


Link to post
Share on other sites

Вот полный код:

//Atmega8
#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include "mingw.h"
#include <time.h>
void preset(){
DDRB = 0xFF;
PORTB = 0x00;

DDRD = 0xFF;
PORTD = 0x00;

DDRC= 0xFF;
PORTC = 0x00;
}

int main(void){
preset();
srand(time(NULL));
int val = rand() % 2;
switch (val){
case 0:
PORTB = 0xFF;
_delay_ms(200);
PORTB = 0x00;
_delay_ms(200);
break;
case 1:
PORTC = 0xFF;
_delay_ms(200);
PORTC = 0x00;
_delay_ms(200);
break;
case 2:
PORTD = 0xFF;
_delay_ms(200);
PORTD = 0x00;
_delay_ms(200);
break;
}

while(1)
{

}
}

А ошибка полностью видна на скриншоте.

Оно начало выдавать эту ошибку после того, как я скачал и вписал в код библиотеку <time.h>

Edited by Tantrum

Share this post


Link to post
Share on other sites

тайм.аш если добавляли тоже кавычки меняйте

но вобще - по домашке - никаких сторонних библиотек качать ненужно

Edited by kobraz

коплю на мечту - Днепр К750

Share this post


Link to post
Share on other sites

А как тогда сделать рандомное засвечивание светодиодов?

Share this post


Link to post
Share on other sites

rand() - встроенный.

Я об етом в уроке говорил.


коплю на мечту - Днепр К750

Share this post


Link to post
Share on other sites

Все. Разобрался уже. С помощью брата-программиста сделал так, чтобы сгенерированные числа не повторялись.

Код:

//Atmega8
#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>

static int delay = 70;

void preset(){
DDRB = 0xFF;
PORTB = 0x00;

DDRD = 0xFF;
PORTD = 0x00;

DDRC= 0xFF;
PORTC = 0x00;
}

int main(void){
preset();

int temp = -1;

while(1)
{
int val = rand() % 3;
while(temp == val) {
val = rand() % 3;
}
temp = val;

switch (val){
case 0:
PORTB = 0xFF;
_delay_ms(delay);
PORTB = 0x00;
_delay_ms(delay);
break;
case 1:
PORTC = 0xFF;
_delay_ms(delay);
PORTC = 0x00;
_delay_ms(delay);
break;
case 2:
PORTD = 0xFF;
_delay_ms(delay);
PORTD = 0x00;
_delay_ms(delay);
break;
}
}
}

Edited by Tantrum

Share this post


Link to post
Share on other sites

если не сложно -отредактируйте свои посты, код в тег код и под спойлер

брат если подскажет:)


коплю на мечту - Днепр К750

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Не указывай как мне жить и я не скажу куда тебе пойти. Всегда надо оставаться человеком, а если кто то думает что он чем то выше других или думает что мозгов у него больше поэтому можно с другими себя нагло вести то это его проблемы. В моем окружении так не общаются. Все отношение строится на взаимоуважении, а на грубость можно только грубостью отвечать. И еще схема собрана моими силами и ничего я ни у кого не воровал. Каждая строка ассемблера написана мной. А за уравнивающие импульсы читай документацию, без них строчная развертка плавать будет если тебе это не извесно.
    • @Karlson904  Вот здесь он описан  ,  и даже с печаткой ! https://vrtp.ru/index.php?act=categories&CODE=article&article=3711
    • Поднял напругу +\-16в снял на 6 ом  20в амплитуды до искажений и 23в до клиппинга.   Ток холостого хода 80мА на холодную и около 100-110мА при нагреве радиатора, около 60-80гр. Нравится очень как играет он середину и верха, вокал вапще супер а вот с боссами не пойму вроде в грудь бьют но будто нет глубоких. Хотя генератор прогонял от 20герц до 10килогерц все ровно... 
    • Собирая очередной девайс , после запуска не получил заявленного напряжения 36 вольт.. https://www.radiokot.ru/forum/viewtopic.php?f=25&t=55467&start=700 По быстрому из даташита  развёл печать (проверить с какими номиналами LM2733 работать будет.. стендик,,, так сказать) https://radioskot.ru/_fr/140/lm2733_national.pdf В моей печатке видимо есть ошибка... Сгорел ,,тантал,  впаял 1202 керамику ,( включаю на секунды , греется).. Теперь ,, кубатурю ,,где ошибся... Гляньте кто печать.... Может что подскажете..   Стенд ЛМ 2733.lay6
    • Доброго времени суток,попробую собрать плату от Wolk в дип варианте,генератор на транзисторах.Никто,вроде не пробовал собирать(кроме автора,наверно),так что будем дерзать. t-p.lay6
    • Во всех LLC есть нормальная токовая защита, там параметрическое ограничение в принципе не за чем. 
    • Софт-старт на реле не поможет как и термистор. Увеличение индуктивности выходных дросселей может помочь, но тогда могут вылезти другие проблемы.
  • Similar Content

    • By Alan247
      Представляю на ваш суд:    https://thisismyhobby.ru/AVR_PAL_W.php   Ваше мнение?
       

    • By Rad TV
      Скетч простой и кислий. Сделан автором RadTV канал:https://www.youtube.com/channel/UC1k5elIKErFnmwTzIsRgQrA?view_as=subscriber
      Буду рад рокомендациях и помощи!Сделал сам проект должен бить простим и  что би влезло в ATtini85!
      Есть защита акб и просто парения (!!!Кнопка на розмикания!!!)
      Обновления будут!!!!
       
       
      RadMOD ver1.0.txt
    • By Prozac
      Здравствуйте, уважаемые форумчане! Вообще говоря, не имею такой привычки - донимать людей вопросами, и до всего стараюсь доходить самостоятельно. Но в данном случае без "помощи зала" совсем никак: перепробовал уже все, что только смог придумать - а "воз и ныне там! Поэтому и обращаюсь сюда - возможно, кто-то уже сталкивался с чем-то подобным, и сумел найти решение...
      Суть проблемы в следующем: решил построить ШИМ-контроллер для автомобильного вентилятора охлаждения ("карлсона"), но никак не могу заставить его работать - как только открываются VT2 и VT3, подключая нагрузку, МК уходит в резет или виснет (чаше - первое)!.. Сбросившись, опять пытается подключить нагрузку, и опять резетится, и так - без конца! Причем, изначально решил испытать схему не на индуктивной нагрузке (электромоторе), а на вполне себе пассивной 60Вт (около 3A по току) лампочке из фары - и та же фигня: МК пытается запуститься, сбрасывается, лампа моргает, дергается... Даже не ШИМ, а обычное мигание лампой с частотой 1Гц через несколько вспышек или вешает МК, или резетит его (что видно по сбою ритма моргания). При этом без нагрузки - по осциллографу, подключенному к ноге 5 МК или к нижнему (по схеме) выводу R7 - все отлично: наблюдается ровный и чистенький ШИМ-сигнал, изменяющийся согласно тестовой программе! Однако, стоит подать нагрузку, как осциллограмма начинает прыгать: появляются ШИМ-импульсы, затем ровная линия, затем снова импульсы с тем заполнением, которое должно быть в самом начале программы... Собственно, это наблюдение и позволило сделать вывод о том, что МК перезагружается.
      Естественно, первая мысль - слабый лабораторник (он у меня импульсный, самодельный, где-то на 3А - действительно слабый; но та же петрушка наблюдалась и при попытках питать устройство от трансформаторного ЗУ на 10А). Ну, пригнал машину, снял с нее аккум (100% свежий и не дающий просадок!), запитал от него - однако проблема повторилась... Значит, дело не в питании!.. Пробовал много различных танцев с бубном: отключал внешнюю цепочку сброса R2-C2 (результат - ноль), включал BOD микроконтроллера (стало еще хуже), подвешивал вместо C4 и C6 электролиты большей емкости (не помогло)... Думал, что, возможно, кондеи C4 и C6 разряжаются через R7 - экспериментировал с его сопротивлением (от 100 до 960 Ом), перекидывал его верхний вывод на анод VD1 (чтобы отсечь резистор от фильтрующих C4 и C6) - тщетно... Грешил даже на то, что какие-то проблемы вносит емкость затворов VT2 и VT3 - уменьшал сопротивление R10 и R12, дабы затвор быстрее "разряжался" - безрезультатно...
      Игрался с частотой МК и ШИМ - перебрал частоты ШИМ от 18 до 4687 Гц; пытался запускать нагрузку с разным заполнением ШИМ, от 10 до 40% - как глючило, так и глючит... Т.е., перелопатил, практически, всю схему!
      Удалось заставить устройство нормально работать на лампу, и даже на пару спаралеленных электродвигателей МЭ218 (от "печки") следующим образом: R8 был исключен (вместо него - перемычка), а C7 (изначально - К73-17В всего на 0,47мкФ) был заменен на пару электролитов по 1500мкФ, включенных плюс к плюсу последовательно (для устранения полярности кондеев). Нагрузка стала нормально подключаться, отрабатывать как на повышение, так и на убывание заполнения ШИМ. Двигатели отлично работали как при ступенчатом изменении ШИМ-заполнения, так и при плавном. Единственное, что при попытке подать на двигатели ШИМ с заполнением менее 20%, МК опять начинал дергаться и резетить, а так же резетил при резком отключении движков: если раскрутить их до 100%, а потом снять сигнал, то МК перезагружался; однако, если после 100% плавно понижать обороты где-то до 40%, и лишь потом снимать сигнал, то схема работала нормально. Плюс, очень сильно нагревались электролиты C7...
      Однако, когда принес схему в машину - для отладки непосредственно в "боевых условиях", и подключил мощный двигатель вентилятора, началась старая песня с резетами...
      Сейчас, вроде бы, "осенило" - поменял VD2 на Шоттки 1N5822 - лампочка запустилась на "ура" даже без С7; так же отлично и мягко стартовала спарка из МЭ218 - радостный побежал к машине... Но с "карлсоном" - опять мимо: МК вновь ушел в перезагрузку... Все: я не знаю, что тут делать - каждую деталь уже перелопатил, и кучу вариантов испробовал!!! Но ничего не понятно(( Вот и прошу помочь: может быть, кто-то уже был в такой ситуации, и как-то решил подобную проблему?
      VT2 и VT3 стоят "фирменные", IR-овские (не Китай) - из "Чип и Дипа". ATtiny13 - с Алиэкспресс; чтобы исключить возможность брака конкретной микросхемы, пробовал ставить в схему несколько разных экземпляров МК (из одной посылки). DS18B20 пока еще не подключал (нужно разобраться с ШИМ!). IRF3205 каскадированны для уменьшения нагрева (хотя его и так практически нет), и для дополнительной надежности (чтобы в случае выхода из строя одного транзистора не перегреть машину). Тестовую программу специально написал "китайским стилем", без циклов и т.п. - чтобы она была максимально простой, наглядной и линейной - для уверенности, что не в ней дело.
      Подскажите пожалуйста - откуда эти резеты, и как с ними бороться? Как заставить схему отрабатывать на мощную нагрузку? Заранее благодарю!!!
       
       
      ;*************ТЕСТОВАЯ ПРОГРАММА************* ;============ДИРЕКТИВЫ ТРАНСЛЯТОРУ=========== .device ATtiny13 .include "tn13def.inc" .list ;Обзывательство регистров .def Temp = R16 .cseg .org 0x00 ;=========ТАБЛИЦА ВЕКТОРОВ ПРЕРЫВАНИЙ======== rjmp Begin //Начальный сброс reti //Внешнее прерывание INT0 reti //Изменение состояния любой линии reti //Переполнение T0 reti //Готовность EEPROM reti //Срабатывание компаратора reti //Совпадение в канале A таймера T0 reti //Совпадение в канале B таймера T0 reti //Переполнение сторожевого таймера reti //Завершение преобразования в АЦП ;============МОДУЛЬ ИНИЦИАЛИЗАЦИИ============ Begin: ;-----Инициализация стека ldi Temp, RAMEND out SPL, Temp ;-----Отключение компаратора ldi Temp, 0x80 out ACSR, Temp ;-----Настройка портов ldi Temp, 0b00000111 out DDRB, Temp //PB0 - на вывод ;-----Настройка ШИМ ldi Temp, 0b11000001 out TCCR0A, Temp //Режим - быстрый ШИМ с инверсией ldi Temp, 0b00000010 out TCCR0B, Temp //Делим тактирование таймера на 8 rjmp Start //При старте пропускаем 5-секундную задержку ;===============ТЕСТОВЫЙ ЦИКЛ================ PWM: ldi Temp, 0b00000000 out OCR0A, Temp //ШИМ=0% rcall Delay5sec //Ждем 5 сек ;-----Повышаем скорость Start: ldi Temp, 77 out OCR0A, Temp //ШИМ=30% rcall Delay2sec ldi Temp, 102 out OCR0A, Temp //ШИМ=40% rcall Delay2sec ldi Temp, 128 out OCR0A, Temp //ШИМ=50% rcall Delay2sec ldi Temp, 154 out OCR0A, Temp //ШИМ=60% rcall Delay2sec ldi Temp, 179 out OCR0A, Temp //ШИМ=70% rcall Delay2sec ldi Temp, 205 out OCR0A, Temp //ШИМ=80% rcall Delay2sec ldi Temp, 230 out OCR0A, Temp //ШИМ=90% rcall Delay2sec ldi Temp, 255 out OCR0A, Temp //ШИМ=100% rcall Delay2sec ;-----Понижаем скорость ldi Temp, 230 out OCR0A, Temp //ШИМ=90% rcall Delay2sec ldi Temp, 205 out OCR0A, Temp //ШИМ=80% rcall Delay2sec ldi Temp, 179 out OCR0A, Temp //ШИМ=70% rcall Delay2sec ldi Temp, 154 out OCR0A, Temp //ШИМ=60% rcall Delay2sec ldi Temp, 128 out OCR0A, Temp //ШИМ=50% rcall Delay2sec ldi Temp, 102 out OCR0A, Temp //ШИМ=40% rcall Delay2sec ldi Temp, 77 out OCR0A, Temp //ШИМ=30% rcall Delay2sec rjmp PWM //Возвращаемся, и начинаем с 5 сек "молчания" ;===========ПОДПРОГРАММЫ ЗАДЕРЖКИ============ ;-----Задержка в 2 секунды Delay2sec: ldi R17, 253 ldi R18, 75 ldi R19, 29 L1: subi R17, 1 sbci R18, 0 sbci R19, 0 brcc L1 nop ret ;-----Задержка в 5 секунд Delay5sec: ldi R17, 253 ldi R18, 61 ldi R19, 73 L2: subi R17, 1 sbci R18, 0 sbci R19, 0 brcc L2 nop ret  

    • By Дмитрий Чуков
      Необходимо составить программу, которая формирует сигнал с частотой 1 кГц и скважностью 4 при помощи таймера. В CodeVision AVR написать программу и после в протеусе проверить, целый день уже бьюсь, не могу разобраться с таймерами. Вроде задача не трудная, если бы увидел, как это должно выглядеть в коде... Как настроить таймер для ATMega8A и решить эту задачу?
×
×
  • Create New...