Мелкие вопросы по МК и ПЛИС.
- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Управление какое-нибудь нужно или тупо вкл-выкл по времени?
Fucking static initialization order fiasco
- ua1arn
- Встал на лапы
- Сообщения: 81
- Зарегистрирован: Вт май 08, 2012 23:15:45
- Откуда: Санкт - Петербург
Re: Мелкие вопросы по МК и ПЛИС.
Возьмусь предположить, что требуется только установка начала суток - чтобы свет в аквариуме не ночью зажигался.
- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Это можно сделать по факту включения питания. Чтобы не заморачиваться с установками.
Fucking static initialization order fiasco
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
С датчиком хола не так все просто, часто они идут либо сразу с логическим выходом - либо полноценный либо с ОК, который надо подпереть резистором сверху либо идет просто мост из магниточувствительных элементов, который надо запитать и снять с него дифференциальный сигнал и усилить.
Re: Мелкие вопросы по МК и ПЛИС.
Чтоб не заморачиваться с установками, по факту лучше сразу предусмотреть часы, чем сначала сделать безвозмездно неважно что, потом выкрасить, выбросить и начать делать уже нормально.чтобы свет в аквариуме
Халява, сэээр...
Хинт: тарифы на электричество, день/ночь; перебой в розетке, буквально на полсекунды, через час ещё на полчаса, а потом ближе к вечеру опять на полсекунды;...
Спойлер
У меня есть уже готовая конструкция, которой описанная задача решается как часть общего функционала ... но конструкция не продаётся безвозмездно, а документация не раздаётся безвозмездно. Такие дела.Зато на зелёной "фирменной" плате и опционально в "фирменном" же корпусе. С дисплеем на русском языке, батарейкой от перебоев и всеми делами.
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Замешательство с программированием ATmega64A
Саша Леськив писал(а):Собираю тест-плату с серцем на микроконтроллере ATmega64A
Там 2 уарта, вы используете оба?
Шить можно через JTAG.
Шить можно через бутлоадер, здесь вообще любой доступный интерфейс накрутить можно.
Re: Мелкие вопросы по МК и ПЛИС.
Всем спасибо за ответы, потихоньку разбираюсь сам. Решил сделать на Attiny13, использовать таймер, прерывания по совпадению. Как раз бьюсь над этим в cvavr
начало включения света по факту включения питания, далее через 7 часов включение автокормушки на 5 секунд, через 8 часов отключение света, через 16 часов включение. Точности тут не надо, так как корректировать могу простым перезапуском таймера.
- Саша Леськив
- Встал на лапы
- Сообщения: 116
- Зарегистрирован: Пт сен 07, 2012 19:38:09
- Откуда: Белая Церковь, Украина
Re: Мелкие вопросы по МК и ПЛИС.
a_skr, то, что вы скинули я уже видел, спасибо. Я спрашиваю лично ваше мнение о том, почему здесь такой казус; В чем причина такой перестановки назначений выводов мк? Зачем юарт выводы для ISP программирования, а не MISO i MOSI 
Все получится!! Главное не сдаваться, ведь не ошибается тот, кто не ничего не делает!!!
Re: Мелкие вопросы по МК и ПЛИС.
Лично моё?
Никогда не задумывался... Может, конструктивно в таком "большом" 64-ногом корпусе Atmel'у так было удобнее... 
Никогда не задумывался... Может, конструктивно в таком "большом" 64-ногом корпусе Atmel'у так было удобнее... Почему не можете? Перемычку между MAX232 (или что там у Вас) и МК. И снимать ее на время программирования.P.P.S Эти ноги не могу использовать, ибо нужен юарт.
Re: Мелкие вопросы по МК и ПЛИС.
Помогите сделать правильный расчет таймера. Хочу сделать прерывание по совпадению с частотой раз в 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: Мелкие вопросы по МК и ПЛИС.
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
Внутренний генератор тини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
Re: Мелкие вопросы по МК и ПЛИС.
oleg110592 спасибо, заработало!!!
мой промах, я думал, CVAVR сам знает, у какого процессора какая частота, ан нет
В следующий раз начну с даташита 
-
kLeR1k
- Первый раз сказал Мяу!
- Сообщения: 24
- Зарегистрирован: Вт май 13, 2014 19:22:27
- Откуда: г. Сургут
Re: Мелкие вопросы по МК и ПЛИС.
Почему то на ноге Attiny13 с ШИМ в сигнале импульсы идут двойные.

Из за чего это может происходить?
И как можно отключить ШИМ и посадить ногу на землю? Нужно управлять светодиодным драйвером на zxld1360, а если посадить его ADJ ногу на землю (логический 0 на выходе Attiny), то он отключает светодиод от питания
Спойлер

Из за чего это может происходить?
И как можно отключить ШИМ и посадить ногу на землю? Нужно управлять светодиодным драйвером на zxld1360, а если посадить его ADJ ногу на землю (логический 0 на выходе Attiny), то он отключает светодиод от питания
Последний раз редактировалось kLeR1k Сб июн 28, 2014 18:08:28, всего редактировалось 1 раз.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
У компилятора телепатические способности? А ведь контроллер может работать на частотах от 0 гц он и эти частоты должен угадывать?
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Мелкие вопросы по МК и ПЛИС.
kLeR1k, код в студию!
kLeR1k писал(а):И как можно отключить ШИМ и посадить ногу на землю?
Код: Выделить всё
TCCR0A &= ~((1<<COM0A0)|(1<<COM0A1)); // если выход А
TCCR0A &= ~((1<<COM0B0)|(1<<COM0B1)); // если выход B
PORT &= ~(1<<BIT);Ставим плюсы: )
-
kLeR1k
- Первый раз сказал Мяу!
- Сообщения: 24
- Зарегистрирован: Вт май 13, 2014 19:22:27
- Откуда: г. Сургут
Re: Мелкие вопросы по МК и ПЛИС.
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: Мелкие вопросы по МК и ПЛИС.
Компилятор ругается на COM0A0, как на неизвестную переменную.
Так определите ее сами через #define
Fucking static initialization order fiasco
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Мелкие вопросы по МК и ПЛИС.
kLeR1k писал(а):Компилятор ругается на COM0A0, как на неизвестную переменную. Если это имеет какое-то значение, пользуюсь CodeVisionAVR.
Код: Выделить всё
#define COM0B0 4
#define COM0B1 5
#define COM0A0 6
#define COM0A1 7
Ставим плюсы: )
Atmega 48 - ADC (AREF - напряжение?) - Компаратор
Скажите пожалуйста если мне надо оцифровывать невысокие напряжения порядка 0,01 - 0,5 Вольт.
Могу ли я подать на AREF например образцовое напряжение 0,512 Вольт ? Таким образом при 8 бит дискретизации получить одно деление равно 0,002 Вольта.
Второй вопрос может ли компаратор встроенный в Atmega 48 Сравнивать напряжения уровня 0,1 Вольт ?
Могу ли я подать на AREF например образцовое напряжение 0,512 Вольт ? Таким образом при 8 бит дискретизации получить одно деление равно 0,002 Вольта.
Второй вопрос может ли компаратор встроенный в Atmega 48 Сравнивать напряжения уровня 0,1 Вольт ?