Jump to content
admin

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

Recommended Posts

23 часа назад, gogaze сказал:

А поподрорбней  весь код можно посмотреть?

 

В 07.04.2014 в 17:03, kobzar сказал:

Браво!

Вот ето подход!

Доброго дня!

я конечно понимаю что максимальное кол-во ошибок при написании кода это ошибки того кто пишит...

вот код..

#include <avr/io.h>
#define F_CPU 10000000ul
//#define F_CPU 1000000ul

//*****************

//************
#include <util/delay.h>


void preset()
{
DDRB=0xFF;
PORTB=0x00;
}
void led_on()
{
 PORTB=0xFF;
_delay_ms(100);


}

void led_off()
{
 PORTB=0x00;
_delay_ms (100);
}

int main(void)
{
    /* основной цикл */
    preset();
    while (1) 
    {
    led_on();
    led_off();
    }
}
 

при симуляции  открывается файл библиотеки   delay.h  и курсор указывает на строку 187   в ней значение  __builtin_avr_delay_cycles(__ticks_dc);

от Вашего урока отличается тем что я использую 7 студию  в 6 студии не смог включить симуляцию.

Спасибо!

Share this post


Link to post
Share on other sites

А зачем Вы заходите внутрь функций задержек ?
Я не знаю, как в Atmel Studio, но в нормальных IDE должно быть несколько вариантов шагания по коду, включая перешагивание функций.

Share this post


Link to post
Share on other sites

Время – деньги и наноамперы: применение часов реального времени Maxim Integrated

Зачем использовать внешнюю микросхему часов реального времени (RTC), а не внутренние RTC микроконтроллера? Хотя бы потому, что у RTC MAX31342 производства Maxim Integrated типовое потребление составляет 150 нА при 3 В и температуре 25°С, а у встроенных RTC одного из самых малопотребляющих микроконтроллеров при тех же условиях – примерно 370 нА.

Читать статью

Похоже в 7-й версии плохо симулируется эта функция. Попробуйте в самое начало файла записать такую строку.

#define __DELAY_BACKWARD_COMPATIBLE__

это описано в файле delay.h перед функцией

void _delay_ms(double __ms)

Share this post


Link to post
Share on other sites

Доброго дня!

не помогло   и как итог всех действий  буду переставлять винду   и на голый win7  поставлю студию и посмотрю что получится

что касается вопроса  % А зачем Вы заходите внутрь функций задержек ?%   то я туда и не захожу туда студия закидывает и останавливается

как вариант что-то в системе есть лишнее или не хватает.Потому как до студии чего-то ставилось и удалялось  вероятнее всего что не всего что не все удаляется и хвосты могут влиять на работу проги  поэтому формат /С:/   и не должно быть последствий...

 

 

Share this post


Link to post
Share on other sites
                     

Чип-резисторы Panasonic - технология мягких выводов и сертификация AEC-Q200

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

Читать статью

1 hour ago, aleksandr_m328 said:

на голый win7  поставлю студию и посмотрю что получится

Думаю получится то, что уже получилось. Если хотите не попадать в функцию задержки, то ставьте точку останава на команду следующую за _delay_ms() и запускайте на выполнение ( не в пошаговом режиме ).

Share this post


Link to post
Share on other sites

Доброго дня!

Моя надежда не сбылась!!!   

Опять то-же самое.  С точкой остановки тоже вроде как не работает (как я думаю)

в архиве скрины (то сообщение после прогона по точке останова вдруг поможет определить где ошибка) код который пытаю.Я вероятно просто не вижу ошибку типа я пишу и потому это правильно..

Спасибо!

 

 

wrk.zip

Share this post


Link to post
Share on other sites

Брекпоинт нужно ставить на существующую инструкцию, а не на пустоту. Как по-вашему программа может остановиться на "пустоте" ?

Share this post


Link to post
Share on other sites

закомментируйте строки с _delay

или отключите оптимизацию и перешагивайте F10 (шаг с обходом)

Simulator - Toolchain - Optimization - Optimization Level: None (-o0)

Кстати если нажимать то Play то Pause вы постоянно оказываетесь в функции delay и думаете что что-то не работает, однако есть шанс один из несколько миллионов, что вы остановитесь в основной программе. Ваш код, изменение состояния портов выполняется за несколько тактов, все остальное время программа висит в delay.

Edited by Berg

Share this post


Link to post
Share on other sites

Доброго дня!

Потому как мои действия в итоге не дали положительного результата  т.е. как я понял у меня не правильно работает симуляция с библиотекой  "delay"  или банальнее  где - то стоит  галочка в настройках  или не в том месте

и поэтому чтобы не крутить гайки а потом думать что получилось  реши от смотреть   первые видио

ну поискать еще инфу     без дебагера (симулятора) можно работать есть железо   есть протеус...

Вопрос не тему   моно ли заменить каркас для кода (добавить свои ) 

**Анек ...   про ремонтеров  наверное слышали.

 

Спасибо!

Share this post


Link to post
Share on other sites

Доброго дня!

Все что пока выяснил это-то что нормально  не хочет работать {Debug_er}  (не нашел внятного описания)    в протеус_е  диоды мигают а значит можно работать

подключу  программатор к студии   и начну юзать.  

 

 

Share this post


Link to post
Share on other sites

Что-то не работает библиотека для nokia3310 от  COKPOWEHEU.Перепробовал множество проектов в т.ч. примеры ,скачанные вместе с библиотекой.Всегда выдает одно

Снимок.PNG

Share this post


Link to post
Share on other sites
В 24.08.2018 в 16:47, aleksandr_m328 сказал:

Все что пока выяснил это-то что нормально  не хочет работать {Debug_er}

Вот нашел для Вас. https://www.avrfreaks.net/forum/delayms-hangs-avr-simulator

А если коротко, то отлаживая программу в том виде, которая есть, мы просто не можем дождаться, когда симулятор досчитает до конца.

В качестве доказательства - замените задержку на 1ms (_delay_ms(1);)  и увидите результат. Это только для проверки в отладчике!

#define F_CPU 10000000ul

я бы установил правильную частоту 8000000 и в Протеусе в свойствах контроллера поставил ее же.

Попробуйте так

Скрытый текст

 

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

void preset()
{
    DDRB=0xFF;
    PORTB=0x00;
}
void led_on()
{
    PORTB=0xFF;
    //_delay_ms(1000);
    _delay_ms(1);


}

void led_off()
{
    PORTB=0x00;
    //_delay_ms (1000);
    _delay_ms(1);

}


int main(void)
{
    /* Replace with your application code */
    preset();
    while (1) 
    {
        led_on();
        led_off();
    }
}

 

 

Edited by gogaze
Добавление информации

Share this post


Link to post
Share on other sites
1 час назад, кое-кто сказал:

Что-то не работает библиотека для nokia3310 от  COKPOWEHEU.Перепробовал множество проектов в т.ч. примеры ,скачанные вместе с библиотекой.Всегда выдает одно

А поподробнее! Как объявлены библиотеки в заголовке? Где находятся сами файлы?2.jpg.d8462bb4c726826eed61d01c5aa3db0e.jpg1.jpg.f0cc903141db23e8ebf34e2dd1567e54.jpg

Edited by gogaze

Share this post


Link to post
Share on other sites

Что-то не работает библиотека для nokia3310 от  COKPOWEHEU.Перепробовал множество проектов в т.ч. 

Всё,разобрался уже.Оказывается надо было добавить файл lcd_chars.inc!!Об этом никто никогда не писал.И что это за файл?

Share this post


Link to post
Share on other sites
5 часов назад, кое-кто сказал:

Всегда выдает одно

там написано "не могу найти lcd_chars.inc". Этот файл должен находиться рядом с остальными исходниками. Ну либо прописать путь к нему в makefile.

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


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

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

Share this post


Link to post
Share on other sites

Доброго дня!

Спасибо за помощь!

Да я понял что это ошибка симулятора  камень то работает  и это т код ---_delay_ms(1);--  тоже выкинул студию  в ошибку

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

пока  занимался  студией   прописал в ней программатор  (usbasp) стало чуток удобнее   есть кнопка  с наименованием камня  сейчас это мега 8

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

так что пока пропишу  кнопки и проверю на те камни что у меня есть пусть пока это будут мигалки   но как задел будет не плохой.

 

 

Share this post


Link to post
Share on other sites
8 часов назад, aleksandr_m328 сказал:

Да я понял что это ошибка симулятора  камень то работает  и это т код ---_delay_ms(1);--  тоже выкинул студию  в ошибку

Вот не поленился сделать видео на 2 минуты, без комментариев, и так все понятно - сначала задержка 1ms потом 100us. Обратите внимание на разницу во времени обработки задержки. 

Я на 100% не уверен, но может быть время еще зависит от мощности компьютера. У меня i5 четырехядерный.

https://yadi.sk/i/jTJ9722G3agMYM

Edited by gogaze
Ссылка на видео

Share this post


Link to post
Share on other sites

значит это не  ошибка ...  у  Вас  симулятор ведет так-же как и меня  (это я решил) что это ошибка.

ну тогда у меня все нормально со студией(искал то чего в принципе нет)  за то  почитал .....по теме.(это не  PHP)

 

 

Share this post


Link to post
Share on other sites

Добрый день собрал! пример из урока (в уроке atmega8A)nokia5110 и atmega328p экран пуст ничего не выводит, загорается подсветка, иногда бывает на весь экран выводит темный квадрат, в протеусе все работает? почему так может быть порты SPI на atmega8A и на 328р одинаковы,  в хидере n5110.h порты совпадают. Реализован только один вольтметр. Добавил мигание светодиода что бы понимать что контроллер работает и зашит(мигает)

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

#define HIGH 0xFF
#define LOW 0x00

void presets()
{
	DDRD = HIGH;
	PORTD = LOW;
	
	Lcd_init();
//	Lcd_clear();

//Config ADCSRA
ADCSRA|=(1<<ADEN) //задействовать АЦП
|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0);//делитель на 128=64кГц

//ADMUX
ADMUX|=(1<<REFS1)|(1<<REFS0); //Опорное напряжение 1.1 В внутренее

}

int readADC(unsigned int ch)
{
	unsigned char set_admux= ADMUX;
	set_admux &= ~((1<<MUX3) | (1<<MUX2) | (1<<MUX1) | (1<<MUX0));
	
	switch(ch)
	{
		case 1:set_admux |=((0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0));
		break;
		//case 2:set_admux |=((0<<MUX3) | (0<<MUX2) | (1<<MUX1) | (0<<MUX0));
		//break;
		default:break;
	}
	ADMUX=set_admux;
	_delay_us(10);
	
	unsigned int tmp=0;
	
	ADCSRA|=(1<<ADSC);
	while (ADCSRA&(1<<ADSC));
	
	tmp=(ADCL|ADCH<<8);
	return tmp;
}

int main(void)
{
	presets();
    /* Replace with your application code */
    while (1) 
    {

      Lcd_clear();
	  Lcd_print(0,4,FONT_1X, (unsigned char *)('a'));
	  Lcd_printf(0,0, FONT_1X, readADC(0),1);
	  Lcd_printf(0,1,FONT_1X,(readADC(0)*30)/1023,1);
	  Lcd_printf(0,2, FONT_1X, readADC(1),1);
	  Lcd_printf(0,3,FONT_1X,(readADC(1)*30)/1023,1);
	  Lcd_update();
	  _delay_ms(100);
	  PORTD=(1<<PIND7);
	  _delay_ms(200);
	  PORTD=(0<<PIND7);
    }
}
//_N5110_H_
// Порт к которому подключен LCD (здесь пример распиновки для ATmega8A)
// Библиотека использует аппаратный SPI, поэтому если хотите иной порт - придется реализовать SPI программно)
#define LCD_PORT                   PORTB
#define LCD_DDR                    DDRB

// Распиновка порта
#define LCD_DC_PIN                 PB1	// DC
#define LCD_CE_PIN                 PB2	// SCE
#define SPI_MOSI_PIN               PB3  // SDIN 
#define LCD_RST_PIN                PB4	// RESET
#define SPI_CLK_PIN                PB5  // SCLK 

 

Edited by Taras Molchanov

Share this post


Link to post
Share on other sites
20 часов назад, Taras Molchanov сказал:

Добрый день собрал!

поздравляю!

собрать добрый день - большое достижение...


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

Share this post


Link to post
Share on other sites
55 минут назад, Starichok сказал:

поздравляю!

собрать добрый день - большое достижение...

отлично))

а дальше по проблеме есть мысли?

Share this post


Link to post
Share on other sites
Posted (edited)

Прошу помочь с простенькой программкой для AVR Tiny13a (накидал в Code vision AVR 3.39b):

/*******************************************************
This program was created by the CodeWizardAVR V3.39b

Chip type               : ATtiny13A
AVR Core Clock frequency: 9,600000 MHz
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 16
*******************************************************/

#include <tiny13a.h>
#include <delay.h>

unsigned char v;

interrupt [EXT_INT0] void ext_int0_isr(void)
{
v++;
if(v==4)v=0;
delay_ms (100);
}

void main(void)
{
DDRB=(1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0);
 
PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (1<<PORTB1) | (1<<PORTB0);

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Low level
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=(1<<INT0) | (0<<PCIE);
MCUCR=(0<<ISC01) | (0<<ISC00);
GIFR=(1<<INTF0) | (0<<PCIF);

// Globally enable interrupts
#asm("sei")

while (1)
      {
         if(v==0) PORTB.2 = 0; PORTB.3 = 0; PORTB.4 = 0;
      
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
         if(v==1) PORTB.2 = 1; PORTB.3 = 0; PORTB.4 = 0;
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
         if(v==2) PORTB.2 = 0; PORTB.3 = 1; PORTB.4 = 0;
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
         if(v==3) PORTB.2 = 0; PORTB.3 = 0; PORTB.4 = 1;
      
    }

}

Проект в proteus 8 (в прикрепленном rar) представляет управление с помощью контроллера одной кнопкой тремя светодиодами по очереди. Т.е. в исходном состоянии порты со светодиодами PB2, PB3, PB4 - низкий уровень. К PB0 ничего не подключено. Кнопка на PB1, второй конец на землю. При 1 нажатии загорается и горит PB2, при втором нажатии PB2 тухнет, зажигается PB3, при третьем - тухнет PB3 и загорается PB4, при четвертом - все порты со светодиодами выключаются. И по кругу.

При запуске в Протеусе начинают подмаргивать PB3, PB4. При первом нажатии PB2 загорается, при втором моргают PB3, PB4.

test 2 one click.rar

Edited by Falconist

Share this post


Link to post
Share on other sites
Guest shindax

Вы про инструкцию if в языке С хоть что-то читали? Как оформляются блоки кода знаете??? Вряд-ли...

Возможно, Вам стОит переписать код так?

if(v==3) { PORTB.2 = 0; PORTB.3 = 0; PORTB.4 = 1; }

 

 

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...

  • Сообщения

  • Similar Content

    • By SAYMPR
      Друзья ! Нужна помощь,есть схема бортового устройства в протеусе,так же и программа на С.Не получается  программу связать со схемой.Помогите пожалуйста!
      Протеус принимается только асемблер,а мне нужен С.

    • By ARV
      Вот такая плата была когда-то давно разработана и изготовлена... Но ни разу не включалась, не проверялась и не налаживалась.
      Схема с перечнем сохранилась только на бумаге.
      Схема предназначалась для изучения/освоения микроконтроллера AT90PWM3 и CAN, использование их для управления трехфазным инвертором. 
      На плате установлены:
      микроконтроллер AT90PWM3-16SQ в типовой обвязке с кварцем; внешний CAN-контроллер MCP2510-I/SO; драйвер CAN-шины MCP2551-I/SN; регистр SN74HC597 для ввода 8 дискретных сигналов; 4 оптрона ILD74 для развязки дискретных сигналов; Операционный усилитель AD824AR для аналоговых сигналов, подаваемых на МК; элементы N74AHCT86D для возможности инвертирования выходных сигналов (при помощи перемычек) буфер SN74AC244DWR для умощнения выходных сигналов; преобразователь питания ИРБИС МПА10А (входное напряжение 9...18В); необходимая обвязка, включая восстанавливаемый предохранитель, кварц, защитные диоды на входах и т.п. На плате много контрольных точек, есть технологические перемычки. Схема оттрассирована в расчете на то, что МК формирует 3 двуполярных ШИМ-сигнала (т.е. всего 6 ШИМ-ов для верхних и нижних ключей отдельно)  возможностью индивидуально проинвертировать каждый (т.к. драйверы IGBT могут иметь как прямые, так и инверсные входы). 4 аналоговых сигнала с датчиков тока или напряжения поступают в МК для реализации ОС и защит. Управление ведется по CAN и с помощью 8 дискретных сигналов.
      Больше подробностей вспомнить не могу...
      Плата, как видите, даже не мылась от канифоли - так и пролежала 10 лет... Паялась профессиональнми монтажниками вручную, трассировалась тоже, но за качество, увы, не порчусь головой...
      Думаю, плата может быть хорошей основой для самодельного инвертора или как экспериментальная основа для изучения микроконтроллера, CAN-контроллера и шины, а так же вообще для всяких поделок. 
      Отправлю почтой РФ комплект: 
      Схема - 1 лист А1 эскиз размещения компонентов на плате - 1 лист А4 (немного поврежден, но читаем) перечень компонентов - 2 листа А4 эскиз печатной платы - 1/2 листа А4 плата в сборе дополнительный контролер AT90PWM3B (на плате распаян другой - AT90PWM3) Цена 3000 рублей, доставка отдельно. Бонусом могу добавить дополнительный CAN-контроллер и CAN-драйвер.
    • By WetCrow
      Добрый день!

      Пытаюсь настроить на Atmega8 Asynchronous Clock. Цель -- сделать часы.
      По задумке, мк работает на частоте 1МГц (фьюзы не трогаю, оставляю заводские значения), к пинам TOSC1/TOSK2 подключается кварц на 32.768 кГц, а Timer2 настраивается таким образом, что генерирует прерывания один раз в секунду.
      Вот, что я делаю:
      ASSR |= 1 << AS2; TCCR2 = 0b00000101; TIMSK |= 1 << TOIE2; sei();
      Нужно ли подключать кварц с конденсаторами, или без -- не понял. В даташите информации не нашёл. Пробовал и так, и эдак -- разницы не заметил.
      Что получилось:
      В Протеусе всё вроде работает правильно, однако, даже если отсоединить кварц, это ни на что не влияет. На макетной плате схема работает раза в 1.5 быстрее, чем нужно; опять таки, отсоединение кварца ничего не меняет. В чём я ошибаюсь, чего не учитываю?

      К сообщению прикладываю файл прошивки и протеуса.
      Примечания:
      в Протеусе сделал имитацию дисплея на светодиодах, так как встроенный вариант не работал корректно. Для того, чтоб цифры мигали медленнее, можно раскомментировать строку "#define DEBUG_BLINKING" -- иначе в протеусе не рассмотреть, что получается. Пишу на C++ под avr-g++, впрочем, никаких фишек языка не использую. clock.cpp clock_build_with_LEDs.pdsprj
    • By MirVsem
      Добрый день.
      Есть интересные модули ибп для слаботочки до 1А.
      m.aliexpress.ru/item/4000109380893.html
       По цене идеально подходит для зоопарка роутеров, IoT устройств... Переключение на резерв (туда-обратно) без просадки. Зарядка литиевой банки как положено, всякие защиты от перегрузки и прочее. Казалось бы все замечательно. 
      НО как всегда не без ложки дёгтя.
       Защита от переразрядки работает неадекватно. Хотя возможно это не сама защита, а повышающий модуль. На пороге ~3в у него срабатывает циклический перезапуск и так пока банка не просядет ниже 3в. Точно померять нечем.
      Из наблюдений. Проверил напряжение переключается с 12в на 9в и щелчки. Естественно нагрузка в это время дико насилуется (роутер свистит минут 5 пока полностю не отключится)
      Вопрос к гуру. Возможно ли что-то доработать в даном модуле чтобы исправить этот досадный баг?
    • By Юлия Михайлова
      Требуються люди умеющие работать с микроконтролерами esp 32 и stm32 , так же будет плюсом опыт работы с raspberry , требования опыт работы не мение 1,5 года , возраст не старше 35 лет , готовы взять на удаленную работу просьба отправлять резюме , и звонить по номеру +380 (68) 227 82 52
×
×
  • Create New...