Jump to content
admin

Видеокурс По Avr-Микроконтроллерам Для Начинающих

Recommended Posts

В чём здесь ошибка? На ножку подается единица и все.

PORTB |= _BV(PB1);
_delay_ms(delay);
PORTB &= ~_BV(PB1);
_delay_ms(delay);

Share this post


Link to post
Share on other sites

Ну во первых - я не давал в уроках данного метода - так код пишут кваврщики

Второй строкой вы я так понимаю просто хотите инвертировать значение

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

PORTB |= _BV(PB1);
_delay_ms(delay);
PORTB |= ~(_BV(PB1));
_delay_ms(delay);

правда под рукой нет студии - не проверю

Share this post


Link to post
Share on other sites

Это я пробую зажечь 1 светодиод из всего порта, для того, чтобы потом сделать, как вы давали домашнее задание, чтобы в каждом из портов светился 1 светодиод за цикл. С тем, чтобы зажечь и потушить светодиод я уже разобрался, нужно было

DDRB = 0xFF;

писать после

int main(void) {

Share this post


Link to post
Share on other sites

Технология Maxim Integrated nanoPower: когда малый IQ имеет преимущества

При разработке устройств с батарейным питанием важно выбирать компоненты не просто с малым потреблением, но и с предельно малым током покоя. При этом следует обратить внимание на линейку nanoPower производства компании Maxim Integrated. В статье рассмотрено их применение на примере системы датчиков беспроводной оконной сигнализации.

Подробнее

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

Share this post


Link to post
Share on other sites

Так! Граждане учащиеся!

По последнему уроку и практике - АЦП - есть вопросы, или понятно обьяснил ?

Если все всем понятно буду переходить к следующему уроку - если что неясно обьяснять или переснимать урок!

Share this post


Link to post
Share on other sites
                     

Платы Nucleo на базе STM32G0: чего можно добиться с помощью связки Nucleo и Arduino

Платы Nucleo и платы расширения X-NUCLEO от STMicroelectronics можно интегрировать в платформу Arduino с помощью библиотеки STM32duino. Связка плат Nucleo и платформы Arduino, и наличие готовых библиотек – представляет удобный инструмент для создания прототипов и конечных приложений в условиях ограниченного времени. Статья содержит пошаговые инструкции по установке библиотек и запуску примеров для Nucleo.

Подробнее...

Все очень доходчиво и понятно

вот у меня вопрос насчёт амперметра

принцем понимаю когда ток протекает в одном направление

а если он поменяется

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

Share this post


Link to post
Share on other sites

В данном случае - мы рассматриваем амперметр как устройство !

Следовательно - нам надо добавить в схему низкоомный резистор и мерять на нем потерю напряжения как обычным вольтметром!

Вот и будет у нас ТОК. Суть домашки в том - что надо будет усилить сигнал! Если в вольтметре мы использовали делитель - тот тут нам нужен множитель!

Например на ОУ !

В следующих уроках - я всеравно покажу как это делать! Но если сможете самостоятельно - это будет большим плюсом!

На самом деле базы которую я вам дал - уже достаточно для того что бы собрать устройство !

Пора шевелить "усиками" :)

Share this post


Link to post
Share on other sites

я просто интересовался можно ли мерят протекающий ток в обе стороны

а насчет усиления сигнала можно увеличить сопротивления шунта или использовать операционный усилитель

я опробовал два варианта все работает

Share this post


Link to post
Share on other sites

Рисуем пустой прямоугольник

Lcd_rect_empty ( x1, y1, x2, y2, PIXEL_ON );

Здесь точно все верно? У меня пустой вообще не рисует, хотя с закрашеным проблем нет...

Share this post


Link to post
Share on other sites

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

Lcd_rect_empty (5,5, 10,10, PIXEL_ON)

Господа - а где вопросы и домашка по последнему уроку (АЦП) всем все понятно что ли ?

Share this post


Link to post
Share on other sites

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

//предварительная настройка
void presets(){
 //иницилизация дисплея
 Lcd_init();
 // настройка АЦП
 //ADCSRA
 ADCSRA |= (1<<ADEN)// задейсвование АЦП
 | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // делитель на 128 = 64 kHz
 // конфигурируем опорное напряжение ADMUX 2,56 v
 ADMUX |= (1<<REFS1)|(1<<REFS0) //внутриние 2.56 v
 | (0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(1<<MUX0);//выбор выводов
 }
int readADC(){
 ADCSRA |= (1<<ADSC);//запуск преоброзования
 while ((ADCSRA &(1<<ADSC)));//ожидания окончания преоброзования
 return ADC ;
 }
int main (void){
 presets();
 while(1){
 Lcd_clear();
 char buff[5];
 itoa(readADC(), buff, 10);
 Lcd_print(0,1, FONT_1X, (unsigned char*)buff);
 Lcd_update();
 _delay_ms(200);

}



}

всё ли я тут правильно написал ?

так как у меня вместо 600 что должно показывать показывает 200

это проблема в протеусе

Share this post


Link to post
Share on other sites
вместо 600 показывает 200
Где в программе видно, что должно показывать 600 ? Возможно, readADC() и возвращает 200, тогда проблема в железе.

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

itoa(600, buff, 10);

и посмотрите что будет показывать.

Share this post


Link to post
Share on other sites

я попробовал

да действительно стало показывать 600

но при изменение напряжения чело не меняется

Share this post


Link to post
Share on other sites

покажите схему в протеусе - мы ж тут не кашпировские!

Share this post


Link to post
Share on other sites

вот схема

как вставить изображенные ?

получилось :)

post-180469-0-89914900-1399623182_thumb.png

Edited by Andreylev

Share this post


Link to post
Share on other sites

я перезалил картинку

сейчас читабельный

Edited by Andreylev

Share this post


Link to post
Share on other sites

так у вас все правильно!

Условно

600 - это 1.5 вольта

у вас 192 = 600\3, следовательно 1.5\3 = 0.5 вольта.

Данные соответствуют.

Когда резистор крутите - в каком диапазоне меняется напряжение на входе АЦП?

ну и в функцию РеадАДЦ - добавьте первой строкой _delay_us(10);

Share this post


Link to post
Share on other sites

выше 200 не идет даже когда подымаю напряжение на ножке 5 вольт

post-180469-0-82110900-1399625177_thumb.png

Edited by Andreylev

Share this post


Link to post
Share on other sites

В протеусе частоту камня 8 мегагерц выставили?

Выложите весь проект вместе с протеусом - посмотрим где ошибка!

Share this post


Link to post
Share on other sites

Вновь вынужден просить вашей помощи. Делаю термометр с рандомной температурой.

Код:

//Atmega8A

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

void presets(){
Lcd_init();
Lcd_clear();
Lcd_update(); 
}

int main(void)
{
presets();
int i_data = 20;
int s_data = 10;
int p_data = 0;
int temp = -1;

   while(1)
   { 
for (int i=1;i<=6;i++)  
{
Lcd_circle(40,30,i, PIXEL_ON);
}

Lcd_rect_empty (38,5,42,30,PIXEL_ON);

Lcd_pixel(37,20,PIXEL_ON);
Lcd_pixel(37,15,PIXEL_ON);
Lcd_pixel(37,10,PIXEL_ON);
char bufer[3];
itoa(i_data, bufer,10);
Lcd_print(4,0,FONT_1X,(unsigned char*)bufer);

char bufer1[3];
itoa(s_data, bufer1,10);
Lcd_print(4,1,FONT_1X,(unsigned char*)bufer1);

char bufer2[3];
itoa(p_data, bufer2,10);
Lcd_print(5,2,FONT_1X,(unsigned char*)bufer2);


int val = rand() % 3;
while(temp == val)
{
val = rand() % 3;
} 
temp = val;
switch (val){
case 0:
Lcd_rect(38,30,6,4,PIXEL_ON);
break;
case 1:
Lcd_rect(38,30,11,4,PIXEL_ON);
break;
case 2:
Lcd_rect(38,30,16,4,PIXEL_ON);
break;
} 
Lcd_update();
}

}

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

image.jpg

Share this post


Link to post
Share on other sites

Andreylev

У вас полностью работоспособный код! Все меняется и отображается!

Думаю ошибка у вас в протеусе. Попробуйте 7.10 и делитель сделайте нормальный а не просто на переменнике!

По схеме которая в видео уроке - все прекрасно работает!

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 Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Anton Bondarenko
      Всем привет
      Прошу не ругать, впервые подобный вопрос задаю.
      Хочу сделать прибор, который будет посылать сигнал, когда возле прибора будет проходить металлический предмет. 
      — угол отслеживания до 30° а лучше прямая линия, траектория
      — время реакции очень высокое до 100 мс
      — ширина проема в котором нужно сканировать от 10 до 20метров,
      — передача сигнала через вифи
      Может есть готовые решения, или отдельные компоненты.
      Подскажите пжл в каком направлении искать.
      Смотрел датчики движения, но главная проблема — время реакции.
      Спасибо
       
    • By Вячеслав_НС
      Здравствуйте ! подскажите , какую лучше библиотеку использовать (и где ее взять) для управления i2c atmega8 в atmel studio 7  .  задача - управлять atmega8 по i2c ,  цап  PCF8591T .
      понимаю , в интернете много примеров и библиотек , но хотелось бы пример максимально простой и точно рабочий . т.к. пока что все мои попытки не привели к успеху ... то Atmel Studio 7 при компиляции ругается на несуществующий файл ( к примеру - "stream.h") при использовании библиотеки i2c , то еще какие то грабли .
    • By Sofia Vin
      Предлагаем проектную работу в Москве:
      Микроконтроллер STM32F103.
        
      Есть встроенный код с использованием функций библиотеки FreeRTOS, код имеет описанный протокол для связи с внешним миром.
        
      Необходимо проводить доработку кода под задачи программиста верхнего уровня и его тестирование в составе оборудования. 
      Работа в лаборатории (м.Университет) и удаленно. 
      Оплата по договоренности.
      Если Вы обладаете опытом схемотехнического проектирования и программирования микроконтроллеров, и Вас заинтересовала данная возможность, ждем Ваши отклики по контактным данным:
      8 (925) 023-60-02   Алексей
      E-mail: nassa@marathon.ru
       
×
×
  • Create New...