Jump to content

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


 Share

Recommended Posts

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

В 20.06.2024 в 02:10, korsaj сказал:

А происходит это потому что вы запустили АЦП в циклическом режиме

Спасибо за наводку про флаги. кажется нашел ошибку.
Вот код из видео урока284663688_1.png.2e3f5a412900664e806d5d40c305e5b3.png
 

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

void port()
{
	DDRB|=(1<<0)|(1<<1)|(1<<2);
	PORTB&=~((1<<0)|(1<<1)|(1<<2));
	DDRC&=~(1<<1);
}
//включение АСР
void ACP()
{   
	ADMUX|=(1<<6)|(1<<7);// внутренний источник опорного напряжения 2.5в (1<<6,7)
	ADMUX&=~(1<<5);// правостороннее выравнивание регистра &(1<<5)
	ADMUX&=~((1<<0)|(1<<1)|(1<<2)|(1<<3));// задействован 0 вывод для АСР (1<<0.1.2.3)
	//ADMUX=0b11000000;

	
	ADCSRA|=(1<<7);// разешить работу АСР (1<<7)
	ADCSRA|=(1<<5);// непрерывное измерение (1<<5)
	ADCSRA&=~(1<<2);//частота дискритезации/8 (125кГц) &(1<<2)
	ADCSRA|=(1<<0)|(1<<1);// (1<<0.1 )
	ADCSRA|=(1<<6);// старт АСР (1<<6)	
	//ADCSRA=0b11100011;
}

int main(void)
{
	port();
	ACP();
	
    while(1)
    {
	if(ADC>=600) {PORTB|=(1<<0); PORTB&=~((1<<1)|(1<<2));}
	if(ADC>=560 && ADC<600) {PORTB|=(1<<1); PORTB&=~((1<<0)|(1<<2));}
	if(ADC<560) {PORTB|=(1<<2); PORTB&=~((1<<0)|(1<<1));}	
		
	if (ADCSRA&(1<<4)) ADCSRA|=(1<<4);// восстановление флага при сбросе   
    }		
}

А вот мой ,я флаг неправильно внизу отслеживал походу
Вечером попробую переделать

Link to comment
Share on other sites

Что-то код из видео урока не впечатляет.

Ну, а ваш тем более. Сначало проверяйте флаг окончания преобразования, а потом делайте сравнение результата преобразования. Регистр ADC состоит из двух 8-ми битных регистров ADCH:ADCL и когда вы в коде сравнивает его с константой (600, 560), происходит его считывание. А после считывания регистра ADCL регистры блокируются до момента считывания ADCH. Соответственно если в этот промежуток произойдет окончание преобразования, результат не будет записан в регистры ADCH:ADCL и появится предупреждение. 

Link to comment
Share on other sites

Секреты депассивации литиевых батареек FANSO EVE Energy

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

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

Только что, korsaj сказал:

Что-то код из видео урока не впечатляет

Ну так это же для новичков. Чтобы понятнее было

2 минуты назад, korsaj сказал:

 а ваш тем более

Так это я с видео урока переписал все

Link to comment
Share on other sites

Первые в мире сигнальные реле 5-го поколения от Hongfa

Компания Hongfa разработала и предлагает три новых семейства сигнальных реле 5-го поколения: HFD5, HFD5-K и HFD5-H. На данный момент Hongfa является единственным в мире производителем таких реле.  Высокие максимально допустимые значения коммутируемого напряжения, повышенное быстродействие и уменьшенная мощность для срабатывания реле при небольшом размере отличают реле нового поколения Hongfa. Новые реле подходят для систем автоматики, измерительной техники, телекоммуникационного оборудования, а также являются хорошим решением для малогабаритных портативных устройств. Подробнее>>

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

Важные нюансы подбора литиевых ХИТ для разработчиков

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

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

7 минут назад, korsaj сказал:

Сначало проверяйте флаг окончания преобразования, а потом делайте сравнение результата преобразования.

Тоесть проверку флага нужно перенести наверх?IMG_20240621_103411.jpg.3aea6969d6fcc7aadc53181648e97389.jpg

Так?

Link to comment
Share on other sites

Правильней сказать: проверку условий во внутрь проверки флага (если флаг установлен - тогда работаем с результатом).

Link to comment
Share on other sites

Скиньте пожалуйста ,если есть у кого пример как с дисплеем 16 на 2 работать. Хочу вольтметр как из видео урока сделать ,но у меня нет дисплея от нокиа. Зато есть 16 на 2.

Link to comment
Share on other sites

Дак в тырнете куча примеров. Берите любой. Тут вон даже tifaso с божьей помощью (т.е. чужими руками) осилил, хоть и криво.

Всего то нужно функцию отправки данных/команд. С помощью этой функции и задержек сделаете инициализацию контроллера дисплея, а потом будете отправлять данные.

Link to comment
Share on other sites

1 час назад, korsaj сказал:

Дак в тырнете куча примеров

Так ничего, не нашел. Все в основном для ардуино на С++.

Link to comment
Share on other sites

Не подскажите что с этим файлом делать? Это же библиотека ,как ее добавить, как работать с ней. Пример хоть какой нибудь 

Link to comment
Share on other sites

Копируете файлы lcd.c, lcd.h себе в проект, в ваш main.c прописываете lcd.h (добавляете в начале строку #include "lcd.h"). Затем в lcd.h прописываете порт выводы к которым подключен дисплей:

#if ( !defined LCD_DDR || !defined LCD_PORT )
	#warning "Please define LCD_DDR and LCD_PORT"
	#define LCD_DDR  DDRB
	#define LCD_PORT PORTB
#endif

#ifndef LCD_RS
	#warning "LCD Using default pin"
	#define LCD_RS 0
	#define LCD_RW 1
	#define LCD_EN 2
	#define LCD_D0 4
	#define LCD_D1 5
	#define LCD_D2 6
	#define LCD_D3 7
#endif

#define LCD_COL_COUNT 16
#define LCD_ROW_COUNT 2

После этого в начале программы инициализируете дисплей (функция lcd_init(void);), включаете (lcd_on(void);), очищаете (lcd_clear(void);) и дальше пользуете (функцию вывода  на экран строки найдете во все том же lcd.h:
 

void lcd_init(void);

void lcd_command(uint8_t command);
void lcd_write(uint8_t value);

void lcd_on(void);
void lcd_off(void);

void lcd_clear(void);
void lcd_return_home(void);

void lcd_enable_blinking(void);
void lcd_disable_blinking(void);

void lcd_enable_cursor(void);
void lcd_disable_cursor(void);

void lcd_scroll_left(void);
void lcd_scroll_right(void);

void lcd_set_left_to_right(void);
void lcd_set_right_to_left(void);

void lcd_enable_autoscroll(void);
void lcd_disable_autoscroll(void);

void lcd_create_char(uint8_t location, uint8_t *charmap);

void lcd_set_cursor(uint8_t col, uint8_t row);

void lcd_puts(char *string);
void lcd_printf(char *format, ...);

 

Link to comment
Share on other sites

1 час назад, korsaj сказал:

Копируете файлы lcd

Ой спасибо добрый человек!!

Буду пытаться разобраться вечером

Почему кстати иногда вместо int ,ставят char? Это же оба цельночисленных оператора.

Еще иногда добавляют unsigned int. Я везде просто int ставил и все работало

Link to comment
Share on other sites

Помогите пожалуйста по 6-му уроку с этой темы.
Все библиотеки добавил и в протеус и в студию, код написал в точности как из видео, даже по байтам один в один. Но при запуске протеуса дисплей просто весь загорается белым и все. Ничего понять не могу в чем дело.

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include "n5110.h"

void preset()
{
	Lcd_init();
	Lcd_clear();
}

int main(void)
{
preset();

    while(1)
    {
       Lcd_prints(0, 3, FONT_1X, (unsigned char *)PSTR("Hellow"));
	   Lcd_prints(0, 4, FONT_1X, (unsigned char *)PSTR("Привет!"));
	   Lcd_update();
    }
}

1731219789_.png.0ba8df1d3f3e123d766bd554757c8108.png

Link to comment
Share on other sites

Похоже, вы не прочитали первый пост - какой именно Протеус ставить и какой именно дисплей выбирать.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Link to comment
Share on other sites

А у меня ещё вопрос - в примере из урока также сделан вывод на экран - в бесконечном цикле???

Нда, посмотрел урок, действительно учителю нужен учитель.

Link to comment
Share on other sites

4 часа назад, sashka сказал:

Ничего понять не могу в чем дело.

на схеме GND экрана никуда не подключен. нужно поставить элемент "земля" и к нему подключить.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Link to comment
Share on other sites

6 часов назад, Starichok сказал:

на схеме GND экрана никуда не подключен

Не влияет ,пробовал уже ,изначально все как в видео собрал.

10 часов назад, COKPOWEHEU сказал:

Похоже, вы не прочитали первый пост

Протеус у меня 8 ,просто с момента создания видеоурока уже 10 лет прошло
Если вы имеете ввиду про "крокозябры" что описываются в первом посте, то я пробовал и библиотеку с первого поста тоже ставить в студию ,но с ней вообще кучу ошибок выдает. Без ошибок компилируется только с теми файлами ,что из описания в видео.

Не работает вообщем эта нокиа ,да и смысла наверное нет из этого эксклюзивного экрана старую версию протеуса ставить.

Edited by sashka
Link to comment
Share on other sites

12 часов назад, COKPOWEHEU сказал:

и какой именно дисплей выбирать.

Так там один вид дисплея же, другого нет

Link to comment
Share on other sites

Вообще проблем нет иметь две версии протеуса на компе. Например 7 версия мне больше нравится.

Возможно проблема в opengl которую 8 версия использует.

Link to comment
Share on other sites

3 часа назад, sashka сказал:

Протеус у меня 8

А если бы вы почитали саму тему, то знали бы, что вы не первый такой невнимательный.

1 час назад, sashka сказал:

Так там один вид дисплея же, другого нет

Насколько я помню, дефолтный дисплей идет с надписью "Demo Version" поперек экрана. Но в комментариях выкладывали и исправленную версию. Но могу ошибаться, мне надпись не мешает.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Link to comment
Share on other sites

2 часа назад, COKPOWEHEU сказал:

с надписью "Demo Version"

Да даа ,я это знаю про надпись. Но у меня он просто горит белым, наверное из за версии протеуса дело действительно.

Link to comment
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
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
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...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...