Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Замешательство с программированием ATmega64A

Сообщение a_skr »

datasheet: 28.8 SPI Serial Programming Pin Mapping
Изображение
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Pink-Pank »

Управление какое-нибудь нужно или тупо вкл-выкл по времени?
Fucking static initialization order fiasco
Аватара пользователя
ua1arn
Встал на лапы
Сообщения: 81
Зарегистрирован: Вт май 08, 2012 23:15:45
Откуда: Санкт - Петербург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ua1arn »

Возьмусь предположить, что требуется только установка начала суток - чтобы свет в аквариуме не ночью зажигался.
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Pink-Pank »

Это можно сделать по факту включения питания. Чтобы не заморачиваться с установками.
Fucking static initialization order fiasco
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Alexeyslav »

С датчиком хола не так все просто, часто они идут либо сразу с логическим выходом - либо полноценный либо с ОК, который надо подпереть резистором сверху либо идет просто мост из магниточувствительных элементов, который надо запитать и снять с него дифференциальный сигнал и усилить.
nirq
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение nirq »

чтобы свет в аквариуме
Чтоб не заморачиваться с установками, по факту лучше сразу предусмотреть часы, чем сначала сделать безвозмездно неважно что, потом выкрасить, выбросить и начать делать уже нормально.
Халява, сэээр...

Хинт: тарифы на электричество, день/ночь; перебой в розетке, буквально на полсекунды, через час ещё на полчаса, а потом ближе к вечеру опять на полсекунды;...
СпойлерУ меня есть уже готовая конструкция, которой описанная задача решается как часть общего функционала ... но конструкция не продаётся безвозмездно, а документация не раздаётся безвозмездно. Такие дела.
Зато на зелёной "фирменной" плате и опционально в "фирменном" же корпусе. С дисплеем на русском языке, батарейкой от перебоев и всеми делами.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Замешательство с программированием ATmega64A

Сообщение uk8amk »

Саша Леськив писал(а):Собираю тест-плату с серцем на микроконтроллере ATmega64A

Там 2 уарта, вы используете оба?
Шить можно через JTAG.
Шить можно через бутлоадер, здесь вообще любой доступный интерфейс накрутить можно.
Starmarik
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Чт июн 26, 2014 15:27:55

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Starmarik »

Всем спасибо за ответы, потихоньку разбираюсь сам. Решил сделать на Attiny13, использовать таймер, прерывания по совпадению. Как раз бьюсь над этим в cvavr :) начало включения света по факту включения питания, далее через 7 часов включение автокормушки на 5 секунд, через 8 часов отключение света, через 16 часов включение. Точности тут не надо, так как корректировать могу простым перезапуском таймера.
Аватара пользователя
Саша Леськив
Встал на лапы
Сообщения: 116
Зарегистрирован: Пт сен 07, 2012 19:38:09
Откуда: Белая Церковь, Украина

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Саша Леськив »

a_skr, то, что вы скинули я уже видел, спасибо. Я спрашиваю лично ваше мнение о том, почему здесь такой казус; В чем причина такой перестановки назначений выводов мк? Зачем юарт выводы для ISP программирования, а не MISO i MOSI :wink:
Все получится!! Главное не сдаваться, ведь не ошибается тот, кто не ничего не делает!!!
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение a_skr »

Лично моё? :dont_know: Никогда не задумывался... Может, конструктивно в таком "большом" 64-ногом корпусе Atmel'у так было удобнее... :)))
P.P.S Эти ноги не могу использовать, ибо нужен юарт.
Почему не можете? Перемычку между MAX232 (или что там у Вас) и МК. И снимать ее на время программирования.
Starmarik
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Чт июн 26, 2014 15:27:55

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Starmarik »

Помогите сделать правильный расчет таймера. Хочу сделать прерывание по совпадению с частотой раз в 1/100 секунды. Частота процессора 8 Mhz. 1сек/8000000=0,000000125. 0,001 сек/0,000000125=8000. 8000 делится нацело на предделитель 64 = 125. Выбираю прерывание по совпадению, записываю значение сравнения 7d (он же 125 в десятичной). Теперь по логике таймер должен прерываться с частотой 1/100 секунды. Значит, если переменную, которая увеличивается на единицу за одно прерывание, увеличить до 100, должна получится 1 секунда. Но в Протеусе почемуто таймер отсчитывает не 10 секунд, а 8. Посмотрите код пожалуйста. Я еще только начинаю изучать контроллеры, не все понимаю. Код написан в CVAVR.
Спойлер

Код: Выделить всё

#include <tiny13.h>
unsigned char m_sec=0x00;//переменная мсек
unsigned char sec=0x00;//переменная сек
// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
m_sec++;//переменная увеличивается за одно прерывание
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State5=T State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0x1F;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: CTC top=OCR0A
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x02;
TCCR0B=0x03; //предделитель на 64
TCNT0=0x00;
OCR0A=0x7D; //значение сравнения 125
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x04;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
DIDR0=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

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

while (1)
      {
      if(m_sec==100){m_sec=0;sec++;}  //должна получатся 1 секунда
      if(sec==100){PORTB.0=1;}        //должно тикать 10 секунд

      }
}

Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение oleg110592 »

1/100 секунды не равна 0,001 сек. и равно 100Гц
Внутренний генератор тини13 9.6 MHz.
В документации есть формула из нее получается:
OCR=(Fclk/Focn*N)-1
N - коэффициент предделителя (1, 8, 64, 256, or 1024)
OCR=(9600000/100*N)-1=(9600000/(100*1024))-1= 92.75=93 
Starmarik
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Чт июн 26, 2014 15:27:55

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Starmarik »

oleg110592 спасибо, заработало!!! :)) мой промах, я думал, CVAVR сам знает, у какого процессора какая частота, ан нет :)) В следующий раз начну с даташита :)
kLeR1k
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт май 13, 2014 19:22:27
Откуда: г. Сургут

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение kLeR1k »

Почему то на ноге Attiny13 с ШИМ в сигнале импульсы идут двойные.

СпойлерИзображение


Из за чего это может происходить?
И как можно отключить ШИМ и посадить ногу на землю? Нужно управлять светодиодным драйвером на zxld1360, а если посадить его ADJ ногу на землю (логический 0 на выходе Attiny), то он отключает светодиод от питания
Последний раз редактировалось kLeR1k Сб июн 28, 2014 18:08:28, всего редактировалось 1 раз.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Alexeyslav »

У компилятора телепатические способности? А ведь контроллер может работать на частотах от 0 гц он и эти частоты должен угадывать?
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ibiza11 »

kLeR1k, код в студию!
kLeR1k писал(а):И как можно отключить ШИМ и посадить ногу на землю?

Код: Выделить всё

TCCR0A &= ~((1<<COM0A0)|(1<<COM0A1)); // если выход А
TCCR0A &= ~((1<<COM0B0)|(1<<COM0B1)); // если выход B
PORT &= ~(1<<BIT);
Ставим плюсы: )
kLeR1k
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт май 13, 2014 19:22:27
Откуда: г. Сургут

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение kLeR1k »

ibiza11 писал(а):kLeR1k, код в студию!
kLeR1k писал(а):И как можно отключить ШИМ и посадить ногу на землю?

Код: Выделить всё

TCCR0A &= ~((1<<COM0A0)|(1<<COM0A1)); // если выход А
TCCR0A &= ~((1<<COM0B0)|(1<<COM0B1)); // если выход B
PORT &= ~(1<<BIT);

Компилятор ругается на COM0A0, как на неизвестную переменную. Если это имеет какое-то значение, пользуюсь CodeVisionAVR.
Спойлер

Код: Выделить всё

#include <tiny13.h>
#include <delay.h>

int cnt=0;
int pwmflag=1;
char Step=0xFF;

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

if (pwmflag==1)
{
// Reinitialize Timer 0 value
TCNT0=0xFE;
// Place your code here
 cnt++;
 //Каждый 5000-й заход в прерывание
 if (cnt==5000)
 //if (cnt==2)
 {
  cnt=0;
  //254 шага увеличения ширины импульса
  if (Step !=0xFE ) {
   Step++;
   OCR0A=Step;   
  }
 }   
}
}

// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
// Place your code here
 
}

// Declare your global variables here

void main(void)
{
//Задержка после включения поворота
int TurnOfDelay;
// Declare your local variables here
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=Out
// State5=P State4=P State3=P State2=P State1=0 State0=0
PORTB=0x3C;
DDRB=0x03;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9600,000 kHz
// Mode: Fast PWM top=FFh
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected


TCCR0A=0x83;      //83=non-inverted, C3=inverted
/* TCCR0A
  (10)=Clear OC0A on Compare Match, set OC0A at TOP
  |
 --    --(11)=Fast PWM + WGM02 in TCCR0B=0
 10000011
*/
 
 
TCCR0B=0x01;
/* TCCR0B
     -(0)=WGM02
 00000001
*/

TCNT0=0x10;

OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x06;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/1024k
// Watchdog Timer interrupt: Off
#pragma optsize-
WDTCR=0x39;
WDTCR=0x29;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Global enable interrupts
#asm("sei")
pwmflag=1;
TurnOfDelay = 1500;
while (1)
      { 
         
          #asm("wdr"); //Сброс сторожевого таймера
          if (PINB.3==0)
          {
               //Выключен поворотник
               if (PINB.1==1)
               {
                // Гасим поворотник
                PORTB.1 = 0;
               }
               if (TurnOfDelay<1500)
               {                 
                    // Ждём n секунды после этого, ДХО держим выключенными
                    TurnOfDelay++;
                    if (pwmflag>0)
                    {
                        Step=0;
                        OCR0A=0;
                        PORTB=0x00;
                        DDRB=0x03;
                        PORTB.0=0;
                        cnt=0;
                        pwmflag=0;
                    }
               }
               else
                {
                     if (PINB.4==0 && pwmflag==0)
                     {
                        //Прошло n секунд и не горят габариты - включаются ДХО 
                        PORTB=0x3C;
                        DDRB=0x03;
                        pwmflag=1;
                     }
                }
          }
          else
          {
            //Включен поворотник - выключаются ДХО, зажигается поворотник 
            TurnOfDelay = 0;
            if (pwmflag>0)
            {
                Step=0;
                OCR0A=0;
                PORTB=0x00;
                DDRB=0x03;
                PORTB.0=0;
                cnt=0;
                pwmflag=0;
            }
            if (PINB.1==0)
            {
                PORTB.1 = 1;
            }
          }
          if (PINB.4==1)
           {                 
                //Если включены габариты - ДХО выключены
                if (pwmflag>0)
                {
                    Step=0;
                    OCR0A=0;
                    PORTB=0x00;
                    DDRB=0x03;
                    PORTB.0=0;
                    cnt=0;
                    pwmflag=0;
                }
           }
           else
           {       
                if (PINB.3==0 && TurnOfDelay>=1500 && pwmflag==0)
                {
                    // Габариты выключены и поворотник выключен n секунд назад - включаются ДХО
                    PORTB=0x3C;
                    DDRB=0x03;
                    pwmflag=1;
                }
           }
          // Не сработало ни одно из условий, но есть питание - ДХО включаются по прерыванию   
          delay_us(100); 
      };
}

Извиняюсь за грязный код, рефакторить ещё пока толком и не чего...
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Pink-Pank »

Компилятор ругается на COM0A0, как на неизвестную переменную.

Так определите ее сами через #define
Fucking static initialization order fiasco
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ibiza11 »

kLeR1k писал(а):Компилятор ругается на COM0A0, как на неизвестную переменную. Если это имеет какое-то значение, пользуюсь CodeVisionAVR.

Код: Выделить всё

#define COM0B0 4
#define COM0B1 5
#define COM0A0 6
#define COM0A1 7
Ставим плюсы: )
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Atmega 48 - ADC (AREF - напряжение?) - Компаратор

Сообщение amd9800 »

Скажите пожалуйста если мне надо оцифровывать невысокие напряжения порядка 0,01 - 0,5 Вольт.
Могу ли я подать на AREF например образцовое напряжение 0,512 Вольт ? Таким образом при 8 бит дискретизации получить одно деление равно 0,002 Вольта.

Второй вопрос может ли компаратор встроенный в Atmega 48 Сравнивать напряжения уровня 0,1 Вольт ?
Ответить

Вернуться в «Разные вопросы по МК»